]> www.infradead.org Git - mtd-utils.git/commitdiff
nandwrite: unified reading from standard input and from file - part2
authorJehan Bing <jehan@orb.com>
Thu, 6 Aug 2009 00:40:42 +0000 (17:40 -0700)
committerArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
Tue, 11 Aug 2009 13:14:20 +0000 (16:14 +0300)
Use the same code structure when reading the OOB than when reading the
regular data.

Signed-off-by: Jehan Bing <jehan@orb.com>
Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
nandwrite.c

index 3695c202540df1b5d2a69e212208536db20f1121..f6bff60b51b3306b1e066af570332a1127cacffe 100644 (file)
@@ -520,17 +520,32 @@ int main(int argc, char * const argv[])
                }
 
                if (writeoob) {
-                       int tinycnt = 0;
+                       {
+                               int readlen = meminfo.oobsize;
 
-                       while(tinycnt < meminfo.oobsize) {
-                               cnt = read(ifd, oobreadbuf + tinycnt, meminfo.oobsize - tinycnt);
-                               if (cnt == 0) { // EOF
-                                       break;
-                               } else if (cnt < 0) {
-                                       perror ("File I/O error on input file");
+                               int tinycnt = 0;
+
+                               while (tinycnt < readlen) {
+                                       cnt = read(ifd, oobreadbuf + tinycnt, readlen - tinycnt);
+                                       if (cnt == 0) { // EOF
+                                               break;
+                                       } else if (cnt < 0) {
+                                               perror ("File I/O error on input");
+                                               goto closeall;
+                                       }
+                                       tinycnt += cnt;
+                               }
+
+                               if (tinycnt < readlen) {
+                                       fprintf(stderr, "Unexpected EOF. Expecting at least "
+                                                       "%d more bytes for OOB\n", readlen - tinycnt);
                                        goto closeall;
                                }
-                               tinycnt += cnt;
+
+                               if ((ifd == STDIN_FILENO) && (cnt == 0)) {
+                                       /* No more bytes - we are done after writing the remaining bytes */
+                                       imglen = 0;
+                               }
                        }
 
                        if (!noecc) {