summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpancake <pancake@dazo>2007-05-25 00:33:58 +0200
committerpancake <pancake@dazo>2007-05-25 00:33:58 +0200
commit1515b7c7c12097db8c713194217d57477074c6ac (patch)
tree20b6bf64c73293eaa7417aae8894ae0c7e1f062c
parented37b5ee621a8c90ff08cb63038c6799642748fd (diff)
download0xFFFF-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.c11
-rw-r--r--src/flash.c27
2 files changed, 31 insertions, 7 deletions
diff --git a/src/dump.c b/src/dump.c
index 3efc79b..b286fe3 100644
--- a/src/dump.c
+++ b/src/dump.c
@@ -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);