Support noerror option
This commit is contained in:
parent
aba75460e4
commit
ef38b39262
@ -46,7 +46,7 @@ static const struct suffix_mult dd_suffixes[] = {
|
|||||||
|
|
||||||
int dd_main(int argc, char **argv)
|
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 in_full = 0, in_part = 0, out_full = 0, out_part = 0;
|
||||||
size_t bs = 512, count = -1;
|
size_t bs = 512, count = -1;
|
||||||
ssize_t n;
|
ssize_t n;
|
||||||
@ -75,6 +75,9 @@ int dd_main(int argc, char **argv)
|
|||||||
} else if (strncmp("sync", buf, 4) == 0) {
|
} else if (strncmp("sync", buf, 4) == 0) {
|
||||||
sync_flag = TRUE;
|
sync_flag = TRUE;
|
||||||
buf += 4;
|
buf += 4;
|
||||||
|
} else if (strncmp("noerror", buf, 7) == 0) {
|
||||||
|
noerror = TRUE;
|
||||||
|
buf += 7;
|
||||||
} else {
|
} else {
|
||||||
error_msg_and_die("invalid conversion `%s'", argv[i]+5);
|
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) {
|
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);
|
n = safe_read(ifd, buf, bs);
|
||||||
if (n < 0)
|
if (n < 0) {
|
||||||
perror_msg_and_die("%s", infile);
|
if (noerror) {
|
||||||
|
n = bs;
|
||||||
|
perror_msg("%s", infile);
|
||||||
|
} else {
|
||||||
|
perror_msg_and_die("%s", infile);
|
||||||
|
}
|
||||||
|
}
|
||||||
if (n == 0)
|
if (n == 0)
|
||||||
break;
|
break;
|
||||||
if (n == bs)
|
if (n == bs)
|
||||||
|
@ -228,7 +228,7 @@
|
|||||||
|
|
||||||
#define dd_trivial_usage \
|
#define dd_trivial_usage \
|
||||||
"[if=FILE] [of=FILE] [bs=N] [count=N] [skip=N]\n" \
|
"[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 \
|
#define dd_full_usage \
|
||||||
"Copy a file, converting and formatting according to options\n\n" \
|
"Copy a file, converting and formatting according to options\n\n" \
|
||||||
"\tif=FILE\t\tread from FILE instead of stdin\n" \
|
"\tif=FILE\t\tread from FILE instead of stdin\n" \
|
||||||
@ -238,6 +238,7 @@
|
|||||||
"\tskip=N\t\tskip N input blocks\n" \
|
"\tskip=N\t\tskip N input blocks\n" \
|
||||||
"\tseek=N\t\tskip N output blocks\n" \
|
"\tseek=N\t\tskip N output blocks\n" \
|
||||||
"\tconv=notrunc\tdon't truncate output file\n" \
|
"\tconv=notrunc\tdon't truncate output file\n" \
|
||||||
|
"\tconv=noerror\tcontinue after read errors\n" \
|
||||||
"\tconv=sync\tpad blocks with zeros\n" \
|
"\tconv=sync\tpad blocks with zeros\n" \
|
||||||
"\n" \
|
"\n" \
|
||||||
"Numbers may be suffixed by c (x1), w (x2), b (x512), kD (x1000), k (x1024),\n" \
|
"Numbers may be suffixed by c (x1), w (x2), b (x512), kD (x1000), k (x1024),\n" \
|
||||||
|
Loading…
Reference in New Issue
Block a user