From d2a38b85dbcb176af80eb32b0ebf48c1b129b5dc Mon Sep 17 00:00:00 2001 From: Andrea Mazzoleni Date: Wed, 11 May 2011 21:12:16 +0200 Subject: [PATCH] Completes the fix for the file name in Windows. --- mingw.c | 17 ++++++++++++++++- mingw.h | 6 ++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/mingw.c b/mingw.c index c65c62af..6d889ab3 100644 --- a/mingw.c +++ b/mingw.c @@ -231,6 +231,11 @@ int windows_stat(const char* file, struct windows_stat* st) return 0; } +int windows_access(const char* file, int mode) +{ + return _waccess(u8tou16(file), mode); +} + int stat_inode(const char* file, struct windows_stat* st) { BY_HANDLE_FILE_INFORMATION info; @@ -313,7 +318,17 @@ FILE* windows_fopen(const char* file, const char* mode) int windows_open(const char* file, int flags, ...) { - return _wopen(u8tou16(file), flags); + va_list args; + int ret; + + va_start(args, flags); + if ((flags & O_CREAT) != 0) + ret = _wopen(u8tou16(file), flags, va_arg(args, int)); + else + ret = _wopen(u8tou16(file), flags); + va_end(args); + + return ret; } windows_dir* windows_opendir(const char* dir) diff --git a/mingw.h b/mingw.h index 9cb490c0..8029bf18 100644 --- a/mingw.h +++ b/mingw.h @@ -32,6 +32,7 @@ #define fopen windows_fopen #define open windows_open #define stat windows_stat +#define access windows_access #define off_t off64_t #define lseek lseek64 #define fstat windows_fstat @@ -68,6 +69,11 @@ int windows_fstat(int fd, struct windows_stat* st); */ int windows_stat(const char* file, struct windows_stat* st); +/** + * Like the C access(). + */ +int windows_access(const char* file, int mode); + /** * Like the C stat() with inode information. * It doesn't work for all kind of files and directories. For example "\System Volume Information" cannot be opened.