about summary refs log tree commit diff
path: root/time/strftime.c
diff options
context:
space:
mode:
Diffstat (limited to 'time/strftime.c')
-rw-r--r--time/strftime.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/time/strftime.c b/time/strftime.c
index 963e9e4e4d..4afcdd20fb 100644
--- a/time/strftime.c
+++ b/time/strftime.c
@@ -229,6 +229,11 @@ static const char spaces[16] = "                ";
 # define TOUPPER(Ch) (islower (Ch) ? toupper (Ch) : (Ch))
 # define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch))
 #endif
+/* We don't use `isdigit' here since the locale dependent
+   interpretation is not what we want here.  We only need to accept
+   the arabic digits in the ASCII range.  One day there is perhaps a
+   more reliable way to accept other sets of digits.  */
+#define ISDIGIT(Ch) ((unsigned int) (Ch) - '0' <= 9)
 
 static char *memcpy_lowcase __P ((char *dest, const char *src, size_t len));
 
@@ -487,17 +492,19 @@ strftime (s, maxsize, format, tp)
 
 #endif /* ! DO_MULTIBYTE */
 
-      /* Check for flags that can modify a number format.  */
+      /* Check for flags that can modify a format.  */
       while (1)
 	{
 	  switch (*++f)
 	    {
+	      /* This influences the number formats.  */
 	    case '_':
 	    case '-':
 	    case '0':
 	      pad = *f;
 	      continue;
 
+	      /* This changes textual output.  */
 	    case '^':
 	      to_uppcase = 1;
 	      continue;
@@ -510,15 +517,16 @@ strftime (s, maxsize, format, tp)
 	}
 
       /* As a GNU extension we allow to specify the field width.  */
-      if (isdigit (*f))
+      if (ISDIGIT (*f))
 	{
 	  width = 0;
 	  do
 	    {
 	      width *= 10;
 	      width += *f - '0';
+	      ++f;
 	    }
-	  while (isdigit (*++f));
+	  while (ISDIGIT (*f));
 	}
 
       /* Check for modifiers.  */