1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20: #ifndef _GCONV_INT_H
21: #define _GCONV_INT_H 1
22:
23: #include "gconv.h"
24: #include <stdlib.h>
25: #include <ctype.h>
26: #include <string.h>
27: #include <bits/libc-lock.h>
28:
29: __BEGIN_DECLS
30:
31:
32:
33: struct path_elem
34: {
35: const char *name;
36: size_t len;
37: };
38:
39:
40: extern struct path_elem *__gconv_path_elem attribute_hidden;
41:
42: extern size_t __gconv_max_path_elem_len attribute_hidden;
43:
44:
45:
46: struct gconv_alias
47: {
48: char *fromname;
49: char *toname;
50: };
51:
52:
53:
54: #define GCONV_NCHAR_GOAL 8160
55:
56:
57:
58:
59:
60: struct __gconv_loaded_object
61: {
62:
63: const char *name;
64:
65:
66:
67: int counter;
68:
69:
70: void *handle;
71:
72:
73: __gconv_fct fct;
74: __gconv_init_fct init_fct;
75: __gconv_end_fct end_fct;
76: };
77:
78:
79:
80: struct gconv_module
81: {
82: const char *from_string;
83: const char *to_string;
84:
85: int cost_hi;
86: int cost_lo;
87:
88: const char *module_name;
89:
90: struct gconv_module *left;
91: struct gconv_module *same;
92: struct gconv_module *right;
93: };
94:
95:
96:
97: struct trans_struct
98: {
99: const char *name;
100: struct trans_struct *next;
101:
102: const char **csnames;
103: size_t ncsnames;
104: __gconv_trans_fct trans_fct;
105: __gconv_trans_context_fct trans_context_fct;
106: __gconv_trans_init_fct trans_init_fct;
107: __gconv_trans_end_fct trans_end_fct;
108: };
109:
110:
111:
112: enum
113: {
114: GCONV_AVOID_NOCONV = 1 << 0
115: };
116:
117:
118:
119: enum
120: {
121: __GCONV_NULCONV = -1
122: };
123:
124:
125:
126:
127: extern void *__gconv_alias_db attribute_hidden;
128:
129:
130: extern size_t __gconv_nmodules;
131: extern struct gconv_module *__gconv_modules_db attribute_hidden;
132:
133:
134: extern const char *__gconv_path_envvar attribute_hidden;
135:
136:
137: __libc_lock_define (extern, __gconv_lock attribute_hidden)
138:
139:
140:
141:
142: #define norm_add_slashes(str,suffix) \
143: ({ \
144: const char *cp = (str); \
145: char *result; \
146: char *tmp; \
147: size_t cnt = 0; \
148: const size_t suffix_len = strlen (suffix); \
149: \
150: while (*cp != '\0') \
151: if (*cp++ == '/') \
152: ++cnt; \
153: \
154: tmp = result = __alloca (cp - (str) + 3 + suffix_len); \
155: cp = (str); \
156: while (*cp != '\0') \
157: *tmp++ = __toupper_l (*cp++, _nl_C_locobj_ptr); \
158: if (cnt < 2) \
159: { \
160: *tmp++ = '/'; \
161: if (cnt < 1) \
162: { \
163: *tmp++ = '/'; \
164: if (suffix_len != 0) \
165: tmp = __mempcpy (tmp, suffix, suffix_len); \
166: } \
167: } \
168: *tmp = '\0'; \
169: result; \
170: })
171:
172:
173:
174: extern int __gconv_open (const char *toset, const char *fromset,
175: __gconv_t *handle, int flags)
176: internal_function;
177:
178:
179: extern int __gconv_close (__gconv_t cd)
180: internal_function;
181:
182:
183:
184:
185:
186: extern int __gconv (__gconv_t cd, const unsigned char **inbuf,
187: const unsigned char *inbufend, unsigned char **outbuf,
188: unsigned char *outbufend, size_t *irreversible)
189: internal_function;
190:
191:
192:
193: extern int __gconv_find_transform (const char *toset, const char *fromset,
194: struct __gconv_step **handle,
195: size_t *nsteps, int flags)
196: internal_function;
197:
198:
199: extern int __gconv_lookup_cache (const char *toset, const char *fromset,
200: struct __gconv_step **handle, size_t *nsteps,
201: int flags)
202: internal_function;
203:
204:
205:
206:
207: extern int __gconv_compare_alias_cache (const char *name1, const char *name2,
208: int *result) internal_function;
209:
210:
211: extern void __gconv_release_step (struct __gconv_step *step)
212: internal_function;
213:
214:
215: extern void __gconv_read_conf (void) attribute_hidden;
216:
217:
218: extern int __gconv_load_cache (void) internal_function;
219:
220:
221: extern void *__gconv_get_cache (void);
222:
223:
224: extern struct gconv_module *__gconv_get_modules_db (void);
225:
226:
227: extern void *__gconv_get_alias_db (void);
228:
229:
230: extern void __gconv_get_path (void) internal_function;
231:
232:
233: extern int __gconv_alias_compare (const void *p1, const void *p2)
234: attribute_hidden;
235:
236:
237:
238: extern int __gconv_close_transform (struct __gconv_step *steps,
239: size_t nsteps)
240: internal_function;
241:
242:
243:
244: extern void __gconv_release_cache (struct __gconv_step *steps, size_t nsteps)
245: internal_function;
246:
247:
248:
249: extern struct __gconv_loaded_object *__gconv_find_shlib (const char *name)
250: internal_function;
251:
252:
253:
254: extern void __gconv_release_shlib (struct __gconv_loaded_object *handle)
255: internal_function;
256:
257:
258: extern void __gconv_get_builtin_trans (const char *name,
259: struct __gconv_step *step)
260: internal_function;
261:
262:
263: extern int __gconv_translit_find (struct trans_struct *trans)
264: internal_function;
265:
266:
267: extern int __gconv_transliterate (struct __gconv_step *step,
268: struct __gconv_step_data *step_data,
269: void *trans_data,
270: __const unsigned char *inbufstart,
271: __const unsigned char **inbufp,
272: __const unsigned char *inbufend,
273: unsigned char **outbufstart,
274: size_t *irreversible) attribute_hidden;
275:
276:
277:
278: extern int __gconv_compare_alias (const char *name1, const char *name2)
279: internal_function;
280:
281:
282:
283: #ifdef _LIBC
284: # define __BUILTIN_TRANSFORM(Name) \
285: extern int Name (struct __gconv_step *step, \
286: struct __gconv_step_data *data, \
287: const unsigned char **inbuf, \
288: const unsigned char *inbufend, \
289: unsigned char **outbufstart, size_t *irreversible, \
290: int do_flush, int consume_incomplete)
291:
292: __BUILTIN_TRANSFORM (__gconv_transform_ascii_internal);
293: __BUILTIN_TRANSFORM (__gconv_transform_internal_ascii);
294: __BUILTIN_TRANSFORM (__gconv_transform_utf8_internal);
295: __BUILTIN_TRANSFORM (__gconv_transform_internal_utf8);
296: __BUILTIN_TRANSFORM (__gconv_transform_ucs2_internal);
297: __BUILTIN_TRANSFORM (__gconv_transform_internal_ucs2);
298: __BUILTIN_TRANSFORM (__gconv_transform_ucs2reverse_internal);
299: __BUILTIN_TRANSFORM (__gconv_transform_internal_ucs2reverse);
300: __BUILTIN_TRANSFORM (__gconv_transform_internal_ucs4);
301: __BUILTIN_TRANSFORM (__gconv_transform_ucs4_internal);
302: __BUILTIN_TRANSFORM (__gconv_transform_internal_ucs4le);
303: __BUILTIN_TRANSFORM (__gconv_transform_ucs4le_internal);
304: __BUILTIN_TRANSFORM (__gconv_transform_internal_utf16);
305: __BUILTIN_TRANSFORM (__gconv_transform_utf16_internal);
306: # undef __BUITLIN_TRANSFORM
307:
308:
309:
310: extern wint_t __gconv_btwoc_ascii (struct __gconv_step *step, unsigned char c);
311:
312: #endif
313:
314: __END_DECLS
315:
316: #endif