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.