1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21: #include <endian.h>
22: #include <limits.h>
23: #include <stdint.h>
24: #include <string.h>
25:
26: #include <gconv_int.h>
27:
28: #include <assert.h>
29:
30:
31: static const struct builtin_map
32: {
33: const char *name;
34: __gconv_fct fct;
35: __gconv_btowc_fct btowc_fct;
36:
37: int8_t min_needed_from;
38: int8_t max_needed_from;
39: int8_t min_needed_to;
40: int8_t max_needed_to;
41:
42: } map[] =
43: {
44: #define BUILTIN_TRANSFORMATION(From, To, Cost, Name, Fct, BtowcFct, \
45: MinF, MaxF, MinT, MaxT) \
46: { \
47: .name = Name, \
48: .fct = Fct, \
49: .btowc_fct = BtowcFct, \
50: \
51: .min_needed_from = MinF, \
52: .max_needed_from = MaxF, \
53: .min_needed_to = MinT, \
54: .max_needed_to = MaxT \
55: },
56: #define BUILTIN_ALIAS(From, To)
57:
58: #include <gconv_builtin.h>
59: };
60:
61:
62: void
63: internal_function
64: __gconv_get_builtin_trans (const char *name, struct __gconv_step *step)
65: {
66: size_t cnt;
67:
68: for (cnt = 0; cnt < sizeof (map) / sizeof (map[0]); ++cnt)
69: if (strcmp (name, map[cnt].name) == 0)
70: break;
71:
72: assert (cnt < sizeof (map) / sizeof (map[0]));
73:
74: step->__fct = map[cnt].fct;
75: step->__btowc_fct = map[cnt].btowc_fct;
76: step->__init_fct = NULL;
77: step->__end_fct = NULL;
78: step->__shlib_handle = NULL;
79: step->__modname = NULL;
80:
81: step->__min_needed_from = map[cnt].min_needed_from;
82: step->__max_needed_from = map[cnt].max_needed_from;
83: step->__min_needed_to = map[cnt].min_needed_to;
84: step->__max_needed_to = map[cnt].max_needed_to;
85:
86:
87: step->__stateful = 0;
88: }