diff options
Diffstat (limited to 'package/busybox/busybox-1.15.1-dd.patch')
-rw-r--r-- | package/busybox/busybox-1.15.1-dd.patch | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/package/busybox/busybox-1.15.1-dd.patch b/package/busybox/busybox-1.15.1-dd.patch new file mode 100644 index 000000000..a3e267625 --- /dev/null +++ b/package/busybox/busybox-1.15.1-dd.patch @@ -0,0 +1,35 @@ +diff -urpN busybox-1.15.1/coreutils/dd.c busybox-1.15.1-dd/coreutils/dd.c +--- busybox-1.15.1/coreutils/dd.c 2009-09-12 17:55:58.000000000 +0200 ++++ busybox-1.15.1-dd/coreutils/dd.c 2009-09-18 20:48:22.000000000 +0200 +@@ -286,25 +286,26 @@ int dd_main(int argc UNUSED_PARAM, char + } + + while (!(flags & FLAG_COUNT) || (G.in_full + G.in_part != count)) { +- if (flags & FLAG_NOERROR) /* Pre-zero the buffer if conv=noerror */ +- memset(ibuf, 0, ibs); + n = safe_read(ifd, ibuf, ibs); + if (n == 0) + break; + if (n < 0) { ++ /* "Bad block" */ + if (!(flags & FLAG_NOERROR)) + goto die_infile; +- n = ibs; + bb_simple_perror_msg(infile); +- /* GNU dd with conv=noerror skips over "bad blocks" */ ++ /* GNU dd with conv=noerror skips over bad blocks */ + xlseek(ifd, ibs, SEEK_CUR); ++ /* conv=noerror,sync writes NULs, ++ * conv=noerror just ignores input bad blocks */ ++ n = 0; + } + if ((size_t)n == ibs) + G.in_full++; + else { + G.in_part++; + if (flags & FLAG_SYNC) { +- memset(ibuf + n, '\0', ibs - n); ++ memset(ibuf + n, 0, ibs - n); + n = ibs; + } + } |