diff options
-rw-r--r-- | coreutils/dd.c | 19 | ||||
-rw-r--r-- | include/usage.h | 3 |
2 files changed, 18 insertions, 4 deletions
diff --git a/coreutils/dd.c b/coreutils/dd.c index 09e6ccc..fb78d53 100644 --- a/coreutils/dd.c +++ b/coreutils/dd.c @@ -46,7 +46,7 @@ static const struct suffix_mult dd_suffixes[] = { int dd_main(int argc, char **argv) { - int i, ifd, ofd, oflag, sync_flag = FALSE, trunc = TRUE; + int i, ifd, ofd, oflag, sync_flag = FALSE, trunc = TRUE, noerror = FALSE; size_t in_full = 0, in_part = 0, out_full = 0, out_part = 0; size_t bs = 512, count = -1; ssize_t n; @@ -75,6 +75,9 @@ int dd_main(int argc, char **argv) } else if (strncmp("sync", buf, 4) == 0) { sync_flag = TRUE; buf += 4; + } else if (strncmp("noerror", buf, 7) == 0) { + noerror = TRUE; + buf += 7; } else { error_msg_and_die("invalid conversion `%s'", argv[i]+5); } @@ -131,9 +134,19 @@ int dd_main(int argc, char **argv) } while (in_full + in_part != count) { + if (noerror) { + /* Pre-zero the buffer when doing the noerror thing */ + memset(buf, '\0', bs); + } n = safe_read(ifd, buf, bs); - if (n < 0) - perror_msg_and_die("%s", infile); + if (n < 0) { + if (noerror) { + n = bs; + perror_msg("%s", infile); + } else { + perror_msg_and_die("%s", infile); + } + } if (n == 0) break; if (n == bs) diff --git a/include/usage.h b/include/usage.h index ad34dfc..d0f3dfc 100644 --- a/include/usage.h +++ b/include/usage.h @@ -228,7 +228,7 @@ #define dd_trivial_usage \ "[if=FILE] [of=FILE] [bs=N] [count=N] [skip=N]\n" \ - "\t [seek=N] [conv=notrunc|sync]" + "\t [seek=N] [conv=notrunc|noerror|sync]" #define dd_full_usage \ "Copy a file, converting and formatting according to options\n\n" \ "\tif=FILE\t\tread from FILE instead of stdin\n" \ @@ -238,6 +238,7 @@ "\tskip=N\t\tskip N input blocks\n" \ "\tseek=N\t\tskip N output blocks\n" \ "\tconv=notrunc\tdon't truncate output file\n" \ + "\tconv=noerror\tcontinue after read errors\n" \ "\tconv=sync\tpad blocks with zeros\n" \ "\n" \ "Numbers may be suffixed by c (x1), w (x2), b (x512), kD (x1000), k (x1024),\n" \ |