This source file includes following definitions.
- u8_conv_to_encoding
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
27 #include <config.h>
28
29
30 #include "uniconv.h"
31
32 #include <errno.h>
33 #include <stdlib.h>
34 #include <string.h>
35
36 #include "c-strcaseeq.h"
37 #include "striconveha.h"
38 #include "unistr.h"
39
40 char *
41 u8_conv_to_encoding (const char *tocode,
42 enum iconv_ilseq_handler handler,
43 const uint8_t *src, size_t srclen,
44 size_t *offsets,
45 char *resultbuf, size_t *lengthp)
46 {
47 if (STRCASEEQ (tocode, "UTF-8", 'U','T','F','-','8',0,0,0,0))
48 {
49 char *result;
50
51
52 if (u8_check (src, srclen))
53 {
54 errno = EILSEQ;
55 return NULL;
56 }
57
58
59 if (resultbuf != NULL && *lengthp >= srclen)
60 result = resultbuf;
61 else
62 {
63 result = (char *) malloc (srclen > 0 ? srclen : 1);
64 if (result == NULL)
65 {
66 errno = ENOMEM;
67 return NULL;
68 }
69 }
70
71 if (srclen > 0)
72 memcpy (result, (const char *) src, srclen);
73 *lengthp = srclen;
74 return result;
75 }
76 else
77 {
78 char *result = resultbuf;
79 size_t length = *lengthp;
80
81 if (mem_iconveha ((const char *) src, srclen,
82 "UTF-8", tocode,
83 handler == iconveh_question_mark, handler,
84 offsets, &result, &length) < 0)
85 return NULL;
86
87 if (result == NULL)
88 {
89 result = (char *) malloc (1);
90 if (result == NULL)
91 {
92 errno = ENOMEM;
93 return NULL;
94 }
95 }
96 *lengthp = length;
97 return result;
98 }
99 }