]> git.sur5r.net Git - openocd/commitdiff
bugfixes: tinker a bit with the targets command
authorØyvind Harboe <oyvind.harboe@zylin.com>
Thu, 27 Oct 2011 21:51:50 +0000 (23:51 +0200)
committerSpencer Oliver <spen@spen-soft.co.uk>
Mon, 31 Oct 2011 17:41:44 +0000 (17:41 +0000)
return error when target can not be found instead of ERROR_OK,
split fn.

Change-Id: Iba5232d3862a490d0995c3bfece23685bd6856e3
Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
Reviewed-on: http://openocd.zylin.com/131
Tested-by: jenkins
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
src/target/target.c

index bd1562037e460cf938a5cc0b46913bf5cad247ed..4708a1d626bb271a4a09826dfdc7cfcc29c21acc 100644 (file)
@@ -1861,26 +1861,36 @@ int target_write_u8(struct target *target, uint32_t address, uint8_t value)
        return retval;
 }
 
+static int find_target(struct command_context *cmd_ctx, const char *name)
+{
+       struct target *target = get_target(name);
+       if (target == NULL) {
+               LOG_ERROR("Target: %s is unknown, try one of:\n", name);
+               return ERROR_FAIL;
+       }
+       if (!target->tap->enabled) {
+               LOG_USER("Target: TAP %s is disabled, "
+                        "can't be the current target\n",
+                        target->tap->dotted_name);
+               return ERROR_FAIL;
+       }
+
+       cmd_ctx->current_target = target->target_number;
+       return ERROR_OK;
+}
+
+
 COMMAND_HANDLER(handle_targets_command)
 {
+       int retval = ERROR_OK;
        if (CMD_ARGC == 1)
        {
-               struct target *target = get_target(CMD_ARGV[0]);
-               if (target == NULL) {
-                       command_print(CMD_CTX,"Target: %s is unknown, try one of:\n", CMD_ARGV[0]);
-                       goto DumpTargets;
-               }
-               if (!target->tap->enabled) {
-                       command_print(CMD_CTX,"Target: TAP %s is disabled, "
-                                       "can't be the current target\n",
-                                       target->tap->dotted_name);
-                       return ERROR_FAIL;
+               retval = find_target(CMD_CTX, CMD_ARGV[0]);
+               if (retval == ERROR_OK) {
+                       /* we're done! */
+                       return retval;
                }
-
-               CMD_CTX->current_target = target->target_number;
-               return ERROR_OK;
        }
-DumpTargets:;
 
        struct target *target = all_targets;
        command_print(CMD_CTX, "    TargetName         Type       Endian TapName            State       ");
@@ -1899,19 +1909,20 @@ DumpTargets:;
                        marker = '*';
 
                /* keep columns lined up to match the headers above */
-               command_print(CMD_CTX, "%2d%c %-18s %-10s %-6s %-18s %s",
-                                         target->target_number,
-                                         marker,
-                                         target_name(target),
-                                         target_type_name(target),
-                                         Jim_Nvp_value2name_simple(nvp_target_endian,
-                                                               target->endianness)->name,
-                                         target->tap->dotted_name,
-                                         state);
+               command_print(CMD_CTX,
+                               "%2d%c %-18s %-10s %-6s %-18s %s",
+                               target->target_number,
+                               marker,
+                               target_name(target),
+                               target_type_name(target),
+                               Jim_Nvp_value2name_simple(nvp_target_endian,
+                                       target->endianness)->name,
+                               target->tap->dotted_name,
+                               state);
                target = target->next;
        }
 
-       return ERROR_OK;
+       return retval;
 }
 
 /* every 300ms we check for reset & powerdropout and issue a "reset halt" if so. */