I've pushed the following to coreutils. While I think the rege* changes are useful and do belong in gnulib, I'll wait to hear that someone else would benefit from doing something similar before migrating my gl/lib/*.diff patches into gnulib.
>From e26cb21e6b89b06c8629a44bc6b78b2d46d110c9 Mon Sep 17 00:00:00 2001 From: Jim Meyering <meyer...@redhat.com> Date: Tue, 27 Oct 2009 12:12:11 +0100 Subject: [PATCH 1/3] build: allow whitespace violations in gl/lib/*.diff files * .gitattributes: Exempt gl/lib/*.diff. * .x-sc_prohibit_tab_based_indentation: Likewise. * .x-sc_space_tab:Likewise. --- .gitattributes | 2 ++ .x-sc_prohibit_tab_based_indentation | 1 + .x-sc_space_tab | 1 + 3 files changed, 4 insertions(+), 0 deletions(-) diff --git a/.gitattributes b/.gitattributes index 32f18fd..c3b2926 100644 --- a/.gitattributes +++ b/.gitattributes @@ -5,3 +5,5 @@ # # Derived from the regexp in emacs' lisp/add-log.el. # [diff "texinfo"] # funcname = "^...@node[ \t][ \t]*\\([^,][^,]*\\)" + +gl/lib/*.diff -whitespace diff --git a/.x-sc_prohibit_tab_based_indentation b/.x-sc_prohibit_tab_based_indentation index 2f5d921..388f94a 100644 --- a/.x-sc_prohibit_tab_based_indentation +++ b/.x-sc_prohibit_tab_based_indentation @@ -4,3 +4,4 @@ Makefile\.am$ ^tests/pr/ ChangeLog.* ^man/help2man$ +^gl/lib/.*\.c\.diff$ diff --git a/.x-sc_space_tab b/.x-sc_space_tab index f52ebd0..2ef3428 100644 --- a/.x-sc_space_tab +++ b/.x-sc_space_tab @@ -9,3 +9,4 @@ m4/lib-prefix.m4 m4/po.m4 aclocal.m4 src/c99-to-c89.diff +^gl/lib/.*\.c\.diff$ -- 1.6.5.2.375.g164f1 >From 56a66d78ffdaa62426dd5efb57219cb2444ba34c Mon Sep 17 00:00:00 2001 From: Jim Meyering <meyer...@redhat.com> Date: Wed, 28 Oct 2009 10:37:43 +0100 Subject: [PATCH 2/3] build: update gnulib submodule to latest --- gnulib | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/gnulib b/gnulib index 82381b9..739294f 160000 --- a/gnulib +++ b/gnulib @@ -1 +1 @@ -Subproject commit 82381b9e5b37125305709d412d8322b35e5c4796 +Subproject commit 739294f4aaa7734eb73bed785302dc64626c4ff1 -- 1.6.5.2.375.g164f1 >From f2859424cbdf23f6673fd4f3a9d7a5b197e0595e Mon Sep 17 00:00:00 2001 From: Jim Meyering <meyer...@redhat.com> Date: Tue, 27 Oct 2009 12:06:43 +0100 Subject: [PATCH 3/3] build (--enable-gcc-warnings): enable gcc's -Werror also in lib/ * configure.ac (GNULIB_WARN_CFLAGS): Define. * lib/Makefile.am (AM_CFLAGS): Use $(GNULIB_WARN_CFLAGS) rather than $(WARN_CFLAGS) and add $(WERROR_CFLAGS). * gl/lib/regcomp.c.diff: New file. * gl/lib/regex_internal.c.diff: New file. * gl/lib/regexec.c.diff: New file. --- configure.ac | 10 +++++++++ gl/lib/regcomp.c.diff | 23 +++++++++++++++++++++ gl/lib/regex_internal.c.diff | 25 +++++++++++++++++++++++ gl/lib/regexec.c.diff | 45 ++++++++++++++++++++++++++++++++++++++++++ lib/Makefile.am | 2 +- 5 files changed, 104 insertions(+), 1 deletions(-) create mode 100644 gl/lib/regcomp.c.diff create mode 100644 gl/lib/regex_internal.c.diff create mode 100644 gl/lib/regexec.c.diff diff --git a/configure.ac b/configure.ac index 3efc819..fb963ee 100644 --- a/configure.ac +++ b/configure.ac @@ -114,6 +114,16 @@ if test "$gl_gcc_warnings" = yes; then AC_DEFINE([_FORTIFY_SOURCE], [2], [enable compile-time and run-time bounds-checking, and some warnings]) AC_DEFINE([GNULIB_PORTCHECK], [1], [enable some gnulib portability checks]) + + # We use a slightly smaller set of warning options for lib/. + # Remove the following and save the result in GNULIB_WARN_CFLAGS. + nw= + nw="$nw -Wuninitialized" + nw="$nw -Wunused-macros" + nw="$nw -Wmissing-prototypes" + nw="$nw -Wold-style-definition" + gl_MANYWARN_COMPLEMENT([GNULIB_WARN_CFLAGS], [$WARN_CFLAGS], [$nw]) + AC_SUBST([GNULIB_WARN_CFLAGS]) fi AC_FUNC_FORK diff --git a/gl/lib/regcomp.c.diff b/gl/lib/regcomp.c.diff new file mode 100644 index 0000000..88097a4 --- /dev/null +++ b/gl/lib/regcomp.c.diff @@ -0,0 +1,23 @@ +diff --git a/lib/regcomp.c b/lib/regcomp.c +index 6472ff6..fadf36d 100644 +--- a/lib/regcomp.c ++++ b/lib/regcomp.c +@@ -18,6 +18,8 @@ + with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + ++#include "intprops.h" ++#include "verify.h" + static reg_errcode_t re_compile_internal (regex_t *preg, const char * pattern, + size_t length, reg_syntax_t syntax); + static void re_compile_fastmap_iter (regex_t *bufp, +@@ -2571,7 +2573,8 @@ parse_dup_op (bin_tree_t *elem, re_string_t *regexp, re_dfa_t *dfa, + /* This loop is actually executed only when end != REG_MISSING, + to rewrite <re>{0,n} as (<re>(<re>...<re>?)?)?... We have + already created the start+1-th copy. */ +- if ((Idx) -1 < 0 || end != REG_MISSING) ++ verify (! TYPE_SIGNED (Idx)); ++ if (end != REG_MISSING) + for (i = start + 2; i <= end; ++i) + { + elem = duplicate_tree (elem, dfa); diff --git a/gl/lib/regex_internal.c.diff b/gl/lib/regex_internal.c.diff new file mode 100644 index 0000000..2cede3c --- /dev/null +++ b/gl/lib/regex_internal.c.diff @@ -0,0 +1,25 @@ +diff --git a/lib/regex_internal.c b/lib/regex_internal.c +index 904b88e..61c8d9d 100644 +--- a/lib/regex_internal.c ++++ b/lib/regex_internal.c +@@ -18,6 +18,8 @@ + with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + ++#include "verify.h" ++#include "intprops.h" + static void re_string_construct_common (const char *str, Idx len, + re_string_t *pstr, + RE_TRANSLATE_TYPE trans, bool icase, +@@ -1390,7 +1392,10 @@ static void + internal_function + re_node_set_remove_at (re_node_set *set, Idx idx) + { +- if (idx < 0 || idx >= set->nelem) ++ verify (! TYPE_SIGNED (Idx)); ++ /* if (idx < 0) ++ return; */ ++ if (idx >= set->nelem) + return; + --set->nelem; + for (; idx < set->nelem; idx++) diff --git a/gl/lib/regexec.c.diff b/gl/lib/regexec.c.diff new file mode 100644 index 0000000..5c985f9 --- /dev/null +++ b/gl/lib/regexec.c.diff @@ -0,0 +1,45 @@ +diff --git a/lib/regexec.c b/lib/regexec.c +index 21a8166..3b0d85c 100644 +--- a/lib/regexec.c ++++ b/lib/regexec.c +@@ -18,6 +18,8 @@ + with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + ++#include "verify.h" ++#include "intprops.h" + static reg_errcode_t match_ctx_init (re_match_context_t *cache, int eflags, + Idx n) internal_function; + static void match_ctx_clean (re_match_context_t *mctx) internal_function; +@@ -378,8 +380,11 @@ re_search_2_stub (struct re_pattern_buffer *bufp, + Idx len = length1 + length2; + char *s = NULL; + +- if (BE (length1 < 0 || length2 < 0 || stop < 0 || len < length1, 0)) +- return -2; ++ verify (! TYPE_SIGNED (Idx)); ++ if (BE (len < length1, 0)) ++ return -2; */ ++ /* if (BE (length1 < 0 || length2 < 0 || stop < 0, 0)) ++ return -2; */ + + /* Concatenate the strings. */ + if (length2 > 0) +@@ -431,11 +436,14 @@ re_search_stub (struct re_pattern_buffer *bufp, + Idx last_start = start + range; + + /* Check for out-of-range. */ +- if (BE (start < 0 || start > length, 0)) +- return -1; ++ verify (! TYPE_SIGNED (Idx)); ++ /* if (BE (start < 0, 0)) ++ return -1; */ ++ if (BE (start > length, 0)) ++ return -1; + if (BE (length < last_start || (0 <= range && last_start < start), 0)) + last_start = length; +- else if (BE (last_start < 0 || (range < 0 && start <= last_start), 0)) ++ else if (BE (/* last_start < 0 || */ (range < 0 && start <= last_start), 0)) + last_start = 0; + + __libc_lock_lock (dfa->lock); diff --git a/lib/Makefile.am b/lib/Makefile.am index 074cc9c..896458f 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -17,7 +17,7 @@ include gnulib.mk -AM_CFLAGS += $(WARN_CFLAGS) # $(WERROR_CFLAGS) +AM_CFLAGS += $(GNULIB_WARN_CFLAGS) $(WERROR_CFLAGS) libcoreutils_a_SOURCES += \ buffer-lcm.c buffer-lcm.h \ -- 1.6.5.2.375.g164f1