* lib/nstrftime.c (__strftime_internal): Without this change,
‘date +'%0_-+^#1%A'’ would output ‘%A’; with it, it outputs
something like ‘%0_-+^#1Tuesday’ which is easier to debug and to
write wrappers for (such as the nstrftime/fprintftime usage in GNU
‘date’).
+2021-12-28 Paul Eggert <eggert@cs.ucla.edu>
+
+ nstrftime: improve handling of invalid formats
+ * lib/nstrftime.c (__strftime_internal): Without this change,
+ ‘date +'%0_-+^#1%A'’ would output ‘%A’; with it, it outputs
+ something like ‘%0_-+^#1Tuesday’ which is easier to debug and to
+ write wrappers for (such as the nstrftime/fprintftime usage in GNU
+ ‘date’).
+
2021-12-28 Bruno Haible <bruno@clisp.org>
unilbrk: Update handling of regional indicators for Unicode 10.0.0.
#endif /* ! DO_MULTIBYTE */
+ char const *percent = f;
+
/* Check for flags that can modify a format. */
while (1)
{
while (0)
case L_('%'):
- if (modifier != 0)
- goto bad_format;
+ if (f - 1 != percent)
+ goto bad_percent;
add1 (*f);
break;
}
case L_('\0'): /* GNU extension: % at end of format. */
+ bad_percent:
--f;
FALLTHROUGH;
default:
since this is most likely the right thing to do if a
multibyte string has been misparsed. */
bad_format:
- {
- int flen;
- for (flen = 1; f[1 - flen] != L_('%'); flen++)
- continue;
- cpy (flen, &f[1 - flen]);
- }
+ cpy (f - percent + 1, percent);
break;
}
}