These 32-bit wide functions are missing only in 64-bit system OS msvcrt.dll
libraries. Provide mingw-w64 emulation as a simple wrapper around 64-bit
wide functions.
---
mingw-w64-crt/Makefile.am | 8 ++++++++
mingw-w64-crt/stdio/_findfirst32.c | 19 +++++++++++++++++++
mingw-w64-crt/stdio/_findnext32.c | 19 +++++++++++++++++++
mingw-w64-crt/stdio/_wfindfirst32.c | 19 +++++++++++++++++++
mingw-w64-crt/stdio/_wfindnext32.c | 19 +++++++++++++++++++
5 files changed, 84 insertions(+)
create mode 100644 mingw-w64-crt/stdio/_findfirst32.c
create mode 100644 mingw-w64-crt/stdio/_findnext32.c
create mode 100644 mingw-w64-crt/stdio/_wfindfirst32.c
create mode 100644 mingw-w64-crt/stdio/_wfindnext32.c
diff --git a/mingw-w64-crt/Makefile.am b/mingw-w64-crt/Makefile.am
index 9714b855810d..ca9ec404aeae 100644
--- a/mingw-w64-crt/Makefile.am
+++ b/mingw-w64-crt/Makefile.am
@@ -674,11 +674,15 @@ src_msvcrt64=\
misc/wassert.c \
misc/wcsnlen.c \
secapi/wcstok_s.c \
+ stdio/_findfirst32.c \
+ stdio/_findnext32.c \
stdio/_fseeki64.c \
stdio/_fstat32.c \
stdio/_fstat32i64.c \
stdio/_stat32.c \
stdio/_stat32i64.c \
+ stdio/_wfindfirst32.c \
+ stdio/_wfindnext32.c \
stdio/_wstat32.c \
stdio/_wstat32i64.c \
string/msvcr80pre_wcstok.c
@@ -839,11 +843,15 @@ src_msvcrtarm64=\
misc/__initenv.c \
misc/__winitenv.c \
secapi/msvcrt_arm_wcstok_s.c \
+ stdio/_findfirst32.c \
+ stdio/_findnext32.c \
stdio/_fstat32.c \
stdio/_fstat32i64.c \
stdio/_setmaxstdio.c \
stdio/_stat32.c \
stdio/_stat32i64.c \
+ stdio/_wfindfirst32.c \
+ stdio/_wfindnext32.c \
stdio/_wstat32.c \
stdio/_wstat32i64.c \
stdio/gets.c \
diff --git a/mingw-w64-crt/stdio/_findfirst32.c
b/mingw-w64-crt/stdio/_findfirst32.c
new file mode 100644
index 000000000000..d9e24379eb72
--- /dev/null
+++ b/mingw-w64-crt/stdio/_findfirst32.c
@@ -0,0 +1,19 @@
+#include <io.h>
+#include <string.h>
+
+intptr_t __cdecl _findfirst32(const char *_Filename, struct _finddata32_t
*_FindData)
+{
+ struct __finddata64_t fd;
+ intptr_t ret = _findfirst64(_Filename, &fd);
+ if (ret == -1)
+ return -1;
+ _FindData->attrib = fd.attrib;
+ _FindData->time_create = fd.time_create;
+ _FindData->time_access = fd.time_access;
+ _FindData->time_write = fd.time_write;
+ _FindData->size = (_fsize_t)fd.size;
+ _Static_assert(sizeof(_FindData->name) == sizeof(fd.name), "mismatch size of
_FindData->name and fd.name");
+ memcpy(_FindData->name, fd.name, sizeof(_FindData->name));
+ return ret;
+}
+intptr_t (__cdecl *__MINGW_IMP_SYMBOL(_findfirst32))(const char *, struct
_finddata32_t *) = _findfirst32;
diff --git a/mingw-w64-crt/stdio/_findnext32.c
b/mingw-w64-crt/stdio/_findnext32.c
new file mode 100644
index 000000000000..0bd01f54a641
--- /dev/null
+++ b/mingw-w64-crt/stdio/_findnext32.c
@@ -0,0 +1,19 @@
+#include <io.h>
+#include <string.h>
+
+int __cdecl _findnext32(intptr_t _FindHandle, struct _finddata32_t *_FindData)
+{
+ struct __finddata64_t fd;
+ int ret = _findnext64(_FindHandle, &fd);
+ if (ret != 0)
+ return ret;
+ _FindData->attrib = fd.attrib;
+ _FindData->time_create = fd.time_create;
+ _FindData->time_access = fd.time_access;
+ _FindData->time_write = fd.time_write;
+ _FindData->size = (_fsize_t)fd.size;
+ _Static_assert(sizeof(_FindData->name) == sizeof(fd.name), "mismatch size of
_FindData->name and fd.name");
+ memcpy(_FindData->name, fd.name, sizeof(_FindData->name));
+ return 0;
+}
+int (__cdecl *__MINGW_IMP_SYMBOL(_findnext32))(intptr_t, struct _finddata32_t
*) = _findnext32;
diff --git a/mingw-w64-crt/stdio/_wfindfirst32.c
b/mingw-w64-crt/stdio/_wfindfirst32.c
new file mode 100644
index 000000000000..ea463acfc9d5
--- /dev/null
+++ b/mingw-w64-crt/stdio/_wfindfirst32.c
@@ -0,0 +1,19 @@
+#include <io.h>
+#include <string.h>
+
+intptr_t __cdecl _wfindfirst32(const wchar_t *_Filename, struct _wfinddata32_t
*_FindData)
+{
+ struct _wfinddata64_t fd;
+ intptr_t ret = _wfindfirst64(_Filename, &fd);
+ if (ret == -1)
+ return -1;
+ _FindData->attrib = fd.attrib;
+ _FindData->time_create = fd.time_create;
+ _FindData->time_access = fd.time_access;
+ _FindData->time_write = fd.time_write;
+ _FindData->size = (_fsize_t)fd.size;
+ _Static_assert(sizeof(_FindData->name) == sizeof(fd.name), "mismatch size of
_FindData->name and fd.name");
+ memcpy(_FindData->name, fd.name, sizeof(_FindData->name));
+ return ret;
+}
+intptr_t (__cdecl *__MINGW_IMP_SYMBOL(_wfindfirst32))(const wchar_t *, struct
_wfinddata32_t *) = _wfindfirst32;
diff --git a/mingw-w64-crt/stdio/_wfindnext32.c
b/mingw-w64-crt/stdio/_wfindnext32.c
new file mode 100644
index 000000000000..a84177ff767c
--- /dev/null
+++ b/mingw-w64-crt/stdio/_wfindnext32.c
@@ -0,0 +1,19 @@
+#include <io.h>
+#include <string.h>
+
+int __cdecl _wfindnext32(intptr_t _FindHandle, struct _wfinddata32_t
*_FindData)
+{
+ struct _wfinddata64_t fd;
+ int ret = _wfindnext64(_FindHandle, &fd);
+ if (ret != 0)
+ return ret;
+ _FindData->attrib = fd.attrib;
+ _FindData->time_create = fd.time_create;
+ _FindData->time_access = fd.time_access;
+ _FindData->time_write = fd.time_write;
+ _FindData->size = (_fsize_t)fd.size;
+ _Static_assert(sizeof(_FindData->name) == sizeof(fd.name), "mismatch size of
_FindData->name and fd.name");
+ memcpy(_FindData->name, fd.name, sizeof(_FindData->name));
+ return 0;
+}
+int (__cdecl *__MINGW_IMP_SYMBOL(_wfindnext32))(intptr_t, struct
_wfinddata32_t *) = _wfindnext32;
--
2.20.1
_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public