svn commit: r268043 - stable/10/lib/libc/stdtime

Pedro F. Giffuni pfg at FreeBSD.org
Mon Jun 30 14:52:41 UTC 2014


Author: pfg
Date: Mon Jun 30 14:52:40 2014
New Revision: 268043
URL: http://svnweb.freebsd.org/changeset/base/268043

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/10/lib/libc/stdtime/strptime.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/lib/libc/stdtime/strptime.c
==============================================================================
--- stable/10/lib/libc/stdtime/strptime.c	Mon Jun 30 14:15:16 2014	(r268042)
+++ stable/10/lib/libc/stdtime/strptime.c	Mon Jun 30 14:52:40 2014	(r268043)
@@ -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-all mailing list