Changeset View
Changeset View
Standalone View
Standalone View
lib/libc/locale/xlocale.c
Show First 20 Lines • Show All 245 Lines • ▼ Show 20 Lines | |||||
/* | /* | ||||
* Public interfaces. These are the five public functions described by the | * Public interfaces. These are the five public functions described by the | ||||
* xlocale interface. | * xlocale interface. | ||||
*/ | */ | ||||
locale_t newlocale(int mask, const char *locale, locale_t base) | locale_t newlocale(int mask, const char *locale, locale_t base) | ||||
{ | { | ||||
locale_t orig_base; | |||||
int type; | int type; | ||||
const char *realLocale = locale; | const char *realLocale = locale; | ||||
int useenv = 0; | int useenv = 0; | ||||
int success = 1; | int success = 1; | ||||
_once(&once_control, init_key); | _once(&once_control, init_key); | ||||
locale_t new = alloc_locale(); | locale_t new = alloc_locale(); | ||||
if (NULL == new) { | if (NULL == new) { | ||||
return (NULL); | return (NULL); | ||||
} | } | ||||
orig_base = base; | |||||
FIX_LOCALE(base); | FIX_LOCALE(base); | ||||
copyflags(new, base); | copyflags(new, base); | ||||
if (NULL == locale) { | if (NULL == locale) { | ||||
realLocale = "C"; | realLocale = "C"; | ||||
} else if ('\0' == locale[0]) { | } else if ('\0' == locale[0]) { | ||||
useenv = 1; | useenv = 1; | ||||
} | } | ||||
Show All 18 Lines | if (mask & 1) { | ||||
break; | break; | ||||
} | } | ||||
} | } | ||||
mask >>= 1; | mask >>= 1; | ||||
} | } | ||||
if (0 == success) { | if (0 == success) { | ||||
xlocale_release(new); | xlocale_release(new); | ||||
new = NULL; | new = NULL; | ||||
} else if (base == orig_base) { | |||||
xlocale_release(base); | |||||
} | } | ||||
return (new); | return (new); | ||||
} | } | ||||
locale_t duplocale(locale_t base) | locale_t duplocale(locale_t base) | ||||
{ | { | ||||
locale_t new = alloc_locale(); | locale_t new = alloc_locale(); | ||||
▲ Show 20 Lines • Show All 62 Lines • Show Last 20 Lines |