From: Bruno Haible Date: Mon, 27 May 2024 21:29:36 +0000 (+0200) Subject: nstrftime: Make %r work on macOS, FreeBSD, native Windows. X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=d266ddc2d339998130e956e442ef9745a9c9b45d;p=gnulib.git nstrftime: Make %r work on macOS, FreeBSD, native Windows. * doc/posix-functions/strftime.texi: Mention the %r problem. * lib/nstrftime.c (__strftime_internal): On macOS, FreeBSD, and native Windows, for %r, use the English AM/PM format. --- diff --git a/ChangeLog b/ChangeLog index bc9c4e8901..21144a3dff 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2024-05-27 Bruno Haible + + nstrftime: Make %r work on macOS, FreeBSD, native Windows. + * doc/posix-functions/strftime.texi: Mention the %r problem. + * lib/nstrftime.c (__strftime_internal): On macOS, FreeBSD, and native + Windows, for %r, use the English AM/PM format. + 2024-05-27 Bruno Haible nstrftime: Make %h work on native Windows. diff --git a/doc/posix-functions/strftime.texi b/doc/posix-functions/strftime.texi index b0bd2b536e..1455fcdc9c 100644 --- a/doc/posix-functions/strftime.texi +++ b/doc/posix-functions/strftime.texi @@ -23,6 +23,9 @@ mingw, MSVC. The %h specifier produces empty output on some platforms: mingw, MSVC. @item +The %r specifier produces empty output on some platforms: +mingw, MSVC. +@item The Windows C runtime library (which is used by MinGW) does not support the %e specifier (and possibly the other more recent SUS specifiers too, i.e., %C, %D, %h, %n, %r, %R, %t, and %T). diff --git a/lib/nstrftime.c b/lib/nstrftime.c index ed9118ab1c..bb0ac99cb2 100644 --- a/lib/nstrftime.c +++ b/lib/nstrftime.c @@ -1181,6 +1181,11 @@ __strftime_internal (STREAM_OR_CHAR_T *s, STRFTIME_ARG (size_t maxsize) == L_('\0')) subfmt = L_("%I:%M:%S %p"); goto subformat; +#elif (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || (defined _WIN32 && !defined __CYGWIN__) + /* macOS, FreeBSD, native Windows strftime() may produce empty output + for "%r". */ + subfmt = L_("%I:%M:%S %p"); + goto subformat; #else goto underlying_strftime; #endif