36 lines
1.1 KiB
Diff
36 lines
1.1 KiB
Diff
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;
|
|
}
|
|
}
|