target/arm_dap: clean up dap_configure code
[fw/openocd] / src / target / arm_dap.c
index 18e77b50fe1b851bb7ea814efcc9a26da3d1c923..0eb55a9cbec076d99625032d7d6791990e6af67b 100644 (file)
@@ -165,11 +165,10 @@ static const struct jim_nvp nvp_config_opts[] = {
 
 static int dap_configure(struct jim_getopt_info *goi, struct arm_dap_object *dap)
 {
-       struct jtag_tap *tap = NULL;
        struct jim_nvp *n;
        int e;
 
-       /* parse config or cget options ... */
+       /* parse config ... */
        while (goi->argc > 0) {
                Jim_SetEmptyResult(goi->interp);
 
@@ -184,11 +183,14 @@ static int dap_configure(struct jim_getopt_info *goi, struct arm_dap_object *dap
                        e = jim_getopt_obj(goi, &o_t);
                        if (e != JIM_OK)
                                return e;
+
+                       struct jtag_tap *tap;
                        tap = jtag_tap_by_jim_obj(goi->interp, o_t);
                        if (!tap) {
                                Jim_SetResultString(goi->interp, "-chain-position is invalid", -1);
                                return JIM_ERR;
                        }
+                       dap->dap.tap = tap;
                        /* loop for more */
                        break;
                }
@@ -200,14 +202,6 @@ static int dap_configure(struct jim_getopt_info *goi, struct arm_dap_object *dap
                }
        }
 
-       if (!tap) {
-               Jim_SetResultString(goi->interp, "-chain-position required when creating DAP", -1);
-               return JIM_ERR;
-       }
-
-       dap_instance_init(&dap->dap);
-       dap->dap.tap = tap;
-
        return JIM_OK;
 }
 
@@ -242,15 +236,21 @@ static int dap_create(struct jim_getopt_info *goi)
        if (!dap)
                return JIM_ERR;
 
-       e = dap_configure(goi, dap);
-       if (e != JIM_OK) {
-               free(dap);
-               return e;
-       }
+       dap_instance_init(&dap->dap);
 
        cp = Jim_GetString(new_cmd, NULL);
        dap->name = strdup(cp);
 
+       e = dap_configure(goi, dap);
+       if (e != JIM_OK)
+               goto err;
+
+       if (!dap->dap.tap) {
+               Jim_SetResultString(goi->interp, "-chain-position required when creating DAP", -1);
+               e = JIM_ERR;
+               goto err;
+       }
+
        struct command_registration dap_commands[] = {
                {
                        .name = cp,
@@ -268,14 +268,18 @@ static int dap_create(struct jim_getopt_info *goi)
 
        e = register_commands_with_data(cmd_ctx, NULL, dap_commands, dap);
        if (e != ERROR_OK) {
-               free(dap->name);
-               free(dap);
-               return JIM_ERR;
+               e = JIM_ERR;
+               goto err;
        }
 
        list_add_tail(&dap->lh, &all_dap);
 
        return JIM_OK;
+
+err:
+       free(dap->name);
+       free(dap);
+       return e;
 }
 
 static int jim_dap_create(Jim_Interp *interp, int argc, Jim_Obj *const *argv)