]> Zhao Yanbai Git Server - minix.git/commitdiff
Add notrunc conversion for dd tool
authorErik van der Kouwe <erik@minix3.org>
Wed, 27 Jan 2010 07:48:06 +0000 (07:48 +0000)
committerErik van der Kouwe <erik@minix3.org>
Wed, 27 Jan 2010 07:48:06 +0000 (07:48 +0000)
commands/simple/dd.c
man/man1/dd.1

index 0f7874b866a7eaa430159f9ff68dd8b00e60ed0c..dc6a9eca1bcb7d9c66c8657ec1c022b6886dfe2d 100644 (file)
@@ -82,6 +82,7 @@ int num()
 #define NOERROR 0x0008
 #define SYNC 0x0010
 #define SILENT 0x0020
+#define NOTRUNC 0x0040
 #define BLANK ' '
 #define DEFAULT 512
 
@@ -142,7 +143,7 @@ char *argv[];
   void (*convert) ();
 #endif
   char *iptr;
-  int i, j;
+  int i, j, oflags;
 
   convert = null;
   argc--;
@@ -213,6 +214,10 @@ char *argv[];
                                convflag |= NOERROR;
                                continue;
                        }
+                       if (is("notrunc")) {
+                               convflag |= NOTRUNC;
+                               continue;
+                       }
                        if (is("sync")) {
                                convflag |= SYNC;
                                continue;
@@ -241,8 +246,10 @@ char *argv[];
                (ifilename) ? ifilename : "stdin", strerror(errno));
        exit(1);
   }
-  if ((ofd = ((ofilename) ? open(ofilename, seekseen ? O_WRONLY | O_CREAT
-                                       : O_WRONLY | O_CREAT | O_TRUNC, 0666)
+  oflags = O_WRONLY | O_CREAT;
+  if (!seekseen && (convflag & NOTRUNC) != NOTRUNC)
+       oflags |= O_TRUNC;
+  if ((ofd = ((ofilename) ? open(ofilename, oflags, 0666)
                        : dup(1))) < 0) {
        fprintf(stderr, "dd: Can't open %s: %s\n",
                (ofilename) ? ofilename : "stdout", strerror(errno));
index 756ab0eb273e6605245ee7228db0ed9ec79b165a..afdad2b8f376b8e77f3e6fb1a3d22ad409aab81e 100644 (file)
@@ -48,6 +48,8 @@ The options are:
        \fBconv = swab\fR       \- Swap every pair of bytes
 .br
        \fBconv = noerror\fR    \- Ignore errors and just keep going
+.br
+       \fBconv = notrunc\fR    \- Do not truncate unmodified blocks
 .br
        \fBconv = silent\fR     \- Suppress statistics (MINIX 3 specific flag)
 .PP