Hi Brian, On Aug 23 12:59, Brian Inglis wrote: > On 2017-08-21 03:01, Corinna Vinschen wrote: > > Oh, right! I forget about it *blush* > > Attached patch to support %F and %s in newlib libc time strptime.c strptime_l(). > > In case the issue comes up, if the user wants to support %s as in date(1) with a > preceding @ flag, they just have to include that verbatim before the format as > in "@%s". > > Is there any way to test this newlib function on a Cygwin platform? > I don't have access to a supported platform. > > Similar patch submitted for Cygwin %s. > > -- > Take care. Thanks, Brian Inglis, Calgary, Alberta, Canada > From 8913eb99285915fef945767340b226002a4c9502 Mon Sep 17 00:00:00 2001 > From: Brian Inglis > Date: Tue, 22 Aug 2017 15:06:02 -0600 > Subject: [PATCH] newlib/libc/time/strptime.c(strptime_l) add strptime %F %s > > --- > newlib/libc/time/strptime.c | 35 +++++++++++++++++++++++++++++++++-- > 1 file changed, 33 insertions(+), 2 deletions(-) > > diff --git a/newlib/libc/time/strptime.c b/newlib/libc/time/strptime.c > index c0861eb87..233658406 100644 > --- a/newlib/libc/time/strptime.c > +++ b/newlib/libc/time/strptime.c > @@ -38,6 +38,9 @@ > #include > #include > #include > +#include > +#include > +#include > #include "../locale/setlocale.h" > > #define _ctloc(x) (_CurrentTimeLocale->x) > @@ -230,8 +233,17 @@ strptime_l (const char *buf, const char *format, struct tm *timeptr, > buf = s; > ymd |= SET_MDAY; > break; > + case 'F' : /* %Y-%m-%d - GNU extension */ > + fprintf( stderr, "fmt %s buf %s\n", format, buf); > + s = strptime_l (buf, "%Y-%m-%d", timeptr, locale); > + fprintf( stderr, "fmt %s buf %s s %s\n", format, buf, s); Debugging residue? > + if (s == NULL || s == buf) > + return NULL; > + buf = s; > + ymd |= SET_YMD; > + break; > case 'H' : > - case 'k' : > + case 'k' : /* hour with leading space - GNU extension */ > ret = strtol_l (buf, &s, 10, locale); > if (s == buf) > return NULL; > @@ -239,7 +251,7 @@ strptime_l (const char *buf, const char *format, struct tm *timeptr, > buf = s; > break; > case 'I' : > - case 'l' : > + case 'l' : /* hour with leading space - GNU extension */ > ret = strtol_l (buf, &s, 10, locale); > if (s == buf) > return NULL; > @@ -300,6 +312,25 @@ strptime_l (const char *buf, const char *format, struct tm *timeptr, > return NULL; > buf = s; > break; > + case 's' : { /* seconds since Unix epoch - GNU extension */ Opening brace on next line, please, indented as the closing brace. > + long long sec; > + time_t t; > + int errno_save; > + > + errno_save = errno; > + errno = 0; > + sec = strtoll_l (buf, &s, 10, locale); > + t = sec; > + if (s == buf > + || errno != 0 > + || t != sec > + || localtime_r (&t, timeptr) != timeptr) > + return NULL; > + errno = errno_save; > + buf = s; > + ymd |= SET_YDAY | SET_WDAY | SET_YMD; > + break; > + } > case 'S' : > ret = strtol_l (buf, &s, 10, locale); > if (s == buf) > -- > 2.14.0 Other than the above, looks good. Thanks, Corinna -- Corinna Vinschen Cygwin Maintainer Red Hat