W dniu 05.01.2019 o 20:59, Johannes Pfau pisze: > Am 05.01.19 um 18:56 schrieb Mateusz: >> ucrtbase.dll is affected too (msvcr100 works OK), so maybe it is better to >> add your access() function to msvcr110/120 and ucrtbase (as a replacement) >> instead of patching GCC. >> >> Regards, >> Mateusz >> >> > Maybe it would make sense to add this in crt/io.h? There's already a > __USE_MINGW_ACCESS guarded __mingw_access wrapper function which could be > extended. And as far as I can see, GCC already sets the __USE_MINGW_ACCESS > define, so it likely wouldn't need any changes. I've attached patch to mingw-w64 that replaces _access in msvcr110/120 and ucrtbase with Liu Hao version (for me it is too big for inline).
After patching mingw-w64 (and before building) please go to mingw-w64-crt folder and execute aclocal automake to regenerate makefiles. This patch changes only lib files -- it should work. Regards, Mateusz
From 71f1504a4181d38118b4d7924f6b6fee0b3d275e Mon Sep 17 00:00:00 2001 From: Mateusz Brzostek <mateu...@poczta.onet.pl> Date: Sun, 6 Jan 2019 00:54:25 +0100 Subject: [PATCH] Add _access function that works for nul file to msvcr110/120 and ucrtbase libs Original implementation Liu Hao <lh_mo...@126.com> Signed-off-by: Mateusz Brzostek <mateu...@poczta.onet.pl> --- mingw-w64-crt/Makefile.am | 23 ++-- mingw-w64-crt/def-include/msvcr110-common.def.in | 144 +++++++++++++++++++++++ mingw-w64-crt/lib-common/ucrtbase.def.in | 4 +- mingw-w64-crt/lib32/msvcr110.def.in | 4 +- mingw-w64-crt/lib32/msvcr120.def.in | 4 +- mingw-w64-crt/lib32/msvcr120_app.def.in | 4 +- mingw-w64-crt/lib32/msvcr120d.def.in | 4 +- mingw-w64-crt/lib64/msvcr110.def.in | 4 +- mingw-w64-crt/lib64/msvcr120.def.in | 4 +- mingw-w64-crt/lib64/msvcr120_app.def.in | 4 +- mingw-w64-crt/lib64/msvcr120d.def.in | 4 +- mingw-w64-crt/stdio/access.c | 65 ++++++++++ 12 files changed, 241 insertions(+), 27 deletions(-) create mode 100644 mingw-w64-crt/def-include/msvcr110-common.def.in create mode 100644 mingw-w64-crt/stdio/access.c diff --git a/mingw-w64-crt/Makefile.am b/mingw-w64-crt/Makefile.am index f8b0623..5c0b421 100644 --- a/mingw-w64-crt/Makefile.am +++ b/mingw-w64-crt/Makefile.am @@ -213,6 +213,10 @@ src_msvcrt=\ stdio/fseeki64.c \ stdio/mingw_lock.c +src_msvcr110=\ + $(src_msvcrt_common) \ + stdio/access.c + src_ucrtbase=\ crt/ucrtbase_compat.c \ stdio/ucrt_fprintf.c \ @@ -226,7 +230,8 @@ src_ucrtbase=\ stdio/ucrt_vfprintf.c \ stdio/ucrt_vprintf.c \ stdio/ucrt_vsnprintf.c \ - stdio/ucrt_vsprintf.c + stdio/ucrt_vsprintf.c \ + stdio/access.c src_msvcrt32=\ $(src_msvcrt) \ @@ -709,25 +714,25 @@ lib32_libmsvcr100_a_CPPFLAGS=$(CPPFLAGS32) -D__LIBMSVCRT__ $(extra_include) $(sy EXTRA_lib32_libmsvcr100_a_DEPENDENCIES=lib32/msvcr100.def lib32_LIBRARIES += lib32/libmsvcr110.a -lib32_libmsvcr110_a_SOURCES = $(src_msvcrt_common) lib32/msvcr110.def.in +lib32_libmsvcr110_a_SOURCES = $(src_msvcr110) lib32/msvcr110.def.in lib32_libmsvcr110_a_AR = $(DTDEF32) lib32/msvcr110.def && $(AR) $(ARFLAGS) lib32_libmsvcr110_a_CPPFLAGS=$(CPPFLAGS32) -D__LIBMSVCRT__ $(extra_include) $(sysincludes) EXTRA_lib32_libmsvcr110_a_DEPENDENCIES=lib32/msvcr110.def lib32_LIBRARIES += lib32/libmsvcr120.a -lib32_libmsvcr120_a_SOURCES = $(src_msvcrt_common) lib32/msvcr120.def.in +lib32_libmsvcr120_a_SOURCES = $(src_msvcr110) lib32/msvcr120.def.in lib32_libmsvcr120_a_AR = $(DTDEF32) lib32/msvcr120.def && $(AR) $(ARFLAGS) lib32_libmsvcr120_a_CPPFLAGS=$(CPPFLAGS32) -D__LIBMSVCRT__ $(extra_include) $(sysincludes) EXTRA_lib32_libmsvcr120_a_DEPENDENCIES=lib32/msvcr120.def lib32_LIBRARIES += lib32/libmsvcr120d.a -lib32_libmsvcr120d_a_SOURCES = $(src_msvcrt_common) lib32/msvcr120d.def.in +lib32_libmsvcr120d_a_SOURCES = $(src_msvcr110) lib32/msvcr120d.def.in lib32_libmsvcr120d_a_AR = $(DTDEF32) lib32/msvcr120d.def && $(AR) $(ARFLAGS) lib32_libmsvcr120d_a_CPPFLAGS=$(CPPFLAGS32) -D__LIBMSVCRT__ $(extra_include) $(sysincludes) EXTRA_lib32_libmsvcr120d_a_DEPENDENCIES=lib32/msvcr120d.def lib32_LIBRARIES += lib32/libmsvcr120_app.a -lib32_libmsvcr120_app_a_SOURCES = $(src_msvcrt_common) lib32/msvcr120_app.def.in +lib32_libmsvcr120_app_a_SOURCES = $(src_msvcr110) lib32/msvcr120_app.def.in lib32_libmsvcr120_app_a_AR = $(DTDEF32) lib32/msvcr120_app.def && $(AR) $(ARFLAGS) lib32_libmsvcr120_app_a_CPPFLAGS=$(CPPFLAGS32) -D__LIBMSVCRT__ $(extra_include) $(sysincludes) EXTRA_lib32_libmsvcr120_app_a_DEPENDENCIES=lib32/msvcr120_app.def @@ -1046,25 +1051,25 @@ lib64_libmsvcr100_a_CPPFLAGS=$(CPPFLAGS64) -D__LIBMSVCRT__ $(extra_include) $(sy EXTRA_lib64_libmsvcr100_a_DEPENDENCIES=lib64/msvcr100.def lib64_LIBRARIES += lib64/libmsvcr110.a -lib64_libmsvcr110_a_SOURCES = $(src_msvcrt_common) lib64/msvcr110.def.in +lib64_libmsvcr110_a_SOURCES = $(src_msvcr110) lib64/msvcr110.def.in lib64_libmsvcr110_a_AR = $(DTDEF64) lib64/msvcr110.def && $(AR) $(ARFLAGS) lib64_libmsvcr110_a_CPPFLAGS=$(CPPFLAGS64) -D__LIBMSVCRT__ $(extra_include) $(sysincludes) EXTRA_lib64_libmsvcr110_a_DEPENDENCIES=lib64/msvcr110.def lib64_LIBRARIES += lib64/libmsvcr120.a -lib64_libmsvcr120_a_SOURCES = $(src_msvcrt_common) lib64/msvcr120.def.in +lib64_libmsvcr120_a_SOURCES = $(src_msvcr110) lib64/msvcr120.def.in lib64_libmsvcr120_a_AR = $(DTDEF64) lib64/msvcr120.def && $(AR) $(ARFLAGS) lib64_libmsvcr120_a_CPPFLAGS=$(CPPFLAGS64) -D__LIBMSVCRT__ $(extra_include) $(sysincludes) EXTRA_lib64_libmsvcr120_a_DEPENDENCIES=lib64/msvcr120.def lib64_LIBRARIES += lib64/libmsvcr120d.a -lib64_libmsvcr120d_a_SOURCES = $(src_msvcrt_common) lib64/msvcr120d.def.in +lib64_libmsvcr120d_a_SOURCES = $(src_msvcr110) lib64/msvcr120d.def.in lib64_libmsvcr120d_a_AR = $(DTDEF64) lib64/msvcr120d.def && $(AR) $(ARFLAGS) lib64_libmsvcr120d_a_CPPFLAGS=$(CPPFLAGS64) -D__LIBMSVCRT__ $(extra_include) $(sysincludes) EXTRA_lib64_libmsvcr120d_a_DEPENDENCIES=lib64/msvcr120d.def lib64_LIBRARIES += lib64/libmsvcr120_app.a -lib64_libmsvcr120_app_a_SOURCES = $(src_msvcrt_common) lib64/msvcr120_app.def.in +lib64_libmsvcr120_app_a_SOURCES = $(src_msvcr110) lib64/msvcr120_app.def.in lib64_libmsvcr120_app_a_AR = $(DTDEF64) lib64/msvcr120_app.def && $(AR) $(ARFLAGS) lib64_libmsvcr120_app_a_CPPFLAGS=$(CPPFLAGS64) -D__LIBMSVCRT__ $(extra_include) $(sysincludes) EXTRA_lib64_libmsvcr120_app_a_DEPENDENCIES=lib64/msvcr120_app.def diff --git a/mingw-w64-crt/def-include/msvcr110-common.def.in b/mingw-w64-crt/def-include/msvcr110-common.def.in new file mode 100644 index 0000000..6819382 --- /dev/null +++ b/mingw-w64-crt/def-include/msvcr110-common.def.in @@ -0,0 +1,144 @@ +#define ADD_UNDERSCORE(symbol) symbol == _ ## symbol +#define ADD_DOUBLE_UNDERSCORE(symbol) symbol == __ ## symbol + +ADD_DOUBLE_UNDERSCORE(iscsymf) +ADD_DOUBLE_UNDERSCORE(iscsym) +ADD_DOUBLE_UNDERSCORE(isascii) +ADD_DOUBLE_UNDERSCORE(toascii) + +wcscmpi == _wcsicmp +strcasecmp == _stricmp +strncasecmp == _strnicmp + +ADD_UNDERSCORE(chdir) +ADD_UNDERSCORE(chmod) +ADD_UNDERSCORE(chsize) +ADD_UNDERSCORE(close) +ADD_UNDERSCORE(creat) +ADD_UNDERSCORE(cwait) +ADD_UNDERSCORE(dup) +ADD_UNDERSCORE(dup2) +ADD_UNDERSCORE(ecvt) +ADD_UNDERSCORE(eof) +ADD_UNDERSCORE(execl) +ADD_UNDERSCORE(execle) +ADD_UNDERSCORE(execlp) +ADD_UNDERSCORE(execlpe) +ADD_UNDERSCORE(execv) +ADD_UNDERSCORE(execve) +ADD_UNDERSCORE(execvp) +ADD_UNDERSCORE(execvpe) +ADD_UNDERSCORE(fcvt) +ADD_UNDERSCORE(fdopen) +ADD_UNDERSCORE(fgetchar) +ADD_UNDERSCORE(fgetwchar) +ADD_UNDERSCORE(filelength) +ADD_UNDERSCORE(fileno) +; fpreset) +ADD_UNDERSCORE(fputchar) +ADD_UNDERSCORE(fputwchar) +;fstat) +;ftime) +ADD_UNDERSCORE(gcvt) +ADD_UNDERSCORE(getch) +ADD_UNDERSCORE(getche) +ADD_UNDERSCORE(getcwd) +ADD_UNDERSCORE(getpid) +ADD_UNDERSCORE(getw) +ADD_UNDERSCORE(heapwalk) +ADD_UNDERSCORE(isatty) +ADD_UNDERSCORE(itoa) +ADD_UNDERSCORE(kbhit) +ADD_UNDERSCORE(lfind) +ADD_UNDERSCORE(lsearch) +ADD_UNDERSCORE(lseek) +ADD_UNDERSCORE(ltoa) +ADD_UNDERSCORE(memccpy) +ADD_UNDERSCORE(memicmp) +ADD_UNDERSCORE(mkdir) +ADD_UNDERSCORE(mktemp) +ADD_UNDERSCORE(open) +ADD_UNDERSCORE(pclose) +ADD_UNDERSCORE(popen) +ADD_UNDERSCORE(putch) +ADD_UNDERSCORE(putenv) +ADD_UNDERSCORE(putw) +ADD_UNDERSCORE(read) +ADD_UNDERSCORE(rmdir) +ADD_UNDERSCORE(rmtmp) +ADD_UNDERSCORE(searchenv) +ADD_UNDERSCORE(setmode) +ADD_UNDERSCORE(sopen) +ADD_UNDERSCORE(spawnl) +ADD_UNDERSCORE(spawnle) +ADD_UNDERSCORE(spawnlp) +ADD_UNDERSCORE(spawnlpe) +ADD_UNDERSCORE(spawnv) +ADD_UNDERSCORE(spawnve) +ADD_UNDERSCORE(spawnvp) +ADD_UNDERSCORE(spawnvpe) +;stat) +#ifndef UCRTBASE +ADD_UNDERSCORE(strcmpi) +#endif +ADD_UNDERSCORE(strdup) +ADD_UNDERSCORE(stricmp) +ADD_UNDERSCORE(stricoll) +ADD_UNDERSCORE(strlwr) +ADD_UNDERSCORE(strnicmp) +ADD_UNDERSCORE(strnset) +ADD_UNDERSCORE(strrev) +ADD_UNDERSCORE(strset) +ADD_UNDERSCORE(strupr) +ADD_UNDERSCORE(swab) +ADD_UNDERSCORE(tell) +ADD_UNDERSCORE(tempnam) +#ifndef UCRTBASE +ADD_UNDERSCORE(tzset) +#endif +ADD_UNDERSCORE(umask) +ADD_UNDERSCORE(ungetch) +ADD_UNDERSCORE(unlink) +#ifndef UCRTBASE +ADD_UNDERSCORE(utime) +#endif +ADD_UNDERSCORE(wcsdup) +ADD_UNDERSCORE(wcsicmp) +ADD_UNDERSCORE(wcsicoll) +ADD_UNDERSCORE(wcslwr) +ADD_UNDERSCORE(wcsnicmp) +ADD_UNDERSCORE(wcsnset) +ADD_UNDERSCORE(wcsrev) +ADD_UNDERSCORE(wcsset) +ADD_UNDERSCORE(wcsupr) +ADD_UNDERSCORE(wpopen) +ADD_UNDERSCORE(write) +; non-ANSI functions declared in math.h +ADD_UNDERSCORE(j0) +ADD_UNDERSCORE(j1) +ADD_UNDERSCORE(jn) +ADD_UNDERSCORE(y0) +ADD_UNDERSCORE(y1) +ADD_UNDERSCORE(yn) +ADD_UNDERSCORE(chgsign) +;scalb +ADD_UNDERSCORE(finite) +ADD_UNDERSCORE(fpclass) +; C99 functions +;cabs +ADD_UNDERSCORE(hypot) +;logb +ADD_UNDERSCORE(nextafter) + +#ifndef UCRTBASE +_daylight DATA +_timezone DATA +_tzname DATA +ADD_UNDERSCORE(daylight) +ADD_UNDERSCORE(timezone) +ADD_UNDERSCORE(tzname) + +ADD_UNDERSCORE(vsnprintf_s) + +longjmp DATA +#endif diff --git a/mingw-w64-crt/lib-common/ucrtbase.def.in b/mingw-w64-crt/lib-common/ucrtbase.def.in index d5e7a63..7a75e05 100644 --- a/mingw-w64-crt/lib-common/ucrtbase.def.in +++ b/mingw-w64-crt/lib-common/ucrtbase.def.in @@ -3,7 +3,7 @@ EXPORTS #include "func.def.in" #define UCRTBASE -#include "msvcrt-common.def.in" +#include "msvcr110-common.def.in" #ifdef DEF_I386 _CIacos @@ -192,7 +192,7 @@ __wcserror __wcserror_s __wcsncnt _abs64 -_access +; _access _access_s _aligned_free _aligned_malloc diff --git a/mingw-w64-crt/lib32/msvcr110.def.in b/mingw-w64-crt/lib32/msvcr110.def.in index 920677b..94154b7 100644 --- a/mingw-w64-crt/lib32/msvcr110.def.in +++ b/mingw-w64-crt/lib32/msvcr110.def.in @@ -6,7 +6,7 @@ LIBRARY "MSVCR110.dll" EXPORTS -#include "msvcrt-common.def.in" +#include "msvcr110-common.def.in" ; public: __thiscall Concurrency::details::<0x1ULL>::<0x1ULL>(void(__cdecl *)(void)) ??0?$_SpinWait@$00@details@Concurrency@@QAE@P6AXXZ@Z ; has WINAPI (@4) @@ -843,7 +843,7 @@ __wgetmainargs __winitenv DATA _abnormal_termination _abs64 -_access +; _access _access_s _acmdln DATA _aligned_free diff --git a/mingw-w64-crt/lib32/msvcr120.def.in b/mingw-w64-crt/lib32/msvcr120.def.in index c1e2af8..c7edc9e 100644 --- a/mingw-w64-crt/lib32/msvcr120.def.in +++ b/mingw-w64-crt/lib32/msvcr120.def.in @@ -6,7 +6,7 @@ LIBRARY "MSVCR120.dll" EXPORTS -#include "msvcrt-common.def.in" +#include "msvcr110-common.def.in" ; public: __thiscall Concurrency::details::<0x1ULL>::<0x1ULL>(void(__cdecl *)(void)) ??0?$_SpinWait@$00@details@Concurrency@@QAE@P6AXXZ@Z ; has WINAPI (@4) @@ -855,7 +855,7 @@ __wgetmainargs __winitenv DATA _abnormal_termination _abs64 -_access +; _access _access_s _acmdln DATA _aligned_free diff --git a/mingw-w64-crt/lib32/msvcr120_app.def.in b/mingw-w64-crt/lib32/msvcr120_app.def.in index b13d9a6..b031ea9 100644 --- a/mingw-w64-crt/lib32/msvcr120_app.def.in +++ b/mingw-w64-crt/lib32/msvcr120_app.def.in @@ -6,7 +6,7 @@ LIBRARY "msvcr120_app.dll" EXPORTS -#include "msvcrt-common.def.in" +#include "msvcr110-common.def.in" ??0?$_SpinWait@$00@details@Concurrency@@QAE@P6AXXZ@Z ; has WINAPI (@4) ??0?$_SpinWait@$0A@@details@Concurrency@@QAE@P6AXXZ@Z ; has WINAPI (@4) @@ -507,7 +507,7 @@ __wgetmainargs __winitenv DATA _abnormal_termination _abs64 -_access +; _access _access_s _acmdln DATA _aligned_free diff --git a/mingw-w64-crt/lib32/msvcr120d.def.in b/mingw-w64-crt/lib32/msvcr120d.def.in index 385d491..30f58f6 100644 --- a/mingw-w64-crt/lib32/msvcr120d.def.in +++ b/mingw-w64-crt/lib32/msvcr120d.def.in @@ -6,7 +6,7 @@ LIBRARY "MSVCR120D.dll" EXPORTS -#include "msvcrt-common.def.in" +#include "msvcr110-common.def.in" ; public: __thiscall Concurrency::details::<0x1ULL>::<0x1ULL>(void(__cdecl *)(void)) ??0?$_SpinWait@$00@details@Concurrency@@QAE@P6AXXZ@Z ; has WINAPI (@4) @@ -894,7 +894,7 @@ __wgetmainargs __winitenv DATA _abnormal_termination _abs64 -_access +; _access _access_s _acmdln DATA _aligned_free diff --git a/mingw-w64-crt/lib64/msvcr110.def.in b/mingw-w64-crt/lib64/msvcr110.def.in index a412997..f2c3ecd 100644 --- a/mingw-w64-crt/lib64/msvcr110.def.in +++ b/mingw-w64-crt/lib64/msvcr110.def.in @@ -6,7 +6,7 @@ LIBRARY "MSVCR110.dll" EXPORTS -#include "msvcrt-common.def.in" +#include "msvcr110-common.def.in" $I10_OUTPUT ; public: __cdecl Concurrency::details::<0x1ULL>::<0x1ULL>(void(__cdecl *)(void))__ptr64 @@ -803,7 +803,7 @@ __wcsncnt __wgetmainargs __winitenv DATA _abs64 -_access +; _access _access_s _acmdln DATA _aligned_free diff --git a/mingw-w64-crt/lib64/msvcr120.def.in b/mingw-w64-crt/lib64/msvcr120.def.in index 38d5af2..8276f53 100644 --- a/mingw-w64-crt/lib64/msvcr120.def.in +++ b/mingw-w64-crt/lib64/msvcr120.def.in @@ -6,7 +6,7 @@ LIBRARY "MSVCR120.dll" EXPORTS -#include "msvcrt-common.def.in" +#include "msvcr110-common.def.in" $I10_OUTPUT ; public: __cdecl Concurrency::details::<0x1ULL>::<0x1ULL>(void(__cdecl *)(void))__ptr64 @@ -815,7 +815,7 @@ __wcsncnt __wgetmainargs __winitenv DATA _abs64 -_access +; _access _access_s _acmdln DATA _aligned_free diff --git a/mingw-w64-crt/lib64/msvcr120_app.def.in b/mingw-w64-crt/lib64/msvcr120_app.def.in index a5f6f77..f7a5793 100644 --- a/mingw-w64-crt/lib64/msvcr120_app.def.in +++ b/mingw-w64-crt/lib64/msvcr120_app.def.in @@ -6,7 +6,7 @@ LIBRARY "msvcr120_app.dll" EXPORTS -#include "msvcrt-common.def.in" +#include "msvcr110-common.def.in" $I10_OUTPUT ??0?$_SpinWait@$00@details@Concurrency@@QEAA@P6AXXZ@Z @@ -468,7 +468,7 @@ __wcsncnt __wgetmainargs __winitenv DATA _abs64 -_access +; _access _access_s _acmdln DATA _aligned_free diff --git a/mingw-w64-crt/lib64/msvcr120d.def.in b/mingw-w64-crt/lib64/msvcr120d.def.in index df0425a..199cd7e 100644 --- a/mingw-w64-crt/lib64/msvcr120d.def.in +++ b/mingw-w64-crt/lib64/msvcr120d.def.in @@ -6,7 +6,7 @@ LIBRARY "MSVCR120D.dll" EXPORTS -#include "msvcrt-common.def.in" +#include "msvcr110-common.def.in" $I10_OUTPUT ; public: __cdecl Concurrency::details::<0x1ULL>::<0x1ULL>(void(__cdecl *)(void))__ptr64 @@ -852,7 +852,7 @@ __wcsncnt __wgetmainargs __winitenv DATA _abs64 -_access +; _access _access_s _acmdln DATA _aligned_free diff --git a/mingw-w64-crt/stdio/access.c b/mingw-w64-crt/stdio/access.c new file mode 100644 index 0000000..b6dc0df --- /dev/null +++ b/mingw-w64-crt/stdio/access.c @@ -0,0 +1,65 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the mingw-w64 runtime package. + * No warranty is given; refer to the file DISCLAIMER.PD within this package. + */ +#include <windows.h> +#include <internal.h> + +#define F_OK 0 /* Check for file existence */ +#define X_OK 1 /* Check for execute permission. */ +#define W_OK 2 /* Check for write permission */ +#define R_OK 4 /* Check for read permission */ + +int __cdecl _access(const char *pathname, int mode); + +int __cdecl _access(const char *pathname, int mode) +{ + DWORD attr = GetFileAttributesA(pathname); + if (attr == INVALID_FILE_ATTRIBUTES) + { + // Set `errno` accordingly. + switch (GetLastError()) + { + case ERROR_FILE_NOT_FOUND: + case ERROR_PATH_NOT_FOUND: + errno = ENOENT; + break; + case ERROR_ACCESS_DENIED: + errno = EACCES; + break; + default: + errno = EINVAL; + } + return -1; + } + switch (mode) + { + case F_OK: + case R_OK: + // It is always existent and readable. + return 0; + case W_OK: + // Directories are always writeable. + if (attr & FILE_ATTRIBUTE_DIRECTORY) + return 0; + // Read-only files are not writeable. + if (attr & FILE_ATTRIBUTE_READONLY) + { + errno = EACCES; + return -1; + } + return 0; + case X_OK: + // On Windows all files are presumed to be executable. + // They can be opened in a command prompt without any arguments. + return 0; + default: + errno = EINVAL; + return -1; + } +} + +int __cdecl (*__MINGW_IMP_SYMBOL(_access))(const char *, int) = _access; +int __cdecl (*__MINGW_IMP_SYMBOL(access))(const char *, int) = _access; + -- 2.7.4
_______________________________________________ Mingw-w64-public mailing list Mingw-w64-public@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mingw-w64-public