Busybox 1.21.0 squashed commit for jellybean

Change-Id: I423c7fc1254050c6495126b1b18dd33af07fed6b
Signed-off-by: Tanguy Pruvot <tanguy.pruvot@gmail.com>
diff --git a/miscutils/nandwrite.c b/miscutils/nandwrite.c
index 5f8d033..5dc1373 100644
--- a/miscutils/nandwrite.c
+++ b/miscutils/nandwrite.c
@@ -39,7 +39,7 @@
 //usage:	"[-o] [-b] [-s ADDR] [-f FILE] MTD_DEVICE"
 //usage:#define nanddump_full_usage "\n\n"
 //usage:	"Dump the specified MTD device\n"
-//usage:     "\n	-o	Omit oob data"
+//usage:     "\n	-o	Dump oob data"
 //usage:     "\n	-b	Omit bad block from the dump"
 //usage:     "\n	-s ADDR	Start address"
 //usage:     "\n	-l LEN	Length"
@@ -129,7 +129,7 @@
 		xmove_fd(tmp_fd, IS_NANDDUMP ? STDOUT_FILENO : STDIN_FILENO);
 	}
 
-	fd = xopen(argv[0], O_RDWR);
+	fd = xopen(argv[0], IS_NANDWRITE ? O_RDWR : O_RDONLY);
 	xioctl(fd, MEMGETINFO, &meminfo);
 
 	mtdoffset = xstrtou(opt_s, 0);
@@ -162,9 +162,9 @@
 		tmp = next_good_eraseblock(fd, &meminfo, blockstart);
 		if (tmp != blockstart) {
 			/* bad block(s), advance mtdoffset */
-			if (IS_NANDDUMP & !(opts & OPT_b)) {
+			if (IS_NANDDUMP && !(opts & OPT_b)) {
 				int bad_len = MIN(tmp, end_addr) - mtdoffset;
-				dump_bad(&meminfo, bad_len, !(opts & OPT_o));
+				dump_bad(&meminfo, bad_len, opts & OPT_o);
 			}
 			mtdoffset = tmp;
 		}
@@ -182,9 +182,9 @@
 			mtdoffset = next_good_eraseblock(fd, &meminfo, blockstart);
 			if (IS_NANDWRITE)
 				printf("Writing at 0x%08x\n", mtdoffset);
-			else if (mtdoffset > blockstart) {
+			else if (mtdoffset > blockstart && !(opts & OPT_b)) {
 				int bad_len = MIN(mtdoffset, limit) - blockstart;
-				dump_bad(&meminfo, bad_len, !(opts & OPT_o));
+				dump_bad(&meminfo, bad_len, opts & OPT_o);
 			}
 			if (mtdoffset >= limit)
 				break;
@@ -210,7 +210,7 @@
 		}
 		xwrite(output_fd, filebuf, meminfo_writesize);
 
-		if (IS_NANDDUMP && !(opts & OPT_o)) {
+		if (IS_NANDDUMP && (opts & OPT_o)) {
 			/* Dump OOB data */
 			oob.start = mtdoffset;
 			xioctl(fd, MEMREADOOB, &oob);