diff mbox

[2/3,MTD-UTILS] Use same kind of code for reading OOB than for regular data

Message ID h0mpvs$8nk$1@ger.gmane.org
State Accepted
Commit 8c7e9e0936fcb18f1c95e618c2a2bb138a3c9e35
Headers show

Commit Message

Nahor June 9, 2009, 11:07 p.m. UTC
Use the same code structure when reading the OOB than when reading the 
regular data.

Signed-off-by: Jehan Bing <jehan@orb.com>
diff mbox

Patch

--- a/nandwrite.c	2009-06-09 13:20:56.000000000 -0700
+++ b/nandwrite.c	2009-06-09 13:20:44.000000000 -0700
@@ -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) {