Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 13aac22

Browse files
authored
Add files via upload
1 parent a56d793 commit 13aac22

File tree

9 files changed

+333
-107
lines changed

9 files changed

+333
-107
lines changed

include/encoding/encoding.h

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,13 @@
22
#ifndef CORE_ENCODING_H
33
#define CORE_ENCODING_H
44

5-
#include <cstddef>
6-
#include "hresult.h"
7-
8-
9-
#ifndef NAMESPACE_ENCODING_BEGIN
10-
#define NAMESPACE_ENCODING_BEGIN namespace encoding {
11-
#endif
12-
13-
#ifndef NAMESPACE_END
14-
#define NAMESPACE_END }
15-
#endif
5+
#include <stdint.h>
6+
#include <stdlib.h>
167

8+
#include "hresult.h"
179

18-
NAMESPACE_ENCODING_BEGIN
1910

20-
// Note: All size are bytes size.
11+
// All size are bytes size.
2112

2213
// mbcs <-> utf16le
2314
HRESULT
@@ -61,6 +52,6 @@ HRESULT
6152
utf32le_2_utf16le(const void *, size_t, void *, size_t *);
6253

6354

64-
NAMESPACE_END;//
55+
6556

6657
#endif // CORE_ENCODING_H

src/encoding.c

Lines changed: 182 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,182 @@
1+
2+
#include <stdbool.h>
3+
4+
5+
#include "../include/encoding/encoding.h"
6+
7+
#ifdef WIN32
8+
#include "encoding_win.h"
9+
#else
10+
11+
#include "encoding_posix.h"
12+
13+
#endif //WIN32
14+
15+
// sample : 00fe316d3e96a0d4964a0fa60bbd7ae7 size is not even.
16+
#define _CHECKSIZE(size) \
17+
do{ \
18+
if (!is_even_size(size)) \
19+
{ \
20+
if (size) \
21+
{ \
22+
--size; \
23+
} \
24+
} \
25+
} while (0);
26+
#define _UNUSED_PARAM do{(void)src; (void)src_size; (void)dst; (void)dst_size;} while(0)
27+
28+
29+
static
30+
bool
31+
is_even_size(size_t size)
32+
{
33+
return (((size & 0x1) ^ 0x1) == 1);
34+
}
35+
36+
HRESULT
37+
mbcs_2_utf16le(const void *src, size_t src_size, void *dst, size_t *dst_size)
38+
{
39+
_CHECKSIZE(*dst_size);
40+
#ifdef WIN32
41+
size_t dst_cbsize = *dst_size;
42+
dst_cbsize = dst_cbsize >> 1;
43+
HRESULT hr;
44+
hr = mbcs_2_utf16le_windows((const char *)src, src_size, (wchar_t *)dst, &dst_cbsize);
45+
*dst_size = dst_cbsize << 1;
46+
return hr;
47+
#else
48+
return mbcs_2_utf16le_posix(src, src_size, dst, dst_size);
49+
#endif
50+
}
51+
52+
HRESULT
53+
utf16le_2_mbcs(const void *src, size_t src_size, void *dst, size_t *dst_size)
54+
{
55+
_CHECKSIZE(src_size);
56+
#ifdef WIN32
57+
return utf16le_2_mbcs_windows((const wchar_t *)src, src_size >> 1, (char *)dst, dst_size);
58+
#else
59+
return utf16le_2_mbcs_posix(src, src_size, dst, dst_size);
60+
#endif
61+
}
62+
63+
HRESULT
64+
mbcs_2_utf32le(const void *src, size_t src_size, void *dst, size_t *dst_size)
65+
{
66+
#ifdef WIN32
67+
_UNUSED_PARAM;
68+
return E_NOTIMPL;
69+
#else
70+
return mbcs_2_utf32le_posix(src, src_size, dst, dst_size);
71+
#endif
72+
}
73+
74+
HRESULT
75+
utf32le_2_mbcs(const void *src, size_t src_size, void *dst, size_t *dst_size)
76+
{
77+
#ifdef WIN32
78+
_UNUSED_PARAM;
79+
return E_NOTIMPL;
80+
#else
81+
return utf32le_2_mbcs_posix(src, src_size, dst, dst_size);
82+
#endif
83+
}
84+
85+
HRESULT
86+
mbcs_2_utf8(const void *src, size_t src_size, void *dst, size_t *dst_size)
87+
{
88+
#ifdef WIN32
89+
_UNUSED_PARAM;
90+
return E_NOTIMPL;
91+
#else
92+
return mbcs_2_utf8_posix(src, src_size, dst, dst_size);
93+
#endif
94+
}
95+
96+
HRESULT
97+
utf8_2_mbcs(const void *src, size_t src_size, void *dst, size_t *dst_size)
98+
{
99+
#ifdef WIN32
100+
_UNUSED_PARAM;
101+
return E_NOTIMPL;
102+
#else
103+
return utf8_2_mbcs_posix(src, src_size, dst, dst_size);
104+
#endif
105+
}
106+
107+
HRESULT
108+
utf8_2_utf16le(const void *src, size_t src_size, void *dst, size_t *dst_size)
109+
{
110+
_CHECKSIZE(*dst_size);
111+
#ifdef WIN32
112+
size_t z = *dst_size;
113+
z = z >> 1;
114+
HRESULT hr;
115+
hr = utf8_2_utf16le_windows((const char *)src, src_size, (wchar_t *)dst, &z);
116+
*dst_size = z << 1;
117+
return hr;
118+
#else
119+
return utf8_2_utf16le_posix(src, src_size, dst, dst_size);
120+
#endif
121+
}
122+
123+
HRESULT
124+
utf16le_2_utf8(const void *src, size_t src_size, void *dst, size_t *dst_size)
125+
{
126+
_CHECKSIZE(src_size);
127+
#ifdef WIN32
128+
return utf16le_2_utf8_windows((const wchar_t *)src, src_size >> 1, (char *)dst, dst_size);
129+
#else
130+
return utf16le_2_utf8_posix(src, src_size, dst, dst_size);
131+
#endif
132+
}
133+
134+
HRESULT
135+
utf8_2_utf32le(const void *src, size_t src_size, void *dst, size_t *dst_size)
136+
{
137+
#ifdef WIN32
138+
_UNUSED_PARAM;
139+
return E_NOTIMPL;
140+
#else
141+
return utf8_2_utf32le_posix(src, src_size, dst, dst_size);
142+
#endif
143+
}
144+
145+
HRESULT
146+
utf32le_2_utf8(const void *src, size_t src_size, void *dst, size_t *dst_size)
147+
{
148+
#ifdef WIN32
149+
_UNUSED_PARAM;
150+
return E_NOTIMPL;
151+
#else
152+
return utf32le_2_utf8_posix(src, src_size, dst, dst_size);
153+
#endif
154+
}
155+
156+
HRESULT
157+
utf16le_2_utf32le(const void *src, size_t src_size, void *dst, size_t *dst_size)
158+
{
159+
#ifdef WIN32
160+
_UNUSED_PARAM;
161+
return E_NOTIMPL;
162+
#else
163+
return utf16le_2_utf32le_posix(src, src_size, dst, dst_size);
164+
#endif
165+
}
166+
167+
HRESULT
168+
utf32le_2_utf16le(const void *src, size_t src_size, void *dst, size_t *dst_size)
169+
{
170+
#ifdef WIN32
171+
_UNUSED_PARAM;
172+
return E_NOTIMPL;
173+
#else
174+
return utf32le_2_utf16le_posix(src, src_size, dst, dst_size);
175+
#endif
176+
}
177+
178+
//static const char* kEncodeUtf8Header = "\xEF\xBB\xBF";
179+
//static const char* kEncodeUtf16LittleEndianHeader="\xFF\xFE";
180+
//static const char* kEncodeUtf16BigEndianHeader = "\xFE\xFF";
181+
//static const char* kEncodeUtf32LittleEndianHeader= "\xFF\xFE\x00\x00";
182+
//static const char* kEncodeUtf32BigEndianHeader = "\x00\x00\xFE\xFF";

