aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomas Vanek <vanekt@fbl.cz>2018-01-18 09:42:41 +0100
committerTomas Vanek <vanekt@fbl.cz>2018-03-03 09:41:25 +0000
commita088e3942300a02a7a170aa26d780dd156baf0b4 (patch)
treecab18190cd2df88f1b6916b770aaf6e82d916073
parente8b2e62d45a7e62bc0d982f6d778d86accfee060 (diff)
flash/nor/core: fix warning in flash_iterate_address_range_inner
Refactor the code to improve readability. Reported by Clang static analyzer. Change-Id: I671447050e93c6f067917c4456b36ac11abb4663 Signed-off-by: Tomas Vanek <vanekt@fbl.cz> Reviewed-on: http://openocd.zylin.com/4355 Tested-by: jenkins
-rw-r--r--src/flash/nor/core.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/flash/nor/core.c b/src/flash/nor/core.c
index 7b91e57b..6eb7052e 100644
--- a/src/flash/nor/core.c
+++ b/src/flash/nor/core.c
@@ -399,18 +399,21 @@ static int flash_iterate_address_range_inner(struct target *target,
return ERROR_FLASH_DST_BREAKS_ALIGNMENT;
}
- addr -= c->base;
- last_addr -= c->base;
+ if (c->prot_blocks == NULL || c->num_prot_blocks == 0) {
+ /* flash driver does not define protect blocks, use sectors instead */
+ iterate_protect_blocks = false;
+ }
- if (iterate_protect_blocks && c->prot_blocks && c->num_prot_blocks) {
+ if (iterate_protect_blocks) {
block_array = c->prot_blocks;
num_blocks = c->num_prot_blocks;
} else {
block_array = c->sectors;
num_blocks = c->num_sectors;
- iterate_protect_blocks = false;
}
+ addr -= c->base;
+ last_addr -= c->base;
for (i = 0; i < num_blocks; i++) {
struct flash_sector *f = &block_array[i];