Loading...
--- Libc/Libc-763.13/stdtime/FreeBSD/strptime.c.patch
+++ Libc/Libc-594.9.4/stdtime/FreeBSD/strptime.c.patch
@@ -1,8 +1,8 @@
---- strptime.c.orig 2009-11-14 13:55:44.000000000 -0800
-+++ strptime.c 2009-11-18 16:56:27.000000000 -0800
-@@ -61,41 +61,55 @@ static char sccsid[] __unused = "@(#)str
+--- strptime.c.orig 2009-03-04 16:49:20.000000000 -0800
++++ strptime.c 2009-05-13 16:39:36.000000000 -0700
+@@ -61,41 +61,56 @@ static char sccsid[] __unused = "@(#)str
#endif /* not lint */
- __FBSDID("$FreeBSD: src/lib/libc/stdtime/strptime.c,v 1.37 2009/09/02 04:56:30 ache Exp $");
+ __FBSDID("$FreeBSD: src/lib/libc/stdtime/strptime.c,v 1.35 2003/11/17 04:19:15 nectar Exp $");
+#include "xlocale_private.h"
+
@@ -21,6 +21,7 @@
#include "timelocal.h"
-static char * _strptime(const char *, const char *, struct tm *, int *);
++static char * _strptime(const char *, const char *, struct tm *, int *, locale_t) __DARWIN_ALIAS(_strptime);
+time_t _mktime(struct tm *, const char *);
#define asizeof(a) (sizeof (a) / sizeof ((a)[0]))
@@ -50,7 +51,7 @@
+ while (isspace_l((unsigned char)*ptr, loc)) {
+ ptr++;
+ }
-+ return ((*ptr)==0) ? (char *)fmt : 0; /* trailing whitespace is ok */
++ return ((*ptr)==0) ? fmt : 0; /* trailing whitespace is ok */
+ }
c = *ptr++;
@@ -63,7 +64,7 @@
buf++;
else if (c != *buf++)
return 0;
-@@ -114,18 +128,18 @@ label:
+@@ -114,18 +129,18 @@ label:
break;
case '+':
@@ -85,7 +86,7 @@
i *= 10;
i += *buf - '0';
len--;
-@@ -133,17 +147,21 @@ label:
+@@ -133,17 +148,21 @@ label:
if (i < 19)
return 0;
@@ -109,7 +110,7 @@
if (buf == 0)
return 0;
break;
-@@ -161,47 +179,55 @@ label:
+@@ -161,47 +180,55 @@ label:
goto label;
case 'F':
@@ -173,7 +174,7 @@
i *= 10;
i += *buf - '0';
len--;
-@@ -209,19 +235,19 @@ label:
+@@ -209,19 +236,19 @@ label:
if (i < 1 || i > 366)
return 0;
@@ -197,7 +198,7 @@
i *= 10;
i += *buf - '0';
len--;
-@@ -237,8 +263,8 @@ label:
+@@ -237,8 +264,8 @@ label:
tm->tm_sec = i;
}
@@ -208,7 +209,7 @@
ptr++;
break;
-@@ -254,11 +280,11 @@ label:
+@@ -254,11 +281,11 @@ label:
* XXX The %l specifier may gobble one too many
* digits if used incorrectly.
*/
@@ -222,7 +223,7 @@
i *= 10;
i += *buf - '0';
len--;
-@@ -271,8 +297,8 @@ label:
+@@ -271,8 +298,8 @@ label:
tm->tm_hour = i;
@@ -233,7 +234,7 @@
ptr++;
break;
-@@ -282,7 +308,7 @@ label:
+@@ -282,7 +309,7 @@ label:
* specifiers.
*/
len = strlen(tptr->am);
@@ -242,7 +243,7 @@
if (tm->tm_hour > 12)
return 0;
if (tm->tm_hour == 12)
-@@ -292,7 +318,7 @@ label:
+@@ -292,7 +319,7 @@ label:
}
len = strlen(tptr->pm);
@@ -251,7 +252,7 @@
if (tm->tm_hour > 12)
return 0;
if (tm->tm_hour != 12)
-@@ -307,34 +333,28 @@ label:
+@@ -307,34 +334,28 @@ label:
case 'a':
for (i = 0; i < asizeof(tptr->weekday); i++) {
len = strlen(tptr->weekday[i]);
@@ -295,7 +296,7 @@
i *= 10;
i += *buf - '0';
len--;
-@@ -342,23 +362,46 @@ label:
+@@ -342,23 +363,46 @@ label:
if (i > 53)
return 0;
@@ -352,7 +353,7 @@
ptr++;
break;
-@@ -372,11 +415,18 @@ label:
+@@ -372,11 +416,18 @@ label:
* XXX The %e specifier may gobble one too many
* digits if used incorrectly.
*/
@@ -374,7 +375,7 @@
i *= 10;
i += *buf - '0';
len--;
-@@ -386,8 +436,8 @@ label:
+@@ -386,8 +437,8 @@ label:
tm->tm_mday = i;
@@ -385,7 +386,7 @@
ptr++;
break;
-@@ -398,19 +448,19 @@ label:
+@@ -398,19 +449,19 @@ label:
if (Oalternative) {
if (c == 'B') {
len = strlen(tptr->alt_month[i]);
@@ -411,7 +412,7 @@
break;
}
}
-@@ -422,11 +472,11 @@ label:
+@@ -422,11 +473,11 @@ label:
break;
case 'm':
@@ -425,7 +426,7 @@
i *= 10;
i += *buf - '0';
len--;
-@@ -436,8 +486,8 @@ label:
+@@ -436,8 +487,8 @@ label:
tm->tm_mon = i - 1;
@@ -436,7 +437,7 @@
ptr++;
break;
-@@ -450,7 +500,7 @@ label:
+@@ -450,7 +501,7 @@ label:
sverrno = errno;
errno = 0;
@@ -445,7 +446,7 @@
if (errno == ERANGE || (long)(t = n) != n) {
errno = sverrno;
return 0;
-@@ -458,24 +508,82 @@ label:
+@@ -458,24 +509,82 @@ label:
errno = sverrno;
buf = cp;
gmtime_r(&t, tm);
@@ -532,7 +533,7 @@
if (c == 'Y')
i -= 1900;
if (c == 'y' && i < 69)
-@@ -483,37 +591,40 @@ label:
+@@ -483,35 +592,58 @@ label:
if (i < 0)
return 0;
@@ -573,7 +574,7 @@
+ *convp = CONVERT_GMT;
+ buf += len;
+ break;
- }
++ }
+ tzset();
+ tzlen = strlen(tzname[0]);
+ if (len == tzlen && strncmp(buf, tzname[0], tzlen) == 0) {
@@ -586,32 +587,31 @@
+ tm->tm_isdst = 1;
+ buf += len;
+ break;
+ }
++ return 0;
+ }
-+ return 0;
- }
-- break;
-
- case 'z':
- {
-@@ -529,7 +640,7 @@ label:
- buf++;
- i = 0;
- for (len = 4; len > 0; len--) {
-- if (isdigit((unsigned char)*buf)) {
-+ if (isdigit_l((unsigned char)*buf, loc)) {
- i *= 10;
- i += *buf - '0';
- buf++;
-@@ -539,7 +650,7 @@ label:
-
- tm->tm_hour -= sign * (i / 100);
- tm->tm_min -= sign * (i % 100);
-- *GMTp = 1;
-+ *convp = CONVERT_GMT;
++
++ case 'z':
++ {
++ char sign;
++ int hr, min;
++
++ if ((buf[0] != '+' && buf[0] != '-')
++ || !isdigit_l((unsigned char)buf[1], loc)
++ || !isdigit_l((unsigned char)buf[2], loc)
++ || !isdigit_l((unsigned char)buf[3], loc)
++ || !isdigit_l((unsigned char)buf[4], loc))
++ return 0;
++ sscanf(buf, "%c%2d%2d", &sign, &hr, &min);
++ *convp = CONVERT_ZONE;
++ tm->tm_gmtoff = 60 * (60 * hr + min);
++ if (sign == '-')
++ tm->tm_gmtoff = -tm->tm_gmtoff;
++ buf += 5;
}
break;
}
-@@ -552,14 +663,39 @@ char *
+@@ -524,14 +656,39 @@ char *
strptime(const char * __restrict buf, const char * __restrict fmt,
struct tm * __restrict tm)
{