findutils-patches
[Top][All Lists]
Advanced

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

[Findutils-patches] [PATCH 4/5] maint: avoid non-portable C99 printf siz


From: Bernhard Voelker
Subject: [Findutils-patches] [PATCH 4/5] maint: avoid non-portable C99 printf size specifiers %z and %j
Date: Tue, 18 Dec 2018 01:12:14 +0100

* cfg.mk (sc_prohibit-c99-printf-format): Add SC rule.
* find/parser.c (parse_time): Change %ju to PRIuMAX.
(insert_num): Likewise.
* xargs/xargs.c (xargs_do_exec): Change %zu to PRIuMAX.
---
 cfg.mk        | 12 ++++++++++++
 find/parser.c |  6 +++---
 xargs/xargs.c |  2 +-
 3 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/cfg.mk b/cfg.mk
index b251270e..dcabb6b7 100644
--- a/cfg.mk
+++ b/cfg.mk
@@ -102,6 +102,18 @@ sc_die_EXIT_FAILURE:
               exit 1; }  \
          || :
 
+# Disallow the C99 printf size specifiers %z and %j as they're not portable.
+# The gnulib printf replacement does support them, however the printf
+# replacement is not currently explicitly depended on by the gnulib error()
+# module for example.  Also we use fprintf() in a few places to output simple
+# formats but don't use the gnulib module as it is seen as overkill at present.
+# We'd have to adjust the above gnulib items before disabling this.
+sc_prohibit-c99-printf-format:
+       @cd $(srcdir) \
+         && GIT_PAGER= git grep -n '%[0*]*[jz][udx]' -- "*/*.c" \
+         && { echo '$(ME): Use PRI*MAX instead of %j or %z' 1>&2; exit 1; } \
+         || :
+
 # Exempt the contents of any usage function from the following.
 _continued_string_col_1 = \
 s/^usage .*?\n}//ms;/\\\n\w/ and print ("$$ARGV\n"),$$e=1;END{$$e||=0;exit $$e}
diff --git a/find/parser.c b/find/parser.c
index 64d8931f..22b54a33 100644
--- a/find/parser.c
+++ b/find/parser.c
@@ -3254,13 +3254,13 @@ parse_time (const struct parser_table* entry, char 
*argv[], int *arg_ptr)
               (tval.kind == COMP_GT) ? " >" :
               ((tval.kind == COMP_LT) ? " <" : ((tval.kind == COMP_EQ) ? ">=" 
: " ?")));
       t = our_pred->args.reftime.ts.tv_sec;
-      fprintf (stderr, "%ju %s",
+      fprintf (stderr, "%"PRIuMAX" %s",
               (uintmax_t) our_pred->args.reftime.ts.tv_sec,
               ctime (&t));
       if (tval.kind == COMP_EQ)
        {
          t = our_pred->args.reftime.ts.tv_sec + DAYSECS;
-         fprintf (stderr, "                 <  %ju %s",
+         fprintf (stderr, "                 <  %"PRIuMAX" %s",
                   (uintmax_t) t, ctime (&t));
        }
     }
@@ -3364,7 +3364,7 @@ insert_num (char **argv, int *arg_ptr, const struct 
parser_table *entry)
                     ((c_type == COMP_LT) ? "lt" : ((c_type == COMP_EQ) ? "eq" 
: "?")),
                     (c_type == COMP_GT) ? " >" :
                     ((c_type == COMP_LT) ? " <" : ((c_type == COMP_EQ) ? " =" 
: " ?")));
-           fprintf (stderr, "%ju\n", our_pred->args.numinfo.l_val);
+           fprintf (stderr, "%"PRIuMAX"\n", our_pred->args.numinfo.l_val);
          }
        return our_pred;
       }
diff --git a/xargs/xargs.c b/xargs/xargs.c
index 46307137..3bb660c6 100644
--- a/xargs/xargs.c
+++ b/xargs/xargs.c
@@ -1380,7 +1380,7 @@ xargs_do_exec (struct buildcmd_control *ctl, void 
*usercontext, int argc, char *
        default:
          {
            die (EXIT_FAILURE, errno,
-                _("read returned unexpected value %zu; "
+                _("read returned unexpected value %"PRIuMAX"; "
                   "this is probably a bug, please report it"), r);
          }
        } /* switch on bytes read */
-- 
2.19.2




reply via email to

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