dd: implement conv=notrunc support - ubase - suckless linux base utils | |
git clone git://git.suckless.org/ubase | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit e0dc3f9546b3cd839aef8e58376c6295679a5ed5 | |
parent 596663c1b1f140c10ba1facede783201d6a876a7 | |
Author: Eivind Uggedal <[email protected]> | |
Date: Wed, 16 Mar 2016 09:23:50 +0000 | |
dd: implement conv=notrunc support | |
Diffstat: | |
M dd.1 | 2 ++ | |
M dd.c | 11 +++++++---- | |
2 files changed, 9 insertions(+), 4 deletions(-) | |
--- | |
diff --git a/dd.1 b/dd.1 | |
@@ -61,4 +61,6 @@ blocks from the beginning of the output before copying. | |
Skip | |
.Ar N | |
blocks from the beginning of the input before copying. | |
+.It Ar conv=notrunc | |
+Do not truncate the output file. | |
.El | |
diff --git a/dd.c b/dd.c | |
@@ -32,7 +32,7 @@ struct dd_config { | |
uint64_t skip, seek, count, b_in, b_out, rec_in, rec_out; | |
off_t fsize; | |
blksize_t bs; | |
- char quiet, nosync, direct; | |
+ char quiet, nosync, notrunc, direct; | |
time_t t_start, t_end; | |
}; | |
@@ -99,7 +99,7 @@ prepare_copy(struct dd_config *ddc, int *ifd, int *ofd) | |
return -1; | |
} | |
- if (!ddc->seek) | |
+ if (!ddc->seek && !ddc->notrunc) | |
flo |= O_TRUNC; | |
if (!ddc->out) *ofd = 1; | |
@@ -108,7 +108,7 @@ prepare_copy(struct dd_config *ddc, int *ifd, int *ofd) | |
return -1; | |
} | |
- if (ddc->seek) { | |
+ if (ddc->seek && !ddc->notrunc) { | |
if (fstat(*ofd, &st) < 0) | |
return -1; | |
if (!S_ISREG(st.st_mode)) | |
@@ -238,7 +238,8 @@ static void | |
usage(void) | |
{ | |
eprintf("usage: %s [-h] [if=infile] [of=outfile] [bs[=N]] [seek=N] " | |
- "[skip=N] [count=N] [direct] [quiet] [nosync]\n", argv0); | |
+ "[skip=N] [count=N] [direct] [quiet] [nosync]" | |
+ "[conv=notrunc]\n", argv0); | |
} | |
int | |
@@ -278,6 +279,8 @@ main(int argc, char *argv[]) | |
config.quiet = 1; | |
else if (strcmp(argv[i], "nosync") == 0) | |
config.nosync = 1; | |
+ else if (strcmp(argv[i], "conv=notrunc") == 0) | |
+ config.notrunc = 1; | |
else if (strcmp(argv[i], "-h") == 0) | |
usage(); | |
} |