File: | sal/osl/unx/nlsupport.c |
Location: | line 165, column 17 |
Description: | Value stored to 'offset' is never read |
1 | /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ |
2 | /************************************************************************* |
3 | * |
4 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
5 | * |
6 | * Copyright 2000, 2010 Oracle and/or its affiliates. |
7 | * |
8 | * OpenOffice.org - a multi-platform office productivity suite |
9 | * |
10 | * This file is part of OpenOffice.org. |
11 | * |
12 | * OpenOffice.org is free software: you can redistribute it and/or modify |
13 | * it under the terms of the GNU Lesser General Public License version 3 |
14 | * only, as published by the Free Software Foundation. |
15 | * |
16 | * OpenOffice.org is distributed in the hope that it will be useful, |
17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
19 | * GNU Lesser General Public License version 3 for more details |
20 | * (a copy is included in the LICENSE file that accompanied this code). |
21 | * |
22 | * You should have received a copy of the GNU Lesser General Public License |
23 | * version 3 along with OpenOffice.org. If not, see |
24 | * <http://www.openoffice.org/license.html> |
25 | * for a copy of the LGPLv3 License. |
26 | * |
27 | ************************************************************************/ |
28 | |
29 | #include <osl/nlsupport.h> |
30 | #include <osl/diagnose.h> |
31 | #include <osl/process.h> |
32 | #include <rtl/memory.h> |
33 | |
34 | #if defined(LINUX1) || defined(SOLARIS) || defined(NETBSD) || \ |
35 | defined(FREEBSD) || defined(MACOSX) || defined(IOS) || defined(OPENBSD) || \ |
36 | defined(DRAGONFLY) |
37 | #include <pthread.h> |
38 | #if !defined(MACOSX) && !defined(IOS) |
39 | #include <locale.h> |
40 | #include <langinfo.h> |
41 | #else |
42 | #include <osl/module.h> |
43 | #include <osl/thread.h> |
44 | #endif /* !MACOSX && !IOS */ |
45 | #endif /* LINUX || SOLARIS || NETBSD || MACOSX || IOS */ |
46 | |
47 | #include <string.h> |
48 | |
49 | /***************************************************************************** |
50 | typedefs |
51 | *****************************************************************************/ |
52 | |
53 | |
54 | typedef struct { |
55 | const char *key; |
56 | const rtl_TextEncoding value; |
57 | } _pair; |
58 | |
59 | |
60 | /***************************************************************************** |
61 | compare function for binary search |
62 | *****************************************************************************/ |
63 | |
64 | static int |
65 | _pair_compare (const char *key, const _pair *pair) |
66 | { |
67 | int result = rtl_str_compareIgnoreAsciiCase( key, pair->key ); |
68 | return result; |
69 | } |
70 | |
71 | /***************************************************************************** |
72 | binary search on encoding tables |
73 | *****************************************************************************/ |
74 | |
75 | static const _pair* |
76 | _pair_search (const char *key, const _pair *base, unsigned int member ) |
77 | { |
78 | unsigned int lower = 0; |
79 | unsigned int upper = member; |
80 | unsigned int current; |
81 | int comparison; |
82 | |
83 | /* check for validity of input */ |
84 | if ( (key == NULL((void*)0)) || (base == NULL((void*)0)) || (member == 0) ) |
85 | return NULL((void*)0); |
86 | |
87 | /* binary search */ |
88 | while ( lower < upper ) |
89 | { |
90 | current = (lower + upper) / 2; |
91 | comparison = _pair_compare( key, base + current ); |
92 | if (comparison < 0) |
93 | upper = current; |
94 | else if (comparison > 0) |
95 | lower = current + 1; |
96 | else |
97 | return base + current; |
98 | } |
99 | |
100 | return NULL((void*)0); |
101 | } |
102 | |
103 | |
104 | /***************************************************************************** |
105 | convert rtl_Locale to locale string |
106 | *****************************************************************************/ |
107 | |
108 | static char * _compose_locale( rtl_Locale * pLocale, char * buffer, size_t n ) |
109 | { |
110 | /* check if a valid locale is specified */ |
111 | if( pLocale && pLocale->Language && |
112 | (pLocale->Language->length == 2 || pLocale->Language->length == 3) ) |
113 | { |
114 | size_t offset = 0; |
115 | |
116 | /* convert language code to ascii */ |
117 | { |
118 | rtl_String *pLanguage = NULL((void*)0); |
119 | |
120 | rtl_uString2String( &pLanguage, |
121 | pLocale->Language->buffer, pLocale->Language->length, |
122 | RTL_TEXTENCODING_ASCII_US(((rtl_TextEncoding) 11)), OUSTRING_TO_OSTRING_CVTFLAGS(((sal_uInt32)0x0006) | ((sal_uInt32)0x0060) | ((sal_uInt32)0x0100 ) | ((sal_uInt32)0x0400) | ((sal_uInt32)0x4000)) ); |
123 | |
124 | if( SAL_INT_CAST(sal_uInt32, pLanguage->length)((sal_uInt32) (pLanguage->length)) < n ) |
125 | { |
126 | strcpy( buffer, pLanguage->buffer ); |
127 | offset = pLanguage->length; |
128 | } |
129 | |
130 | rtl_string_release( pLanguage ); |
131 | } |
132 | |
133 | /* convert country code to ascii */ |
134 | if( pLocale->Country && (pLocale->Country->length == 2) ) |
135 | { |
136 | rtl_String *pCountry = NULL((void*)0); |
137 | |
138 | rtl_uString2String( &pCountry, |
139 | pLocale->Country->buffer, pLocale->Country->length, |
140 | RTL_TEXTENCODING_ASCII_US(((rtl_TextEncoding) 11)), OUSTRING_TO_OSTRING_CVTFLAGS(((sal_uInt32)0x0006) | ((sal_uInt32)0x0060) | ((sal_uInt32)0x0100 ) | ((sal_uInt32)0x0400) | ((sal_uInt32)0x4000)) ); |
141 | |
142 | if( offset + pCountry->length + 1 < n ) |
143 | { |
144 | strcpy( buffer + offset++, "_" ); |
145 | strcpy( buffer + offset, pCountry->buffer ); |
146 | offset += pCountry->length; |
147 | } |
148 | |
149 | rtl_string_release( pCountry ); |
150 | } |
151 | |
152 | /* convert variant to ascii - check if there is enough space for the variant string */ |
153 | if( pLocale->Variant && pLocale->Variant->length && |
154 | ( SAL_INT_CAST(sal_uInt32, pLocale->Variant->length)((sal_uInt32) (pLocale->Variant->length)) < n - 6 ) ) |
155 | { |
156 | rtl_String *pVariant = NULL((void*)0); |
157 | |
158 | rtl_uString2String( &pVariant, |
159 | pLocale->Variant->buffer, pLocale->Variant->length, |
160 | RTL_TEXTENCODING_ASCII_US(((rtl_TextEncoding) 11)), OUSTRING_TO_OSTRING_CVTFLAGS(((sal_uInt32)0x0006) | ((sal_uInt32)0x0060) | ((sal_uInt32)0x0100 ) | ((sal_uInt32)0x0400) | ((sal_uInt32)0x4000)) ); |
161 | |
162 | if( offset + pVariant->length + 1 < n ) |
163 | { |
164 | strcpy( buffer + offset, pVariant->buffer ); |
165 | offset += pVariant->length; |
Value stored to 'offset' is never read | |
166 | } |
167 | |
168 | rtl_string_release( pVariant ); |
169 | } |
170 | |
171 | return buffer; |
172 | } |
173 | |
174 | return NULL((void*)0); |
175 | } |
176 | |
177 | /***************************************************************************** |
178 | convert locale string to rtl_Locale |
179 | *****************************************************************************/ |
180 | |
181 | static rtl_Locale * _parse_locale( const char * locale ) |
182 | { |
183 | static sal_Unicode c_locale[2] = { (sal_Unicode) 'C', 0 }; |
184 | |
185 | /* check if locale contains a valid string */ |
186 | if( locale ) |
187 | { |
188 | size_t len = strlen( locale ); |
189 | |
190 | if( len >= 2 ) |
191 | { |
192 | rtl_uString * pLanguage = NULL((void*)0); |
193 | rtl_uString * pCountry = NULL((void*)0); |
194 | rtl_uString * pVariant = NULL((void*)0); |
195 | |
196 | size_t offset = 2; |
197 | |
198 | rtl_Locale * ret; |
199 | |
200 | /* language is a two or three letter code */ |
201 | if( (len > 3 && '_' == locale[3]) || (len == 3 && '_' != locale[2]) ) |
202 | offset = 3; |
203 | |
204 | /* convert language code to unicode */ |
205 | rtl_string2UString( &pLanguage, locale, offset, RTL_TEXTENCODING_ASCII_US(((rtl_TextEncoding) 11)), OSTRING_TO_OUSTRING_CVTFLAGS(((sal_uInt32)0x0003) | ((sal_uInt32)0x0030) | ((sal_uInt32)0x0300 )) ); |
206 | OSL_ASSERT(pLanguage != NULL)do { if (((sal_Bool)1) && (!(pLanguage != ((void*)0)) )) { sal_detail_logFormat((SAL_DETAIL_LOG_LEVEL_WARN), ("legacy.osl" ), ("/usr/local/src/libreoffice/sal/osl/unx/nlsupport.c" ":" "206" ": "), "OSL_ASSERT: %s", "pLanguage != NULL"); } } while ((( sal_Bool)0)); |
207 | |
208 | /* convert country code to unicode */ |
209 | if( len >= offset+3 && '_' == locale[offset] ) |
210 | { |
211 | rtl_string2UString( &pCountry, locale + offset + 1, 2, RTL_TEXTENCODING_ASCII_US(((rtl_TextEncoding) 11)), OSTRING_TO_OUSTRING_CVTFLAGS(((sal_uInt32)0x0003) | ((sal_uInt32)0x0030) | ((sal_uInt32)0x0300 )) ); |
212 | OSL_ASSERT(pCountry != NULL)do { if (((sal_Bool)1) && (!(pCountry != ((void*)0))) ) { sal_detail_logFormat((SAL_DETAIL_LOG_LEVEL_WARN), ("legacy.osl" ), ("/usr/local/src/libreoffice/sal/osl/unx/nlsupport.c" ":" "212" ": "), "OSL_ASSERT: %s", "pCountry != NULL"); } } while (((sal_Bool )0)); |
213 | offset += 3; |
214 | } |
215 | |
216 | /* convert variant code to unicode - do not rely on "." as delimiter */ |
217 | if( len > offset ) { |
218 | rtl_string2UString( &pVariant, locale + offset, len - offset, RTL_TEXTENCODING_ASCII_US(((rtl_TextEncoding) 11)), OSTRING_TO_OUSTRING_CVTFLAGS(((sal_uInt32)0x0003) | ((sal_uInt32)0x0030) | ((sal_uInt32)0x0300 )) ); |
219 | OSL_ASSERT(pVariant != NULL)do { if (((sal_Bool)1) && (!(pVariant != ((void*)0))) ) { sal_detail_logFormat((SAL_DETAIL_LOG_LEVEL_WARN), ("legacy.osl" ), ("/usr/local/src/libreoffice/sal/osl/unx/nlsupport.c" ":" "219" ": "), "OSL_ASSERT: %s", "pVariant != NULL"); } } while (((sal_Bool )0)); |
220 | } |
221 | |
222 | ret = rtl_locale_register( pLanguage->buffer, pCountry ? pCountry->buffer : c_locale + 1, pVariant ? pVariant->buffer : c_locale + 1 ); |
223 | |
224 | if (pVariant) rtl_uString_release(pVariant); |
225 | if (pCountry) rtl_uString_release(pCountry); |
226 | if (pLanguage) rtl_uString_release(pLanguage); |
227 | |
228 | return ret; |
229 | } |
230 | else |
231 | return rtl_locale_register( c_locale, c_locale + 1, c_locale + 1 ); |
232 | } |
233 | |
234 | return NULL((void*)0); |
235 | } |
236 | |
237 | #if defined(LINUX1) || defined(SOLARIS) || defined(NETBSD) || \ |
238 | defined(FREEBSD) || defined(OPENBSD) || defined(DRAGONFLY) |
239 | |
240 | /* |
241 | * This implementation of osl_getTextEncodingFromLocale maps |
242 | * from nl_langinfo(CODESET) to rtl_textencoding defines. |
243 | * nl_langinfo() is supported only on Linux, Solaris, |
244 | * >= NetBSD 1.6 and >= FreeBSD 4.4 |
245 | * |
246 | * This routine is SLOW because of the setlocale call, so |
247 | * grab the result and cache it. |
248 | * |
249 | * XXX this code has the usual mt problems aligned with setlocale() XXX |
250 | */ |
251 | |
252 | #ifdef LINUX1 |
253 | #if !defined(CODESETCODESET) |
254 | #define CODESETCODESET _NL_CTYPE_CODESET_NAME |
255 | #endif |
256 | #endif |
257 | |
258 | /* |
259 | * _nl_language_list[] is an array list of supported encodings. Because |
260 | * we are using a binary search, the list has to be in ascending order. |
261 | * We are comparing the encodings case insensitiv, so the list has |
262 | * to be completly upper- , or lowercase. |
263 | */ |
264 | |
265 | #if defined(SOLARIS) |
266 | |
267 | /* The values in the below list can be obtained with a script like |
268 | * #!/bin/sh |
269 | * for i in `locale -a`; do |
270 | * LC_ALL=$i locale -k code_set_name |
271 | * done |
272 | */ |
273 | const _pair _nl_language_list[] = { |
274 | { "5601", RTL_TEXTENCODING_EUC_KR(((rtl_TextEncoding) 79)) }, /* ko_KR.EUC */ |
275 | { "646", RTL_TEXTENCODING_ISO_8859_1(((rtl_TextEncoding) 12)) }, /* fake: ASCII_US */ |
276 | { "ANSI-1251", RTL_TEXTENCODING_MS_1251(((rtl_TextEncoding) 34)) }, /* ru_RU.ANSI1251 */ |
277 | { "BIG5", RTL_TEXTENCODING_BIG5(((rtl_TextEncoding) 68)) }, /* zh_CN.BIG5 */ |
278 | { "BIG5-HKSCS", RTL_TEXTENCODING_BIG5_HKSCS(((rtl_TextEncoding) 86)) }, /* zh_CN.BIG5HK */ |
279 | { "CNS11643", RTL_TEXTENCODING_EUC_TW(((rtl_TextEncoding) 71)) }, /* zh_TW.EUC */ |
280 | { "EUCJP", RTL_TEXTENCODING_EUC_JP(((rtl_TextEncoding) 69)) }, /* ja_JP.eucjp */ |
281 | { "GB18030", RTL_TEXTENCODING_GB_18030(((rtl_TextEncoding) 85)) }, /* zh_CN.GB18030 */ |
282 | { "GB2312", RTL_TEXTENCODING_GB_2312(((rtl_TextEncoding) 65)) }, /* zh_CN */ |
283 | { "GBK", RTL_TEXTENCODING_GBK(((rtl_TextEncoding) 67)) }, /* zh_CN.GBK */ |
284 | { "ISO8859-1", RTL_TEXTENCODING_ISO_8859_1(((rtl_TextEncoding) 12)) }, |
285 | { "ISO8859-10", RTL_TEXTENCODING_ISO_8859_10(((rtl_TextEncoding) 77)) }, |
286 | { "ISO8859-13", RTL_TEXTENCODING_ISO_8859_13(((rtl_TextEncoding) 78)) }, /* lt_LT lv_LV */ |
287 | { "ISO8859-14", RTL_TEXTENCODING_ISO_8859_14(((rtl_TextEncoding) 21)) }, |
288 | { "ISO8859-15", RTL_TEXTENCODING_ISO_8859_15(((rtl_TextEncoding) 22)) }, |
289 | { "ISO8859-2", RTL_TEXTENCODING_ISO_8859_2(((rtl_TextEncoding) 13)) }, |
290 | { "ISO8859-3", RTL_TEXTENCODING_ISO_8859_3(((rtl_TextEncoding) 14)) }, |
291 | { "ISO8859-4", RTL_TEXTENCODING_ISO_8859_4(((rtl_TextEncoding) 15)) }, |
292 | { "ISO8859-5", RTL_TEXTENCODING_ISO_8859_5(((rtl_TextEncoding) 16)) }, |
293 | { "ISO8859-6", RTL_TEXTENCODING_ISO_8859_6(((rtl_TextEncoding) 17)) }, |
294 | { "ISO8859-7", RTL_TEXTENCODING_ISO_8859_7(((rtl_TextEncoding) 18)) }, |
295 | { "ISO8859-8", RTL_TEXTENCODING_ISO_8859_8(((rtl_TextEncoding) 19)) }, |
296 | { "ISO8859-9", RTL_TEXTENCODING_ISO_8859_9(((rtl_TextEncoding) 20)) }, |
297 | { "KOI8-R", RTL_TEXTENCODING_KOI8_R(((rtl_TextEncoding) 74)) }, |
298 | { "KOI8-U", RTL_TEXTENCODING_KOI8_U(((rtl_TextEncoding) 88)) }, |
299 | { "PCK", RTL_TEXTENCODING_MS_932(((rtl_TextEncoding) 60)) }, |
300 | { "SUN_EU_GREEK", RTL_TEXTENCODING_ISO_8859_7(((rtl_TextEncoding) 18)) }, /* 8859-7 + Euro */ |
301 | { "TIS620.2533", RTL_TEXTENCODING_MS_874(((rtl_TextEncoding) 32)) }, /* th_TH.TIS620 */ |
302 | { "UTF-8", RTL_TEXTENCODING_UTF8(((rtl_TextEncoding) 76)) } |
303 | }; |
304 | |
305 | /* XXX MS-874 is an extension to tis620, so this is not |
306 | * really equivalent */ |
307 | |
308 | #elif defined(LINUX1) |
309 | |
310 | const _pair _nl_language_list[] = { |
311 | { "ANSI_X3.110-1983", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-99 NAPLPS */ |
312 | { "ANSI_X3.4-1968", RTL_TEXTENCODING_ISO_8859_1(((rtl_TextEncoding) 12)) }, /* fake: ASCII_US */ |
313 | { "ASMO_449", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO_9036 ARABIC7 */ |
314 | { "BALTIC", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-179 */ |
315 | { "BIG5", RTL_TEXTENCODING_BIG5(((rtl_TextEncoding) 68)) }, /* locale: zh_TW */ |
316 | { "BIG5-HKSCS", RTL_TEXTENCODING_BIG5_HKSCS(((rtl_TextEncoding) 86)) }, /* locale: zh_CN.BIG5HK */ |
317 | { "BIG5HKSCS", RTL_TEXTENCODING_BIG5_HKSCS(((rtl_TextEncoding) 86)) }, /* deprecated */ |
318 | { "BS_4730", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-4 ISO646-GB */ |
319 | { "BS_VIEWDATA", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-47 */ |
320 | { "CP1250", RTL_TEXTENCODING_MS_1250(((rtl_TextEncoding) 33)) }, /* MS-EE */ |
321 | { "CP1251", RTL_TEXTENCODING_MS_1251(((rtl_TextEncoding) 34)) }, /* MS-CYRL */ |
322 | { "CP1252", RTL_TEXTENCODING_MS_1252(((rtl_TextEncoding) 1)) }, /* MS-ANSI */ |
323 | { "CP1253", RTL_TEXTENCODING_MS_1253(((rtl_TextEncoding) 35)) }, /* MS-GREEK */ |
324 | { "CP1254", RTL_TEXTENCODING_MS_1254(((rtl_TextEncoding) 36)) }, /* MS-TURK */ |
325 | { "CP1255", RTL_TEXTENCODING_MS_1255(((rtl_TextEncoding) 37)) }, /* MS-HEBR */ |
326 | { "CP1256", RTL_TEXTENCODING_MS_1256(((rtl_TextEncoding) 38)) }, /* MS-ARAB */ |
327 | { "CP1257", RTL_TEXTENCODING_MS_1257(((rtl_TextEncoding) 39)) }, /* WINBALTRIM */ |
328 | { "CSA_Z243.4-1985-1", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-121 */ |
329 | { "CSA_Z243.4-1985-2", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-122 CSA7-2 */ |
330 | { "CSA_Z243.4-1985-GR", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-123 */ |
331 | { "CSN_369103", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-139 */ |
332 | { "CWI", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* CWI-2 CP-HU */ |
333 | { "DEC-MCS", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* DEC */ |
334 | { "DIN_66003", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-21 */ |
335 | { "DS_2089", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* DS2089 ISO646-DK */ |
336 | { "EBCDIC-AT-DE", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, |
337 | { "EBCDIC-AT-DE-A", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, |
338 | { "EBCDIC-CA-FR", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, |
339 | { "EBCDIC-DK-NO", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, |
340 | { "EBCDIC-DK-NO-A", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, |
341 | { "EBCDIC-ES", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, |
342 | { "EBCDIC-ES-A", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, |
343 | { "EBCDIC-ES-S", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, |
344 | { "EBCDIC-FI-SE", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, |
345 | { "EBCDIC-FI-SE-A", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, |
346 | { "EBCDIC-FR", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, |
347 | { "EBCDIC-IS-FRISS", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* FRISS */ |
348 | { "EBCDIC-IT", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, |
349 | { "EBCDIC-PT", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, |
350 | { "EBCDIC-UK", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, |
351 | { "EBCDIC-US", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, |
352 | { "ECMA-CYRILLIC", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-111 */ |
353 | { "ES", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-17 */ |
354 | { "ES2", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-85 */ |
355 | { "EUC-JP", RTL_TEXTENCODING_EUC_JP(((rtl_TextEncoding) 69)) }, /* locale: ja_JP.eucjp */ |
356 | { "EUC-KR", RTL_TEXTENCODING_EUC_KR(((rtl_TextEncoding) 79)) }, /* locale: ko_KR.euckr */ |
357 | { "EUC-TW", RTL_TEXTENCODING_EUC_TW(((rtl_TextEncoding) 71)) }, /* locale: zh_TW.euctw */ |
358 | { "GB18030", RTL_TEXTENCODING_GB_18030(((rtl_TextEncoding) 85)) }, /* locale: zh_CN.gb18030 */ |
359 | { "GB2312", RTL_TEXTENCODING_GB_2312(((rtl_TextEncoding) 65)) }, /* locale: zh_CN */ |
360 | { "GB_1988-80", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-57 */ |
361 | { "GBK", RTL_TEXTENCODING_GBK(((rtl_TextEncoding) 67)) }, /* locale: zh_CN.GBK */ |
362 | { "GOST_19768-74", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-153 */ |
363 | { "GREEK-CCITT", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-150 */ |
364 | { "GREEK7", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-88 */ |
365 | { "GREEK7-OLD", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-18 */ |
366 | { "HP-ROMAN8", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ROMAN8 R8 */ |
367 | { "IBM037", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* EBCDIC-[US|CA|WT] */ |
368 | { "IBM038", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* EBCDIC-INT CP038 */ |
369 | { "IBM1004", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* CP1004 OS2LATIN1 */ |
370 | { "IBM1026", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* CP1026 1026 */ |
371 | { "IBM1047", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* CP1047 1047 */ |
372 | { "IBM256", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* EBCDIC-INT1 */ |
373 | { "IBM273", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* CP273 */ |
374 | { "IBM274", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* EBCDIC-BE CP274 */ |
375 | { "IBM275", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* EBCDIC-BR CP275 */ |
376 | { "IBM277", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* EBCDIC-CP-[DK|NO] */ |
377 | { "IBM278", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* EBCDIC-CP-[FISE]*/ |
378 | { "IBM280", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* CP280 EBCDIC-CP-IT*/ |
379 | { "IBM281", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* EBCDIC-JP-E CP281 */ |
380 | { "IBM284", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* CP284 EBCDIC-CP-ES */ |
381 | { "IBM285", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* CP285 EBCDIC-CP-GB */ |
382 | { "IBM290", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* EBCDIC-JP-KANA */ |
383 | { "IBM297", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* EBCDIC-CP-FR */ |
384 | { "IBM420", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* EBCDIC-CP-AR1 */ |
385 | { "IBM423", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* CP423 EBCDIC-CP-GR */ |
386 | { "IBM424", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* CP424 EBCDIC-CP-HE */ |
387 | { "IBM437", RTL_TEXTENCODING_IBM_437(((rtl_TextEncoding) 3)) }, /* CP437 437 */ |
388 | { "IBM500", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* EBCDIC-CP-[BE|CH] */ |
389 | { "IBM850", RTL_TEXTENCODING_IBM_850(((rtl_TextEncoding) 4)) }, /* CP850 850 */ |
390 | { "IBM851", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* CP851 851 */ |
391 | { "IBM852", RTL_TEXTENCODING_IBM_852(((rtl_TextEncoding) 25)) }, /* CP852 852 */ |
392 | { "IBM855", RTL_TEXTENCODING_IBM_855(((rtl_TextEncoding) 26)) }, /* CP855 855 */ |
393 | { "IBM857", RTL_TEXTENCODING_IBM_857(((rtl_TextEncoding) 27)) }, /* CP857 857 */ |
394 | { "IBM860", RTL_TEXTENCODING_IBM_860(((rtl_TextEncoding) 5)) }, /* CP860 860 */ |
395 | { "IBM861", RTL_TEXTENCODING_IBM_861(((rtl_TextEncoding) 6)) }, /* CP861 861 CP-IS */ |
396 | { "IBM862", RTL_TEXTENCODING_IBM_862(((rtl_TextEncoding) 28)) }, /* CP862 862 */ |
397 | { "IBM863", RTL_TEXTENCODING_IBM_863(((rtl_TextEncoding) 7)) }, /* CP863 863 */ |
398 | { "IBM864", RTL_TEXTENCODING_IBM_864(((rtl_TextEncoding) 29)) }, /* CP864 */ |
399 | { "IBM865", RTL_TEXTENCODING_IBM_865(((rtl_TextEncoding) 8)) }, /* CP865 865 */ |
400 | { "IBM866", RTL_TEXTENCODING_IBM_866(((rtl_TextEncoding) 30)) }, /* CP866 866 */ |
401 | { "IBM868", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* CP868 CP-AR */ |
402 | { "IBM869", RTL_TEXTENCODING_IBM_869(((rtl_TextEncoding) 31)) }, /* CP869 869 CP-GR */ |
403 | { "IBM870", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* EBCDIC-[ROECE|YU] */ |
404 | { "IBM871", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* CP871 EBCDIC-CP-IS */ |
405 | { "IBM875", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* CP875 EBCDIC-GREEK */ |
406 | { "IBM880", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* EBCDIC-CYRILLIC */ |
407 | { "IBM891", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* CP891 */ |
408 | { "IBM903", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* CP903 */ |
409 | { "IBM904", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* CP904 904 */ |
410 | { "IBM905", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* CP905 EBCDIC-CP-TR */ |
411 | { "IBM918", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* CP918 EBCDIC-AR2 */ |
412 | { "IEC_P27-1", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-143 */ |
413 | { "INIS", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-49 */ |
414 | { "INIS-8", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-50 */ |
415 | { "INIS-CYRILLIC", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-51 */ |
416 | { "INVARIANT", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-170 */ |
417 | { "ISO-8859-1", RTL_TEXTENCODING_ISO_8859_1(((rtl_TextEncoding) 12)) }, /* ISO-IR-100 CP819 */ |
418 | { "ISO-8859-10", RTL_TEXTENCODING_ISO_8859_10(((rtl_TextEncoding) 77)) }, /* ISO-IR-157 LATIN6 */ |
419 | { "ISO-8859-13", RTL_TEXTENCODING_ISO_8859_13(((rtl_TextEncoding) 78)) }, /* ISO-IR-179 LATIN7 */ |
420 | { "ISO-8859-14", RTL_TEXTENCODING_ISO_8859_14(((rtl_TextEncoding) 21)) }, /* LATIN8 L8 */ |
421 | { "ISO-8859-15", RTL_TEXTENCODING_ISO_8859_15(((rtl_TextEncoding) 22)) }, |
422 | { "ISO-8859-2", RTL_TEXTENCODING_ISO_8859_2(((rtl_TextEncoding) 13)) }, /* LATIN2 L2 */ |
423 | { "ISO-8859-3", RTL_TEXTENCODING_ISO_8859_3(((rtl_TextEncoding) 14)) }, /* LATIN3 L3 */ |
424 | { "ISO-8859-4", RTL_TEXTENCODING_ISO_8859_4(((rtl_TextEncoding) 15)) }, /* LATIN4 L4 */ |
425 | { "ISO-8859-5", RTL_TEXTENCODING_ISO_8859_5(((rtl_TextEncoding) 16)) }, /* CYRILLIC */ |
426 | { "ISO-8859-6", RTL_TEXTENCODING_ISO_8859_6(((rtl_TextEncoding) 17)) }, /* ECMA-114 ARABIC */ |
427 | { "ISO-8859-7", RTL_TEXTENCODING_ISO_8859_7(((rtl_TextEncoding) 18)) }, /* ECMA-118 GREEK8 */ |
428 | { "ISO-8859-8", RTL_TEXTENCODING_ISO_8859_8(((rtl_TextEncoding) 19)) }, /* ISO_8859-8 HEBREW */ |
429 | { "ISO-8859-9", RTL_TEXTENCODING_ISO_8859_9(((rtl_TextEncoding) 20)) }, /* ISO_8859-9 LATIN5 */ |
430 | { "ISO-IR-90", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO_6937-2:1983 */ |
431 | { "ISO_10367-BOX", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-155 */ |
432 | { "ISO_2033-1983", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-98 E13B */ |
433 | { "ISO_5427", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-37 KOI-7 */ |
434 | { "ISO_5427-EXT", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-54 */ |
435 | { "ISO_5428", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-55 */ |
436 | { "ISO_646.BASIC", RTL_TEXTENCODING_ASCII_US(((rtl_TextEncoding) 11)) }, /* REF */ |
437 | { "ISO_646.IRV", RTL_TEXTENCODING_ASCII_US(((rtl_TextEncoding) 11)) }, /* ISO-IR-2 IRV */ |
438 | { "ISO_646.IRV:1983", RTL_TEXTENCODING_ISO_8859_1(((rtl_TextEncoding) 12)) }, /* fake: ASCII_US, used for "C" locale*/ |
439 | { "ISO_6937", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-156 ISO6937*/ |
440 | { "ISO_6937-2-25", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-152 */ |
441 | { "ISO_6937-2-ADD", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-142 */ |
442 | { "ISO_8859-SUPP", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-154 */ |
443 | { "IT", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-15 */ |
444 | { "JIS_C6220-1969-JP", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* KATAKANA X0201-7 */ |
445 | { "JIS_C6220-1969-RO", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-14 */ |
446 | { "JIS_C6229-1984-A", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-91 */ |
447 | { "JIS_C6229-1984-B", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-92 */ |
448 | { "JIS_C6229-1984-B-ADD", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-93 */ |
449 | { "JIS_C6229-1984-HAND", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-94 */ |
450 | { "JIS_C6229-1984-HAND-ADD", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-95 */ |
451 | { "JIS_C6229-1984-KANA", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-96 */ |
452 | { "JIS_X0201", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* X0201 */ |
453 | { "JUS_I.B1.002", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-141 */ |
454 | { "JUS_I.B1.003-MAC", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* MACEDONIAN */ |
455 | { "JUS_I.B1.003-SERB", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-146 SERBIAN */ |
456 | { "KOI-8", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, |
457 | { "KOI8-R", RTL_TEXTENCODING_KOI8_R(((rtl_TextEncoding) 74)) }, |
458 | { "KOI8-U", RTL_TEXTENCODING_KOI8_U(((rtl_TextEncoding) 88)) }, |
459 | { "KSC5636", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO646-KR */ |
460 | { "LATIN-GREEK", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-19 */ |
461 | { "LATIN-GREEK-1", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-27 */ |
462 | { "MAC-IS", RTL_TEXTENCODING_APPLE_ROMAN(((rtl_TextEncoding) 2)) }, |
463 | { "MAC-UK", RTL_TEXTENCODING_APPLE_ROMAN(((rtl_TextEncoding) 2)) }, |
464 | { "MACINTOSH", RTL_TEXTENCODING_APPLE_ROMAN(((rtl_TextEncoding) 2)) }, /* MAC */ |
465 | { "MSZ_7795.3", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-86 */ |
466 | { "NATS-DANO", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-9-1 */ |
467 | { "NATS-DANO-ADD", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-9-2 */ |
468 | { "NATS-SEFI", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-8-1 */ |
469 | { "NATS-SEFI-ADD", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-8-2 */ |
470 | { "NC_NC00-10", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-151 */ |
471 | { "NEXTSTEP", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* NEXT */ |
472 | { "NF_Z_62-010", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-69 */ |
473 | { "NF_Z_62-010_(1973)", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-25 */ |
474 | { "NS_4551-1", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-60 */ |
475 | { "NS_4551-2", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-61 */ |
476 | { "PT", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-16 */ |
477 | { "PT2", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-84 */ |
478 | { "SAMI", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-158 */ |
479 | { "SEN_850200_B", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO646-[FI|SE] */ |
480 | { "SEN_850200_C", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-11 */ |
481 | { "T.101-G2", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-128 */ |
482 | { "T.61-7BIT", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-102 */ |
483 | { "T.61-8BIT", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* T.61 ISO-IR-103 */ |
484 | { "TIS-620", RTL_TEXTENCODING_MS_874(((rtl_TextEncoding) 32)) }, /* locale: th_TH */ |
485 | { "UTF-8", RTL_TEXTENCODING_UTF8(((rtl_TextEncoding) 76)) }, /* ISO-10646/UTF-8 */ |
486 | { "VIDEOTEX-SUPPL", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* ISO-IR-70 */ |
487 | { "WIN-SAMI-2", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) } /* WS2 */ |
488 | }; |
489 | |
490 | #elif defined(FREEBSD) || defined(DRAGONFLY) |
491 | |
492 | const _pair _nl_language_list[] = { |
493 | { "ASCII", RTL_TEXTENCODING_ASCII_US(((rtl_TextEncoding) 11)) }, /* US-ASCII */ |
494 | { "BIG5", RTL_TEXTENCODING_BIG5(((rtl_TextEncoding) 68)) }, /* China - Traditional Chinese */ |
495 | { "CP1251", RTL_TEXTENCODING_MS_1251(((rtl_TextEncoding) 34)) }, /* MS-CYRL */ |
496 | { "CP866", RTL_TEXTENCODING_IBM_866(((rtl_TextEncoding) 30)) }, /* CP866 866 */ |
497 | { "EUCCN", RTL_TEXTENCODING_EUC_CN(((rtl_TextEncoding) 70)) }, /* China - Simplified Chinese */ |
498 | { "EUCJP", RTL_TEXTENCODING_EUC_JP(((rtl_TextEncoding) 69)) }, /* Japan */ |
499 | { "EUCKR", RTL_TEXTENCODING_EUC_KR(((rtl_TextEncoding) 79)) }, /* Korea */ |
500 | { "ISO8859-1", RTL_TEXTENCODING_ISO_8859_1(((rtl_TextEncoding) 12)) }, /* Western */ |
501 | { "ISO8859-15", RTL_TEXTENCODING_ISO_8859_15(((rtl_TextEncoding) 22)) }, /* Western Updated (w/Euro sign) */ |
502 | { "ISO8859-2", RTL_TEXTENCODING_ISO_8859_2(((rtl_TextEncoding) 13)) }, /* Central European */ |
503 | { "ISO8859-4", RTL_TEXTENCODING_ISO_8859_4(((rtl_TextEncoding) 15)) }, /* LATIN4 L4 */ |
504 | { "ISO8859-5", RTL_TEXTENCODING_ISO_8859_5(((rtl_TextEncoding) 16)) }, /* Cyrillic */ |
505 | { "ISO8859-7", RTL_TEXTENCODING_ISO_8859_7(((rtl_TextEncoding) 18)) }, /* Greek */ |
506 | { "ISO8859-9", RTL_TEXTENCODING_ISO_8859_9(((rtl_TextEncoding) 20)) }, /* Turkish */ |
507 | { "KOI8-R", RTL_TEXTENCODING_KOI8_R(((rtl_TextEncoding) 74)) }, /* KOI8-R */ |
508 | { "KOI8-U", RTL_TEXTENCODING_KOI8_U(((rtl_TextEncoding) 88)) }, /* KOI8-U */ |
509 | { "SJIS", RTL_TEXTENCODING_SHIFT_JIS(((rtl_TextEncoding) 64)) }, /* Japan */ |
510 | { "US-ASCII", RTL_TEXTENCODING_ASCII_US(((rtl_TextEncoding) 11)) }, /* US-ASCII */ |
511 | { "UTF-8", RTL_TEXTENCODING_UTF8(((rtl_TextEncoding) 76)) } /* ISO-10646/UTF-8 */ |
512 | }; |
513 | |
514 | #elif defined(NETBSD) |
515 | |
516 | const _pair _nl_language_list[] = { |
517 | { "ASCII", RTL_TEXTENCODING_ASCII_US(((rtl_TextEncoding) 11)) }, /* US-ASCII */ |
518 | { "BIG5", RTL_TEXTENCODING_BIG5(((rtl_TextEncoding) 68)) }, /* China - Traditional Chinese */ |
519 | { "Big5", RTL_TEXTENCODING_BIG5(((rtl_TextEncoding) 68)) }, /* China - Traditional Chinese */ |
520 | { "Big5-HKSCS", RTL_TEXTENCODING_BIG5_HKSCS(((rtl_TextEncoding) 86)) }, /* locale: zh_CN.BIG5HK */ |
521 | { "Big5HKSCS", RTL_TEXTENCODING_BIG5_HKSCS(((rtl_TextEncoding) 86)) }, /* deprecated */ |
522 | { "CP1251", RTL_TEXTENCODING_MS_1251(((rtl_TextEncoding) 34)) }, /* MS-CYRL */ |
523 | { "CP866", RTL_TEXTENCODING_IBM_866(((rtl_TextEncoding) 30)) }, /* CP866 866 */ |
524 | { "CTEXT", RTL_TEXTENCODING_ASCII_US(((rtl_TextEncoding) 11)) }, /* US-ASCII */ |
525 | { "eucCN", RTL_TEXTENCODING_EUC_CN(((rtl_TextEncoding) 70)) }, /* China - Simplified Chinese */ |
526 | { "eucJP", RTL_TEXTENCODING_EUC_JP(((rtl_TextEncoding) 69)) }, /* Japan */ |
527 | { "eucKR", RTL_TEXTENCODING_EUC_KR(((rtl_TextEncoding) 79)) }, /* Korea */ |
528 | { "eucTW", RTL_TEXTENCODING_EUC_TW(((rtl_TextEncoding) 71)) }, /* China - Traditional Chinese */ |
529 | { "GB18030", RTL_TEXTENCODING_GB_18030(((rtl_TextEncoding) 85)) }, /* locale: zh_CN.gb18030 */ |
530 | { "GB2312", RTL_TEXTENCODING_GB_2312(((rtl_TextEncoding) 65)) }, /* locale: zh_CN */ |
531 | { "ISO-2022-JP", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* */ |
532 | { "ISO-2022-JP-2", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, /* */ |
533 | { "ISO8859-1", RTL_TEXTENCODING_ISO_8859_1(((rtl_TextEncoding) 12)) }, /* Western */ |
534 | { "ISO8859-13", RTL_TEXTENCODING_ISO_8859_13(((rtl_TextEncoding) 78)) }, /* ISO-IR-179 LATIN7 */ |
535 | { "ISO8859-15", RTL_TEXTENCODING_ISO_8859_15(((rtl_TextEncoding) 22)) }, /* Western Updated (w/Euro sign) */ |
536 | { "ISO8859-2", RTL_TEXTENCODING_ISO_8859_2(((rtl_TextEncoding) 13)) }, /* Central European */ |
537 | { "ISO8859-4", RTL_TEXTENCODING_ISO_8859_4(((rtl_TextEncoding) 15)) }, /* LATIN4 L4 */ |
538 | { "ISO8859-5", RTL_TEXTENCODING_ISO_8859_5(((rtl_TextEncoding) 16)) }, /* Cyrillic */ |
539 | { "ISO8859-7", RTL_TEXTENCODING_ISO_8859_7(((rtl_TextEncoding) 18)) }, /* Greek */ |
540 | { "ISO8859-9", RTL_TEXTENCODING_ISO_8859_9(((rtl_TextEncoding) 20)) }, /* Turkish */ |
541 | { "KOI8-R", RTL_TEXTENCODING_KOI8_R(((rtl_TextEncoding) 74)) }, /* KOI8-R */ |
542 | { "KOI8-U", RTL_TEXTENCODING_KOI8_U(((rtl_TextEncoding) 88)) }, /* KOI8-U */ |
543 | { "PT154", RTL_TEXTENCODING_PT154(((rtl_TextEncoding) 93)) }, /* */ |
544 | { "SJIS", RTL_TEXTENCODING_SHIFT_JIS(((rtl_TextEncoding) 64)) }, /* Japan */ |
545 | { "US-ASCII", RTL_TEXTENCODING_ASCII_US(((rtl_TextEncoding) 11)) }, /* US-ASCII */ |
546 | { "UTF-8", RTL_TEXTENCODING_UTF8(((rtl_TextEncoding) 76)) } /* ISO-10646/UTF-8 */ |
547 | }; |
548 | |
549 | #elif defined(OPENBSD) |
550 | |
551 | const _pair _nl_language_list[] = { |
552 | { "ASCII", RTL_TEXTENCODING_ASCII_US(((rtl_TextEncoding) 11)) }, /* US-ASCII */ |
553 | { "BIG5", RTL_TEXTENCODING_BIG5(((rtl_TextEncoding) 68)) }, /* China - Traditional Chinese */ |
554 | { "CP1251", RTL_TEXTENCODING_MS_1251(((rtl_TextEncoding) 34)) }, /* MS-CYRL */ |
555 | { "CP866", RTL_TEXTENCODING_IBM_866(((rtl_TextEncoding) 30)) }, /* CP866 866 */ |
556 | { "EUCCN", RTL_TEXTENCODING_EUC_CN(((rtl_TextEncoding) 70)) }, /* China - Simplified Chinese */ |
557 | { "EUCJP", RTL_TEXTENCODING_EUC_JP(((rtl_TextEncoding) 69)) }, /* Japan */ |
558 | { "EUCKR", RTL_TEXTENCODING_EUC_KR(((rtl_TextEncoding) 79)) }, /* Korea */ |
559 | { "ISO8859-1", RTL_TEXTENCODING_ISO_8859_1(((rtl_TextEncoding) 12)) }, /* Western */ |
560 | { "ISO8859-15", RTL_TEXTENCODING_ISO_8859_15(((rtl_TextEncoding) 22)) }, /* Western Updated (w/Euro sign) */ |
561 | { "ISO8859-2", RTL_TEXTENCODING_ISO_8859_2(((rtl_TextEncoding) 13)) }, /* Central European */ |
562 | { "ISO8859-4", RTL_TEXTENCODING_ISO_8859_4(((rtl_TextEncoding) 15)) }, /* LATIN4 L4 */ |
563 | { "ISO8859-5", RTL_TEXTENCODING_ISO_8859_5(((rtl_TextEncoding) 16)) }, /* Cyrillic */ |
564 | { "ISO8859-7", RTL_TEXTENCODING_ISO_8859_7(((rtl_TextEncoding) 18)) }, /* Greek */ |
565 | { "ISO8859-9", RTL_TEXTENCODING_ISO_8859_9(((rtl_TextEncoding) 20)) }, /* Turkish */ |
566 | { "KOI8-R", RTL_TEXTENCODING_KOI8_R(((rtl_TextEncoding) 74)) }, /* KOI8-R */ |
567 | { "KOI8-U", RTL_TEXTENCODING_KOI8_U(((rtl_TextEncoding) 88)) }, /* KOI8-U */ |
568 | { "SJIS", RTL_TEXTENCODING_SHIFT_JIS(((rtl_TextEncoding) 64)) }, /* Japan */ |
569 | { "US-ASCII", RTL_TEXTENCODING_ASCII_US(((rtl_TextEncoding) 11)) }, /* US-ASCII */ |
570 | { "UTF-8", RTL_TEXTENCODING_UTF8(((rtl_TextEncoding) 76)) } /* ISO-10646/UTF-8 */ |
571 | }; |
572 | |
573 | #endif /* ifdef SOLARIS LINUX FREEBSD NETBSD OPENBSD */ |
574 | |
575 | static pthread_mutex_t aLocalMutex = PTHREAD_MUTEX_INITIALIZER{ { 0, 0, 0, 0, 0, { 0 } } }; |
576 | |
577 | /***************************************************************************** |
578 | return the text encoding corresponding to the given locale |
579 | *****************************************************************************/ |
580 | |
581 | rtl_TextEncoding osl_getTextEncodingFromLocale( rtl_Locale * pLocale ) |
582 | { |
583 | const _pair *language=0; |
584 | |
585 | char locale_buf[64] = ""; |
586 | char codeset_buf[64]; |
587 | |
588 | char *ctype_locale = 0; |
589 | char *codeset = 0; |
590 | |
591 | /* default to process locale if pLocale == NULL */ |
592 | if( NULL((void*)0) == pLocale ) |
593 | osl_getProcessLocale( &pLocale ); |
594 | |
595 | /* convert rtl_Locale to locale string */ |
596 | _compose_locale( pLocale, locale_buf, 64 ); |
597 | |
598 | /* basic thread safeness */ |
599 | pthread_mutex_lock( &aLocalMutex ); |
600 | |
601 | /* remember the charset as indicated by the LC_CTYPE locale */ |
602 | ctype_locale = setlocale( LC_CTYPE__LC_CTYPE, NULL((void*)0) ); |
603 | |
604 | /* set the desired LC_CTYPE locale */ |
605 | if( NULL((void*)0) == setlocale( LC_CTYPE__LC_CTYPE, locale_buf ) ) |
606 | { |
607 | pthread_mutex_unlock(&aLocalMutex); |
608 | return RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)); |
609 | } |
610 | |
611 | /* get the charset as indicated by the LC_CTYPE locale */ |
612 | #if defined(NETBSD) && !defined(CODESETCODESET) |
613 | codeset = NULL((void*)0); |
614 | #else |
615 | codeset = nl_langinfo( CODESETCODESET ); |
616 | #endif |
617 | |
618 | if ( codeset != NULL((void*)0) ) |
619 | { |
620 | /* get codeset into mt save memory */ |
621 | strncpy( codeset_buf, codeset, sizeof(codeset_buf) ); |
622 | codeset_buf[sizeof(codeset_buf) - 1] = 0; |
623 | codeset = codeset_buf; |
624 | } |
625 | |
626 | /* restore the original value of locale */ |
627 | if ( ctype_locale != NULL((void*)0) ) |
628 | setlocale( LC_CTYPE__LC_CTYPE, ctype_locale ); |
629 | |
630 | pthread_mutex_unlock( &aLocalMutex ); |
631 | |
632 | /* search the codeset in our language list */ |
633 | if ( codeset != NULL((void*)0) ) |
634 | { |
635 | language = _pair_search (codeset, _nl_language_list, SAL_N_ELEMENTS( _nl_language_list )(sizeof (_nl_language_list) / sizeof ((_nl_language_list)[0]) ) ); |
636 | } |
637 | |
638 | OSL_ASSERT( language && ( RTL_TEXTENCODING_DONTKNOW != language->value ) )do { if (((sal_Bool)1) && (!(language && ( (( (rtl_TextEncoding) 0)) != language->value )))) { sal_detail_logFormat ((SAL_DETAIL_LOG_LEVEL_WARN), ("legacy.osl"), ("/usr/local/src/libreoffice/sal/osl/unx/nlsupport.c" ":" "638" ": "), "OSL_ASSERT: %s", "language && ( RTL_TEXTENCODING_DONTKNOW != language->value )" ); } } while (((sal_Bool)0)); |
639 | |
640 | /* a matching item in our list provides a mapping from codeset to |
641 | * rtl-codeset */ |
642 | if ( language != NULL((void*)0) ) |
643 | return language->value; |
644 | |
645 | return RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)); |
646 | } |
647 | |
648 | /***************************************************************************** |
649 | return the current process locale |
650 | *****************************************************************************/ |
651 | |
652 | void _imp_getProcessLocale( rtl_Locale ** ppLocale ) |
653 | { |
654 | char * locale; |
655 | |
656 | /* basic thread safeness */ |
657 | pthread_mutex_lock( &aLocalMutex ); |
658 | |
659 | /* set the locale defined by the env vars */ |
660 | locale = setlocale( LC_CTYPE__LC_CTYPE, "" ); |
661 | |
662 | /* fallback to the current locale */ |
663 | if( NULL((void*)0) == locale ) |
664 | locale = setlocale( LC_CTYPE__LC_CTYPE, NULL((void*)0) ); |
665 | |
666 | /* return the LC_CTYPE locale */ |
667 | *ppLocale = _parse_locale( locale ); |
668 | |
669 | pthread_mutex_unlock( &aLocalMutex ); |
670 | } |
671 | |
672 | /***************************************************************************** |
673 | set the current process locale |
674 | *****************************************************************************/ |
675 | |
676 | int _imp_setProcessLocale( rtl_Locale * pLocale ) |
677 | { |
678 | char locale_buf[64] = ""; |
679 | int ret = 0; |
680 | |
681 | /* convert rtl_Locale to locale string */ |
682 | _compose_locale( pLocale, locale_buf, 64 ); |
683 | |
684 | /* basic thread safeness */ |
685 | pthread_mutex_lock( &aLocalMutex ); |
686 | |
687 | /* try to set LC_ALL locale */ |
688 | if( NULL((void*)0) == setlocale( LC_ALL__LC_ALL, locale_buf ) ) |
689 | ret = -1; |
690 | |
691 | pthread_mutex_unlock( &aLocalMutex ); |
692 | return ret; |
693 | } |
694 | |
695 | #else /* ifdef LINUX || SOLARIS || MACOSX || NETBSD */ |
696 | |
697 | /* |
698 | * This implementation of osl_getTextEncodingFromLocale maps |
699 | * from the ISO language codes. |
700 | */ |
701 | |
702 | const _pair _full_locale_list[] = { |
703 | { "ja_JP.eucJP", RTL_TEXTENCODING_EUC_JP(((rtl_TextEncoding) 69)) }, |
704 | { "ja_JP.EUC", RTL_TEXTENCODING_EUC_JP(((rtl_TextEncoding) 69)) }, |
705 | { "ko_KR.EUC", RTL_TEXTENCODING_EUC_KR(((rtl_TextEncoding) 79)) }, |
706 | { "zh_CN.EUC", RTL_TEXTENCODING_EUC_CN(((rtl_TextEncoding) 70)) }, |
707 | { "zh_TW.EUC", RTL_TEXTENCODING_EUC_TW(((rtl_TextEncoding) 71)) } |
708 | }; |
709 | |
710 | const _pair _locale_extension_list[] = { |
711 | { "big5", RTL_TEXTENCODING_BIG5(((rtl_TextEncoding) 68)) }, |
712 | { "big5hk", RTL_TEXTENCODING_BIG5_HKSCS(((rtl_TextEncoding) 86)) }, |
713 | { "gb18030", RTL_TEXTENCODING_GB_18030(((rtl_TextEncoding) 85)) }, |
714 | { "euc", RTL_TEXTENCODING_EUC_JP(((rtl_TextEncoding) 69)) }, |
715 | { "iso8859-1", RTL_TEXTENCODING_ISO_8859_1(((rtl_TextEncoding) 12)) }, |
716 | { "iso8859-10", RTL_TEXTENCODING_ISO_8859_10(((rtl_TextEncoding) 77)) }, |
717 | { "iso8859-13", RTL_TEXTENCODING_ISO_8859_13(((rtl_TextEncoding) 78)) }, |
718 | { "iso8859-14", RTL_TEXTENCODING_ISO_8859_14(((rtl_TextEncoding) 21)) }, |
719 | { "iso8859-15", RTL_TEXTENCODING_ISO_8859_15(((rtl_TextEncoding) 22)) }, |
720 | { "iso8859-2", RTL_TEXTENCODING_ISO_8859_2(((rtl_TextEncoding) 13)) }, |
721 | { "iso8859-3", RTL_TEXTENCODING_ISO_8859_3(((rtl_TextEncoding) 14)) }, |
722 | { "iso8859-4", RTL_TEXTENCODING_ISO_8859_4(((rtl_TextEncoding) 15)) }, |
723 | { "iso8859-5", RTL_TEXTENCODING_ISO_8859_5(((rtl_TextEncoding) 16)) }, |
724 | { "iso8859-6", RTL_TEXTENCODING_ISO_8859_6(((rtl_TextEncoding) 17)) }, |
725 | { "iso8859-7", RTL_TEXTENCODING_ISO_8859_7(((rtl_TextEncoding) 18)) }, |
726 | { "iso8859-8", RTL_TEXTENCODING_ISO_8859_8(((rtl_TextEncoding) 19)) }, |
727 | { "iso8859-9", RTL_TEXTENCODING_ISO_8859_9(((rtl_TextEncoding) 20)) }, |
728 | { "koi8-r", RTL_TEXTENCODING_KOI8_R(((rtl_TextEncoding) 74)) }, |
729 | { "koi8-u", RTL_TEXTENCODING_KOI8_U(((rtl_TextEncoding) 88)) }, |
730 | { "pck", RTL_TEXTENCODING_MS_932(((rtl_TextEncoding) 60)) }, |
731 | #if (0) |
732 | { "sun_eu_greek", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, |
733 | #endif |
734 | { "utf-16", RTL_TEXTENCODING_UNICODE(((rtl_TextEncoding) 0xFFFF)) }, |
735 | { "utf-7", RTL_TEXTENCODING_UTF7(((rtl_TextEncoding) 75)) }, |
736 | { "utf-8", RTL_TEXTENCODING_UTF8(((rtl_TextEncoding) 76)) } |
737 | }; |
738 | |
739 | const _pair _iso_language_list[] = { |
740 | { "af", RTL_TEXTENCODING_ISO_8859_1(((rtl_TextEncoding) 12)) }, |
741 | { "ar", RTL_TEXTENCODING_ISO_8859_6(((rtl_TextEncoding) 17)) }, |
742 | { "az", RTL_TEXTENCODING_ISO_8859_9(((rtl_TextEncoding) 20)) }, |
743 | { "be", RTL_TEXTENCODING_ISO_8859_5(((rtl_TextEncoding) 16)) }, |
744 | { "bg", RTL_TEXTENCODING_ISO_8859_5(((rtl_TextEncoding) 16)) }, |
745 | { "ca", RTL_TEXTENCODING_ISO_8859_1(((rtl_TextEncoding) 12)) }, |
746 | { "cs", RTL_TEXTENCODING_ISO_8859_2(((rtl_TextEncoding) 13)) }, |
747 | { "da", RTL_TEXTENCODING_ISO_8859_1(((rtl_TextEncoding) 12)) }, |
748 | { "de", RTL_TEXTENCODING_ISO_8859_1(((rtl_TextEncoding) 12)) }, |
749 | { "el", RTL_TEXTENCODING_ISO_8859_7(((rtl_TextEncoding) 18)) }, |
750 | { "en", RTL_TEXTENCODING_ISO_8859_1(((rtl_TextEncoding) 12)) }, |
751 | { "es", RTL_TEXTENCODING_ISO_8859_1(((rtl_TextEncoding) 12)) }, |
752 | { "et", RTL_TEXTENCODING_ISO_8859_4(((rtl_TextEncoding) 15)) }, |
753 | { "eu", RTL_TEXTENCODING_ISO_8859_1(((rtl_TextEncoding) 12)) }, |
754 | { "fa", RTL_TEXTENCODING_ISO_8859_6(((rtl_TextEncoding) 17)) }, |
755 | { "fi", RTL_TEXTENCODING_ISO_8859_1(((rtl_TextEncoding) 12)) }, |
756 | { "fo", RTL_TEXTENCODING_ISO_8859_1(((rtl_TextEncoding) 12)) }, |
757 | { "fr", RTL_TEXTENCODING_ISO_8859_1(((rtl_TextEncoding) 12)) }, |
758 | { "gr", RTL_TEXTENCODING_ISO_8859_7(((rtl_TextEncoding) 18)) }, |
759 | { "he", RTL_TEXTENCODING_ISO_8859_8(((rtl_TextEncoding) 19)) }, |
760 | { "hi", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, |
761 | { "hr", RTL_TEXTENCODING_ISO_8859_2(((rtl_TextEncoding) 13)) }, |
762 | { "hu", RTL_TEXTENCODING_ISO_8859_2(((rtl_TextEncoding) 13)) }, |
763 | { "hy", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, |
764 | { "id", RTL_TEXTENCODING_ISO_8859_1(((rtl_TextEncoding) 12)) }, |
765 | { "is", RTL_TEXTENCODING_ISO_8859_1(((rtl_TextEncoding) 12)) }, |
766 | { "it", RTL_TEXTENCODING_ISO_8859_1(((rtl_TextEncoding) 12)) }, |
767 | { "iw", RTL_TEXTENCODING_ISO_8859_8(((rtl_TextEncoding) 19)) }, |
768 | { "ja", RTL_TEXTENCODING_EUC_JP(((rtl_TextEncoding) 69)) }, |
769 | { "ka", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, |
770 | { "kk", RTL_TEXTENCODING_ISO_8859_5(((rtl_TextEncoding) 16)) }, |
771 | { "ko", RTL_TEXTENCODING_EUC_KR(((rtl_TextEncoding) 79)) }, |
772 | { "lt", RTL_TEXTENCODING_ISO_8859_4(((rtl_TextEncoding) 15)) }, |
773 | { "lv", RTL_TEXTENCODING_ISO_8859_4(((rtl_TextEncoding) 15)) }, |
774 | { "mk", RTL_TEXTENCODING_ISO_8859_5(((rtl_TextEncoding) 16)) }, |
775 | { "mr", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, |
776 | { "ms", RTL_TEXTENCODING_ISO_8859_1(((rtl_TextEncoding) 12)) }, |
777 | { "nl", RTL_TEXTENCODING_ISO_8859_1(((rtl_TextEncoding) 12)) }, |
778 | { "no", RTL_TEXTENCODING_ISO_8859_1(((rtl_TextEncoding) 12)) }, |
779 | { "pl", RTL_TEXTENCODING_ISO_8859_2(((rtl_TextEncoding) 13)) }, |
780 | { "pt", RTL_TEXTENCODING_ISO_8859_1(((rtl_TextEncoding) 12)) }, |
781 | { "ro", RTL_TEXTENCODING_ISO_8859_2(((rtl_TextEncoding) 13)) }, |
782 | { "ru", RTL_TEXTENCODING_ISO_8859_5(((rtl_TextEncoding) 16)) }, |
783 | { "sa", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, |
784 | { "sk", RTL_TEXTENCODING_ISO_8859_2(((rtl_TextEncoding) 13)) }, |
785 | { "sl", RTL_TEXTENCODING_ISO_8859_2(((rtl_TextEncoding) 13)) }, |
786 | { "sq", RTL_TEXTENCODING_ISO_8859_2(((rtl_TextEncoding) 13)) }, |
787 | { "sv", RTL_TEXTENCODING_ISO_8859_1(((rtl_TextEncoding) 12)) }, |
788 | { "sw", RTL_TEXTENCODING_ISO_8859_1(((rtl_TextEncoding) 12)) }, |
789 | { "ta", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, |
790 | { "th", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, |
791 | { "tr", RTL_TEXTENCODING_ISO_8859_9(((rtl_TextEncoding) 20)) }, |
792 | { "tt", RTL_TEXTENCODING_ISO_8859_5(((rtl_TextEncoding) 16)) }, |
793 | { "uk", RTL_TEXTENCODING_ISO_8859_5(((rtl_TextEncoding) 16)) }, |
794 | { "ur", RTL_TEXTENCODING_ISO_8859_6(((rtl_TextEncoding) 17)) }, |
795 | { "uz", RTL_TEXTENCODING_ISO_8859_9(((rtl_TextEncoding) 20)) }, |
796 | { "vi", RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)) }, |
797 | { "zh", RTL_TEXTENCODING_BIG5(((rtl_TextEncoding) 68)) } |
798 | }; |
799 | |
800 | /***************************************************************************** |
801 | return the text encoding corresponding to the given locale |
802 | *****************************************************************************/ |
803 | |
804 | rtl_TextEncoding osl_getTextEncodingFromLocale( rtl_Locale * pLocale ) |
805 | { |
806 | const _pair *language = 0; |
807 | char locale_buf[64] = ""; |
808 | char *cp; |
809 | |
810 | /* default to process locale if pLocale == NULL */ |
811 | if( NULL((void*)0) == pLocale ) |
812 | osl_getProcessLocale( &pLocale ); |
813 | |
814 | /* convert rtl_Locale to locale string */ |
815 | if( _compose_locale( pLocale, locale_buf, 64 ) ) |
816 | { |
817 | /* check special handling list (EUC) first */ |
818 | language = _pair_search( locale_buf, _full_locale_list, SAL_N_ELEMENTS( _full_locale_list )(sizeof (_full_locale_list) / sizeof ((_full_locale_list)[0]) ) ); |
819 | |
820 | if( NULL((void*)0) == language ) |
821 | { |
822 | /* |
823 | * check if there is a charset qualifier at the end of the given locale string |
824 | * e.g. de.ISO8859-15 or de.ISO8859-15@euro which strongly indicates what |
825 | * charset to use |
826 | */ |
827 | cp = strrchr( locale_buf, '.' ); |
828 | |
829 | if( NULL((void*)0) != cp ) |
830 | { |
831 | language = _pair_search( cp + 1, _locale_extension_list, SAL_N_ELEMENTS( _locale_extension_list )(sizeof (_locale_extension_list) / sizeof ((_locale_extension_list )[0])) ); |
832 | } |
833 | } |
834 | |
835 | /* use iso language code to determine the charset */ |
836 | if( NULL((void*)0) == language ) |
837 | { |
838 | /* iso lang codes have 2 charaters */ |
839 | locale_buf[2] = '\0'; |
840 | |
841 | language = _pair_search( locale_buf, _iso_language_list, SAL_N_ELEMENTS( _iso_language_list )(sizeof (_iso_language_list) / sizeof ((_iso_language_list)[0 ])) ); |
842 | } |
843 | } |
844 | |
845 | /* a matching item in our list provides a mapping from codeset to |
846 | * rtl-codeset */ |
847 | if ( language != NULL((void*)0) ) |
848 | return language->value; |
849 | |
850 | return RTL_TEXTENCODING_DONTKNOW(((rtl_TextEncoding) 0)); |
851 | } |
852 | |
853 | #if defined(MACOSX) || defined(IOS) |
854 | #include "system.h" |
855 | |
856 | /* OS X locale discovery function */ |
857 | int (*pGetOSXLocale)( char *, sal_uInt32 ); |
858 | |
859 | /***************************************************************************** |
860 | return the current process locale |
861 | *****************************************************************************/ |
862 | |
863 | int macosx_getLocale(char *locale, sal_uInt32 bufferLen); |
864 | |
865 | void _imp_getProcessLocale( rtl_Locale ** ppLocale ) |
866 | { |
867 | static char *locale = NULL((void*)0); |
868 | |
869 | /* basic thread safeness */ |
870 | // pthread_mutex_lock( &aLocalMutex ); |
871 | |
872 | /* Only fetch the locale once and cache it */ |
873 | if ( NULL((void*)0) == locale ) |
874 | { |
875 | |
876 | locale = (char *)malloc( 128 ); |
877 | if ( locale ) |
878 | macosx_getLocale( locale, 128 ); |
879 | else |
880 | fprintf( stderr, "nlsupport.c: locale allocation returned NULL!\n" ); |
881 | } |
882 | |
883 | /* handle the case where OS specific method of finding locale fails */ |
884 | if ( NULL((void*)0) == locale ) |
885 | { |
886 | /* simulate behavior of setlocale */ |
887 | locale = getenv( "LC_ALL" ); |
888 | |
889 | if( NULL((void*)0) == locale ) |
890 | locale = getenv( "LC_CTYPE" ); |
891 | |
892 | if( NULL((void*)0) == locale ) |
893 | locale = getenv( "LANG" ); |
894 | |
895 | if( NULL((void*)0) == locale ) |
896 | locale = "C"; |
897 | } |
898 | |
899 | /* return the locale */ |
900 | *ppLocale = _parse_locale( locale ); |
901 | |
902 | setenv( "LC_ALL", locale, 1); |
903 | setenv("LC_CTYPE", locale, 1 ); |
904 | setenv("LANG", locale, 1 ); |
905 | |
906 | #if OSL_DEBUG_LEVEL1 > 1 |
907 | OSL_TRACE("_imp_getProcessLocale() returning %s as current locale.", locale )do { if (((sal_Bool)1) && (1 > 0)) { sal_detail_logFormat ((SAL_DETAIL_LOG_LEVEL_INFO), ("legacy.osl"), ("/usr/local/src/libreoffice/sal/osl/unx/nlsupport.c" ":" "907" ": "), "_imp_getProcessLocale() returning %s as current locale." , locale); } } while (((sal_Bool)0)); |
908 | #endif |
909 | |
910 | // pthread_mutex_unlock( &aLocalMutex ); |
911 | |
912 | } |
913 | #else |
914 | /***************************************************************************** |
915 | return the current process locale |
916 | *****************************************************************************/ |
917 | |
918 | void _imp_getProcessLocale( rtl_Locale ** ppLocale ) |
919 | { |
920 | /* simulate behavior off setlocale */ |
921 | char * locale = getenv( "LC_ALL" ); |
922 | |
923 | if( NULL((void*)0) == locale ) |
924 | locale = getenv( "LC_CTYPE" ); |
925 | |
926 | if( NULL((void*)0) == locale ) |
927 | locale = getenv( "LANG" ); |
928 | |
929 | if( NULL((void*)0) == locale ) |
930 | #ifdef ANDROID |
931 | locale = "en-US.UTF-8"; |
932 | #else |
933 | locale = "C"; |
934 | #endif |
935 | |
936 | *ppLocale = _parse_locale( locale ); |
937 | } |
938 | #endif |
939 | |
940 | /***************************************************************************** |
941 | set the current process locale |
942 | *****************************************************************************/ |
943 | |
944 | static int |
945 | _setenv (const char* name, const char* value) |
946 | { |
947 | return setenv (name, value, 1); |
948 | } |
949 | |
950 | int _imp_setProcessLocale( rtl_Locale * pLocale ) |
951 | { |
952 | char locale_buf[64]; |
953 | |
954 | /* convert rtl_Locale to locale string */ |
955 | if( NULL((void*)0) != _compose_locale( pLocale, locale_buf, 64 ) ) |
956 | { |
957 | /* only change env vars that exist already */ |
958 | if( getenv( "LC_ALL" ) ) |
959 | _setenv( "LC_ALL", locale_buf ); |
960 | |
961 | if( getenv( "LC_CTYPE" ) ) |
962 | _setenv("LC_CTYPE", locale_buf ); |
963 | |
964 | if( getenv( "LANG" ) ) |
965 | _setenv( "LANG", locale_buf ); |
966 | } |
967 | |
968 | return 0; |
969 | } |
970 | |
971 | #endif /* ifdef LINUX || SOLARIS || MACOSX || NETBSD || AIX */ |
972 | |
973 | |
974 | /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |