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