#include <stdlib.h>
#include <string.h>
#include "locale_impl.h"
#include "libc.h"

int __loc_is_allocated(locale_t loc)
{
	return loc && loc != C_LOCALE && loc != UTF8_LOCALE;
}

locale_t __newlocale(int mask, const char *name, locale_t loc)
{
	int i, j;
	struct __locale_struct tmp;
	const struct __locale_map *lm;

	/* For locales with allocated storage, modify in-place. */
	if (__loc_is_allocated(loc)) {
		for (i=0; i<LC_ALL; i++)
			if (mask & (1<<i))
				loc->cat[i] = __get_locale(i, name);
		return loc;
	}

	/* Otherwise, build a temporary locale object, which will only
	 * be instantiated in allocated storage if it does not match
	 * one of the built-in static locales. This makes the common
	 * usage case for newlocale, getting a C locale with predictable
	 * behavior, very fast, and more importantly, fail-safe. */
	for (j=i=0; i<LC_ALL; i++) {
		if (loc && !(mask & (1<<i)))
			lm = loc->cat[i];
		else
			lm = __get_locale(i, mask & (1<<i) ? name : "");
		if (lm) j++;
		tmp.cat[i] = lm;
	}

	if (!j)
		return C_LOCALE;
	if (j==1 && tmp.cat[LC_CTYPE]==&__c_dot_utf8)
		return UTF8_LOCALE;

	if ((loc = malloc(sizeof *loc))) *loc = tmp;

	return loc;
}

weak_alias(__newlocale, newlocale);
