Absolute File Name: | /home/opencoverage/opencoverage/guest-scripts/coreutils/src/gnulib/lib/unicodeio.c |
Switch to Source code | Preprocessed file |
Line | Source | Count | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | - | |||||||||||||
2 | - | |||||||||||||
3 | - | |||||||||||||
4 | - | |||||||||||||
5 | - | |||||||||||||
6 | - | |||||||||||||
7 | - | |||||||||||||
8 | - | |||||||||||||
9 | - | |||||||||||||
10 | - | |||||||||||||
11 | - | |||||||||||||
12 | long | - | ||||||||||||
13 | unicode_to_mb (unsigned int code, | - | ||||||||||||
14 | long (*success) (const char *buf, size_t buflen, | - | ||||||||||||
15 | void *callback_arg), | - | ||||||||||||
16 | long (*failure) (unsigned int code, const char *msg, | - | ||||||||||||
17 | void *callback_arg), | - | ||||||||||||
18 | void *callback_arg) | - | ||||||||||||
19 | { | - | ||||||||||||
20 | static int initialized; | - | ||||||||||||
21 | static int is_utf8; | - | ||||||||||||
22 | - | |||||||||||||
23 | static iconv_t utf8_to_local; | - | ||||||||||||
24 | - | |||||||||||||
25 | - | |||||||||||||
26 | char inbuf[6]; | - | ||||||||||||
27 | int count; | - | ||||||||||||
28 | - | |||||||||||||
29 | if (!initialized
| 0 | ||||||||||||
30 | { | - | ||||||||||||
31 | const char *charset = locale_charset (); | - | ||||||||||||
32 | - | |||||||||||||
33 | is_utf8 = ! | - | ||||||||||||
34 | __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p ( | - | ||||||||||||
35 | charset | - | ||||||||||||
36 | ) && __builtin_constant_p ( | - | ||||||||||||
37 | "UTF-8" | - | ||||||||||||
38 | ) && (__s1_len = __builtin_strlen ( | - | ||||||||||||
39 | charset | - | ||||||||||||
40 | ), __s2_len = __builtin_strlen ( | - | ||||||||||||
41 | "UTF-8" | - | ||||||||||||
42 | ), (!((size_t)(const void *)(( | - | ||||||||||||
43 | charset | - | ||||||||||||
44 | ) + 1) - (size_t)(const void *)( | - | ||||||||||||
45 | charset | - | ||||||||||||
46 | ) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(( | - | ||||||||||||
47 | "UTF-8" | - | ||||||||||||
48 | ) + 1) - (size_t)(const void *)( | - | ||||||||||||
49 | "UTF-8" | - | ||||||||||||
50 | ) == 1) || __s2_len >= 4)) ? __builtin_strcmp ( | - | ||||||||||||
51 | charset | - | ||||||||||||
52 | , | - | ||||||||||||
53 | "UTF-8" | - | ||||||||||||
54 | ) : (__builtin_constant_p ( | - | ||||||||||||
55 | charset | - | ||||||||||||
56 | ) && ((size_t)(const void *)(( | - | ||||||||||||
57 | charset | - | ||||||||||||
58 | ) + 1) - (size_t)(const void *)( | - | ||||||||||||
59 | charset | - | ||||||||||||
60 | ) == 1) && (__s1_len = __builtin_strlen ( | - | ||||||||||||
61 | charset | - | ||||||||||||
62 | ), __s1_len < 4) ? (__builtin_constant_p ( | - | ||||||||||||
63 | "UTF-8" | - | ||||||||||||
64 | ) && ((size_t)(const void *)(( | - | ||||||||||||
65 | "UTF-8" | - | ||||||||||||
66 | ) + 1) - (size_t)(const void *)( | - | ||||||||||||
67 | "UTF-8" | - | ||||||||||||
68 | ) == 1) ? __builtin_strcmp ( | - | ||||||||||||
69 | charset | - | ||||||||||||
70 | , | - | ||||||||||||
71 | "UTF-8" | - | ||||||||||||
72 | ) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) ( | - | ||||||||||||
73 | "UTF-8" | - | ||||||||||||
74 | ); int __result = (((const unsigned char *) (const char *) ( | - | ||||||||||||
75 | charset | - | ||||||||||||
76 | ))[0] - __s2[0]); if (__s1_len > 0
| 0 | ||||||||||||
77 | charset | - | ||||||||||||
78 | ))[1] - __s2[1]); if (__s1_len > 1
| 0 | ||||||||||||
79 | charset | - | ||||||||||||
80 | ))[2] - __s2[2]); if (__s1_len > 2
never executed: __result = (((const unsigned char *) (const char *) ( charset ))[3] - __s2[3]); | 0 | ||||||||||||
81 | charset never executed: __result = (((const unsigned char *) (const char *) ( charset ))[3] - __s2[3]); | 0 | ||||||||||||
82 | ))[3] - __s2[3]); never executed: }__result = (((const unsigned char *) (const char *) ( charset ))[3] - __s2[3]); never executed: }end of block never executed: __result; }))) : (__builtin_constant_p (end of block | 0 | ||||||||||||
83 | "UTF-8" | - | ||||||||||||
84 | ) && ((size_t)(const void *)(( | - | ||||||||||||
85 | "UTF-8" | - | ||||||||||||
86 | ) + 1) - (size_t)(const void *)( | - | ||||||||||||
87 | "UTF-8" | - | ||||||||||||
88 | ) == 1) && (__s2_len = __builtin_strlen ( | - | ||||||||||||
89 | "UTF-8" | - | ||||||||||||
90 | ), __s2_len < 4) ? (__builtin_constant_p ( | - | ||||||||||||
91 | charset | - | ||||||||||||
92 | ) && ((size_t)(const void *)(( | - | ||||||||||||
93 | charset | - | ||||||||||||
94 | ) + 1) - (size_t)(const void *)( | - | ||||||||||||
95 | charset | - | ||||||||||||
96 | ) == 1) ? __builtin_strcmp ( | - | ||||||||||||
97 | charset | - | ||||||||||||
98 | , | - | ||||||||||||
99 | "UTF-8" | - | ||||||||||||
100 | ) : -(__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) ( | - | ||||||||||||
101 | charset | - | ||||||||||||
102 | ); int __result = (((const unsigned char *) (const char *) ( | - | ||||||||||||
103 | "UTF-8" | - | ||||||||||||
104 | ))[0] - __s2[0]); if (__s2_len > 0
| 0 | ||||||||||||
105 | "UTF-8" | - | ||||||||||||
106 | ))[1] - __s2[1]); if (__s2_len > 1
| 0 | ||||||||||||
107 | "UTF-8" | - | ||||||||||||
108 | ))[2] - __s2[2]); if (__s2_len > 2
never executed: __result = (((const unsigned char *) (const char *) ( "UTF-8" ))[3] - __s2[3]); | 0 | ||||||||||||
109 | "UTF-8" never executed: __result = (((const unsigned char *) (const char *) ( "UTF-8" ))[3] - __s2[3]); | 0 | ||||||||||||
110 | ))[3] - __s2[3]); never executed: }__result = (((const unsigned char *) (const char *) ( "UTF-8" ))[3] - __s2[3]); never executed: }end of block never executed: __result; }))) : __builtin_strcmp (end of block | 0 | ||||||||||||
111 | charset | - | ||||||||||||
112 | , | - | ||||||||||||
113 | "UTF-8" | - | ||||||||||||
114 | )))); }) | - | ||||||||||||
115 | ; | - | ||||||||||||
116 | - | |||||||||||||
117 | if (!is_utf8
| 0 | ||||||||||||
118 | { | - | ||||||||||||
119 | utf8_to_local = iconv_open (charset, "UTF-8"); | - | ||||||||||||
120 | if (utf8_to_local == (iconv_t)(-1)
| 0 | ||||||||||||
121 | - | |||||||||||||
122 | utf8_to_local = iconv_open ("ASCII", "UTF-8"); never executed: utf8_to_local = iconv_open ("ASCII", "UTF-8"); | 0 | ||||||||||||
123 | } never executed: end of block | 0 | ||||||||||||
124 | - | |||||||||||||
125 | initialized = 1; | - | ||||||||||||
126 | } never executed: end of block | 0 | ||||||||||||
127 | - | |||||||||||||
128 | - | |||||||||||||
129 | if (!is_utf8
| 0 | ||||||||||||
130 | { | - | ||||||||||||
131 | - | |||||||||||||
132 | if (utf8_to_local == (iconv_t)(-1)
| 0 | ||||||||||||
133 | return never executed: failure (code, "iconv function not usable", callback_arg);return failure (code, "iconv function not usable", callback_arg); never executed: return failure (code, "iconv function not usable", callback_arg); | 0 | ||||||||||||
134 | - | |||||||||||||
135 | - | |||||||||||||
136 | - | |||||||||||||
137 | } never executed: end of block | 0 | ||||||||||||
138 | - | |||||||||||||
139 | - | |||||||||||||
140 | count = u8_uctomb ((unsigned char *) inbuf, code, sizeof (inbuf)); | - | ||||||||||||
141 | if (count < 0
| 0 | ||||||||||||
142 | return never executed: failure (code, "character out of range", callback_arg);return failure (code, "character out of range", callback_arg); never executed: return failure (code, "character out of range", callback_arg); | 0 | ||||||||||||
143 | - | |||||||||||||
144 | - | |||||||||||||
145 | if (!is_utf8
| 0 | ||||||||||||
146 | { | - | ||||||||||||
147 | char outbuf[25]; | - | ||||||||||||
148 | const char *inptr; | - | ||||||||||||
149 | size_t inbytesleft; | - | ||||||||||||
150 | char *outptr; | - | ||||||||||||
151 | size_t outbytesleft; | - | ||||||||||||
152 | size_t res; | - | ||||||||||||
153 | - | |||||||||||||
154 | inptr = inbuf; | - | ||||||||||||
155 | inbytesleft = count; | - | ||||||||||||
156 | outptr = outbuf; | - | ||||||||||||
157 | outbytesleft = sizeof (outbuf); | - | ||||||||||||
158 | - | |||||||||||||
159 | - | |||||||||||||
160 | res = iconv (utf8_to_local, | - | ||||||||||||
161 | ( char **)&inptr, &inbytesleft, | - | ||||||||||||
162 | &outptr, &outbytesleft); | - | ||||||||||||
163 | if (inbytesleft > 0
| 0 | ||||||||||||
164 | - | |||||||||||||
165 | - | |||||||||||||
166 | - | |||||||||||||
167 | - | |||||||||||||
168 | ) | - | ||||||||||||
169 | return never executed: failure (code, return failure (code, ((void *)0) , callback_arg); never executed: return failure (code, ((void *)0) , callback_arg); | 0 | ||||||||||||
170 | ((void *)0) never executed: return failure (code, ((void *)0) , callback_arg); | 0 | ||||||||||||
171 | , callback_arg); never executed: return failure (code, ((void *)0) , callback_arg); | 0 | ||||||||||||
172 | res = iconv (utf8_to_local, | - | ||||||||||||
173 | ((void *)0) | - | ||||||||||||
174 | , | - | ||||||||||||
175 | ((void *)0) | - | ||||||||||||
176 | , &outptr, &outbytesleft); | - | ||||||||||||
177 | if (res == (size_t)(-1)
| 0 | ||||||||||||
178 | return never executed: failure (code, return failure (code, ((void *)0) , callback_arg); never executed: return failure (code, ((void *)0) , callback_arg); | 0 | ||||||||||||
179 | ((void *)0) never executed: return failure (code, ((void *)0) , callback_arg); | 0 | ||||||||||||
180 | , callback_arg); never executed: return failure (code, ((void *)0) , callback_arg); | 0 | ||||||||||||
181 | - | |||||||||||||
182 | - | |||||||||||||
183 | return never executed: success (outbuf, outptr - outbuf, callback_arg);return success (outbuf, outptr - outbuf, callback_arg); never executed: return success (outbuf, outptr - outbuf, callback_arg); | 0 | ||||||||||||
184 | } | - | ||||||||||||
185 | - | |||||||||||||
186 | - | |||||||||||||
187 | - | |||||||||||||
188 | return never executed: success (inbuf, count, callback_arg);return success (inbuf, count, callback_arg); never executed: return success (inbuf, count, callback_arg); | 0 | ||||||||||||
189 | } | - | ||||||||||||
190 | - | |||||||||||||
191 | - | |||||||||||||
192 | - | |||||||||||||
193 | long | - | ||||||||||||
194 | fwrite_success_callback (const char *buf, size_t buflen, void *callback_arg) | - | ||||||||||||
195 | { | - | ||||||||||||
196 | FILE *stream = (FILE *) callback_arg; | - | ||||||||||||
197 | - | |||||||||||||
198 | - | |||||||||||||
199 | - | |||||||||||||
200 | - | |||||||||||||
201 | - | |||||||||||||
202 | fwrite (buf, 1, buflen, stream); | - | ||||||||||||
203 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
204 | } | - | ||||||||||||
205 | - | |||||||||||||
206 | - | |||||||||||||
207 | static long | - | ||||||||||||
208 | exit_failure_callback (unsigned int code, const char *msg, | - | ||||||||||||
209 | void *callback_arg __attribute__ ((__unused__))) | - | ||||||||||||
210 | { | - | ||||||||||||
211 | if (msg ==
| 0 | ||||||||||||
212 | ((void *)0)
| 0 | ||||||||||||
213 | ) | - | ||||||||||||
214 | error (1, 0, never executed: error (1, 0, dcgettext (((void *)0), "cannot convert U+%04X to local character set" , 5) , code); | 0 | ||||||||||||
215 | dcgettext (((void *)0), never executed: error (1, 0, dcgettext (((void *)0), "cannot convert U+%04X to local character set" , 5) , code); | 0 | ||||||||||||
216 | "cannot convert U+%04X to local character set" never executed: error (1, 0, dcgettext (((void *)0), "cannot convert U+%04X to local character set" , 5) , code); | 0 | ||||||||||||
217 | , 5) never executed: error (1, 0, dcgettext (((void *)0), "cannot convert U+%04X to local character set" , 5) , code); | 0 | ||||||||||||
218 | , code); never executed: error (1, 0, dcgettext (((void *)0), "cannot convert U+%04X to local character set" , 5) , code); | 0 | ||||||||||||
219 | else | - | ||||||||||||
220 | error (1, 0, never executed: error (1, 0, dcgettext (((void *)0), "cannot convert U+%04X to local character set: %s" , 5) , code, dcgettext (((void *)0), msg , 5) ); | 0 | ||||||||||||
221 | dcgettext (((void *)0), never executed: error (1, 0, dcgettext (((void *)0), "cannot convert U+%04X to local character set: %s" , 5) , code, dcgettext (((void *)0), msg , 5) ); | 0 | ||||||||||||
222 | "cannot convert U+%04X to local character set: %s" never executed: error (1, 0, dcgettext (((void *)0), "cannot convert U+%04X to local character set: %s" , 5) , code, dcgettext (((void *)0), msg , 5) ); | 0 | ||||||||||||
223 | , 5) never executed: error (1, 0, dcgettext (((void *)0), "cannot convert U+%04X to local character set: %s" , 5) , code, dcgettext (((void *)0), msg , 5) ); | 0 | ||||||||||||
224 | , code, never executed: error (1, 0, dcgettext (((void *)0), "cannot convert U+%04X to local character set: %s" , 5) , code, dcgettext (((void *)0), msg , 5) ); | 0 | ||||||||||||
225 | never executed: error (1, 0, dcgettext (((void *)0), "cannot convert U+%04X to local character set: %s" , 5) , code, dcgettext (((void *)0), msg , 5) ); | 0 | ||||||||||||
226 | dcgettext (((void *)0), never executed: error (1, 0, dcgettext (((void *)0), "cannot convert U+%04X to local character set: %s" , 5) , code, dcgettext (((void *)0), msg , 5) ); | 0 | ||||||||||||
227 | msg never executed: error (1, 0, dcgettext (((void *)0), "cannot convert U+%04X to local character set: %s" , 5) , code, dcgettext (((void *)0), msg , 5) ); | 0 | ||||||||||||
228 | , 5) never executed: error (1, 0, dcgettext (((void *)0), "cannot convert U+%04X to local character set: %s" , 5) , code, dcgettext (((void *)0), msg , 5) ); | 0 | ||||||||||||
229 | ); never executed: error (1, 0, dcgettext (((void *)0), "cannot convert U+%04X to local character set: %s" , 5) , code, dcgettext (((void *)0), msg , 5) ); | 0 | ||||||||||||
230 | return never executed: -1;return -1; never executed: return -1; | 0 | ||||||||||||
231 | } | - | ||||||||||||
232 | - | |||||||||||||
233 | - | |||||||||||||
234 | - | |||||||||||||
235 | static long | - | ||||||||||||
236 | fallback_failure_callback (unsigned int code, | - | ||||||||||||
237 | const char *msg __attribute__ ((__unused__)), | - | ||||||||||||
238 | void *callback_arg) | - | ||||||||||||
239 | { | - | ||||||||||||
240 | FILE *stream = (FILE *) callback_arg; | - | ||||||||||||
241 | - | |||||||||||||
242 | if (code < 0x10000
| 0 | ||||||||||||
243 | fprintf (stream, "\\u%04X", code); never executed: fprintf (stream, "\\u%04X", code); | 0 | ||||||||||||
244 | else | - | ||||||||||||
245 | fprintf (stream, "\\U%08X", code); never executed: fprintf (stream, "\\U%08X", code); | 0 | ||||||||||||
246 | return never executed: -1;return -1; never executed: return -1; | 0 | ||||||||||||
247 | } | - | ||||||||||||
248 | - | |||||||||||||
249 | - | |||||||||||||
250 | - | |||||||||||||
251 | - | |||||||||||||
252 | void | - | ||||||||||||
253 | print_unicode_char (FILE *stream, unsigned int code, int exit_on_error) | - | ||||||||||||
254 | { | - | ||||||||||||
255 | unicode_to_mb (code, fwrite_success_callback, | - | ||||||||||||
256 | exit_on_error | - | ||||||||||||
257 | ? exit_failure_callback | - | ||||||||||||
258 | : fallback_failure_callback, | - | ||||||||||||
259 | stream); | - | ||||||||||||
260 | } never executed: end of block | 0 | ||||||||||||
Switch to Source code | Preprocessed file |