From 3d74e220a55da1824259b04b14b896199a402fd8 Mon Sep 17 00:00:00 2001 From: Edwin Groothuis Date: Sun, 9 May 2010 22:01:35 +0000 Subject: [PATCH] strptime(3) confused July with June with the fr_FR locale. When parsing the month "juillet" (abbr "jul"), %B recognized it as "juin" (abbr "jui") because the full name of the month names is checked at the same time as the abbrevation. The new behaviour checks the full names first before checking the abbrevation names. PR: kern/141939 Submitted by: Denis Chatelain MFC after: 1 week --- lib/libc/stdtime/strptime.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/libc/stdtime/strptime.c b/lib/libc/stdtime/strptime.c index 51d41ed6b9b1..401350ee3d76 100644 --- a/lib/libc/stdtime/strptime.c +++ b/lib/libc/stdtime/strptime.c @@ -408,6 +408,14 @@ _strptime(const char *buf, const char *fmt, struct tm *tm, int *GMTp) if (strncasecmp(buf, tptr->month[i], len) == 0) break; + } + } + /* + * Try the abbreviated month name if the full name + * wasn't found and Oalternative was not requested. + */ + if (i == asizeof(tptr->month) && !Oalternative) { + for (i = 0; i < asizeof(tptr->month); i++) { len = strlen(tptr->mon[i]); if (strncasecmp(buf, tptr->mon[i], len) == 0)