Jim Meyering <[EMAIL PROTECTED]> writes: > This will keep me from releasing decl-after-stmt code in coreutils/src:
This inspired me to try harder for an automated check for departures from C89. Here's a proposed patch that implements such a check for coreutils, and that fixes the departures that I found. This should supersede coreutils' patch-check rule, in the sense that it should find everything that patch-check finds, but I left patch-check alone for now (partly because it's faster). This was the patch I used to find the regex incompatibilities I fixed today in gnulib. Also, it relies on the gettext.h patch I sent to bug-gnulib a few minutes ago, in the sense that the resulting 'make distcheck' won't succeed unless gettext.h is also fixed. 2006-11-26 Paul Eggert <[EMAIL PROTECTED]> Fix some incompatibilities with gcc -ansi -pedantic. * lib/regex.h (__restrict_arr): Don't use the [restrict] syntax if compiling pedantically with GCC, unless it's C99 or later. Don't trust sys/cdefs.h's definition of __restrict_arr, either, as it mishandles gcc -ansi -pedantic as well. * lib/regex_internal.h (re_token_t): Don't use enum bitfields if gcc -pedantic. * lib/regexec.c (check_node_accept_bytes): Don't use auto initializers for struct if -pedantic, unless it's C99 or later. diff --git a/Makefile.maint b/Makefile.maint index 9400b49..821a53c 100644 --- a/Makefile.maint +++ b/Makefile.maint @@ -528,6 +528,11 @@ my-distcheck: $(local-check) $(release_a (cd $(t) && mv $(distdir) $(distdir).old \ && $(AMTAR) -zxf - ) < $(distdir).tar.gz diff -ur $(t)/$(distdir).old $(t)/$(distdir) + cd $(t)/$(distdir) \ + && (cd src && patch -V never --fuzz=0 <c99-to-c89.diff) \ + && ./configure --disable-largefile \ + CFLAGS='-Werror -ansi -pedantic -Wno-long-long' \ + && $(MAKE) -rm -rf $(t) @echo "========================"; \ echo "$(distdir).tar.gz is ready for distribution"; \ diff --git a/src/stat.c b/src/stat.c index 6de5e15..315fe0c 100644 --- a/src/stat.c +++ b/src/stat.c @@ -154,7 +154,7 @@ #define AUTHORS "Michael Meskes" enum { - PRINTF_OPTION = CHAR_MAX + 1, + PRINTF_OPTION = CHAR_MAX + 1 }; static struct option const long_options[] = { diff --git a/src/dcgen b/src/dcgen index a3f04c3..5df3c56 100755 --- a/src/dcgen +++ b/src/dcgen @@ -1,7 +1,7 @@ #!/usr/bin/perl -w # dcgen -- convert dircolors.hin to dircolors.h. -# Copyright (C) 1996, 1998, 2004, 2005 Free Software Foundation, Inc. +# Copyright (C) 1996, 1998, 2004, 2005, 2006 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 @@ -44,12 +44,14 @@ while (<>) and push @line, $_; } -my $last_line = pop @line; my $indent = ' '; -print "static char const G_line[] =\n"; +print "static char const G_line[] =\n{\n"; foreach (@line) { - print "$indent\"$_\\0\"\n"; + s/./'$&',/g; + s/'\\'/'\\\\'/g; + s/'''/'\\''/g; + print "$indent${_}0,\n"; } -print "$indent\"$last_line\";\n"; +print "};\n"; diff --git a/src/cut.c b/src/cut.c index 4faae4c..73277fa 100644 --- a/src/cut.c +++ b/src/cut.c @@ -223,6 +223,8 @@ Mandatory arguments to long options are Use one, and only one of -b, -c or -f. Each LIST is made up of one\n\ range, or many ranges separated by commas. Selected input is written\n\ in the same order that it is read, and is written exactly once.\n\ +"), stdout); + fputs (_("\ Each range is one of:\n\ \n\ N N'th byte, character or field, counted from 1\n\ diff --git a/src/date.c b/src/date.c index 187956a..2dec4c3 100644 --- a/src/date.c +++ b/src/date.c @@ -223,6 +223,8 @@ specifies Coordinated Universal Time. I %Z alphabetic time zone abbreviation (e.g., EDT)\n\ \n\ By default, date pads numeric fields with zeroes.\n\ +"), stdout); + fputs (_("\ The following optional flags may follow `%':\n\ \n\ - (hyphen) do not pad the field\n\ diff --git a/src/dd.c b/src/dd.c index f1dc474..3449e12 100644 --- a/src/dd.c +++ b/src/dd.c @@ -448,6 +448,8 @@ Each CONV symbol may be:\n\ notrunc do not truncate the output file\n\ ucase change lower case to upper case\n\ swab swap every pair of input bytes\n\ +"), stdout); + fputs (_("\ noerror continue after read errors\n\ sync pad every input block with NULs to ibs-size; when used\n\ with block or unblock, pad with spaces rather than NULs\n\ diff --git a/src/du.c b/src/du.c index 5f4e796..6a4c8c7 100644 --- a/src/du.c +++ b/src/du.c @@ -293,6 +293,8 @@ Mandatory arguments to long options are the apparent size is usually smaller, it may be\n\ larger due to holes in (`sparse') files, internal\n\ fragmentation, indirect blocks, and the like\n\ +"), stdout); + fputs (_("\ -B, --block-size=SIZE use SIZE-byte blocks\n\ -b, --bytes equivalent to `--apparent-size --block-size=1'\n\ -c, --total produce a grand total\n\ @@ -305,6 +307,8 @@ Mandatory arguments to long options are change to be equivalent to --dereference-args (-D)\n\ -h, --human-readable print sizes in human readable format (e.g., 1K 234M 2G)\n\ --si like -h, but use powers of 1000 not 1024\n\ +"), stdout); + fputs (_("\ -k like --block-size=1K\n\ -l, --count-links count sizes many times if hard linked\n\ -m like --block-size=1M\n\ diff --git a/src/ls.c b/src/ls.c index 03164b1..63d363f 100644 --- a/src/ls.c +++ b/src/ls.c @@ -4270,6 +4270,8 @@ Mandatory arguments to long options are -h, --human-readable with -l, print sizes in human readable format\n\ (e.g., 1K 234M 2G)\n\ --si likewise, but use powers of 1000 not 1024\n\ +"), stdout); + fputs (_("\ -H, --dereference-command-line\n\ follow symbolic links listed on the command line\n\ --dereference-command-line-symlink-to-dir\n\ @@ -4331,6 +4333,8 @@ Mandatory arguments to long options are non-recent files and FORMAT2 to recent files;\n\ if STYLE is prefixed with `posix-', STYLE\n\ takes effect only outside the POSIX locale\n\ +"), stdout); + fputs (_("\ -t sort by modification time\n\ -T, --tabsize=COLS assume tab stops at each COLS instead of 8\n\ "), stdout); diff --git a/src/od.c b/src/od.c index b358a0f..a0c2474 100644 --- a/src/od.c +++ b/src/od.c @@ -358,6 +358,8 @@ An OFFSET operand means -j OFFSET. LABE at first byte printed, incremented when dump is progressing.\n\ For OFFSET and LABEL, a 0x or 0X prefix indicates hexadecimal;\n\ suffixes may be . for octal and b for multiply by 512.\n\ +"), stdout); + fputs (_("\ \n\ TYPE is made up of one or more of these specifications:\n\ \n\ diff --git a/src/readlink.c b/src/readlink.c index 533b9b9..800d235 100644 --- a/src/readlink.c +++ b/src/readlink.c @@ -1,5 +1,5 @@ /* readlink -- display value of a symbolic link. - Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + Copyright (C) 2002, 2003, 2004, 2005, 2006 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 @@ -74,6 +74,8 @@ usage (int status) -e, --canonicalize-existing canonicalize by following every symlink in\n\ every component of the given name recursively,\n\ all components must exist\n\ +"), stdout); + fputs (_("\ -m, --canonicalize-missing canonicalize by following every symlink in\n\ every component of the given name recursively,\n\ without requirements on components existence\n\ diff --git a/src/seq.c b/src/seq.c index 997fd73..59dd318 100644 --- a/src/seq.c +++ b/src/seq.c @@ -92,6 +92,8 @@ omitted INCREMENT defaults to 1 even whe FIRST, INCREMENT, and LAST are interpreted as floating point values.\n\ INCREMENT is usually positive if FIRST is smaller than LAST, and\n\ INCREMENT is usually negative if FIRST is greater than LAST.\n\ +"), stdout); + fputs (_("\ FORMAT must be suitable for printing one argument of type `double';\n\ it defaults to %.PRECf if FIRST, INCREMENT, and LAST are all fixed point\n\ decimal numbers with maximum precision PREC, and to %g otherwise.\n\ diff --git a/src/shred.c b/src/shred.c index 4c1819c..23a4944 100644 --- a/src/shred.c +++ b/src/shred.c @@ -220,6 +220,8 @@ version 3 clients\n\ \n\ * compressed file systems\n\ \n\ +"), stdout); + fputs (_("\ In the case of ext3 file systems, the above disclaimer applies\n\ (and shred is thus of limited effectiveness) only in data=journal mode,\n\ which journals file data in addition to just metadata. In both the\n\ @@ -228,6 +230,8 @@ Ext3 journaling modes can be changed by to the mount options for a particular file system in the /etc/fstab file,\n\ as documented in the mount man page (man mount).\n\ \n\ +"), stdout); + fputs (_("\ In addition, file system backups and remote mirrors may contain copies\n\ of the file that cannot be removed, and that will allow a shredded file\n\ to be recovered later.\n\