]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
fix #3719
authorYann Collet <cyan@fb.com>
Mon, 11 Mar 2024 18:38:55 +0000 (11:38 -0700)
committerYann Collet <cyan@fb.com>
Mon, 11 Mar 2024 18:38:55 +0000 (11:38 -0700)
only disable `--rm` at end of command line parsing,
so that `-c` only disables `--rm` if it's effectively selected,
and not if it's overriden by a later `-o FILE` command.

programs/zstd.1.md
programs/zstdcli.c

index c5d0ef70a36a4ce5f41ac2f804f8e5f60e9c25e7..b11ad900d2bf83509807234bcfd8d316c6826d05 100644 (file)
@@ -225,15 +225,17 @@ the last one takes effect.
     This parameter defines a loose target: compressed blocks will target this size "on average", but individual blocks can still be larger or smaller.
     Enabling this feature can decrease compression speed by up to ~10% at level 1.
     Higher levels will see smaller relative speed regression, becoming invisible at higher settings.
-* `-o FILE`:
-    save result into `FILE`.
 * `-f`, `--force`:
     disable input and output checks. Allows overwriting existing files, input
     from console, output to stdout, operating on links, block devices, etc.
     During decompression and when the output destination is stdout, pass-through
     unrecognized formats as-is.
 * `-c`, `--stdout`:
-    write to standard output (even if it is the console); keep original files unchanged.
+    write to standard output (even if it is the console); keep original files (disable `--rm`).
+* `-o FILE`:
+    save result into `FILE`.
+    This command is in conflict with `-c`.
+    If both are present on the command line, the last expressed one wins.
 * `--[no-]sparse`:
     enable / disable sparse FS support,
     to make files with many zeroes smaller on disk.
index 1cb16ef50e720e225a6b3e719cade119c5f25141..4ea9034a10321de9f07d076cbf6981fa6db7e9fe 100644 (file)
@@ -1176,7 +1176,10 @@ int main(int argCount, const char* argv[])
                         operation=zom_decompress; argument++; break;
 
                     /* Force stdout, even if stdout==console */
-                case 'c': forceStdout=1; outFileName=stdoutmark; removeSrcFile=0; argument++; break;
+                case 'c': forceStdout=1; outFileName=stdoutmark; argument++; break;
+
+                    /* destination file name */
+                case 'o': argument++; NEXT_FIELD(outFileName); break;
 
                     /* do not store filename - gzip compatibility - nothing to do */
                 case 'n': argument++; break;
@@ -1202,9 +1205,6 @@ int main(int argCount, const char* argv[])
                     /* test compressed file */
                 case 't': operation=zom_test; argument++; break;
 
-                    /* destination file name */
-                case 'o': argument++; NEXT_FIELD(outFileName); break;
-
                     /* limit memory */
                 case 'M':
                     argument++;
@@ -1367,6 +1367,14 @@ int main(int argCount, const char* argv[])
 #endif
     }
 
+    /* disable --rm when writing to stdout */
+    if (!strcmp(outFileName, stdoutmark)) {
+        if (removeSrcFile) {
+            DISPLAYLEVEL(2, "warning: source not removed when writing to stdout \n");
+            removeSrcFile = 0;
+        }
+    }
+
     /* Check if benchmark is selected */
     if (operation==zom_bench) {
 #ifndef ZSTD_NOBENCH