/* this is the Autoconf test program that GNU programs use to detect if strftime is working. Apart from missing formats (which probably can be ignored) it seems that the results from "%c" and "%C" are wrong. */ #include #include #include #include static int compare (const char *fmt, const struct tm *tm, const char *expected) { char buf[99]; strftime (buf, 99, fmt, tm); if (strcmp (buf, expected)) { #if 1 printf ("fmt: \"%s\", expected \"%s\", got \"%s\"\n", fmt, expected, buf); #endif return 1; } return 0; } int main (void) { int n_fail = 0; struct tm *tm; time_t t = 738367; /* Fri Jan 9 13:06:07 1970 */ tm = gmtime (&t); /* This is necessary to make strftime give consistent zone strings and e.g., seconds since the epoch (%s). */ putenv ("TZ=GMT0"); #undef CMP #define CMP(Fmt, Expected) n_fail += compare ((Fmt), tm, (Expected)) CMP ("%-m", "1"); /* GNU */ CMP ("%A", "Friday"); CMP ("%^A", "FRIDAY"); /* The ^ is a GNU extension. */ CMP ("%B", "January"); CMP ("%^B", "JANUARY"); CMP ("%C", "19"); /* POSIX.2 */ CMP ("%D", "01/09/70"); /* POSIX.2 */ CMP ("%G", "1970"); /* GNU */ CMP ("%H", "13"); CMP ("%I", "01"); CMP ("%M", "06"); CMP ("%M", "06"); CMP ("%R", "13:06"); /* POSIX.2 */ CMP ("%S", "07"); CMP ("%T", "13:06:07"); /* POSIX.2 */ CMP ("%U", "01"); CMP ("%V", "02"); CMP ("%W", "01"); CMP ("%X", "13:06:07"); CMP ("%Y", "1970"); CMP ("%Z", "GMT"); CMP ("%_m", " 1"); /* GNU */ CMP ("%a", "Fri"); CMP ("%^a", "FRI"); CMP ("%b", "Jan"); CMP ("%^b", "JAN"); CMP ("%c", "Fri Jan 9 13:06:07 1970"); CMP ("%^c", "FRI JAN 9 13:06:07 1970"); CMP ("%d", "09"); CMP ("%e", " 9"); /* POSIX.2 */ CMP ("%g", "70"); /* GNU */ CMP ("%h", "Jan"); /* POSIX.2 */ CMP ("%^h", "JAN"); CMP ("%j", "009"); CMP ("%k", "13"); /* GNU */ CMP ("%l", " 1"); /* GNU */ CMP ("%m", "01"); CMP ("%n", "\n"); /* POSIX.2 */ CMP ("%p", "PM"); CMP ("%r", "01:06:07 PM"); /* POSIX.2 */ CMP ("%s", "738367"); /* GNU */ CMP ("%t", "\t"); /* POSIX.2 */ CMP ("%u", "5"); /* POSIX.2 */ CMP ("%w", "5"); CMP ("%x", "01/09/70"); CMP ("%y", "70"); CMP ("%z", "+0000"); /* GNU */ exit (n_fail ? 1 : 0); }