| #include <windows.h> | |
| #include <io.h> | |
| #include <errno.h> | |
| #include <msvcrt.h> | |
| static errno_t __cdecl _int_sopen_s(int *, const char *, int, int, int); | |
| static errno_t __cdecl _stub(int *, const char *, int, int, int); | |
| errno_t __cdecl (*__MINGW_IMP_SYMBOL(_sopen_s))(int *, const char *, int, int, int) = _stub; | |
| static errno_t __cdecl | |
| _stub (int* pfh, const char *filename, int oflag, int shflag, int pmode) | |
| { | |
| errno_t __cdecl (*f)(int *, const char *, int, int, int) = __MINGW_IMP_SYMBOL(_sopen_s); | |
| if (f == _stub) { | |
| f = (void*) | |
| GetProcAddress (__mingw_get_msvcrt_handle (), "_sopen_s"); | |
| if (f == NULL) | |
| f = _int_sopen_s; | |
| __MINGW_IMP_SYMBOL(_sopen_s) = f; | |
| } | |
| return (*f)(pfh, filename, oflag, shflag, pmode); | |
| } | |
| static errno_t __cdecl _int_sopen_s(int* pfh, const char *filename, int oflag, int shflag, int pmode) | |
| { | |
| if (pfh == NULL || filename == NULL) { | |
| if (pfh != NULL) *pfh = -1; | |
| errno = EINVAL; | |
| return EINVAL; | |
| } | |
| *pfh = _sopen(filename, oflag, shflag, pmode); | |
| return errno; | |
| } | |
| errno_t __cdecl _sopen_s(int* pfh, const char *filename, int oflag, int shflag, int pmode) | |
| { | |
| return _stub (pfh, filename, oflag, shflag, pmode); | |
| } |