diff options
author | pancake <pancake@dazo> | 2007-05-25 00:33:58 +0200 |
---|---|---|
committer | pancake <pancake@dazo> | 2007-05-25 00:33:58 +0200 |
commit | 1515b7c7c12097db8c713194217d57477074c6ac (patch) | |
tree | 20b6bf64c73293eaa7417aae8894ae0c7e1f062c | |
parent | ed37b5ee621a8c90ff08cb63038c6799642748fd (diff) | |
download | 0xFFFF-1515b7c7c12097db8c713194217d57477074c6ac.tar.bz2 |
* Fix rootfs boundaries for a proper dump.
* Replace Y/n for y/N
* Implement the command '5' (read error message)
-rw-r--r-- | src/dump.c | 11 | ||||
-rw-r--r-- | src/flash.c | 27 |
2 files changed, 31 insertions, 7 deletions
@@ -38,15 +38,15 @@ int rf_extract(char *dev, off_t from, off_t to, char *file) if (fs == NULL) { perror(dev); goto __rf_extract_exit; } if (fd == NULL) { perror(file); goto __rf_extract_exit; } - printf("%s: extracting...", file); - fflush(stdout); + printf("Extracting %s...\n", file); fseek(fs, from, SEEK_SET); for(i=from;i<to;i+=blk) { int ret; if (i+blk>to) blk = to-i; ret = fread(buf, blk, 1, fs); - if (feof(fs)) break; + progressbar(i, to); + if (!ret || feof(fs)) break; fwrite(buf, blk, 1, fd); } @@ -57,7 +57,6 @@ __rf_extract_exit: if (fs) fclose(fs); if (fd) fclose(fd); - return 1; } @@ -126,10 +125,10 @@ int reverse_extract_pieces(char *dir) rf_extract("/dev/mtd2", 0x000800, 0x200000, "zImage"); rf_extract("/dev/mtd3", 0x000000, 0x1D00000, "initfs.jffs2"); printf("\nWARNING: the rootfs extraction on n800 is known to be buggy! feedback is welcome.\n\n"); - printf("Extract rootfs? (Y/n): "); fflush(stdout); + printf("Extract rootfs? (y/N): "); fflush(stdout); read(0, &reply, 1); if (reply=='y'||reply=='Y') - rf_extract("/dev/mtd4", 0x000000, 0xffffff, "rootfs.jffs2"); + rf_extract("/dev/mtd4", 0x000000, 0x6000000, "rootfs.jffs2"); else printf("*** Ignoring rootfs\n"); rf_strip("xloader.bin"); rf_strip("secondary.bin"); diff --git a/src/flash.c b/src/flash.c index 7a8ddd1..c81d97c 100644 --- a/src/flash.c +++ b/src/flash.c @@ -123,8 +123,33 @@ void flash_image(char *filename, char *piece, char *version) if (bread != 1) printf("WARNING: Oops wrong read %d vs %d \n", bread, bsize); bread = usb_bulk_write(dev, 2, buf, bsize, 5000); + if (bread == 64) { + /* query error message */ + int len = 0; + char nolomsg[2048]; + memset(nolomsg, '\0', 2048); + usb_control_msg(dev, 192, 5, 0, 0, nolomsg, 2048, 2000); + nolomsg[2047] = '\0'; + printf("\nNOLO says:\n"); + if (nolomsg[0] == '\0') { + printf(" (.. silence ..)\n"); + } else { + dump_bytes(nolomsg, 128); + do { + printf(" - %s\n", nolomsg+len); + len+=strlen(nolomsg+len)+1; + } while(nolomsg[len]!='\0'); + } + fclose(fd); + return; + } progressbar(off, size); - if (bread<0) perror(" -ee- "); + if (bread<0) { + printf("\n"); + perror(" -ee- "); + fclose(fd); + return; + } fflush(stdout); } fclose(fd); |