On Thu, 20 Mar 2025, Pali Rohár wrote:
They are natively available since msvcr80.dll, they are not available in
msvcrt.dll. Provide compatibility emulation into all import libraries where
they are not available.
Adjust check for _aligned_msize() which is also available since
msvcr80.dll.
---
mingw-w64-crt/Makefile.am | 6 ++++++
mingw-w64-crt/misc/_aligned_offset_recalloc.c | 16 ++++++++++++++++
mingw-w64-crt/misc/_aligned_recalloc.c | 16 ++++++++++++++++
mingw-w64-crt/misc/_recalloc.c | 16 ++++++++++++++++
mingw-w64-headers/crt/crtdbg.h | 2 +-
mingw-w64-headers/crt/malloc.h | 2 +-
mingw-w64-headers/crt/stdlib.h | 2 +-
7 files changed, 57 insertions(+), 3 deletions(-)
create mode 100644 mingw-w64-crt/misc/_aligned_offset_recalloc.c
create mode 100644 mingw-w64-crt/misc/_aligned_recalloc.c
create mode 100644 mingw-w64-crt/misc/_recalloc.c
diff --git a/mingw-w64-crt/Makefile.am b/mingw-w64-crt/Makefile.am
index 71368648cca3..b90920e468fe 100644
--- a/mingw-w64-crt/Makefile.am
+++ b/mingw-w64-crt/Makefile.am
@@ -333,7 +333,10 @@ src_msvcrt=\
misc/__iswcsymf.c \
misc/__sys_errlist.c \
misc/__sys_nerr.c \
+ misc/_aligned_offset_recalloc.c \
+ misc/_aligned_recalloc.c \
misc/_configthreadlocale.c \
+ misc/_recalloc.c \
misc/_set_purecall_handler.c \
misc/imaxdiv.c \
misc/invalid_parameter_handler.c \
@@ -820,9 +823,12 @@ src_pre_msvcr80=\
misc/__iswcsymf.c \
misc/__sys_errlist.c \
misc/__sys_nerr.c \
+ misc/_aligned_offset_recalloc.c \
+ misc/_aligned_recalloc.c \
misc/_configthreadlocale.c \
misc/_get_errno.c \
misc/_initterm_e.c \
+ misc/_recalloc.c \
misc/_set_errno.c \
misc/btowc.c \
misc/imaxabs.c \
diff --git a/mingw-w64-crt/misc/_aligned_offset_recalloc.c
b/mingw-w64-crt/misc/_aligned_offset_recalloc.c
new file mode 100644
index 000000000000..caccc29f2360
--- /dev/null
+++ b/mingw-w64-crt/misc/_aligned_offset_recalloc.c
@@ -0,0 +1,16 @@
+/**
+ * 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 <malloc.h>
+
+void * __cdecl _aligned_offset_recalloc(void *memory, size_t count, size_t
size, size_t alignment, size_t offset)
+{
+ size_t total_size;
+ if (__builtin_mul_overflow(count, size, &total_size))
+ return NULL;
+ return _aligned_offset_realloc(memory, total_size, alignment, offset);
+}
FWIW, this fails to build on non-x86 platforms; NULL requires a header
declaring it. On x86, malloc.h includes mm_malloc.h and gets a definition
from there, but for other architectures, we explicitly need to include
e.g. stddef.h here (and in most other files added in this commit).
// Martin
_______________________________________________
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public