| diff -aruN a/nandtest.c b/nandtest.c | |
| --- a/nandtest.c 2011-10-17 11:17:50.972096998 -0700 | |
| +++ b/nandtest.c 2011-10-17 11:16:59.116096996 -0700 | |
| @@ -1,3 +1,5 @@ | |
| +#define PROGRAM_NAME "nandtest" | |
| + | |
| #define _GNU_SOURCE | |
| #include <ctype.h> | |
| #include <errno.h> | |
| @@ -17,14 +19,15 @@ | |
| void usage(void) | |
| { | |
| - fprintf(stderr, "usage: nandtest [OPTIONS] <device>\n\n" | |
| - " -h, --help Display this help output\n" | |
| - " -m, --markbad Mark blocks bad if they appear so\n" | |
| - " -s, --seed Supply random seed\n" | |
| - " -p, --passes Number of passes\n" | |
| - " -o, --offset Start offset on flash\n" | |
| - " -l, --length Length of flash to test\n" | |
| - " -k, --keep Restore existing contents after test\n"); | |
| + fprintf(stderr, "usage: %s [OPTIONS] <device>\n\n" | |
| + " -h, --help Display this help output\n" | |
| + " -m, --markbad Mark blocks bad if they appear so\n" | |
| + " -s, --seed Supply random seed\n" | |
| + " -p, --passes Number of passes\n" | |
| + " -o, --offset Start offset on flash\n" | |
| + " -l, --length Length of flash to test\n" | |
| + " -k, --keep Restore existing contents after test\n", | |
| + PROGRAM_NAME); | |
| exit(1); | |
| } | |
| @@ -70,23 +73,23 @@ | |
| } | |
| if (len < meminfo.erasesize) { | |
| printf("\n"); | |
| - fprintf(stderr, "Short write (%d bytes)\n", len); | |
| + fprintf(stderr, "Short write (%zd bytes)\n", len); | |
| exit(1); | |
| } | |
| printf("\r%08x: reading...", (unsigned)ofs); | |
| fflush(stdout); | |
| - | |
| + | |
| len = pread(fd, rbuf, meminfo.erasesize, ofs); | |
| if (len < meminfo.erasesize) { | |
| printf("\n"); | |
| if (len) | |
| - fprintf(stderr, "Short read (%d bytes)\n", len); | |
| + fprintf(stderr, "Short read (%zd bytes)\n", len); | |
| else | |
| perror("read"); | |
| exit(1); | |
| } | |
| - | |
| + | |
| if (ioctl(fd, ECCGETSTATS, &newstats)) { | |
| printf("\n"); | |
| perror("ECCGETSTATS"); | |
| @@ -95,7 +98,9 @@ | |
| } | |
| if (newstats.corrected > oldstats.corrected) { | |
| - printf("\nECC corrected at %08x\n", (unsigned) ofs); | |
| + printf("\n %d bit(s) ECC corrected at %08x\n", | |
| + newstats.corrected - oldstats.corrected, | |
| + (unsigned) ofs); | |
| oldstats.corrected = newstats.corrected; | |
| } | |
| if (newstats.failed > oldstats.failed) { | |
| @@ -181,7 +186,7 @@ | |
| case 'l': | |
| length = strtol(optarg, NULL, 0); | |
| break; | |
| - | |
| + | |
| } | |
| } | |
| if (argc - optind != 1) | |
| @@ -192,7 +197,7 @@ | |
| perror("open"); | |
| exit(1); | |
| } | |
| - | |
| + | |
| if (ioctl(fd, MEMGETINFO, &meminfo)) { | |
| perror("MEMGETINFO"); | |
| close(fd); | |
| @@ -203,20 +208,20 @@ | |
| length = meminfo.size; | |
| if (offset % meminfo.erasesize) { | |
| - fprintf(stderr, "Offset %x not multiple of erase size %x\n", | |
| + fprintf(stderr, "Offset %x not multiple of erase size %x\n", | |
| offset, meminfo.erasesize); | |
| exit(1); | |
| } | |
| if (length % meminfo.erasesize) { | |
| - fprintf(stderr, "Length %x not multiple of erase size %x\n", | |
| + fprintf(stderr, "Length %x not multiple of erase size %x\n", | |
| length, meminfo.erasesize); | |
| exit(1); | |
| } | |
| if (length + offset > meminfo.size) { | |
| - fprintf(stderr, "Length %x + offset %x exceeds device size %x\n", | |
| + fprintf(stderr, "Length %x + offset %x exceeds device size %x\n", | |
| length, offset, meminfo.size); | |
| exit(1); | |
| - } | |
| + } | |
| wbuf = malloc(meminfo.erasesize * 3); | |
| if (!wbuf) { | |
| @@ -259,11 +264,11 @@ | |
| printf("\r%08x: reading... ", (unsigned)test_ofs); | |
| fflush(stdout); | |
| - len = pread(fd, rbuf, meminfo.erasesize, test_ofs); | |
| + len = pread(fd, kbuf, meminfo.erasesize, test_ofs); | |
| if (len < meminfo.erasesize) { | |
| printf("\n"); | |
| if (len) | |
| - fprintf(stderr, "Short read (%d bytes)\n", len); | |
| + fprintf(stderr, "Short read (%zd bytes)\n", len); | |
| else | |
| perror("read"); | |
| exit(1); |