This source file includes following definitions.
- FUNC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 char *
27 FUNC (const UNIT *s, size_t n, uninorm_t nf,
28 char *resultbuf, size_t *lengthp)
29 {
30 UNIT normsbuf[2048 / sizeof (UNIT)];
31 UNIT *norms;
32 size_t norms_length;
33 char convsbuf[2048];
34 char *convs;
35 size_t convs_length;
36 char *result;
37
38
39 norms_length = sizeof (normsbuf) / sizeof (UNIT);
40 norms = U_NORMALIZE (nf, s, n, normsbuf, &norms_length);
41 if (norms == NULL)
42
43 return NULL;
44
45
46 convs_length = sizeof (convsbuf) - 1;
47 convs = U_CONV_TO_ENCODING (locale_charset (),
48 iconveh_error,
49 norms, norms_length,
50 NULL,
51 convsbuf, &convs_length);
52 if (convs == NULL)
53 {
54 if (norms != normsbuf)
55 {
56 int saved_errno = errno;
57 free (norms);
58 errno = saved_errno;
59 }
60 return NULL;
61 }
62
63 if (norms != normsbuf)
64 free (norms);
65
66
67 if (convs != convsbuf)
68 {
69 char *memory = (char *) realloc (convs, convs_length + 1);
70 if (memory == NULL)
71 {
72 free (convs);
73 errno = ENOMEM;
74 return NULL;
75 }
76 convs = memory;
77 }
78
79
80 result = amemxfrm (convs, convs_length, resultbuf, lengthp);
81 if (result == NULL)
82 {
83 if (convs != convsbuf)
84 {
85 int saved_errno = errno;
86 free (convs);
87 errno = saved_errno;
88 }
89 return NULL;
90 }
91
92 if (convs != convsbuf)
93 free (convs);
94 return result;
95 }