On 64-bit are _fstati64 and _fstat64 functions same, both uses 64-bit time_t and 64-bit off_t. On 32-bit is _fstati64 using 32-bit time_t.
64-bit msvcrt DLL library provides both native _fstati64 and _fstat64 symbols. And other 64-bit CRT DLL libraries (msvcr80+ and UCRT) are not categorized as FIXED_SIZE_SYMBOLS. 32-bit msvcr70 and msvcr71 DLL libraries provides native fixed-size symbols for 64-bit wide functions like _fstat64. Import library for 32-bit system os msvcrt uses emulation of _fstat64 function which also defines own alias for fstat64 in file stdio/_fstat64.c. So define fstat64 symbol as alias to _fstat64 (instead of as to _fstati64) in crt-aliases.def.in file for all import CRT libraries which provides native _fstat64 symbol (non-i386 msvcrt, msvcr70+ and ucrt). Current condition for fstat64 in crt-aliases.def.in is wrong because it does not take into account the 64-bit msvcrt case which defines the NO_FIXED_SIZE_64_ALIAS macro saying that DLL provides the native _fstat64 symbol (and hence crt-aliases.def.in must not define _fstat64 symbol). And there are also missing settings for NO_FIXED_SIZE_64_ALIAS in msvcr70 and msvcr71 def files as these DLL libraries provides _fstat64 function. --- mingw-w64-crt/def-include/crt-aliases.def.in | 5 +++-- mingw-w64-crt/lib-common/msvcrt.def.in | 4 ++++ mingw-w64-crt/lib32/msvcr70.def.in | 1 + mingw-w64-crt/lib32/msvcr70d.def.in | 1 + mingw-w64-crt/lib32/msvcr71.def.in | 1 + mingw-w64-crt/lib32/msvcr71d.def.in | 1 + 6 files changed, 11 insertions(+), 2 deletions(-) diff --git a/mingw-w64-crt/def-include/crt-aliases.def.in b/mingw-w64-crt/def-include/crt-aliases.def.in index 6335237900f1..2c9090b9e130 100644 --- a/mingw-w64-crt/def-include/crt-aliases.def.in +++ b/mingw-w64-crt/def-include/crt-aliases.def.in @@ -309,8 +309,9 @@ stat64i32 == _stat64i32 ; stat for non-UCRT is provided by mingw to workaround trailing slash issue in _stat #endif #ifdef FIXED_SIZE_SYMBOLS -#if !defined(NO_I64_FIXED_SIZE) && !defined(NO_FIXED_SIZE_64_ALIAS) -F64(fstat64 == _fstati64) +// NO_FIXED_SIZE_64_ALIAS means that DLL provides the native _fstat64 symbol +#if defined(NO_FIXED_SIZE_64_ALIAS) && !defined(NO_FSTAT64_ALIAS) +fstat64 == _fstat64 #endif #else fstat64 == _fstat64 diff --git a/mingw-w64-crt/lib-common/msvcrt.def.in b/mingw-w64-crt/lib-common/msvcrt.def.in index 82694e41f7e8..ab7eeed49ce7 100644 --- a/mingw-w64-crt/lib-common/msvcrt.def.in +++ b/mingw-w64-crt/lib-common/msvcrt.def.in @@ -1907,6 +1907,10 @@ F_I386(_libm_sse2_tan_precise) ; This includes list of some symbol alises for compatibility with C99 and POSIX functions and symbols from other msvcr* libraries #define FIXED_SIZE_SYMBOLS #define NO_FIXED_SIZE_64_ALIAS +#ifdef __i386__ +; i386 fstat64 alias provided by emu +#define NO_FSTAT64_ALIAS +#endif #define NO_TIME_ALIAS #define NO_STRCMPI_ALIAS #define WITH_NEXTAFTER_ALIAS diff --git a/mingw-w64-crt/lib32/msvcr70.def.in b/mingw-w64-crt/lib32/msvcr70.def.in index d4726d199c57..ec64df727c37 100644 --- a/mingw-w64-crt/lib32/msvcr70.def.in +++ b/mingw-w64-crt/lib32/msvcr70.def.in @@ -901,6 +901,7 @@ wprintf wscanf #define FIXED_SIZE_SYMBOLS +#define NO_FIXED_SIZE_64_ALIAS #define NO_STRCMPI_ALIAS #define WITH_NEXTAFTER_ALIAS #define WITH_TZ_ALIASES diff --git a/mingw-w64-crt/lib32/msvcr70d.def.in b/mingw-w64-crt/lib32/msvcr70d.def.in index 6ca476200152..408f1e9194ce 100644 --- a/mingw-w64-crt/lib32/msvcr70d.def.in +++ b/mingw-w64-crt/lib32/msvcr70d.def.in @@ -945,6 +945,7 @@ wprintf wscanf #define FIXED_SIZE_SYMBOLS +#define NO_FIXED_SIZE_64_ALIAS #define NO_STRCMPI_ALIAS #define WITH_NEXTAFTER_ALIAS #define WITH_TZ_ALIASES diff --git a/mingw-w64-crt/lib32/msvcr71.def.in b/mingw-w64-crt/lib32/msvcr71.def.in index 6df695c4cfd7..6e3f54069999 100644 --- a/mingw-w64-crt/lib32/msvcr71.def.in +++ b/mingw-w64-crt/lib32/msvcr71.def.in @@ -895,6 +895,7 @@ wprintf wscanf #define FIXED_SIZE_SYMBOLS +#define NO_FIXED_SIZE_64_ALIAS #define NO_STRCMPI_ALIAS #define WITH_NEXTAFTER_ALIAS #define WITH_TZ_ALIASES diff --git a/mingw-w64-crt/lib32/msvcr71d.def.in b/mingw-w64-crt/lib32/msvcr71d.def.in index ba2a993ad04b..7f70c52095a2 100644 --- a/mingw-w64-crt/lib32/msvcr71d.def.in +++ b/mingw-w64-crt/lib32/msvcr71d.def.in @@ -939,6 +939,7 @@ wprintf wscanf #define FIXED_SIZE_SYMBOLS +#define NO_FIXED_SIZE_64_ALIAS #define NO_STRCMPI_ALIAS #define WITH_NEXTAFTER_ALIAS #define WITH_TZ_ALIASES -- 2.20.1 _______________________________________________ Mingw-w64-public mailing list Mingw-w64-public@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mingw-w64-public