From 1eb19b8de5bf2f6699766f2178d1ef04ce4579a6 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Andreas=20F=C3=A4rber?= Date: Sun, 8 May 2016 20:18:49 +0200 Subject: [PATCH] armv4_5: Improve arm_checksum_memory() error handling MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Clean up the working area in case writing fails. Change the error handling paradigm to avoid duplication. Change-Id: Ie3f95f992a98a1325428e4032a1c17346d4c9977 Signed-off-by: Andreas Färber Reviewed-on: http://openocd.zylin.com/3472 Tested-by: jenkins Reviewed-by: Andreas Fritiofson --- src/target/armv4_5.c | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/src/target/armv4_5.c b/src/target/armv4_5.c index 18ce7df316..ba873b05b3 100644 --- a/src/target/armv4_5.c +++ b/src/target/armv4_5.c @@ -1467,7 +1467,7 @@ int arm_checksum_memory(struct target *target, crc_algorithm->address + i * sizeof(uint32_t), arm_crc_code[i]); if (retval != ERROR_OK) - return retval; + goto cleanup; } arm_algo.common_magic = ARM_COMMON_MAGIC; @@ -1491,22 +1491,19 @@ int arm_checksum_memory(struct target *target, crc_algorithm->address, exit_var, timeout, &arm_algo); - if (retval != ERROR_OK) { - LOG_ERROR("error executing ARM crc algorithm"); - destroy_reg_param(®_params[0]); - destroy_reg_param(®_params[1]); - target_free_working_area(target, crc_algorithm); - return retval; - } - *checksum = buf_get_u32(reg_params[0].value, 0, 32); + if (retval == ERROR_OK) + *checksum = buf_get_u32(reg_params[0].value, 0, 32); + else + LOG_ERROR("error executing ARM crc algorithm"); destroy_reg_param(®_params[0]); destroy_reg_param(®_params[1]); +cleanup: target_free_working_area(target, crc_algorithm); - return ERROR_OK; + return retval; } /** -- 2.30.2