src/encoding_posix.c

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
#include <locale.h>
88
#include <stdlib.h>
99
#include <stdbool.h>
10+
#include <string.h>
11+
1012
#include "encoding_posix.h"
1113

1214
HRESULT
@@ -159,4 +161,105 @@ mbcs_2_utf32le_posix2(const void *src, size_t src_size, void *dst, size_t *dst_s
159161
return hr;
160162
}
161163

164+
165+
166+
HRESULT
167+
iconv_posix(const char *code1, const char *code2,
168+
const void *src, size_t src_size,
169+
void *dst, size_t *dst_size)
170+
{
171+
if (dst)
172+
{
173+
return encoding_convt(code1, code2, (const char *)src, src_size, (char *)dst, dst_size);
174+
}
175+
else
176+
{
177+
return encoding_convt_cbsize(code1, code2, (const char *)src, src_size, dst_size);
178+
}
179+
}
180+
181+
182+
HRESULT
183+
utf16le_2_mbcs_posix(const void *src, size_t src_size, void *dst, size_t *dst_size)
184+
{
185+
return iconv_posix(ICONV_CODE_UTF16LE, ICONV_CODE_MBCS, src, src_size, dst, dst_size);
186+
}
187+
188+
189+
HRESULT
190+
mbcs_2_utf16le_posix(const void *src, size_t src_size, void *dst, size_t *dst_size)
191+
{
192+
return iconv_posix(ICONV_CODE_MBCS, ICONV_CODE_UTF16LE, src, src_size, dst, dst_size);
193+
}
194+
195+
inline
196+
HRESULT
197+
utf8_2_utf16le_posix(const void *src, size_t src_size, void *dst, size_t *dst_size)
198+
{
199+
return iconv_posix(ICONV_CODE_UTF8, ICONV_CODE_UTF16LE, src, src_size, dst, dst_size);
200+
}
201+
202+
203+
HRESULT
204+
utf16le_2_utf8_posix(const void *src, size_t src_size, void *dst, size_t *dst_size)
205+
{
206+
return iconv_posix(ICONV_CODE_UTF16LE, ICONV_CODE_UTF8, src, src_size, dst, dst_size);
207+
}
208+
209+
210+
HRESULT
211+
mbcs_2_utf32le_posix(const void *src, size_t src_size, void *dst, size_t *dst_size)
212+
{
213+
return iconv_posix(ICONV_CODE_MBCS, ICONV_CODE_UTF32LE, src, src_size, dst, dst_size);
214+
}
215+
216+
217+
HRESULT
218+
utf32le_2_mbcs_posix(const void *src, size_t src_size, void *dst, size_t *dst_size)
219+
{
220+
return iconv_posix(ICONV_CODE_UTF32LE, ICONV_CODE_MBCS, src, src_size, dst, dst_size);
221+
}
222+
223+
224+
HRESULT
225+
utf32le_2_utf8_posix(const void *src, size_t src_size, void *dst, size_t *dst_size)
226+
{
227+
return iconv_posix(ICONV_CODE_UTF32LE, ICONV_CODE_UTF8, src, src_size, dst, dst_size);
228+
}
229+
230+
231+
HRESULT
232+
utf8_2_utf32le_posix(const void *src, size_t src_size, void *dst, size_t *dst_size)
233+
{
234+
return iconv_posix(ICONV_CODE_UTF8, ICONV_CODE_UTF32LE, src, src_size, dst, dst_size);
235+
}
236+
237+
238+
HRESULT
239+
utf32le_2_utf16le_posix(const void *src, size_t src_size, void *dst, size_t *dst_size)
240+
{
241+
return iconv_posix(ICONV_CODE_UTF32LE, ICONV_CODE_UTF16LE, src, src_size, dst, dst_size);
242+
}
243+
244+
245+
HRESULT
246+
utf16le_2_utf32le_posix(const void *src, size_t src_size, void *dst, size_t *dst_size)
247+
{
248+
return iconv_posix(ICONV_CODE_UTF16LE, ICONV_CODE_UTF32LE, src, src_size, dst, dst_size);
249+
}
250+
251+
252+
HRESULT
253+
mbcs_2_utf8_posix(const void *src, size_t src_size, void *dst, size_t *dst_size)
254+
{
255+
return iconv_posix(ICONV_CODE_MBCS, ICONV_CODE_UTF8, src, src_size, dst, dst_size);
256+
}
257+
258+
259+
HRESULT
260+
utf8_2_mbcs_posix(const void *src, size_t src_size, void *dst, size_t *dst_size)
261+
{
262+
return iconv_posix(ICONV_CODE_UTF8, ICONV_CODE_MBCS, src, src_size, dst, dst_size);
263+
}
264+
162265
#endif

0 commit comments

Comments
 (0)