package/mtd: (enhancement) add option to prevent erase when writing to flash. (closes...
[openwrt/staging/wigyori.git] / package / mtd / src / mtd.c
index b2d760e84f087dae03a42d8fc01c9bd390da0cee..e4b6c79f02f14bcc52ea285447a210b6cf841346 100644 (file)
@@ -74,6 +74,7 @@ static char *imagefile = NULL;
 static char *jffs2file = NULL, *jffs2dir = JFFS2_DEFAULT_DIR;
 static int buflen = 0;
 int quiet;
+int no_erase;
 int mtdsize = 0;
 int erasesize = 0;
 
@@ -518,6 +519,8 @@ resume:
                }
 
                /* need to erase the next block before writing data to it */
+    if(no_erase)
+    {
                while (w + buflen > e) {
                        if (!quiet)
                                fprintf(stderr, "\b\b\b[e]");
@@ -544,6 +547,7 @@ resume:
                        /* erase the chunk */
                        e += erasesize;
                }
+    }
 
                if (!quiet)
                        fprintf(stderr, "\b\b\b[w]");
@@ -595,6 +599,7 @@ static void usage(void)
        "Following options are available:\n"
        "        -q                      quiet mode (once: no [w] on writing,\n"
        "                                           twice: no status messages)\n"
+       "        -n                      write without first erasing the blocks\n"
        "        -r                      reboot after successful command\n"
        "        -f                      force write without trx checks\n"
        "        -e <device>             erase <device> before executing the command\n"
@@ -646,12 +651,13 @@ int main (int argc, char **argv)
        force = 0;
        buflen = 0;
        quiet = 0;
+  no_erase = 0;
 
        while ((ch = getopt(argc, argv,
 #ifdef FIS_SUPPORT
                        "F:"
 #endif
-                       "frqe:d:j:o:")) != -1)
+                       "frnqe:d:j:o:")) != -1)
                switch (ch) {
                        case 'f':
                                force = 1;
@@ -659,6 +665,9 @@ int main (int argc, char **argv)
                        case 'r':
                                boot = 1;
                                break;
+      case 'n':
+        no_erase = 1;
+        break;
                        case 'j':
                                jffs2file = optarg;
                                break;