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

Reply via email to