]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
build: add die.h; avoid new warnings from GCC 7
authorJim Meyering <meyering@fb.com>
Wed, 5 Oct 2016 02:20:46 +0000 (19:20 -0700)
committerJim Meyering <meyering@fb.com>
Sat, 15 Oct 2016 15:41:42 +0000 (08:41 -0700)
* src/die.h (die): New file/function from grep.
Note: we expect this file to migrate to gnulib.
* src/csplit.c: Include die.h.
(check_format_conv_type): Use die in place of error-nonzero;break;
* src/install.c (strip): Likewise.
* src/nl.c (proc_text): Likewise.  This also suppresses a new warning
from GCC 7's -Werror=strict-overflow.
* src/tail.c (parse_options): Likewise.
* src/basename.c (main): Adjust "fall through" comment
so that GCC 7's -Wimplicit-fallthrough honors it.
* src/cp.c (main): Add a "fall through" comment.
* src/ls.c (gobble_file): Likewise.
(get_funky_string): Adjust a "fall through" comment so it is
recognized.
* cfg.mk (exclude_file_name_regexp--sc_system_h_headers): Add die.h
to this list of exempt src/*.h files.

cfg.mk
src/basename.c
src/cp.c
src/csplit.c
src/die.h [new file with mode: 0644]
src/install.c
src/ls.c
src/nl.c
src/tail.c

diff --git a/cfg.mk b/cfg.mk
index 08d9e9dd444f6485976e7a25e549c89852e2a3bc..9acb42c34b18b246da3941efc516151eb91d646c 100644 (file)
--- a/cfg.mk
+++ b/cfg.mk
@@ -794,7 +794,7 @@ exclude_file_name_regexp--sc_bindtextdomain = \
 exclude_file_name_regexp--sc_trailing_blank = \
   ^(tests/pr/|gl/.*\.diff$$|man/help2man)
 exclude_file_name_regexp--sc_system_h_headers = \
-  ^src/((system|copy)\.h|make-prime-list\.c)$$
+  ^src/((die|system|copy)\.h|make-prime-list\.c)$$
 
 _src = (false|lbracket|ls-(dir|ls|vdir)|tac-pipe|uname-(arch|uname))
 exclude_file_name_regexp--sc_require_config_h_first = \
index e2ed879ec241f80f5da88b4fa258a01af38d2c1d..fe3cb3f07b179afd47e06a484920ac2e8079d279 100644 (file)
@@ -146,7 +146,8 @@ main (int argc, char **argv)
         {
         case 's':
           suffix = optarg;
-          /* Fall through: -s implies -a.  */
+          /* -s implies -a, so...  */
+          /* fall through */
 
         case 'a':
           multiple_names = true;
index 13dc1ea097c9a31c373fcfe3354dfe29c919bf7f..389e43ee656efb335a8330fd3371b84dd88d46b6 100644 (file)
--- a/src/cp.c
+++ b/src/cp.c
@@ -1040,6 +1040,7 @@ main (int argc, char **argv)
               x.require_preserve = true;
               break;
             }
+          /* fall through */
 
         case 'p':
           x.preserve_ownership = true;
index ac92d4c433bbdd5c9812345fb0030f43296cc54c..30a97e572ea64f10c8b7b5a255355e17116b3200 100644 (file)
@@ -28,6 +28,7 @@
 
 #include <regex.h>
 
+#include "die.h"
 #include "error.h"
 #include "fd-reopen.h"
 #include "quote.h"
@@ -1287,8 +1288,7 @@ check_format_conv_type (char *format, int flags)
       break;
 
     case 0:
-      error (EXIT_FAILURE, 0, _("missing conversion specifier in suffix"));
-      break;
+      die (EXIT_FAILURE, 0, _("missing conversion specifier in suffix"));
 
     default:
       if (isprint (ch))
diff --git a/src/die.h b/src/die.h
new file mode 100644 (file)
index 0000000..f64ab34
--- /dev/null
+++ b/src/die.h
@@ -0,0 +1,31 @@
+/* Report an error and exit.
+   Copyright 2016 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+   02110-1301, USA.  */
+
+#ifndef DIE_H
+# define DIE_H
+
+# include <error.h>
+# include <stdbool.h>
+# include <verify.h>
+
+/* Like 'error (STATUS, ...)', except STATUS must be a nonzero constant.
+   This may pacify the compiler or help it generate better code.  */
+# define die(status, ...) \
+  verify_expr (status, (error (status, __VA_ARGS__), assume (false)))
+
+#endif /* DIE_H */
index 1e1fed5b69f74214f3cec8dc9f5f11d815a3c147..8f512d8c6c1be9c859f7a13373a10ea0badbbfe8 100644 (file)
@@ -31,6 +31,7 @@
 #include "error.h"
 #include "cp-hash.h"
 #include "copy.h"
+#include "die.h"
 #include "filenamecat.h"
 #include "full-read.h"
 #include "mkancesdirs.h"
@@ -555,8 +556,7 @@ strip (char const *name)
       break;
     case 0:                    /* Child. */
       execlp (strip_program, strip_program, name, NULL);
-      error (EXIT_FAILURE, errno, _("cannot run %s"), quoteaf (strip_program));
-      break;
+      die (EXIT_FAILURE, errno, _("cannot run %s"), quoteaf (strip_program));
     default:                   /* Parent. */
       if (waitpid (pid, &status, 0) < 0)
         error (0, errno, _("waiting for strip"));
index 28eff6f3ba801dcd95ec092c9014407eefe237df..4d6e6478c02fb35b6b9daf3ae7143a3eea243d5b 100644 (file)
--- a/src/ls.c
+++ b/src/ls.c
@@ -3113,6 +3113,7 @@ gobble_file (char const *name, enum filetype type, ino_t inode,
                  directory, and --dereference-command-line-symlink-to-dir is
                  in effect.  Fall through so that we call lstat instead.  */
             }
+          /* fall through */
 
         default: /* DEREF_NEVER */
           err = lstat (absolute_name, &f->stat);
index b276f0935916fb902c9b9f2704dfebd250e55016..9696526a2ee8512b9594497bea135ce21afe95c7 100644 (file)
--- a/src/nl.c
+++ b/src/nl.c
@@ -27,6 +27,7 @@
 
 #include <regex.h>
 
+#include "die.h"
 #include "error.h"
 #include "fadvise.h"
 #include "linebuffer.h"
@@ -352,7 +353,7 @@ proc_text (void)
                          0, line_buf.length - 1, NULL))
         {
         case -2:
-          error (EXIT_FAILURE, errno, _("error in regular expression search"));
+          die (EXIT_FAILURE, errno, _("error in regular expression search"));
 
         case -1:
           fputs (print_no_line_fmt, stdout);
index 545da033c49e325ba0ff53d422c2bb9f01f66adc..4e98dd5057743694194aa50c07b9a6ec4a20627e 100644 (file)
@@ -34,6 +34,7 @@
 #include "system.h"
 #include "argmatch.h"
 #include "c-strtod.h"
+#include "die.h"
 #include "error.h"
 #include "fcntl--.h"
 #include "isapipe.h"
@@ -2161,8 +2162,7 @@ parse_options (int argc, char **argv,
 
         case '0': case '1': case '2': case '3': case '4':
         case '5': case '6': case '7': case '8': case '9':
-          error (EXIT_FAILURE, 0,
-                 _("option used in invalid context -- %c"), c);
+          die (EXIT_FAILURE, 0, _("option used in invalid context -- %c"), c);
 
         default:
           usage (EXIT_FAILURE);