summaryrefslogtreecommitdiff
path: root/utils/nwztools/emmctools/nvp.c
diff options
context:
space:
mode:
authorAmaury Pouly <amaury.pouly@gmail.com>2012-11-03 14:04:27 +0100
committerAmaury Pouly <amaury.pouly@gmail.com>2012-11-03 14:04:27 +0100
commit99f20b85f6856fa636e41c6987e34bf343a235ae (patch)
tree60f974cc307f457752e557e5a95c62222d5f374b /utils/nwztools/emmctools/nvp.c
parent6d04ed343c76b38b5cd632ff0e0ba472ecade583 (diff)
downloadrockbox-99f20b85f6856fa636e41c6987e34bf343a235ae.tar.gz
rockbox-99f20b85f6856fa636e41c6987e34bf343a235ae.zip
nwztools: various fix and enhancements
Change-Id: Iaa89df27b7a0c4eb9fc6603c431de3d1fe791fa1
Diffstat (limited to 'utils/nwztools/emmctools/nvp.c')
-rw-r--r--utils/nwztools/emmctools/nvp.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/utils/nwztools/emmctools/nvp.c b/utils/nwztools/emmctools/nvp.c
index 46515f74db..3adf61f621 100644
--- a/utils/nwztools/emmctools/nvp.c
+++ b/utils/nwztools/emmctools/nvp.c
@@ -279,6 +279,7 @@ int nvp_read_data(int shadow, int area, int zone, int offset, void *buf, int siz
279{ 279{
280 int large = nvp_area_info[area].kind == NVP_AREA_LARGE_KIND; 280 int large = nvp_area_info[area].kind == NVP_AREA_LARGE_KIND;
281 int unit_size = large ? NVP_LARGE_AREA_SIZE : NVP_SMALL_AREA_SIZE; 281 int unit_size = large ? NVP_LARGE_AREA_SIZE : NVP_SMALL_AREA_SIZE;
282 int read_size = 0;
282 283
283 while(size > 0) 284 while(size > 0)
284 { 285 {
@@ -288,17 +289,23 @@ int nvp_read_data(int shadow, int area, int zone, int offset, void *buf, int siz
288 nvp_get_cluster_number(shadow, area, zone, index) : 289 nvp_get_cluster_number(shadow, area, zone, index) :
289 nvp_get_sector_number(shadow, area, zone, index); 290 nvp_get_sector_number(shadow, area, zone, index);
290 if(sec_cluster == 0) 291 if(sec_cluster == 0)
291 return -1; 292 break;
292 //cprintf(GREY, "[sec_cluster=%d]", sec_cluster);
293 int read = MIN(size, unit_size - unit_offset); 293 int read = MIN(size, unit_size - unit_offset);
294 //cprintf(GREY, "[sec_cluster=%d read=%d]", sec_cluster, read);
294 int ret = nvp_read(sec_cluster * unit_size, read, buf); 295 int ret = nvp_read(sec_cluster * unit_size, read, buf);
295 if(ret) 296 if(ret)
296 return ret; 297 return ret;
297 buf += read; 298 buf += read;
298 offset += read; 299 offset += read;
299 size -= read; 300 size -= read;
301 read_size += read;
300 } 302 }
301 return 0; 303 return read_size;
304}
305
306bool nvp_is_valid_node(int node)
307{
308 return node >= 0 && node < nr_nodes && node_info[node].area != -1;
302} 309}
303 310
304struct nvp_node_info_t nvp_get_node_info(int node) 311struct nvp_node_info_t nvp_get_node_info(int node)
@@ -527,16 +534,18 @@ int nvp_info(void)
527 cprintf_field(" Zone ", "%s", zones[j].name); 534 cprintf_field(" Zone ", "%s", zones[j].name);
528 cprintf(BLUE, " ->"); 535 cprintf(BLUE, " ->");
529 uint8_t buf[0x20]; 536 uint8_t buf[0x20];
530 int ret = nvp_read_data(0, i, j, 0, buf, MIN(0x20, zones[j].size)); 537 int sz = 0x20;
531 if(ret) 538 int ret = nvp_read_data(0, i, j, 0, buf, MIN(sz, zones[j].size));
539 if(ret <= 0)
532 { 540 {
533 cprintf(RED, " No data\n"); 541 cprintf(RED, " No data\n");
534 continue; 542 continue;
535 } 543 }
536 for(int i = 0; i < MIN(0x20, zones[j].size); i++) 544 sz = MIN(sz, ret);
545 for(int i = 0; i < MIN(sz, zones[j].size); i++)
537 cprintf(YELLOW, " %02x", buf[i]); 546 cprintf(YELLOW, " %02x", buf[i]);
538 cprintf(BLUE, " -> "); 547 cprintf(BLUE, " -> ");
539 for(int i = 0; i < MIN(0x20, zones[j].size); i++) 548 for(int i = 0; i < MIN(sz, zones[j].size); i++)
540 cprintf(YELLOW, "%c", isprint(buf[i]) ? buf[i] : '.'); 549 cprintf(YELLOW, "%c", isprint(buf[i]) ? buf[i] : '.');
541 printf("\n"); 550 printf("\n");
542 } 551 }