diff options
author | Brooks Davis <brooks@FreeBSD.org> | 2012-12-10 17:34:33 +0000 |
---|---|---|
committer | Brooks Davis <brooks@FreeBSD.org> | 2012-12-10 17:34:33 +0000 |
commit | 1652751915850f9fe21d5efb7459db8b6ef7ec9c (patch) | |
tree | e19cb3d4bfff056effee92ddce286f635cf4e8ff /lib | |
parent | 3b3b91e73619f2d77c3d626b7346396728ed1cf6 (diff) | |
download | src-1652751915850f9fe21d5efb7459db8b6ef7ec9c.tar.gz src-1652751915850f9fe21d5efb7459db8b6ef7ec9c.zip |
Notes
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libc/locale/setrunelocale.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/lib/libc/locale/setrunelocale.c b/lib/libc/locale/setrunelocale.c index 3ffb64915bd0..927b200a2604 100644 --- a/lib/libc/locale/setrunelocale.c +++ b/lib/libc/locale/setrunelocale.c @@ -73,9 +73,11 @@ static int __setrunelocale(struct xlocale_ctype *l, const char *); #define __collate_chain_pri_table (table->__collate_chain_pri_table) -static void destruct_ctype(void *v) +static void +destruct_ctype(void *v) { struct xlocale_ctype *l = v; + if (strcmp(l->runes->__encoding, "EUC") == 0) free(l->runes->__variable); if (&_DefaultRuneLocale != l->runes) @@ -83,13 +85,17 @@ static void destruct_ctype(void *v) free(l); } -const _RuneLocale *__getCurrentRuneLocale(void) +const _RuneLocale * +__getCurrentRuneLocale(void) { + return XLOCALE_CTYPE(__get_locale())->runes; } -static void free_runes(_RuneLocale *rl) +static void +free_runes(_RuneLocale *rl) { + /* FIXME: The "EUC" check here is a hideous abstraction violation. */ if ((rl != &_DefaultRuneLocale) && (rl)) { if (strcmp(rl->__encoding, "EUC") == 0) { @@ -191,7 +197,8 @@ __wrap_setrunelocale(const char *locale) #ifndef __NO_TLS void -__set_thread_rune_locale(locale_t loc) { +__set_thread_rune_locale(locale_t loc) +{ if (loc == NULL) { _ThreadRuneLocale = &_DefaultRuneLocale; @@ -205,6 +212,7 @@ void * __ctype_load(const char *locale, locale_t unused) { struct xlocale_ctype *l = calloc(sizeof(struct xlocale_ctype), 1); + l->header.header.destructor = destruct_ctype; if (__setrunelocale(l, locale)) { |