This is the mail archive of the newlib@sources.redhat.com mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

bug in newlib strftime


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Newlib has several POSIX compliance issues in strftime().  See
http://www.opengroup.org/onlinepubs/009695399/functions/strftime.html for
the mandated behavior.  Since newlib does not support any locales other
than "C", strftime() should be fixed to follow the mandated behavior.  The
broken behavior of strftime() leads to failures in the coreutils program
date on cygwin and any other newlib-based platform.

Should coreutils add a configure-time check that looks for broken
strftime(), or should I just wait for a new version of newlib that fixes
the compliance issues?

In newlib, strftime() treats "%r" as "", although Posix requires it to be
a synonym for "%I:%M:%S %p" in the POSIX/C locale.  Likewise, newlib
treats "%x" as "%a %b %d %Y", although Posix mandates "%m/%d/%y".
Finally, newlib does not support the %E or %O modifiers, even though Posix
mandates that they be ignored for the conversion specifiers that support
them (in other words, "%Ey", "%Oy", and "%y" are all required and should
behave identically in the "C" locale, but since "%Ea" is not required, its
behavior is undefined).  In the sample program below, the two output lines
should be identical.

$ cat foo.c
#include <time.h>
#include <stdlib.h>
#include <locale.h>

#define MAX_LEN 80

int main()
{
  char str[MAX_LEN];
  struct tm t;
  setlocale(LC_ALL, "C");
  memset(&t, 0, sizeof(t));
  t.tm_sec = 30;
  t.tm_min = 15;
  t.tm_hour = 1; /* 1:15:30 AM */
  t.tm_mday = 18; /* 18th */
  t.tm_mon = 0; /* Jan */
  t.tm_year = 105; /* 2005 */
  t.tm_wday = 2; /* Tue */
  strftime(str, MAX_LEN, "%r#%x#%Ey#%Oy", &t);
  puts(str);
  strftime(str, MAX_LEN, "%I:%M:%S %p#%m/%d/%y#%y#%y", &t);
  puts(str);
  return 0;
}
$ gcc -o foo foo.c
$ ./foo
#Tue Jan 18 2005#y#y
01:15:30 AM#01/18/05#05#05

- --
Life is short - so eat dessert first!

Eric Blake             ebb9@byu.net
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.0 (Cygwin)
Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org

iD8DBQFB7mKr84KuGfSFAYARAjNdAKCjNw/IWf0ZxBMvHsAo6dm/T2gwogCfWjyK
4H/w5oTgp9MOZ/nZSTUYp5A=
=OA+F
-----END PGP SIGNATURE-----


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]