bug-coreutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: coreutils-6.5: yet another C89 problem


From: Paul Eggert
Subject: Re: coreutils-6.5: yet another C89 problem
Date: Sun, 26 Nov 2006 23:48:16 -0800
User-agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/21.4 (gnu/linux)

Jim Meyering <address@hidden> 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  <address@hidden>

        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\




reply via email to

[Prev in Thread] Current Thread [Next in Thread]