diff --git a/lib/curl_multibyte.c b/lib/curl_multibyte.c index 5345d7b36..2c8925b53 100644 --- a/lib/curl_multibyte.c +++ b/lib/curl_multibyte.c @@ -129,4 +129,25 @@ int curlx_win32_stat(const char *path, struct_stat *buffer) return result; } +int curlx_win32_access(const char *path, int mode) +{ + int result = -1; +#ifdef _UNICODE + wchar_t *path_w = curlx_convert_UTF8_to_wchar(path); +#endif /* _UNICODE */ + +#if defined(_UNICODE) + if(path_w) + result = _waccess(path_w, mode); + else +#endif /* _UNICODE */ + result = _access(path, mode); + +#ifdef _UNICODE + free(path_w); +#endif + + return result; +} + #endif /* USE_WIN32_LARGE_FILES || USE_WIN32_SMALL_FILES */ diff --git a/lib/curl_setup.h b/lib/curl_setup.h index 82b962b89..d76c630d0 100644 --- a/lib/curl_setup.h +++ b/lib/curl_setup.h @@ -335,8 +335,10 @@ # define struct_stat struct _stati64 # define LSEEK_ERROR (__int64)-1 # 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); FILE *curlx_win32_fopen(const char *filename, const char *mode); + int curlx_win32_access(const char *path, int mode); #endif /* @@ -354,8 +356,10 @@ # define stat(fname,stp) curlx_win32_stat(fname, stp) # define struct_stat struct _stat # 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); FILE *curlx_win32_fopen(const char *filename, const char *mode); + int curlx_win32_access(const char *path, int mode); # endif # define LSEEK_ERROR (long)-1 #endif