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.
This commit is contained in:
Rich Felker
2014-07-26 02:34:09 -04:00
parent 6cb4f91db7
commit 41421d6beb
4 changed files with 71 additions and 0 deletions

View File

@ -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)