diff options
author | Andreas Färber <afaerber@suse.de> | 2016-05-08 17:40:18 +0200 |
---|---|---|
committer | Andreas Fritiofson <andreas.fritiofson@gmail.com> | 2016-05-22 15:48:44 +0100 |
commit | fcaf7e0cfec24efc78e4c7c9a00f88b0a32bedd4 (patch) | |
tree | 6e6e60d620793bef676403504b1054b91f7c3bca | |
parent | 08cdb58f05d0229b8ecdc9aa2c9e805d9f0f77dd (diff) |
armv4_5: Improve arm_blank_check_memory() error handling
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>
-rw-r--r-- | src/target/armv4_5.c | 15 |
1 files changed, 5 insertions, 10 deletions
diff --git a/src/target/armv4_5.c b/src/target/armv4_5.c index 5b24e69a..18ce7df3 100644 --- a/src/target/armv4_5.c +++ b/src/target/armv4_5.c @@ -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(®_params[0]); - destroy_reg_param(®_params[1]); - destroy_reg_param(®_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(®_params[0]); destroy_reg_param(®_params[1]); destroy_reg_param(®_params[2]); +cleanup: target_free_working_area(target, check_algorithm); - return ERROR_OK; + return retval; } static int arm_full_context(struct target *target) |