X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Fencoding.c;h=ff90a23b8ca74bdda4ff2fc763eb66142ce1d818;hp=8edf228817cba16e659ca47caed8d492e1de95cf;hb=fe221b8f000dbd52b884d1ac71d75f49a44cc05c;hpb=76b57cc8cf113194136a7e264644a37515650ccc diff --git a/src/encoding.c b/src/encoding.c index 8edf2288..ff90a23b 100644 --- a/src/encoding.c +++ b/src/encoding.c @@ -68,8 +68,6 @@ struct iconv_node { struct iconv_list_head name = { \ .from_encoding = from, \ .to_encoding = to, \ - .list = LIST_HEAD_INIT(name.list), \ - .mutex = PTHREAD_MUTEX_INITIALIZER, \ } static iconv_t * @@ -363,6 +361,13 @@ utf8_to_tstr_simple(const char *utf8str, tchar **out) return utf8_to_tstr(utf8str, strlen(utf8str), out, &out_nbytes); } +static void +iconv_init(struct iconv_list_head *head) +{ + pthread_mutex_init(&head->mutex, NULL); + INIT_LIST_HEAD(&head->list); +} + static void iconv_cleanup(struct iconv_list_head *head) { @@ -377,6 +382,19 @@ iconv_cleanup(struct iconv_list_head *head) } } +void +iconv_global_init(void) +{ + iconv_init(&iconv_utf8_to_tstr); + iconv_init(&iconv_tstr_to_utf8); +#if !TCHAR_IS_UTF16LE + iconv_init(&iconv_utf16le_to_tstr); + iconv_init(&iconv_tstr_to_utf16le); + iconv_init(&iconv_utf16le_to_utf8); + iconv_init(&iconv_utf8_to_utf16le); +#endif +} + void iconv_global_cleanup(void) {