mirror of
https://github.com/moparisthebest/wget
synced 2024-07-03 16:38:41 -04:00
Fix bad setlocale usage.
This commit is contained in:
parent
5b42f5681f
commit
8477863e75
@ -1,5 +1,9 @@
|
||||
2009-06-11 Micah Cowan <micah@cowan.name>
|
||||
|
||||
* http.c (http_atotm): Handle potential for setlocale's return
|
||||
value to be static storage. Thanks to Benjamin Wolsey
|
||||
<bwy@benjaminwolsey.de>.
|
||||
|
||||
* sysdep.h: Need NAMESPACE_TWEAKS on non-Linux glibc-based
|
||||
systems, too. Thanks to Robert Millan.
|
||||
|
||||
|
14
src/http.c
14
src/http.c
@ -2935,6 +2935,7 @@ http_atotm (const char *time_string)
|
||||
Netscape cookie specification.) */
|
||||
};
|
||||
const char *oldlocale;
|
||||
char savedlocale[256];
|
||||
size_t i;
|
||||
time_t ret = (time_t) -1;
|
||||
|
||||
@ -2942,6 +2943,16 @@ http_atotm (const char *time_string)
|
||||
non-English locales, which we work around by temporarily setting
|
||||
locale to C before invoking strptime. */
|
||||
oldlocale = setlocale (LC_TIME, NULL);
|
||||
if (oldlocale)
|
||||
{
|
||||
size_t l = strlen (oldlocale);
|
||||
if (l >= sizeof savedlocale)
|
||||
savedlocale[0] = '\0';
|
||||
else
|
||||
memcpy (savedlocale, oldlocale, l);
|
||||
}
|
||||
else savedlocale[0] = '\0';
|
||||
|
||||
setlocale (LC_TIME, "C");
|
||||
|
||||
for (i = 0; i < countof (time_formats); i++)
|
||||
@ -2961,7 +2972,8 @@ http_atotm (const char *time_string)
|
||||
}
|
||||
|
||||
/* Restore the previous locale. */
|
||||
setlocale (LC_TIME, oldlocale);
|
||||
if (savedlocale[0])
|
||||
setlocale (LC_TIME, savedlocale);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user