nanddump: make oobbuf allocation dynamic
authorBaruch Siach <baruch@tkos.co.il>
Mon, 18 Oct 2010 09:35:30 +0000 (11:35 +0200)
committerDenys Vlasenko <dvlasenk@redhat.com>
Mon, 18 Oct 2010 13:34:58 +0000 (15:34 +0200)
In accordance with upstream mtd-utils commit 96a5eeaf (mtd-utils: nanddump:
Dynamic buffer, increase pagesize/oobsize).

Signed-off-by: Baruch Siach <baruch@tkos.co.il>
Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
miscutils/nandwrite.c

index 6c85ea3..de30a0c 100644 (file)
@@ -60,7 +60,6 @@
 #define OPT_f  (1 << 3)
 #define OPT_l  (1 << 4)
 
-#define NAND_MAX_OOBSIZE 256
 /* helper for writing out 0xff for bad blocks pad */
 static void dump_bad(struct mtd_info_user *meminfo, unsigned len, int oob)
 {
@@ -103,7 +102,7 @@ int nandwrite_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int nandwrite_main(int argc UNUSED_PARAM, char **argv)
 {
        /* Buffer for OOB data */
-       unsigned char oobbuf[NAND_MAX_OOBSIZE];
+       unsigned char *oobbuf;
        unsigned opts;
        int fd;
        ssize_t cnt;
@@ -135,10 +134,6 @@ int nandwrite_main(int argc UNUSED_PARAM, char **argv)
        fd = xopen(argv[0], O_RDWR);
        xioctl(fd, MEMGETINFO, &meminfo);
 
-       oob.start  = 0;
-       oob.length = meminfo.oobsize;
-       oob.ptr    = oobbuf;
-
        mtdoffset = xstrtou(opt_s, 0);
        if (IS_NANDDUMP && (opts & OPT_l)) {
                unsigned length = xstrtou(opt_l, 0);
@@ -153,6 +148,11 @@ int nandwrite_main(int argc UNUSED_PARAM, char **argv)
                bb_error_msg_and_die("start address is not page aligned");
 
        filebuf = xmalloc(meminfo_writesize);
+       oobbuf = xmalloc(meminfo.oobsize);
+
+       oob.start  = 0;
+       oob.length = meminfo.oobsize;
+       oob.ptr    = oobbuf;
 
        blockstart = mtdoffset & ~(meminfo.erasesize - 1);
        if (blockstart != mtdoffset) {