static int load_locale_sub(int category, const char *locname, int isspecial) { /* check for the default locales */ if (!strcmp(new_categories[category], "C") || !strcmp(new_categories[category], "POSIX")) { revert_to_default(category); return 0; } /* sanity check */ if (strchr(locname, '/') != NULL) return -1; switch (category) { case LC_CTYPE: if (_xpg4_setrunelocale(locname)) return -1; __install_currentrunelocale_ctype(); break; case LC_MESSAGES: case LC_COLLATE: case LC_MONETARY: case LC_NUMERIC: case LC_TIME: return -1; } return 0; }
static void revert_to_default(int category) { switch (category) { case LC_CTYPE: (void)_xpg4_setrunelocale("C"); __install_currentrunelocale_ctype(); break; case LC_MESSAGES: case LC_COLLATE: case LC_MONETARY: case LC_NUMERIC: case LC_TIME: break; } }
static int load_locale_sub(int category, const char *locname, int isspecial) { char name[PATH_MAX]; int len; /* check for the default locales */ if (!strcmp(new_categories[category], "C") || !strcmp(new_categories[category], "POSIX")) { revert_to_default(category); return 0; } /* sanity check */ if (strchr(locname, '/') != NULL) return -1; len = snprintf(name, sizeof(name), "%s/%s/%s", _PathLocale, locname, categories[category]); if (len < 0 || len >= sizeof(name)) return -1; switch (category) { case LC_CTYPE: if (_xpg4_setrunelocale(locname)) return -1; __install_currentrunelocale_ctype(); break; case LC_MESSAGES: case LC_COLLATE: case LC_MONETARY: case LC_NUMERIC: case LC_TIME: return -1; } return 0; }