38 #ifdef WANT_IDN_PROTOTYPES 39 # if defined(_SAL_VERSION) 40 WINNORMALIZEAPI
int WINAPI
41 IdnToAscii(_In_ DWORD dwFlags,
42 _In_reads_(cchUnicodeChar) LPCWSTR lpUnicodeCharStr,
43 _In_
int cchUnicodeChar,
44 _Out_writes_opt_(cchASCIIChar) LPWSTR lpASCIICharStr,
45 _In_
int cchASCIIChar);
46 WINNORMALIZEAPI
int WINAPI
47 IdnToUnicode(_In_ DWORD dwFlags,
48 _In_reads_(cchASCIIChar) LPCWSTR lpASCIICharStr,
49 _In_
int cchASCIIChar,
50 _Out_writes_opt_(cchUnicodeChar) LPWSTR lpUnicodeCharStr,
51 _In_
int cchUnicodeChar);
53 WINBASEAPI
int WINAPI IdnToAscii(DWORD dwFlags,
54 const WCHAR *lpUnicodeCharStr,
56 WCHAR *lpASCIICharStr,
58 WINBASEAPI
int WINAPI IdnToUnicode(DWORD dwFlags,
59 const WCHAR *lpASCIICharStr,
61 WCHAR *lpUnicodeCharStr,
66 #define IDN_MAX_LENGTH 255 68 bool curl_win32_idn_to_ascii(
const char *in,
char **out);
69 bool curl_win32_ascii_to_idn(
const char *in,
char **out);
71 bool curl_win32_idn_to_ascii(
const char *in,
char **out)
75 wchar_t *in_w = Curl_convert_UTF8_to_wchar(in);
77 wchar_t punycode[IDN_MAX_LENGTH];
78 int chars = IdnToAscii(0, in_w, -1, punycode, IDN_MAX_LENGTH);
81 *out = Curl_convert_wchar_to_UTF8(punycode);
90 bool curl_win32_ascii_to_idn(
const char *in,
char **out)
94 wchar_t *in_w = Curl_convert_UTF8_to_wchar(in);
96 size_t in_len = wcslen(in_w) + 1;
97 wchar_t unicode[IDN_MAX_LENGTH];
99 unicode, IDN_MAX_LENGTH);
102 *out = Curl_convert_wchar_to_UTF8(unicode);
int curlx_uztosi(size_t uznum)