On 02/20/2013 05:15 AM, Sergey Poznyakoff wrote:
> Pavel Raiskup <prais...@redhat.com> ha escrit:
> 
>> It was just sugestion as tar uses -Werror by default since this commit:
> 
> Ouch! A very unfortunate move, I must say.

It works well in other projects, such as coreutils: 'make' uses -Werror
only for developers, who check out from git.  'make' does not use -Werror
for ordinary builds from tarballs.  Developers are assumed to have up-to-date
systems where -Werror is appropriate.

I'm surprised you didn't run into this.  What's your workflow like?  Don't
you have .git subdirectories?

The problem for regcomp.c was due to an interaction between a recent change
to the regex code and the particular set of warning options used for GNU tar.
I fixed it with the first attached patch.  The other minor problems seem worth
fixing too, so I fixed them with the second attached patch.
From c9bfcaeb8f786531d16e3db613ccb99b36d7f83d Mon Sep 17 00:00:00 2001
From: Paul Eggert <egg...@cs.ucla.edu>
Date: Wed, 20 Feb 2013 07:50:59 -0800
Subject: [PATCH] regex: ignore old-style-definition warnings

* lib/regex.c: Add pragma to ignore these warnings.
Problem reported for GNU tar by Pavel Raiskup.
---
 ChangeLog   | 6 ++++++
 lib/regex.c | 1 +
 2 files changed, 7 insertions(+)

diff --git a/ChangeLog b/ChangeLog
index a5b6b13..e66ca4c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2013-02-20  Paul Eggert  <egg...@cs.ucla.edu>
+
+       regex: ignore old-style-definition warnings
+       * lib/regex.c: Add pragma to ignore these warnings.
+       Problem reported for GNU tar by Pavel Raiskup.
+
 2013-02-19  Paul Eggert  <egg...@cs.ucla.edu>
 
        getcwd: support coreutils better
diff --git a/lib/regex.c b/lib/regex.c
index ca40e6e..361f763 100644
--- a/lib/regex.c
+++ b/lib/regex.c
@@ -24,6 +24,7 @@
 #  pragma GCC diagnostic ignored "-Wsuggest-attribute=pure"
 # endif
 # if (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) || 4 < __GNUC__
+#  pragma GCC diagnostic ignored "-Wold-style-definition"
 #  pragma GCC diagnostic ignored "-Wtype-limits"
 # endif
 #endif
-- 
1.7.11.7

From b38dd65a99715ae25d57d13926aae41c2c0609d9 Mon Sep 17 00:00:00 2001
From: Paul Eggert <egg...@cs.ucla.edu>
Date: Wed, 20 Feb 2013 08:09:38 -0800
Subject: [PATCH] tar: remove lint

* lib/wordsplit.c (_wsplit_error): Mark with printf attribute.
(expvar): "Use" defstr to pacify GCC.
* src/system.c (xexec): Now _Noreturn, to pacify GCC.
(run_decompress_program): Add cast to pacify GCC.
(sys_exec_command, sys_exec_info_script, sys_exec_checkpoint_script):
Remove unused variables.
---
 lib/wordsplit.c |  7 +++++--
 src/system.c    | 24 ++++++++----------------
 2 files changed, 13 insertions(+), 18 deletions(-)

diff --git a/lib/wordsplit.c b/lib/wordsplit.c
index bd5d59d..75faf9e 100644
--- a/lib/wordsplit.c
+++ b/lib/wordsplit.c
@@ -61,7 +61,7 @@ _wsplt_alloc_die (struct wordsplit *wsp)
   abort ();
 }
 
