diff options
author | Stephan Szabo <stephan.szabo@sony.com> | 2021-01-20 10:08:49 -0800 |
---|---|---|
committer | Jay Satiro <raysatiro@yahoo.com> | 2021-02-09 02:45:51 -0500 |
commit | 1269c80af1dc45c3cee1dbbc76270ac7c7d6f1c3 (patch) | |
tree | 8376253c4116399f71fbfd820a940949f18117f9 /lib | |
parent | d4a3b87c13da5db437dc66d646132bdeb902e196 (diff) | |
download | curl-1269c80af1dc45c3cee1dbbc76270ac7c7d6f1c3.tar.gz |
file: Support unicode urls on windows
Closes https://github.com/curl/curl/pull/6501
Diffstat (limited to 'lib')
-rw-r--r-- | lib/curl_multibyte.c | 26 | ||||
-rw-r--r-- | lib/curl_setup.h | 4 |
2 files changed, 30 insertions, 0 deletions
diff --git a/lib/curl_multibyte.c b/lib/curl_multibyte.c index d327c8ba7..571f1d38a 100644 --- a/lib/curl_multibyte.c +++ b/lib/curl_multibyte.c @@ -82,6 +82,32 @@ char *curlx_convert_wchar_to_UTF8(const wchar_t *str_w) #if defined(USE_WIN32_LARGE_FILES) || defined(USE_WIN32_SMALL_FILES) +int curlx_win32_open(const char *filename, int oflag, ...) +{ + int pmode = 0; + +#ifdef _UNICODE + int result = -1; + wchar_t *filename_w = curlx_convert_UTF8_to_wchar(filename); +#endif + + va_list param; + va_start(param, oflag); + if(oflag & O_CREAT) + pmode = va_arg(param, int); + va_end(param); + +#ifdef _UNICODE + if(filename_w) + result = _wopen(filename_w, oflag, pmode); + free(filename_w); + if(result != -1) + return result; +#endif + + return (_open)(filename, oflag, pmode); +} + FILE *curlx_win32_fopen(const char *filename, const char *mode) { #ifdef _UNICODE diff --git a/lib/curl_setup.h b/lib/curl_setup.h index 22def2def..9cef5f7d0 100644 --- a/lib/curl_setup.h +++ b/lib/curl_setup.h @@ -335,8 +335,10 @@ # define stat(fname,stp) curlx_win32_stat(fname, stp) # define struct_stat struct _stati64 # define LSEEK_ERROR (__int64)-1 +# define open curlx_win32_open # define fopen(fname,mode) curlx_win32_fopen(fname, mode) # define access(fname,mode) curlx_win32_access(fname, mode) + int curlx_win32_open(const char *filename, int oflag, ...); int curlx_win32_stat(const char *path, struct_stat *buffer); FILE *curlx_win32_fopen(const char *filename, const char *mode); int curlx_win32_access(const char *path, int mode); @@ -356,9 +358,11 @@ # define fstat(fdes,stp) _fstat(fdes, stp) # define stat(fname,stp) curlx_win32_stat(fname, stp) # define struct_stat struct _stat +# define open curlx_win32_open # define fopen(fname,mode) curlx_win32_fopen(fname, mode) # define access(fname,mode) curlx_win32_access(fname, mode) int curlx_win32_stat(const char *path, struct_stat *buffer); + int curlx_win32_open(const char *filename, int oflag, ...); FILE *curlx_win32_fopen(const char *filename, const char *mode); int curlx_win32_access(const char *path, int mode); # endif |