On Tue, 6 May 2025, Pali Rohár wrote:
On Tuesday 06 May 2025 22:16:16 Martin Storsjö wrote:
On Tue, 6 May 2025, Pali Rohár wrote:
On Sunday 13 April 2025 18:34:33 Pali Rohár wrote:
All 64-bit CRT import libraries already provides _fstat64i32, _stat64i32
and _wstat64i32 function symbols. These symbols are either directly
exported from 64-bit CRT DLL library or def file contains alias to other
ABI compatible symbols (_fstat, _stat and _wstat).
Also all these functions _fstat64i32, _stat64i32 and _wstat64i32 are
provided by msvcr80+ and UCRT, so ensure that mingw-w64 does not provide
any replacement for msvcr80+ import libraries. And ensure that libmingwex.a
library does not provide duplication of these symbols.
For 32-bit pre-msvcr80 CRT import libraries provides mingw-w64 emulation
via _fstat64, _stat64 and _wstat64, which just truncates 64-bit st_size
(returned by _*stat64 function) to 32-bit st_size (which is ABI of
_*stat64i32). Do not use any _mingw_no_trailing_slash workaround as for all
these functions with underscore prefix, it is expected that behavior is
same as for other stat functions with underscore prefix.
These _fstat64i32, _stat64i32 and _wstat64i32 functions in msvcr80+ and
UCRT DLL libraries do not touch output struct stat buffer on error. So do
same thing in mingw-w64 emulation and remove memset(stat, 0, sizeof(stat))
call in failure path.
And add missing __MINGW_IMP_SYMBOL import symbols into mingw-w64 emulation
code for these functions as msvcr80+ import libraries already have them.
---
mingw-w64-crt/Makefile.am | 10 +++-
mingw-w64-crt/stdio/_fstat64i32.c | 27 +++++++---
mingw-w64-crt/stdio/_stat64i32.c | 88 +++++++------------------------
mingw-w64-crt/stdio/_wstat64i32.c | 88 +++++++------------------------
4 files changed, 66 insertions(+), 147 deletions(-)
diff --git a/mingw-w64-crt/Makefile.am b/mingw-w64-crt/Makefile.am
index 6987e6a93873..2b5c6e83d83d 100644
--- a/mingw-w64-crt/Makefile.am
+++ b/mingw-w64-crt/Makefile.am
@@ -548,9 +548,11 @@ src_msvcrt32=\
stdio/_scprintf.c \
stdio/_scwprintf.c \
stdio/_stat64.c \
+ stdio/_stat64i32.c \
stdio/_vscprintf.c \
stdio/_vscwprintf.c \
stdio/_wstat64.c \
+ stdio/_wstat64i32.c \
string/wcstok.c
# Files included in libmsvcrt-os.a (for msvcrt.dll) on x86_64
@@ -632,6 +634,8 @@ src_msvcrtarm32=\
misc/__winitenv.c \
stdio/_fstat64i32.c \
stdio/_setmaxstdio.c \
+ stdio/_stat64i32.c \
+ stdio/_wstat64i32.c \
Hello Martin, the above change stdio/_stat64i32.c + stdio/_wstat64i32.c
for the src_msvcrtarm32 section you have merged in git into the
src_msvcrtarm64 section.
I think that this is a rebase issue as it should really go to the arm32.
Yes, there were conflicts when applying this patch, and I did try to fix it,
but apparently it didn't go right.
Please do send a patch with how you want it fixed instead of trying to
verbally suggest what should be changed.
// Martin
diff --git a/mingw-w64-crt/Makefile.am b/mingw-w64-crt/Makefile.am
index 05e3300e5247..35dd71346bd4 100644
--- a/mingw-w64-crt/Makefile.am
+++ b/mingw-w64-crt/Makefile.am
@@ -649,6 +649,8 @@ src_msvcrtarm32=\
misc/__winitenv.c \
stdio/_fstat64i32.c \
stdio/_setmaxstdio.c \
+ stdio/_stat64i32.c \
+ stdio/_wstat64i32.c \
stdio/gets.c \
stdio/scanf.S
@@ -768,8 +770,6 @@ src_msvcrtarm64=\
misc/__initenv.c \
misc/__winitenv.c \
stdio/_setmaxstdio.c \
- stdio/_stat64i32.c \
- stdio/_wstat64i32.c \
stdio/gets.c
Ok, applied.
// Martin
_______________________________________________
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public