1 | /***************************************************************************
|
---|
2 | * _ _ ____ _
|
---|
3 | * Project ___| | | | _ \| |
|
---|
4 | * / __| | | | |_) | |
|
---|
5 | * | (__| |_| | _ <| |___
|
---|
6 | * \___|\___/|_| \_\_____|
|
---|
7 | *
|
---|
8 | * Copyright (C) 1998 - 2015, Daniel Stenberg, <[email protected]>, et al.
|
---|
9 | *
|
---|
10 | * This software is licensed as described in the file COPYING, which
|
---|
11 | * you should have received as part of this distribution. The terms
|
---|
12 | * are also available at https://curl.haxx.se/docs/copyright.html.
|
---|
13 | *
|
---|
14 | * You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
---|
15 | * copies of the Software, and permit persons to whom the Software is
|
---|
16 | * furnished to do so, under the terms of the COPYING file.
|
---|
17 | *
|
---|
18 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
---|
19 | * KIND, either express or implied.
|
---|
20 | *
|
---|
21 | ***************************************************************************/
|
---|
22 |
|
---|
23 | #include "curl_setup.h"
|
---|
24 |
|
---|
25 | #include <curl/curl.h>
|
---|
26 |
|
---|
27 | #if defined(USE_WIN32_IDN) || ((defined(USE_WINDOWS_SSPI) || \
|
---|
28 | defined(USE_WIN32_LDAP)) && defined(UNICODE))
|
---|
29 |
|
---|
30 | /*
|
---|
31 | * MultiByte conversions using Windows kernel32 library.
|
---|
32 | */
|
---|
33 |
|
---|
34 | #include "curl_multibyte.h"
|
---|
35 | #include "curl_memory.h"
|
---|
36 |
|
---|
37 | /* The last #include file should be: */
|
---|
38 | #include "memdebug.h"
|
---|
39 |
|
---|
40 | wchar_t *Curl_convert_UTF8_to_wchar(const char *str_utf8)
|
---|
41 | {
|
---|
42 | wchar_t *str_w = NULL;
|
---|
43 |
|
---|
44 | if(str_utf8) {
|
---|
45 | int str_w_len = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS,
|
---|
46 | str_utf8, -1, NULL, 0);
|
---|
47 | if(str_w_len > 0) {
|
---|
48 | str_w = malloc(str_w_len * sizeof(wchar_t));
|
---|
49 | if(str_w) {
|
---|
50 | if(MultiByteToWideChar(CP_UTF8, 0, str_utf8, -1, str_w,
|
---|
51 | str_w_len) == 0) {
|
---|
52 | free(str_w);
|
---|
53 | return NULL;
|
---|
54 | }
|
---|
55 | }
|
---|
56 | }
|
---|
57 | }
|
---|
58 |
|
---|
59 | return str_w;
|
---|
60 | }
|
---|
61 |
|
---|
62 | char *Curl_convert_wchar_to_UTF8(const wchar_t *str_w)
|
---|
63 | {
|
---|
64 | char *str_utf8 = NULL;
|
---|
65 |
|
---|
66 | if(str_w) {
|
---|
67 | int bytes = WideCharToMultiByte(CP_UTF8, 0, str_w, -1,
|
---|
68 | NULL, 0, NULL, NULL);
|
---|
69 | if(bytes > 0) {
|
---|
70 | str_utf8 = malloc(bytes);
|
---|
71 | if(str_utf8) {
|
---|
72 | if(WideCharToMultiByte(CP_UTF8, 0, str_w, -1, str_utf8, bytes,
|
---|
73 | NULL, NULL) == 0) {
|
---|
74 | free(str_utf8);
|
---|
75 | return NULL;
|
---|
76 | }
|
---|
77 | }
|
---|
78 | }
|
---|
79 | }
|
---|
80 |
|
---|
81 | return str_utf8;
|
---|
82 | }
|
---|
83 |
|
---|
84 | #endif /* USE_WIN32_IDN || ((USE_WINDOWS_SSPI || USE_WIN32_LDAP) && UNICODE) */
|
---|