bug-coreutils
[Top][All Lists]
Advanced

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

[PATCH] avoid warnings about initialization of automatic aggregates


From: Jim Meyering
Subject: [PATCH] avoid warnings about initialization of automatic aggregates
Date: Mon, 01 Dec 2008 21:21:13 +0100

Finally getting serious about avoiding warnings,
I've just eliminated this batch:

>From c58b5daa337b16416be50adfeb3e99e3c009c891 Mon Sep 17 00:00:00 2001
From: Jim Meyering <address@hidden>
Date: Sun, 30 Nov 2008 22:37:42 +0100
Subject: [PATCH] avoid warnings about initialization of automatic aggregates

* src/system.h (DZA_CONCAT0, DZA_CONCAT): New macros.
(DECLARE_ZEROED_AGGREGATE): New macro.
* src/ls.c (quote_name): Use it.
* src/pathchk.c (portable_chars_only): Use it.
* src/shred.c (main): Use it.
* src/stty.c (main): Use it.
* src/wc.c (SUPPORT_OLD_MBRTOWC): Use it.
---
 src/ls.c      |    2 +-
 src/pathchk.c |    2 +-
 src/shred.c   |    2 +-
 src/stty.c    |    4 ++--
 src/system.h  |   13 +++++++++++++
 src/wc.c      |    2 +-
 6 files changed, 19 insertions(+), 6 deletions(-)

diff --git a/src/ls.c b/src/ls.c
index 7619ceb..0081865 100644
--- a/src/ls.c
+++ b/src/ls.c
@@ -3721,7 +3721,7 @@ quote_name (FILE *out, const char *name, struct 
quoting_options const *options,
                     reach its end, replacing each non-printable multibyte
                     character with a single question mark.  */
                  {
-                   mbstate_t mbstate = { 0, };
+                   DECLARE_ZEROED_AGGREGATE (mbstate_t, mbstate);
                    do
                      {
                        wchar_t wc;
diff --git a/src/pathchk.c b/src/pathchk.c
index 48001fc..3b2bd46 100644
--- a/src/pathchk.c
+++ b/src/pathchk.c
@@ -198,7 +198,7 @@ portable_chars_only (char const *file, size_t filelen)

   if (*invalid)
     {
-      mbstate_t mbstate = { 0, };
+      DECLARE_ZEROED_AGGREGATE (mbstate_t, mbstate);
       size_t charlen = mbrlen (invalid, filelen - validlen, &mbstate);
       error (0, 0,
             _("nonportable character %s in file name %s"),
diff --git a/src/shred.c b/src/shred.c
index 6b7d901..1e7bffb 100644
--- a/src/shred.c
+++ b/src/shred.c
@@ -1099,7 +1099,7 @@ int
 main (int argc, char **argv)
 {
   bool ok = true;
-  struct Options flags = { 0, };
+  DECLARE_ZEROED_AGGREGATE (struct Options, flags);
   char **file;
   int n_files;
   int c;
diff --git a/src/stty.c b/src/stty.c
index 8eeaa2f..eb4f30f 100644
--- a/src/stty.c
+++ b/src/stty.c
@@ -726,7 +726,7 @@ main (int argc, char **argv)
 {
   /* Initialize to all zeroes so there is no risk memcmp will report a
      spurious difference in an uninitialized portion of the structure.  */
-  struct termios mode = { 0, };
+  DECLARE_ZEROED_AGGREGATE (struct termios, mode);

   enum output_type output_type;
   int optc;
@@ -999,7 +999,7 @@ main (int argc, char **argv)
     {
       /* Initialize to all zeroes so there is no risk memcmp will report a
         spurious difference in an uninitialized portion of the structure.  */
-      struct termios new_mode = { 0, };
+      DECLARE_ZEROED_AGGREGATE (struct termios, new_mode);

       if (tcsetattr (STDIN_FILENO, TCSADRAIN, &mode))
        error (EXIT_FAILURE, errno, "%s", device_name);
diff --git a/src/system.h b/src/system.h
index d51caed..21182a4 100644
--- a/src/system.h
+++ b/src/system.h
@@ -513,6 +513,19 @@ enum
 # define IF_LINT(Code) /* empty */
 #endif

+/* With -Dlint, avoid warnings from gcc about code like mbstate_t m = {0,};
+   by wasting space on a static variable of the same type, that is thus
+   guaranteed to be initialized to 0, and use that on the RHS.  */
+#define DZA_CONCAT0(x,y) x ## y
+#define DZA_CONCAT(x,y) DZA_CONCAT0 (x, y)
+#ifdef lint
+# define DECLARE_ZEROED_AGGREGATE(Type, Var) \
+   static Type DZA_CONCAT (s0_, __LINE__); Type Var = DZA_CONCAT (s0_, 
__LINE__)
+#else
+# define DECLARE_ZEROED_AGGREGATE(Type, Var) \
+  Type Var = { 0, }
+#endif
+
 #ifndef __attribute__
 # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8)
 #  define __attribute__(x) /* empty */
diff --git a/src/wc.c b/src/wc.c
index 8cfd974..ad25ed8 100644
--- a/src/wc.c
+++ b/src/wc.c
@@ -275,7 +275,7 @@ wc (int fd, char const *file_x, struct fstatus *fstatus)
     {
       bool in_word = false;
       uintmax_t linepos = 0;
-      mbstate_t state = { 0, };
+      DECLARE_ZEROED_AGGREGATE (mbstate_t, state);
       bool in_shift = false;
 # if SUPPORT_OLD_MBRTOWC
       /* Back-up the state before each multibyte character conversion and
--
1.6.0.4.1101.g642f8




reply via email to

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