]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
mktemp: with --quiet, only suppress I/O errors
authorPádraig Brady <P@draigBrady.com>
Sun, 6 Oct 2013 16:26:51 +0000 (17:26 +0100)
committerPádraig Brady <P@draigBrady.com>
Sun, 6 Oct 2013 16:59:44 +0000 (17:59 +0100)
The reason for having a --quiet option is to
suppress only some subset of possible errors.
The most useful separation here is with usage/internal errors,
and errors due to file creation etc. (i.e. I/O errors).

* src/mktemp.c (main): Match the --help and info docs and
only suppress the file/dir creation error messages.
* tests/misc/mktemp.pl: Adjust accordingly.

src/mktemp.c
tests/misc/mktemp.pl

index 41d576306055c715b8586b5a867cf5b18c1725f1..05530a31af2800367977469e35b046202d4950c2 100644 (file)
@@ -26,7 +26,6 @@
 #include "error.h"
 #include "filenamecat.h"
 #include "quote.h"
-#include "stdio--.h"
 #include "tempname.h"
 
 /* The official name of this program (e.g., no 'g' prefix).  */
@@ -147,7 +146,7 @@ main (int argc, char **argv)
 {
   char const *dest_dir;
   char const *dest_dir_arg = NULL;
-  bool suppress_stderr = false;
+  bool suppress_file_err = false;
   int c;
   unsigned int n_args;
   char *template;
@@ -181,7 +180,7 @@ main (int argc, char **argv)
           use_dest_dir = true;
           break;
         case 'q':
-          suppress_stderr = true;
+          suppress_file_err = true;
           break;
         case 't':
           use_dest_dir = true;
@@ -205,15 +204,6 @@ main (int argc, char **argv)
         }
     }
 
-  if (suppress_stderr)
-    {
-      /* From here on, redirect stderr to /dev/null.
-         A diagnostic from getopt_long, above, would still go to stderr.  */
-      if (!freopen ("/dev/null", "wb", stderr))
-        error (EXIT_FAILURE, errno,
-               _("failed to redirect stderr to /dev/null"));
-    }
-
   n_args = argc - optind;
   if (2 <= n_args)
     {
@@ -317,8 +307,9 @@ main (int argc, char **argv)
       int err = mkdtemp_len (dest_name, suffix_len, x_count, dry_run);
       if (err != 0)
         {
-          error (0, errno, _("failed to create directory via template %s"),
-                 quote (template));
+          if (!suppress_file_err)
+            error (0, errno, _("failed to create directory via template %s"),
+                   quote (template));
           status = EXIT_FAILURE;
         }
     }
@@ -327,8 +318,9 @@ main (int argc, char **argv)
       int fd = mkstemp_len (dest_name, suffix_len, x_count, dry_run);
       if (fd < 0 || (!dry_run && close (fd) != 0))
         {
-          error (0, errno, _("failed to create file via template %s"),
-                 quote (template));
+          if (!suppress_file_err)
+            error (0, errno, _("failed to create file via template %s"),
+                   quote (template));
           status = EXIT_FAILURE;
         }
     }
@@ -342,7 +334,8 @@ main (int argc, char **argv)
         {
           int saved_errno = errno;
           remove (dest_name);
-          error (EXIT_FAILURE, saved_errno, _("write error"));
+          if (!suppress_file_err)
+            error (EXIT_FAILURE, saved_errno, _("write error"));
         }
     }
 
index b15b6694b6f749af439907390404ef738b6a520d..d47371c14a52c24eba310c4378ba7252d8ef5e5e 100755 (executable)
@@ -55,14 +55,12 @@ my @Tests =
     (
      # test-name, [option, option, ...] {OUT=>"expected-output"}
      #
-     ['too-many', 'a b',
+     ['too-many', '-q a b',
       {ERR=>"$prog: too many templates\n"
        . "Try '$prog --help' for more information.\n"}, {EXIT => 1} ],
-     ['too-many-q', '-q a b', {EXIT => 1} ],
 
-     ['too-few-x', 'foo.XX', {EXIT => 1},
+     ['too-few-x', '-q foo.XX', {EXIT => 1},
       {ERR=>"$prog: too few X's in template 'foo.XX'\n"}],
-     ['too-few-xq', '-q foo.XX', {EXIT => 1} ],
 
      ['1f', 'bar.XXXX', {OUT => "bar.ZZZZ\n"},
       {OUT_SUBST => 's,\.....$,.ZZZZ,'},
@@ -148,11 +146,9 @@ my @Tests =
 
      ['suffix6f', 'aXXXX/b', {EXIT=>1},
       {ERR=>"$prog: invalid suffix '/b', contains directory separator\n"}],
-     ['suffix6f-q', '-q aXXXX/b', {EXIT=>1}],
 
      ['suffix7f', '--suffix= aXXXXb', {EXIT=>1},
       {ERR=>"$prog: with --suffix, template 'aXXXXb' must end in X\n"}],
-     ['suffix7f-q', '-q --suffix= aXXXXb', {EXIT=>1}],
      ['suffix7d', '-d --suffix=aXXXXb ""', {EXIT=>1},
       {ERR=>"$prog: with --suffix, template '' must end in X\n"}],