示例#1
0
文件: setlocale.c 项目: bingos/bitrig
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;
}
示例#2
0
文件: setlocale.c 项目: bingos/bitrig
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;
	}
}
示例#3
0
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;
}