In bash 5.3, the newly added examples/loadables/strptime.c uses the
%ld format specifier to printf() time_t values.  At least on OpenBSD
time_t is long long, which causes a type mismatch between format
specifier and argument.

The same sort of problem in finfo.c was fixed for 5.3 by passing the
value through an intmax_t variable for printing with %jd.  The patch
below uses the same approach.

Index: examples/loadables/strptime.c
--- examples/loadables/strptime.c.orig
+++ examples/loadables/strptime.c
@@ -188,7 +188,8 @@ strptime_builtin (WORD_LIST *list)
 {
   char *s;
   struct tm t, *tm;
-  time_t now, secs;
+  time_t now;
+  intmax_t secs;
   char *datestr, *format;
   int i, opt;
 
@@ -227,7 +228,7 @@ strptime_builtin (WORD_LIST *list)
       if (STREQ (datestr, date_time_modifiers[i].shorthand))
        {
          secs = now + date_time_modifiers[i].incr;
-         printf ("%ld\n", secs);    
+         printf ("%jd\n", secs);    
          return (EXECUTION_SUCCESS);
        }
     }
@@ -265,7 +266,7 @@ strptime_builtin (WORD_LIST *list)
   if (s && *s)
     builtin_warning("%s: not completely converted (%s)", datestr, s);
 
-  printf ("%ld\n", secs);    
+  printf ("%jd\n", secs);    
   return (EXECUTION_SUCCESS);
 }
 
-- 
Christian "naddy" Weisgerber                          na...@mips.inka.de

Reply via email to