about summary refs log tree commit diff
path: root/src/internal
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2014-07-26 02:34:09 -0400
committerRich Felker <dalias@aerifal.cx>2014-07-26 02:34:09 -0400
commit41421d6beb3f17aa8838f7cdaad9cd16b4c451f6 (patch)
tree9bf941192997e02121a3e8de767007d1ebf54693 /src/internal
parent6cb4f91db7a5dc3bca63037ddc5f998a08dc3fb0 (diff)
downloadmusl-41421d6beb3f17aa8838f7cdaad9cd16b4c451f6.tar.gz
musl-41421d6beb3f17aa8838f7cdaad9cd16b4c451f6.tar.xz
musl-41421d6beb3f17aa8838f7cdaad9cd16b4c451f6.zip
implement mo file string lookup for translations
the core is based on a binary search; hash table is not used. both
native and reverse-endian mo files are supported. all offsets read
from the mapped mo file are checked against the mapping size to
prevent the possibility of reads outside the mapping.

this commit has no observable effects since there are not yet any
callers to the message translation code.
Diffstat (limited to 'src/internal')
-rw-r--r--src/internal/locale_impl.h6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/internal/locale_impl.h b/src/internal/locale_impl.h
index 0ee72d3e..9142f0c2 100644
--- a/src/internal/locale_impl.h
+++ b/src/internal/locale_impl.h
@@ -13,6 +13,12 @@ struct __locale_map {
 };
 
 int __setlocalecat(locale_t, int, const char *);
+const char *__mo_lookup(const void *, size_t, const char *);
+const char *__lctrans(const char *, const struct __locale_map *);
+const char *__lctrans_cur(const char *);
+
+#define LCTRANS(msg, lc, loc) __lctrans(msg, (loc)->cat[(lc)-2])
+#define LCTRANS_CUR(msg) __lctrans_cur(msg)
 
 #define CURRENT_LOCALE \
 	(libc.uselocale_cnt ? __pthread_self()->locale : &libc.global_locale)