aboutsummaryrefslogtreecommitdiff
path: root/lib/idn_win32.c
diff options
context:
space:
mode:
authorMark Salisbury <mark.salisbury@hp.com>2012-06-15 18:05:11 +0200
committerYang Tse <yangsita@gmail.com>2012-06-15 18:41:49 +0200
commit46480bb9a1569eaf156012f33e3e7e8c3de18f87 (patch)
tree28c6ee9e5b39119260f0691ecb765e771f7fed72 /lib/idn_win32.c
parent16c725dbc77b408d5b3c2b2d213063f7c2398c06 (diff)
SSPI related code: Unicode support for WinCE
SSPI related code now compiles with ANSI and WCHAR versions of security methods (WinCE requires WCHAR versions of methods). Pulled UTF8 to WCHAR conversion methods out of idn_win32.c into their own file. curl_sasl.c - include curl_memory.h to use correct memory functions. getenv.c and telnet.c - WinCE compatibility fix With some committer adjustments
Diffstat (limited to 'lib/idn_win32.c')
-rw-r--r--lib/idn_win32.c58
1 files changed, 5 insertions, 53 deletions
diff --git a/lib/idn_win32.c b/lib/idn_win32.c
index 70286c0fd..6351f791d 100644
--- a/lib/idn_win32.c
+++ b/lib/idn_win32.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -28,7 +28,7 @@
#ifdef USE_WIN32_IDN
-#include <tchar.h>
+#include "curl_multibyte.h"
#ifdef WANT_IDN_PROTOTYPES
WINBASEAPI int WINAPI IdnToAscii(DWORD, LPCWSTR, int, LPWSTR, int);
@@ -37,57 +37,9 @@ WINBASEAPI int WINAPI IdnToUnicode(DWORD, LPCWSTR, int, LPWSTR, int);
#define IDN_MAX_LENGTH 255
-static wchar_t *_curl_win32_UTF8_to_wchar(const char *str_utf8)
-{
- wchar_t *str_w = NULL;
-
- if(str_utf8) {
- int str_w_len = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS,
- str_utf8, -1, NULL, 0);
- if(str_w_len) {
- str_w = malloc(str_w_len * sizeof(wchar_t));
- if(str_w) {
- if(MultiByteToWideChar(CP_UTF8, 0, str_utf8, -1, str_w,
- str_w_len) == 0) {
- free(str_w);
- str_w = NULL;
- }
- }
- }
- }
-
- return str_w;
-}
-
-static const char *_curl_win32_wchar_to_UTF8(const wchar_t *str_w)
-{
- char *str_utf8 = NULL;
-
- if(str_w) {
- size_t str_utf8_len = WideCharToMultiByte(CP_UTF8, 0, str_w, -1, NULL,
- 0, NULL, NULL);
- if(str_utf8_len) {
- str_utf8 = malloc(str_utf8_len * sizeof(wchar_t));
- if(str_utf8) {
- if(WideCharToMultiByte(CP_UTF8, 0, str_w, -1, str_utf8, str_utf8_len,
- NULL, FALSE) == 0) {
- (void) GetLastError();
- free((void *)str_utf8);
- str_utf8 = NULL;
- }
- }
- }
- else {
- (void) GetLastError();
- }
- }
-
- return str_utf8;
-}
-
int curl_win32_idn_to_ascii(const char *in, char **out)
{
- wchar_t *in_w = _curl_win32_UTF8_to_wchar(in);
+ wchar_t *in_w = Curl_convert_UTF8_to_wchar(in);
if(in_w) {
wchar_t punycode[IDN_MAX_LENGTH];
if(IdnToAscii(0, in_w, -1, punycode, IDN_MAX_LENGTH) == 0) {
@@ -97,7 +49,7 @@ int curl_win32_idn_to_ascii(const char *in, char **out)
}
free(in_w);
- *out = (char *)_curl_win32_wchar_to_UTF8(punycode);
+ *out = (char *)Curl_convert_wchar_to_UTF8(punycode);
if(!(*out)) {
return 0;
}
@@ -115,7 +67,7 @@ int curl_win32_ascii_to_idn(const char *in, size_t in_len, char **out_utf8)
return 0;
}
else {
- const char *out_utf8 = _curl_win32_wchar_to_UTF8(unicode);
+ const char *out_utf8 = Curl_convert_wchar_to_UTF8(unicode);
if(!out_utf8) {
return 0;
}