about summary refs log tree commit diff
path: root/src/env
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2014-07-02 19:33:19 -0400
committerRich Felker <dalias@aerifal.cx>2014-07-02 19:33:19 -0400
commit0bc03091bb674ebb9fa6fe69e4aec1da3ac484f2 (patch)
tree7f43063dd039e09a6a74d2677e1138d345bf7b9d /src/env
parent984c25b74da085c6ae6b44a87bbd5f8afc9be331 (diff)
downloadmusl-0bc03091bb674ebb9fa6fe69e4aec1da3ac484f2.tar.gz
musl-0bc03091bb674ebb9fa6fe69e4aec1da3ac484f2.tar.xz
musl-0bc03091bb674ebb9fa6fe69e4aec1da3ac484f2.zip
add locale framework
this commit adds non-stub implementations of setlocale, duplocale,
newlocale, and uselocale, along with the data structures and minimal
code needed for representing the active locale on a per-thread basis
and optimizing the common case where thread-local locale settings are
not in use.

at this point, the data structures only contain what is necessary to
represent LC_CTYPE (a single flag) and LC_MESSAGES (a name for use in
finding message translation files). representation for the other
categories will be added later; the expectation is that a single
pointer will suffice for each.

for LC_CTYPE, the strings "C" and "POSIX" are treated as special; any
other string is accepted and treated as "C.UTF-8". for other
categories, any string is accepted after being truncated to a maximum
supported length (currently 15 bytes). for LC_MESSAGES, the name is
kept regardless of whether libc itself can use such a message
translation locale, since applications using catgets or gettext should
be able to use message locales libc is not aware of. for other
categories, names which are not successfully loaded as locales (which,
at present, means all names) are treated as aliases for "C". setlocale
never fails.

locale settings are not yet used anywhere, so this commit should have
no visible effects except for the contents of the string returned by
setlocale.
Diffstat (limited to 'src/env')
-rw-r--r--src/env/__init_tls.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/env/__init_tls.c b/src/env/__init_tls.c
index 13cf2eea..efa07284 100644
--- a/src/env/__init_tls.c
+++ b/src/env/__init_tls.c
@@ -16,6 +16,7 @@ int __init_tp(void *p)
 	if (!r) libc.can_do_threads = 1;
 	libc.has_thread_pointer = 1;
 	td->tid = td->pid = __syscall(SYS_set_tid_address, &td->tid);
+	td->locale = &libc.global_locale;
 	return 0;
 }