svn commit: r268574 - stable/9/lib/libc/stdtime
Pedro F. Giffuni
pfg at FreeBSD.org
Sat Jul 12 18:44:48 UTC 2014
Author: pfg
Date: Sat Jul 12 18:44:47 2014
New Revision: 268574
URL: http://svnweb.freebsd.org/changeset/base/268574
Log:
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)
Modified:
stable/9/lib/libc/stdtime/strptime.c
Directory Properties:
stable/9/lib/libc/ (props changed)
stable/9/lib/libc/stdtime/ (props changed)
Modified: stable/9/lib/libc/stdtime/strptime.c
==============================================================================
--- stable/9/lib/libc/stdtime/strptime.c Sat Jul 12 18:30:35 2014 (r268573)
+++ stable/9/lib/libc/stdtime/strptime.c Sat Jul 12 18:44:47 2014 (r268574)
@@ -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);
More information about the svn-src-stable-9
mailing list