1
0
mirror of https://github.com/moparisthebest/wget synced 2024-07-03 16:38:41 -04:00

[svn] Force the use of separators in C locale.

This commit is contained in:
hniksic 2005-06-26 19:07:31 -07:00
parent 2254e5c4e4
commit 6655b5afee
2 changed files with 30 additions and 13 deletions

View File

@ -1,3 +1,8 @@
2005-06-27 Hrvoje Niksic <hniksic@xemacs.org>
* utils.c (get_grouping_data): Force the use of separators in C
locale.
2005-06-27 Hrvoje Niksic <hniksic@xemacs.org> 2005-06-27 Hrvoje Niksic <hniksic@xemacs.org>
* main.c (i18n_initialize): Set all locale categories. * main.c (i18n_initialize): Set all locale categories.

View File

@ -1164,6 +1164,15 @@ free_keys_and_values (struct hash_table *ht)
} }
/* Get grouping data, the separator and grouping info, by calling
localeconv(). The information is cached after the first call to
the function.
In locales that don't set a thousand separator (such as the "C"
locale), this forces it to be ",". Wget 1.10 is only using
thousand separators in one place, so this shouldn't be a problem in
practice. */
static void static void
get_grouping_data (const char **sep, const char **grouping) get_grouping_data (const char **sep, const char **grouping)
{ {
@ -1172,20 +1181,23 @@ get_grouping_data (const char **sep, const char **grouping)
static bool initialized; static bool initialized;
if (!initialized) if (!initialized)
{ {
#ifdef LC_NUMERIC
/* Get the grouping info from the locale. */ /* Get the grouping info from the locale. */
struct lconv *lconv; struct lconv *lconv = localeconv ();
const char *oldlocale = setlocale (LC_NUMERIC, ""); cached_sep = lconv->thousands_sep;
lconv = localeconv (); cached_grouping = lconv->grouping;
cached_sep = xstrdup (lconv->thousands_sep); if (!*cached_sep)
cached_grouping = xstrdup (lconv->grouping); {
/* Restore the locale to previous settings. */ /* Many locales (such as "C" or "hr_HR") don't specify
setlocale (LC_NUMERIC, oldlocale); grouping, which we still want to use it for legibility.
if (!cached_sep) In those locales set the sep char to ',', unless that
#endif character is used for decimal point, in which case set it
/* Force separator for locales that specify no separators to " ". */
("C", "hr", and probably many more.) */ if (*lconv->decimal_point != ',')
cached_sep = ",", cached_grouping = "\x03"; cached_sep = ",";
else
cached_sep = " ";
cached_grouping = "\x03";
}
initialized = true; initialized = true;
} }
*sep = cached_sep; *sep = cached_sep;