summaryrefslogtreecommitdiffstats
path: root/lib/libc/stdtime
diff options
context:
space:
mode:
authorpfg <pfg@FreeBSD.org>2014-06-30 14:52:40 +0000
committerpfg <pfg@FreeBSD.org>2014-06-30 14:52:40 +0000
commit99efb6c39e6204bec3584da7a50b87e2c1e02416 (patch)
treef5a77d27d1507f299ad5c6ff430e7fe745f38677 /lib/libc/stdtime
parent618ac05759258204b881c19e2ddbe3955e5a1140 (diff)
downloadFreeBSD-src-99efb6c39e6204bec3584da7a50b87e2c1e02416.zip
FreeBSD-src-99efb6c39e6204bec3584da7a50b87e2c1e02416.tar.gz
MFC r267627:
strptime: add support for %t and %n Posix strptime() requires support for %t and %n, which were added to the illumos port. Curiously we were skipping white spaces by default in most other cases making %t meaningless. We now skip spaces in the case of the %e specifier as strftime(3) explicitly adds a space for the single digit case. Reference: http://pubs.opengroup.org/onlinepubs/009695399/functions/strptime.html PR: 173421 Obtained from: Illumos (Rev. a11c1571b6942161b0186d0588609448066892c2)
Diffstat (limited to 'lib/libc/stdtime')
-rw-r--r--lib/libc/stdtime/strptime.c58
1 files changed, 20 insertions, 38 deletions
diff --git a/lib/libc/stdtime/strptime.c b/lib/libc/stdtime/strptime.c
index 4c0ab26..2333ab4 100644
--- a/lib/libc/stdtime/strptime.c
+++ b/lib/libc/stdtime/strptime.c
@@ -1,4 +1,6 @@
/*-
+ * Copyright (c) 2014 Gary Mills
+ * Copyright 2011, Nexenta Systems, Inc. All rights reserved.
* Copyright (c) 1994 Powerdog Industries. All rights reserved.
*
* Copyright (c) 2011 The FreeBSD Foundation
@@ -224,11 +226,6 @@ label:
tm->tm_sec = i;
}
- if (*buf != 0 &&
- isspace_l((unsigned char)*buf, locale))
- while (*ptr != 0 &&
- !isspace_l((unsigned char)*ptr, locale))
- ptr++;
break;
case 'H':
@@ -261,11 +258,6 @@ label:
tm->tm_hour = i;
- if (*buf != 0 &&
- isspace_l((unsigned char)*buf, locale))
- while (*ptr != 0 &&
- !isspace_l((unsigned char)*ptr, locale))
- ptr++;
break;
case 'p':
@@ -335,11 +327,6 @@ label:
if (i > 53)
return (NULL);
- if (*buf != 0 &&
- isspace_l((unsigned char)*buf, locale))
- while (*ptr != 0 &&
- !isspace_l((unsigned char)*ptr, locale))
- ptr++;
break;
case 'w':
@@ -352,18 +339,22 @@ label:
tm->tm_wday = i;
- if (*buf != 0 &&
- isspace_l((unsigned char)*buf, locale))
- while (*ptr != 0 &&
- !isspace_l((unsigned char)*ptr, locale))
- ptr++;
break;
- case 'd':
case 'e':
/*
- * The %e specifier is explicitly documented as not
- * being zero-padded but there is no harm in allowing
+ * With %e format, our strftime(3) adds a blank space
+ * before single digits.
+ */
+ if (*buf != 0 &&
+ isspace_l((unsigned char)*buf, locale))
+ buf++;
+ /* FALLTHROUGH */
+ case 'd':
+ /*
+ * The %e specifier was once explicitly documented as
+ * not being zero-padded but was later changed to
+ * equivalent to %d. There is no harm in allowing
* such padding.
*
* XXX The %e specifier may gobble one too many
@@ -384,11 +375,6 @@ label:
tm->tm_mday = i;
- if (*buf != 0 &&
- isspace_l((unsigned char)*buf, locale))
- while (*ptr != 0 &&
- !isspace_l((unsigned char)*ptr, locale))
- ptr++;
break;
case 'B':
@@ -445,11 +431,6 @@ label:
tm->tm_mon = i - 1;
- if (*buf != 0 &&
- isspace_l((unsigned char)*buf, locale))
- while (*ptr != 0 &&
- !isspace_l((unsigned char)*ptr, locale))
- ptr++;
break;
case 's':
@@ -498,11 +479,6 @@ label:
tm->tm_year = i;
- if (*buf != 0 &&
- isspace_l((unsigned char)*buf, locale))
- while (*ptr != 0 &&
- !isspace_l((unsigned char)*ptr, locale))
- ptr++;
break;
case 'Z':
@@ -559,6 +535,12 @@ label:
*GMTp = 1;
}
break;
+
+ case 'n':
+ case 't':
+ while (isspace_l((unsigned char)*buf, locale))
+ buf++;
+ break;
}
}
return ((char *)buf);
OpenPOWER on IntegriCloud