diff --git a/newlib/ChangeLog b/newlib/ChangeLog index 29870abbc..799c35027 100644 --- a/newlib/ChangeLog +++ b/newlib/ChangeLog @@ -1,3 +1,9 @@ +2002-08-29 Jeff Johnston + + * libc/locale/locale.c (_setlocale_r)[MB_CAPABLE]: Fix so + default locale "" is accepted for LC_CTYPE or LC_MESSAGES + and is treated as if "C" was specified. + 2002-08-28 Jeff Johnston * Makefile.am (install-data-local): Move install of build diff --git a/newlib/libc/locale/locale.c b/newlib/libc/locale/locale.c index 7a4db069c..691ff9f80 100644 --- a/newlib/libc/locale/locale.c +++ b/newlib/libc/locale/locale.c @@ -136,6 +136,7 @@ _DEFUN(_setlocale_r, (p, category, locale), if (locale) { + char *locale_name = (char *)locale; if (category != LC_CTYPE && category != LC_MESSAGES) { if (strcmp (locale, "C") && strcmp (locale, "")) @@ -143,17 +144,15 @@ _DEFUN(_setlocale_r, (p, category, locale), if (category == LC_ALL) { strcpy (last_lc_ctype, lc_ctype); - strcpy (lc_ctype, locale); + strcpy (lc_ctype, "C"); strcpy (last_lc_messages, lc_messages); - strcpy (lc_messages, locale); + strcpy (lc_messages, "C"); __mb_cur_max = 1; } } else { - if (locale[0] != 'C') - return 0; - if (locale[1] == '-') + if (locale[0] == 'C' && locale[1] == '-') { switch (locale[2]) { @@ -180,12 +179,18 @@ _DEFUN(_setlocale_r, (p, category, locale), default: return 0; } - } + } + else + { + if (strcmp (locale, "C") && strcmp (locale, "")) + return 0; + locale_name = "C"; /* C is always the default locale */ + } if (category == LC_CTYPE) { strcpy (last_lc_ctype, lc_ctype); - strcpy (lc_ctype, locale); + strcpy (lc_ctype, locale_name); __mb_cur_max = 1; if (locale[1] == '-') @@ -213,7 +218,7 @@ _DEFUN(_setlocale_r, (p, category, locale), else { strcpy (last_lc_messages, lc_messages); - strcpy (lc_messages, locale); + strcpy (lc_messages, locale_name); charset = "ISO-8859-1"; if (locale[1] == '-')