Line | Source | Count |
1 | | - |
2 | | - |
3 | | - |
4 | | - |
5 | | - |
6 | | - |
7 | | - |
8 | | - |
9 | | - |
10 | | - |
11 | | - |
12 | | - |
13 | | - |
14 | | - |
15 | | - |
16 | | - |
17 | | - |
18 | | - |
19 | | - |
20 | | - |
21 | | - |
22 | #define READLINE_LIBRARY | - |
23 | | - |
24 | #if defined (HAVE_CONFIG_H) | - |
25 | # include <config.h> | - |
26 | #endif | - |
27 | | - |
28 | #include <sys/types.h> | - |
29 | | - |
30 | #include <stdio.h> | - |
31 | | - |
32 | #if defined (HAVE_UNISTD_H) | - |
33 | # include <unistd.h> | - |
34 | #endif /* HAVE_UNISTD_H */ | - |
35 | | - |
36 | #if defined (HAVE_STDLIB_H) | - |
37 | # include <stdlib.h> | - |
38 | #else | - |
39 | # include "ansi_stdlib.h" | - |
40 | #endif /* HAVE_STDLIB_H */ | - |
41 | | - |
42 | #if defined (HAVE_LOCALE_H) | - |
43 | # include <locale.h> | - |
44 | #endif | - |
45 | | - |
46 | #if defined (HAVE_LANGINFO_CODESET) | - |
47 | # include <langinfo.h> | - |
48 | #endif | - |
49 | | - |
50 | #include <ctype.h> | - |
51 | | - |
52 | #include "rldefs.h" | - |
53 | #include "readline.h" | - |
54 | #include "rlshell.h" | - |
55 | #include "rlprivate.h" | - |
56 | | - |
57 | static int utf8locale PARAMS((char *)); | - |
58 | | - |
59 | #if !defined (HAVE_SETLOCALE) | - |
60 | | - |
61 | | - |
62 | | - |
63 | | - |
64 | static char *legal_lang_values[] = | - |
65 | { | - |
66 | "iso88591", | - |
67 | "iso88592", | - |
68 | "iso88593", | - |
69 | "iso88594", | - |
70 | "iso88595", | - |
71 | "iso88596", | - |
72 | "iso88597", | - |
73 | "iso88598", | - |
74 | "iso88599", | - |
75 | "iso885910", | - |
76 | "koi8r", | - |
77 | "utf8", | - |
78 | 0 | - |
79 | }; | - |
80 | | - |
81 | static char *normalize_codeset PARAMS((char *)); | - |
82 | #endif /* !HAVE_SETLOCALE */ | - |
83 | | - |
84 | static char *find_codeset PARAMS((char *, size_t *)); | - |
85 | | - |
86 | static char *_rl_get_locale_var PARAMS((const char *)); | - |
87 | | - |
88 | static char * | - |
89 | _rl_get_locale_var (const char *v) | - |
90 | { | - |
91 | char *lspec; | - |
92 | | - |
93 | lspec = sh_get_env_value ("LC_ALL"); | - |
94 | if (lspec == 0 || *lspec == 0)TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
95 | lspec = sh_get_env_value (v); never executed: lspec = sh_get_env_value (v); | 0 |
96 | if (lspec == 0 || *lspec == 0)TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
97 | lspec = sh_get_env_value ("LANG"); never executed: lspec = sh_get_env_value ("LANG"); | 0 |
98 | | - |
99 | return lspec; never executed: return lspec; | 0 |
100 | } | - |
101 | | - |
102 | static int | - |
103 | utf8locale (char *lspec) | - |
104 | { | - |
105 | char *cp; | - |
106 | size_t len; | - |
107 | | - |
108 | #if HAVE_LANGINFO_CODESET | - |
109 | cp = nl_langinfo (CODESET); | - |
110 | return (STREQ (cp, "UTF-8") || STREQ (cp, "utf8")); never executed: return ((((cp)[0] == ("UTF-8")[0]) && ( __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p ( (cp) ) && __builtin_constant_p ( ("UTF-8") ) && (__s1_len = __builtin_strlen ( (cp) ), __s2_len = __builtin_strlen ( ("UTF-8") ), (!((size_t)(const...onst unsigned char *) (const char *) ( ("utf8") ))[2] - __s2[2]); if (__s2_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) ( ("utf8") ))[3] - __s2[3]); } } __result; }))) : __builtin_strcmp ( (cp) , ("utf8") )))); }) == 0))); never executed: __result = (((const unsigned char *) (const char *) ( (cp) ))[3] - __s2[3]); never executed: end of block never executed: end of block never executed: __result = (((const unsigned char *) (const char *) ( ("UTF-8") ))[3] - __s2[3]); never executed: end of block never executed: end of block never executed: __result = (((const unsigned char *) (const char *) ( (cp) ))[3] - __s2[3]); never executed: end of block never executed: end of block never executed: __result = (((const unsigned char *) (const char *) ( ("utf8") ))[3] - __s2[3]); never executed: end of block never executed: end of block TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
111 | #else | - |
112 | cp = find_codeset (lspec, &len); | - |
113 | | - |
114 | if (cp == 0 || len < 4 || len > 5) | - |
115 | return 0; | - |
116 | return ((len == 5) ? strncmp (cp, "UTF-8", len) == 0 : strncmp (cp, "utf8", 4) == 0); | - |
117 | #endif | - |
118 | } | - |
119 | | - |
120 | | - |
121 | | - |
122 | char * | - |
123 | _rl_init_locale (void) | - |
124 | { | - |
125 | char *ret, *lspec; | - |
126 | | - |
127 | | - |
128 | lspec = _rl_get_locale_var ("LC_CTYPE"); | - |
129 | | - |
130 | | - |
131 | | - |
132 | | - |
133 | | - |
134 | if (lspec == 0 || *lspec == 0)TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
135 | lspec = setlocale (LC_CTYPE, (char *)NULL); never executed: lspec = setlocale ( 0 , (char *) ((void *)0) ); | 0 |
136 | if (lspec == 0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
137 | lspec = ""; never executed: lspec = ""; | 0 |
138 | ret = setlocale (LC_CTYPE, lspec); | - |
139 | | - |
140 | _rl_utf8locale = (ret && *ret) ? utf8locale (ret) : 0;TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
141 | | - |
142 | return ret; never executed: return ret; | 0 |
143 | } | - |
144 | | - |
145 | | - |
146 | | - |
147 | | - |
148 | int | - |
149 | _rl_init_eightbit (void) | - |
150 | { | - |
151 | | - |
152 | | - |
153 | #if defined (HAVE_SETLOCALE) | - |
154 | char *lspec, *t; | - |
155 | | - |
156 | t = _rl_init_locale (); | - |
157 | | - |
158 | if (t && *t && (t[0] != 'C' || t[1]) && (STREQ (t, "POSIX") == 0)) never executed: __result = (((const unsigned char *) (const char *) ( (t) ))[3] - __s2[3]); never executed: end of block never executed: end of block never executed: __result = (((const unsigned char *) (const char *) ( ("POSIX") ))[3] - __s2[3]); never executed: end of block never executed: end of block TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
159 | { | - |
160 | _rl_meta_flag = 1; | - |
161 | _rl_convert_meta_chars_to_ascii = 0; | - |
162 | _rl_output_meta_chars = 1; | - |
163 | return (1); never executed: return (1); | 0 |
164 | } | - |
165 | else | - |
166 | return (0); never executed: return (0); | 0 |
167 | | - |
168 | #else /* !HAVE_SETLOCALE */ | - |
169 | char *lspec, *t; | - |
170 | int i; | - |
171 | | - |
172 | | - |
173 | | - |
174 | | - |
175 | lspec = _rl_get_locale_var ("LC_CTYPE"); | - |
176 | | - |
177 | if (lspec == 0 || (t = normalize_codeset (lspec)) == 0) | - |
178 | return (0); | - |
179 | for (i = 0; t && legal_lang_values[i]; i++) | - |
180 | if (STREQ (t, legal_lang_values[i])) | - |
181 | { | - |
182 | _rl_meta_flag = 1; | - |
183 | _rl_convert_meta_chars_to_ascii = 0; | - |
184 | _rl_output_meta_chars = 1; | - |
185 | break; | - |
186 | } | - |
187 | | - |
188 | _rl_utf8locale = *t ? STREQ (t, "utf8") : 0; | - |
189 | | - |
190 | xfree (t); | - |
191 | return (legal_lang_values[i] ? 1 : 0); | - |
192 | #endif /* !HAVE_SETLOCALE */ | - |
193 | } | - |
194 | | - |
195 | #if !defined (HAVE_SETLOCALE) | - |
196 | static char * | - |
197 | normalize_codeset (char *codeset) | - |
198 | { | - |
199 | size_t namelen, i; | - |
200 | int len, all_digits; | - |
201 | char *wp, *retval; | - |
202 | | - |
203 | codeset = find_codeset (codeset, &namelen); | - |
204 | | - |
205 | if (codeset == 0) | - |
206 | return (codeset); | - |
207 | | - |
208 | all_digits = 1; | - |
209 | for (len = 0, i = 0; i < namelen; i++) | - |
210 | { | - |
211 | if (ISALNUM ((unsigned char)codeset[i])) | - |
212 | { | - |
213 | len++; | - |
214 | all_digits &= _rl_digit_p (codeset[i]); | - |
215 | } | - |
216 | } | - |
217 | | - |
218 | retval = (char *)malloc ((all_digits ? 3 : 0) + len + 1); | - |
219 | if (retval == 0) | - |
220 | return ((char *)0); | - |
221 | | - |
222 | wp = retval; | - |
223 | | - |
224 | if (all_digits) | - |
225 | { | - |
226 | *wp++ = 'i'; | - |
227 | *wp++ = 's'; | - |
228 | *wp++ = 'o'; | - |
229 | } | - |
230 | | - |
231 | for (i = 0; i < namelen; i++) | - |
232 | if (ISALPHA ((unsigned char)codeset[i])) | - |
233 | *wp++ = _rl_to_lower (codeset[i]); | - |
234 | else if (_rl_digit_p (codeset[i])) | - |
235 | *wp++ = codeset[i]; | - |
236 | *wp = '\0'; | - |
237 | | - |
238 | return retval; | - |
239 | } | - |
240 | #endif /* !HAVE_SETLOCALE */ | - |
241 | | - |
242 | | - |
243 | static char * | - |
244 | find_codeset (char *name, size_t *lenp) | - |
245 | { | - |
246 | char *cp, *language, *result; | - |
247 | | - |
248 | cp = language = name; | - |
249 | result = (char *)0; | - |
250 | | - |
251 | while (*cp && *cp != '_' && *cp != '@' && *cp != '+' && *cp != ',')TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
252 | cp++; never executed: cp++; | 0 |
253 | | - |
254 | | - |
255 | | - |
256 | | - |
257 | if (language == cp) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
258 | { | - |
259 | *lenp = strlen (language); | - |
260 | result = language; | - |
261 | } never executed: end of block | 0 |
262 | else | - |
263 | { | - |
264 | | - |
265 | if (*cp == '_')TRUE | never evaluated | FALSE | never evaluated |
| 0 |
266 | do | - |
267 | ++cp; never executed: ++cp; | 0 |
268 | while (*cp && *cp != '.' && *cp != '@' && *cp != '+' && *cp != ',' && *cp != '_');TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
269 | | - |
270 | | - |
271 | result = cp; | - |
272 | if (*cp == '.')TRUE | never evaluated | FALSE | never evaluated |
| 0 |
273 | do | - |
274 | ++cp; never executed: ++cp; | 0 |
275 | while (*cp && *cp != '@');TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
276 | | - |
277 | if (cp - result > 2)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
278 | { | - |
279 | result++; | - |
280 | *lenp = cp - result; | - |
281 | } never executed: end of block | 0 |
282 | else | - |
283 | { | - |
284 | *lenp = strlen (language); | - |
285 | result = language; | - |
286 | } never executed: end of block | 0 |
287 | } | - |
288 | | - |
289 | return result; never executed: return result; | 0 |
290 | } | - |
| | |