URI: 
       dd: implement conv=notrunc support - ubase - suckless linux base utils
  HTML git clone git://git.suckless.org/ubase
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit e0dc3f9546b3cd839aef8e58376c6295679a5ed5
   DIR parent 596663c1b1f140c10ba1facede783201d6a876a7
  HTML Author: Eivind Uggedal <eivind@uggedal.com>
       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(-)
       ---
   DIR 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
   DIR 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();
                }