This is the mail archive of the
newlib@sourceware.org
mailing list for the newlib project.
Re: Cygwin strptime() is missing "%s" which strftime() has
On 07/25/2017 12:47 PM, Brian Inglis wrote:
Don't we need to save and zero errno to distinguish a new error, and restore if
it stays zero, rather than just pick up the current value, and assume if it
is/was ERANGE it's bad?
Yes, it needs to be set to 0 before calling strtol_l.
POSIX does not define any errors for strptime(). Therefore by general
rule it is permitted for it to set errno to be non-0. However, it is just as
easy to always restore it instead of checking for non-0 (why add the check?).
Always restoring also indirectly conveys the intent that strptime() is not
required to set errno, that no errors are defined for it.
On 07/25/2017 05:19 AM, Corinna Vinschen wrote:
Neither %F nor %s are defined for strptime() in POSIX, so they should not be
expected to be portable. (See
http://pubs.opengroup.org/onlinepubs/9699919799/functions/strptime.html) For
that matter, %s is not defined for strftime(), either in POSIX or C99, even
though it is in Newlib. If either of these are added, they should have
gates (or at the very least, comments) to show they are extensions. (They
appear to be GLIBC extensions, based on comments in the man page from a
GLIBC-based system.)
Right, in theory. Just a bit late in the game I guess. We already
support %u, %V, %Z unconditionally. I checked the FreeBSD code and
they don't even bother to add comments ¯\_(ツ)_/¯
Not having done it right earlier is not a good reason to not do it better going
forward. That said, OK, no compile-time gate since the other things are
hard-coded, but let's at least have comments that they are extensions:
+ case 'F' : /* %Y-%m-%d (GNU extension) */
+ case 's' : { /* (GNU extension) */
Craig