armv4_5: Improve arm_blank_check_memory() error handling 71/3471/7
authorAndreas Färber <afaerber@suse.de>
Sun, 8 May 2016 15:40:18 +0000 (17:40 +0200)
committerAndreas Fritiofson <andreas.fritiofson@gmail.com>
Sun, 22 May 2016 14:48:44 +0000 (15:48 +0100)
Clean up the working area in case writing fails.
Change the error handling paradigm to avoid duplication.

Change-Id: I95bb12fbe7c80b594e178468bcd4f6387c682c93
Signed-off-by: Andreas Färber <afaerber@suse.de>
Reviewed-on: http://openocd.zylin.com/3471
Tested-by: jenkins
Reviewed-by: Andreas Fritiofson <andreas.fritiofson@gmail.com>
src/target/armv4_5.c

index 5b24e69..18ce7df 100644 (file)
@@ -1551,7 +1551,7 @@ int arm_blank_check_memory(struct target *target,
                                + i * sizeof(uint32_t),
                                check_code[i]);
                if (retval != ERROR_OK)
-                       return retval;
+                       goto cleanup;
        }
 
        arm_algo.common_magic = ARM_COMMON_MAGIC;
@@ -1575,23 +1575,18 @@ int arm_blank_check_memory(struct target *target,
                        check_algorithm->address,
                        exit_var,
                        10000, &arm_algo);
-       if (retval != ERROR_OK) {
-               destroy_reg_param(&reg_params[0]);
-               destroy_reg_param(&reg_params[1]);
-               destroy_reg_param(&reg_params[2]);
-               target_free_working_area(target, check_algorithm);
-               return retval;
-       }
 
-       *blank = buf_get_u32(reg_params[2].value, 0, 32);
+       if (retval == ERROR_OK)
+               *blank = buf_get_u32(reg_params[2].value, 0, 32);
 
        destroy_reg_param(&reg_params[0]);
        destroy_reg_param(&reg_params[1]);
        destroy_reg_param(&reg_params[2]);
 
+cleanup:
        target_free_working_area(target, check_algorithm);
 
-       return ERROR_OK;
+       return retval;
 }
 
 static int arm_full_context(struct target *target)