armv4_5: Improve arm_checksum_memory() error handling

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 <afaerber@suse.de>
Reviewed-on: http://openocd.zylin.com/3472
Tested-by: jenkins
Reviewed-by: Andreas Fritiofson <andreas.fritiofson@gmail.com>
This commit is contained in:
Andreas Färber 2016-05-08 20:18:49 +02:00 committed by Andreas Fritiofson
parent fcaf7e0cfe
commit 1eb19b8de5
1 changed files with 7 additions and 10 deletions

View File

@ -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(&reg_params[0]);
destroy_reg_param(&reg_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(&reg_params[0]);
destroy_reg_param(&reg_params[1]);
cleanup:
target_free_working_area(target, crc_algorithm);
return ERROR_OK;
return retval;
}
/**