# 46 "/usr/src/packages/gettext/gettext-0.18.1.1-1/src/gettext-0.18.1.1/gettext-runtime/intl/setlocale.c" 2 static const char * category_to_name (int category) { const char *retval; switch (category) { case 1: retval = "LC_COLLATE"; break; case 2: retval = "LC_CTYPE"; break; case 3: retval = "LC_MONETARY"; break; case 4: retval = "LC_NUMERIC"; break; case 5: retval = "LC_TIME"; break; case 6: retval = "LC_MESSAGES"; break; default: retval = "LC_XXX"; } return retval; } # 819 "/usr/src/packages/gettext/gettext-0.18.1.1-1/src/gettext-0.18.1.1/gettext-runtime/intl/setlocale.c" char * libintl_setlocale (int category, const char *locale) { if (locale != ((void *)0) && locale[0] == '\0') { if (category == 0) { static int const categories[] = { 4, 5, 1, 3, 6 }; char *saved_locale; const char *base_name; unsigned int i; saved_locale = setlocale (0, ((void *)0)); if (saved_locale == ((void *)0)) return ((void *)0); saved_locale = strdup (saved_locale); if (saved_locale == ((void *)0)) return ((void *)0); base_name = _nl_locale_name_environ (2, category_to_name (2)); if (base_name == ((void *)0)) base_name = _nl_locale_name_default (); if (setlocale (0, base_name) == ((void *)0)) goto fail; for (i = 0; i < sizeof (categories) / sizeof (categories[0]); i++) { int cat = categories[i]; const char *name; name = _nl_locale_name_environ (cat, category_to_name (cat)); if (name == ((void *)0)) name = _nl_locale_name_default (); if (strcmp (name, base_name) != 0 ) if (setlocale (cat, name) == ((void *)0)) goto fail; } free (saved_locale); return setlocale (0, ((void *)0)); fail: if (saved_locale[0] != '\0') setlocale (0, saved_locale); free (saved_locale); return ((void *)0); } else { const char *name = _nl_locale_name_environ (category, category_to_name (category)); if (name == ((void *)0)) name = _nl_locale_name_default (); return setlocale (category, name); } } else return setlocale (category, locale); }