-static void
+static void __attribute__ ((__format__ (__printf__, 1, 2)))
 _wsplt_error (const char *fmt, ...)
 {
   va_list ap;
@@ -795,7 +795,10 @@ expvar (struct wordsplit *wsp, const char *str, size_t len,
       else
        value = "";
     }
+
   /* FIXME: handle defstr */
+  (void) defstr;
+
   if (value)
     {
       if (flg & _WSNF_QUOTE)
@@ -1461,7 +1464,7 @@ wordsplit_process_list (struct wordsplit *wsp, size_t 
start)
 }
 
 int
-wordsplit_len (const char *command, size_t length, struct wordsplit *wsp, 
+wordsplit_len (const char *command, size_t length, struct wordsplit *wsp,
                int flags)
 {
   int rc;
diff --git a/src/system.c b/src/system.c
index 6adcbf0..e1fd263 100644
--- a/src/system.c
+++ b/src/system.c
@@ -23,7 +23,7 @@
 #include <signal.h>
 #include <wordsplit.h>
 
-static void
+static _Noreturn void
 xexec (const char *cmd)
 {
   struct wordsplit ws;
@@ -329,7 +329,7 @@ sys_child_open_for_compress (void)
   int child_pipe[2];
   pid_t grandchild_pid;
   pid_t child_pid;
-  
+
   xpipe (parent_pipe);
   child_pid = xfork ();
 
@@ -474,7 +474,7 @@ run_decompress_program (void)
 
   ws.ws_env = (const char **) environ;
   ws.ws_offs = 1;
-  
+
   for (p = first_decompress_program (&i); p; p = next_decompress_program (&i))
     {
       if (prog)
@@ -490,8 +490,8 @@ run_decompress_program (void)
       wsflags |= WRDSF_REUSE;
       memmove(ws.ws_wordv, ws.ws_wordv + ws.ws_offs,
              sizeof(ws.ws_wordv[0])*ws.ws_wordc);
-      ws.ws_wordv[ws.ws_wordc] = "-d";
-      prog = p;                      
+      ws.ws_wordv[ws.ws_wordc] = (char *) "-d";
+      prog = p;
       execvp (ws.ws_wordv[0], ws.ws_wordv);
       ws.ws_wordv[ws.ws_wordc] = NULL;
     }
@@ -726,8 +726,7 @@ int
 sys_exec_command (char *file_name, int typechar, struct tar_stat_info *st)
 {
   int p[2];
-  char *argv[4];
-  
+
   xpipe (p);
   pipe_handler = signal (SIGPIPE, SIG_IGN);
   global_pid = xfork ();
@@ -787,7 +786,6 @@ int
 sys_exec_info_script (const char **archive_name, int volume_number)
 {
   pid_t pid;
-  char *argv[4];
   char uintbuf[UINTMAX_STRSIZE_BOUND];
   int p[2];
   static RETSIGTYPE (*saved_handler) (int sig);
@@ -849,7 +847,7 @@ sys_exec_info_script (const char **archive_name, int 
volume_number)
          archive_format_string (current_format == DEFAULT_FORMAT ?
                                 archive_format : current_format), 1);
   setenv ("TAR_FD", STRINGIFY_BIGINT (p[PWRITE], uintbuf), 1);
-  
+
   xclose (p[PREAD]);
 
   priv_set_restore_linkdir ();
@@ -862,9 +860,8 @@ sys_exec_checkpoint_script (const char *script_name,
                            int checkpoint_number)
 {
   pid_t pid;
-  char *argv[4];
   char uintbuf[UINTMAX_STRSIZE_BOUND];
-  
+
   pid = xfork ();
 
   if (pid != 0)
@@ -893,11 +890,6 @@ sys_exec_checkpoint_script (const char *script_name,
   setenv ("TAR_FORMAT",
          archive_format_string (current_format == DEFAULT_FORMAT ?
                                 archive_format : current_format), 1);
-  argv[0] = (char *) "/bin/sh";
-  argv[1] = (char *) "-c";
-  argv[2] = (char *) script_name;
-  argv[3] = NULL;
-
   priv_set_restore_linkdir ();
   xexec (script_name);
 }
-- 
1.7.11.7

Reply via email to