1e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#ifndef HEADER_CURL_MULTIBYTE_H 2e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define HEADER_CURL_MULTIBYTE_H 3e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET/*************************************************************************** 4e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * _ _ ____ _ 5e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * Project ___| | | | _ \| | 6e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * / __| | | | |_) | | 7e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * | (__| |_| | _ <| |___ 8e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * \___|\___/|_| \_\_____| 9e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * 10e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. 11e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * 12e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * This software is licensed as described in the file COPYING, which 13e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * you should have received as part of this distribution. The terms 14e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * are also available at http://curl.haxx.se/docs/copyright.html. 15e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * 16e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * You may opt to use, copy, modify, merge, publish, distribute and/or sell 17e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * copies of the Software, and permit persons to whom the Software is 18e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * furnished to do so, under the terms of the COPYING file. 19e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * 20e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 21e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * KIND, either express or implied. 22e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * 23e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET ***************************************************************************/ 24e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#include "curl_setup.h" 25e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 26e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#if defined(USE_WIN32_IDN) || ((defined(USE_WINDOWS_SSPI) || \ 27e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET defined(USE_WIN32_LDAP)) && defined(UNICODE)) 28e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 29e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET /* 30e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * MultiByte conversions using Windows kernel32 library. 31e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET */ 32e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 33e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNETwchar_t *Curl_convert_UTF8_to_wchar(const char *str_utf8); 34e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNETchar *Curl_convert_wchar_to_UTF8(const wchar_t *str_w); 35e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 36e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#endif /* USE_WIN32_IDN || ((USE_WINDOWS_SSPI || USE_WIN32_LDAP) && UNICODE) */ 37e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 38e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 39e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#if defined(USE_WIN32_IDN) || defined(USE_WINDOWS_SSPI) || \ 40e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET defined(USE_WIN32_LDAP) 41e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 42e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET/* 43e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * Macros Curl_convert_UTF8_to_tchar(), Curl_convert_tchar_to_UTF8() 44e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * and Curl_unicodefree() main purpose is to minimize the number of 45e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * preprocessor conditional directives needed by code using these 46e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * to differentiate UNICODE from non-UNICODE builds. 47e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * 48e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * When building with UNICODE defined, this two macros 49e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * Curl_convert_UTF8_to_tchar() and Curl_convert_tchar_to_UTF8() 50e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * return a pointer to a newly allocated memory area holding result. 51e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * When the result is no longer needed, allocated memory is intended 52e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * to be free'ed with Curl_unicodefree(). 53e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * 54e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * When building without UNICODE defined, this macros 55e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * Curl_convert_UTF8_to_tchar() and Curl_convert_tchar_to_UTF8() 56e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * return the pointer received as argument. Curl_unicodefree() does 57e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * no actual free'ing of this pointer it is simply set to NULL. 58e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET */ 59e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 60e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#ifdef UNICODE 61e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 62e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define Curl_convert_UTF8_to_tchar(ptr) Curl_convert_UTF8_to_wchar((ptr)) 63e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define Curl_convert_tchar_to_UTF8(ptr) Curl_convert_wchar_to_UTF8((ptr)) 64e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define Curl_unicodefree(ptr) \ 65e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET do {if((ptr)) {free((ptr)); (ptr) = NULL;}} WHILE_FALSE 66e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 67e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNETtypedef union { 68e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET unsigned short *tchar_ptr; 69e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET const unsigned short *const_tchar_ptr; 70e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET unsigned short *tbyte_ptr; 71e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET const unsigned short *const_tbyte_ptr; 72e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET} xcharp_u; 73e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 74e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#else 75e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 76e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define Curl_convert_UTF8_to_tchar(ptr) (ptr) 77e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define Curl_convert_tchar_to_UTF8(ptr) (ptr) 78e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define Curl_unicodefree(ptr) \ 79e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET do {(ptr) = NULL;} WHILE_FALSE 80e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 81e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNETtypedef union { 82e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET char *tchar_ptr; 83e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET const char *const_tchar_ptr; 84e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET unsigned char *tbyte_ptr; 85e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET const unsigned char *const_tbyte_ptr; 86e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET} xcharp_u; 87e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 88e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#endif /* UNICODE */ 89e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 90e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#endif /* USE_WIN32_IDN || USE_WINDOWS_SSPI || USE_WIN32_LDAP */ 91e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 92e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#endif /* HEADER_CURL_MULTIBYTE_H */ 93