[PATCH] winsup/cygwin/libc/strptime.cc(__strptime) add strptime %s
Brian Inglis
Brian.Inglis@SystematicSw.ab.ca
Tue Aug 29 17:57:00 GMT 2017
On 2017-08-24 03:25, Corinna Vinschen wrote:
> On Aug 23 12:51, Brian Inglis wrote:
>> Attached patch to support %s in Cygwin winsup libc strptime.cc __strptime().
>> This also enables support for %s in dateutils package strptime(1).
>> 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".
>> Testing revealed a separate issue with %F format which I will follow up on in a
>> different thread.
>> Similar patch coming for newlib.
> Funny enough, in other places in Cygwin we call this temp variable
> "save_errno" :)
> Alternatively, since you're in C++ code, you can use the save_errno
> class, like this:
> {
> save_errno save;
>
> [do your thing]
> }
> The destructor of save_errno will restore errno.
> Since the code as such is fine, it's your choice if you want to stick
> to it or use one of the above. Just give the word.
Changed to use that.
--
Take care. Thanks, Brian Inglis, Calgary, Alberta, Canada
-------------- next part --------------
From 16855e2e241673e5cb98368a696114e38f62a4dc Mon Sep 17 00:00:00 2001
From: Brian Inglis <Brian.Inglis@SystematicSW.ab.ca>
Date: Thu, 24 Aug 2017 13:24:28 -0600
Subject: [PATCH] winsup/cygwin/libc/strptime.cc(__strptime) add %s support to
strptime
---
winsup/cygwin/libc/strptime.cc | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/winsup/cygwin/libc/strptime.cc b/winsup/cygwin/libc/strptime.cc
index 62dca6e5e..7c6cc2024 100644
--- a/winsup/cygwin/libc/strptime.cc
+++ b/winsup/cygwin/libc/strptime.cc
@@ -573,6 +573,26 @@ literal:
bp = conv_num(bp, &tm->tm_sec, 0, 61, ALT_DIGITS);
continue;
+ case 's' : /* The seconds since Unix epoch - GNU extension */
+ {
+ long long sec;
+ time_t t;
+ char *end;
+ save_errno save;
+
+ LEGAL_ALT(0);
+ sec = strtoll_l ((char *)bp, &end, 10, locale);
+ t = sec;
+ if (end == (char *)bp
+ || errno != 0
+ || t != sec
+ || localtime_r (&t, tm) != tm)
+ return NULL;
+ bp = (const unsigned char *)end;
+ ymd |= SET_YDAY | SET_WDAY | SET_YMD;
+ break;
+ }
+
case 'U': /* The week of year, beginning on sunday. */
case 'W': /* The week of year, beginning on monday. */
/*
--
2.14.1
More information about the Cygwin-patches
mailing list