This will check that of those functions can be compiled, linked and at
runtime can be resolved from CRT DLL library.
---
mingw-w64-crt/Makefile.am | 5 +-
mingw-w64-crt/testcases/t__fstat_all.c | 100 ++++++++++++++++++++++++
mingw-w64-crt/testcases/t__stat_all.c | 100 ++++++++++++++++++++++++
mingw-w64-crt/testcases/t__wstat_all.c | 101 +++++++++++++++++++++++++
4 files changed, 305 insertions(+), 1 deletion(-)
create mode 100644 mingw-w64-crt/testcases/t__fstat_all.c
create mode 100644 mingw-w64-crt/testcases/t__stat_all.c
create mode 100644 mingw-w64-crt/testcases/t__wstat_all.c
diff --git a/mingw-w64-crt/Makefile.am b/mingw-w64-crt/Makefile.am
index 85c87536f111..4582a23ecab1 100644
--- a/mingw-w64-crt/Makefile.am
+++ b/mingw-w64-crt/Makefile.am
@@ -4392,6 +4392,8 @@ testcase_progs = \
testcases/tstmainc \
testcases/tstmaincpp \
testcases/tstmain_sys_xxx \
+ testcases/t__fstat_all \
+ testcases/t__stat_all \
testcases/t_aligned_alloc \
testcases/t_ansi_io \
testcases/t_findfirst \
@@ -4436,9 +4438,10 @@ testcases_t_trycatch_SOURCES = testcases/t_trycatch.cpp
testcases_t_intrinc_CFLAGS = -std=c99
if ENABLE_TESTS_UNICODE
- testcase_progs += testcases/t_municode testcases/t_tmain
+ testcase_progs += testcases/t_municode testcases/t_tmain
testcases/t__wstat_all
testcases_t_municode_CFLAGS = -municode
testcases_t_tmain_CFLAGS = -municode -D_UNICODE
+ testcases_t__wstat_all = -municode
endif
# Do not specify TESTS = check_PROGRAMS, because some TESTS
diff --git a/mingw-w64-crt/testcases/t__fstat_all.c
b/mingw-w64-crt/testcases/t__fstat_all.c
new file mode 100644
index 000000000000..31f4879c1d5c
--- /dev/null
+++ b/mingw-w64-crt/testcases/t__fstat_all.c
@@ -0,0 +1,100 @@
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <sys/stat.h>
+
+int main() {
+ int ret;
+ struct _stat st = {};
+ struct _stat32 st32 = {};
+ struct _stat32i64 st32i64 = {};
+ struct _stat64 st64 = {};
+ struct _stat64i32 st64i32 = {};
+ errno = 0;
+ ret = _fstat(0, &st);
+ printf("_fstat:\n");
+ printf("ret=%d\n", ret);
+ printf("errno=%d (%s)\n", errno, strerror(errno));
+ printf("dev=%u\n", (unsigned)st.st_dev);
+ printf("ino=%u\n", (unsigned)st.st_ino);
+ printf("mode=%u\n", (unsigned)st.st_mode);
+ printf("nlink=%u\n", (unsigned)st.st_nlink);
+ printf("uid=%u\n", (unsigned)st.st_uid);
+ printf("gid=%u\n", (unsigned)st.st_gid);
+ printf("rdev=%u\n", (unsigned)st.st_rdev);
+ /* struct _stat always uses 32-bit unsigned size stored in signed
_off_t type */
+ printf("size=%u\n", (unsigned)st.st_size);
+ /* struct _stat uses either 32-bit or 64-bit signed timestamps based on
_USE_32BIT_TIME_T */
+ printf("atime=%I64d\n", (long long)st.st_atime);
+ printf("mtime=%I64d\n", (long long)st.st_mtime);
+ printf("ctime=%I64d\n", (long long)st.st_ctime);
+ printf("\n");
+ errno = 0;
+ ret = _fstat32(0, &st32);
+ printf("_fstat32:\n");
+ printf("ret=%d\n", ret);
+ printf("errno=%d (%s)\n", errno, strerror(errno));
+ printf("dev=%u\n", (unsigned)st32.st_dev);
+ printf("ino=%u\n", (unsigned)st32.st_ino);
+ printf("mode=%u\n", (unsigned)st32.st_mode);
+ printf("nlink=%u\n", (unsigned)st32.st_nlink);
+ printf("uid=%u\n", (unsigned)st32.st_uid);
+ printf("gid=%u\n", (unsigned)st32.st_gid);
+ printf("rdev=%u\n", (unsigned)st32.st_rdev);
+ printf("size=%u\n", (unsigned)st32.st_size);
+ printf("atime=%d\n", (int)st32.st_atime);
+ printf("mtime=%d\n", (int)st32.st_mtime);
+ printf("ctime=%d\n", (int)st32.st_ctime);
+ printf("\n");
+ errno = 0;
+ ret = _fstat32i64(0, &st32i64);
+ printf("_fstat32i64:\n");
+ printf("ret=%d\n", ret);
+ printf("errno=%d (%s)\n", errno, strerror(errno));
+ printf("dev=%u\n", (unsigned)st32i64.st_dev);
+ printf("ino=%u\n", (unsigned)st32i64.st_ino);
+ printf("mode=%u\n", (unsigned)st32i64.st_mode);
+ printf("nlink=%u\n", (unsigned)st32i64.st_nlink);
+ printf("uid=%u\n", (unsigned)st32i64.st_uid);
+ printf("gid=%u\n", (unsigned)st32i64.st_gid);
+ printf("rdev=%u\n", (unsigned)st32i64.st_rdev);
+ printf("size=%I64u\n", (unsigned long long)st32i64.st_size);
+ printf("atime=%d\n", (int)st32i64.st_atime);
+ printf("mtime=%d\n", (int)st32i64.st_mtime);
+ printf("ctime=%d\n", (int)st32i64.st_ctime);
+ printf("\n");
+ errno = 0;
+ ret = _fstat64(0, &st64);
+ printf("_fstat64:\n");
+ printf("ret=%d\n", ret);
+ printf("errno=%d (%s)\n", errno, strerror(errno));
+ printf("dev=%u\n", (unsigned)st64.st_dev);
+ printf("ino=%u\n", (unsigned)st64.st_ino);
+ printf("mode=%u\n", (unsigned)st64.st_mode);
+ printf("nlink=%u\n", (unsigned)st64.st_nlink);
+ printf("uid=%u\n", (unsigned)st64.st_uid);
+ printf("gid=%u\n", (unsigned)st64.st_gid);
+ printf("rdev=%u\n", (unsigned)st64.st_rdev);
+ printf("size=%I64u\n", (unsigned long long)st64.st_size);
+ printf("atime=%I64d\n", (long long)st64.st_atime);
+ printf("mtime=%I64d\n", (long long)st64.st_mtime);
+ printf("ctime=%I64d\n", (long long)st64.st_ctime);
+ printf("\n");
+ errno = 0;
+ ret = _fstat64i32(0, &st64i32);
+ printf("_fstat64i32:\n");
+ printf("ret=%d\n", ret);
+ printf("errno=%d (%s)\n", errno, strerror(errno));
+ printf("dev=%u\n", (unsigned)st64i32.st_dev);
+ printf("ino=%u\n", (unsigned)st64i32.st_ino);
+ printf("mode=%u\n", (unsigned)st64i32.st_mode);
+ printf("nlink=%u\n", (unsigned)st64i32.st_nlink);
+ printf("uid=%u\n", (unsigned)st64i32.st_uid);
+ printf("gid=%u\n", (unsigned)st64i32.st_gid);
+ printf("rdev=%u\n", (unsigned)st64i32.st_rdev);
+ printf("size=%u\n", (unsigned)st64i32.st_size);
+ printf("atime=%I64d\n", (long long)st64i32.st_atime);
+ printf("mtime=%I64d\n", (long long)st64i32.st_mtime);
+ printf("ctime=%I64d\n", (long long)st64i32.st_ctime);
+ return 0;
+}
diff --git a/mingw-w64-crt/testcases/t__stat_all.c
b/mingw-w64-crt/testcases/t__stat_all.c
new file mode 100644
index 000000000000..cbc03d9382aa
--- /dev/null
+++ b/mingw-w64-crt/testcases/t__stat_all.c
@@ -0,0 +1,100 @@
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <sys/stat.h>
+
+int main(int argc, char *argv[]) {
+ int ret;
+ struct _stat st = {};
+ struct _stat32 st32 = {};
+ struct _stat32i64 st32i64 = {};
+ struct _stat64 st64 = {};
+ struct _stat64i32 st64i32 = {};
+ errno = 0;
+ ret = _stat(argc >= 2 ? argv[1] : argv[0], &st);
+ printf("_stat:\n");
+ printf("ret=%d\n", ret);
+ printf("errno=%d (%s)\n", errno, strerror(errno));
+ printf("dev=%u\n", (unsigned)st.st_dev);
+ printf("ino=%u\n", (unsigned)st.st_ino);
+ printf("mode=%u\n", (unsigned)st.st_mode);
+ printf("nlink=%u\n", (unsigned)st.st_nlink);
+ printf("uid=%u\n", (unsigned)st.st_uid);
+ printf("gid=%u\n", (unsigned)st.st_gid);
+ printf("rdev=%u\n", (unsigned)st.st_rdev);
+ /* struct _stat always uses 32-bit unsigned size stored in signed
_off_t type */
+ printf("size=%u\n", (unsigned)st.st_size);
+ /* struct _stat uses either 32-bit or 64-bit signed timestamps based on
_USE_32BIT_TIME_T */
+ printf("atime=%I64d\n", (long long)st.st_atime);
+ printf("mtime=%I64d\n", (long long)st.st_mtime);
+ printf("ctime=%I64d\n", (long long)st.st_ctime);
+ printf("\n");
+ errno = 0;
+ ret = _stat32(argc >= 2 ? argv[1] : argv[0], &st32);
+ printf("_stat32:\n");
+ printf("ret=%d\n", ret);
+ printf("errno=%d (%s)\n", errno, strerror(errno));
+ printf("dev=%u\n", (unsigned)st32.st_dev);
+ printf("ino=%u\n", (unsigned)st32.st_ino);
+ printf("mode=%u\n", (unsigned)st32.st_mode);
+ printf("nlink=%u\n", (unsigned)st32.st_nlink);
+ printf("uid=%u\n", (unsigned)st32.st_uid);
+ printf("gid=%u\n", (unsigned)st32.st_gid);
+ printf("rdev=%u\n", (unsigned)st32.st_rdev);
+ printf("size=%u\n", (unsigned)st32.st_size);
+ printf("atime=%d\n", (int)st32.st_atime);
+ printf("mtime=%d\n", (int)st32.st_mtime);
+ printf("ctime=%d\n", (int)st32.st_ctime);
+ printf("\n");
+ errno = 0;
+ ret = _stat32i64(argc >= 2 ? argv[1] : argv[0], &st32i64);
+ printf("_stat32i64:\n");
+ printf("ret=%d\n", ret);
+ printf("errno=%d (%s)\n", errno, strerror(errno));
+ printf("dev=%u\n", (unsigned)st32i64.st_dev);
+ printf("ino=%u\n", (unsigned)st32i64.st_ino);
+ printf("mode=%u\n", (unsigned)st32i64.st_mode);
+ printf("nlink=%u\n", (unsigned)st32i64.st_nlink);
+ printf("uid=%u\n", (unsigned)st32i64.st_uid);
+ printf("gid=%u\n", (unsigned)st32i64.st_gid);
+ printf("rdev=%u\n", (unsigned)st32i64.st_rdev);
+ printf("size=%I64u\n", (unsigned long long)st32i64.st_size);
+ printf("atime=%d\n", (int)st32i64.st_atime);
+ printf("mtime=%d\n", (int)st32i64.st_mtime);
+ printf("ctime=%d\n", (int)st32i64.st_ctime);
+ printf("\n");
+ errno = 0;
+ ret = _stat64(argc >= 2 ? argv[1] : argv[0], &st64);
+ printf("_stat64:\n");
+ printf("ret=%d\n", ret);
+ printf("errno=%d (%s)\n", errno, strerror(errno));
+ printf("dev=%u\n", (unsigned)st64.st_dev);
+ printf("ino=%u\n", (unsigned)st64.st_ino);
+ printf("mode=%u\n", (unsigned)st64.st_mode);
+ printf("nlink=%u\n", (unsigned)st64.st_nlink);
+ printf("uid=%u\n", (unsigned)st64.st_uid);
+ printf("gid=%u\n", (unsigned)st64.st_gid);
+ printf("rdev=%u\n", (unsigned)st64.st_rdev);
+ printf("size=%I64u\n", (unsigned long long)st64.st_size);
+ printf("atime=%I64d\n", (long long)st64.st_atime);
+ printf("mtime=%I64d\n", (long long)st64.st_mtime);
+ printf("ctime=%I64d\n", (long long)st64.st_ctime);
+ printf("\n");
+ errno = 0;
+ ret = _stat64i32(argc >= 2 ? argv[1] : argv[0], &st64i32);
+ printf("_stat64i32:\n");
+ printf("ret=%d\n", ret);
+ printf("errno=%d (%s)\n", errno, strerror(errno));
+ printf("dev=%u\n", (unsigned)st64i32.st_dev);
+ printf("ino=%u\n", (unsigned)st64i32.st_ino);
+ printf("mode=%u\n", (unsigned)st64i32.st_mode);
+ printf("nlink=%u\n", (unsigned)st64i32.st_nlink);
+ printf("uid=%u\n", (unsigned)st64i32.st_uid);
+ printf("gid=%u\n", (unsigned)st64i32.st_gid);
+ printf("rdev=%u\n", (unsigned)st64i32.st_rdev);
+ printf("size=%u\n", (unsigned)st64i32.st_size);
+ printf("atime=%I64d\n", (long long)st64i32.st_atime);
+ printf("mtime=%I64d\n", (long long)st64i32.st_mtime);
+ printf("ctime=%I64d\n", (long long)st64i32.st_ctime);
+ return 0;
+}
diff --git a/mingw-w64-crt/testcases/t__wstat_all.c
b/mingw-w64-crt/testcases/t__wstat_all.c
new file mode 100644
index 000000000000..a870c94432e5
--- /dev/null
+++ b/mingw-w64-crt/testcases/t__wstat_all.c
@@ -0,0 +1,101 @@
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <sys/stat.h>
+#include <wchar.h>
+
+int wmain(int argc, wchar_t *wargv[]) {
+ int ret;
+ struct _stat st = {};
+ struct _stat32 st32 = {};
+ struct _stat32i64 st32i64 = {};
+ struct _stat64 st64 = {};
+ struct _stat64i32 st64i32 = {};
+ errno = 0;
+ ret = _wstat(argc >= 2 ? wargv[1] : wargv[0], &st);
+ printf("_wstat:\n");
+ printf("ret=%d\n", ret);
+ printf("errno=%d (%s)\n", errno, strerror(errno));
+ printf("dev=%u\n", (unsigned)st.st_dev);
+ printf("ino=%u\n", (unsigned)st.st_ino);
+ printf("mode=%u\n", (unsigned)st.st_mode);
+ printf("nlink=%u\n", (unsigned)st.st_nlink);
+ printf("uid=%u\n", (unsigned)st.st_uid);
+ printf("gid=%u\n", (unsigned)st.st_gid);
+ printf("rdev=%u\n", (unsigned)st.st_rdev);
+ /* struct _stat always uses 32-bit unsigned size stored in signed
_off_t type */
+ printf("size=%u\n", (unsigned)st.st_size);
+ /* struct _stat uses either 32-bit or 64-bit signed timestamps based on
_USE_32BIT_TIME_T */
+ printf("atime=%I64d\n", (long long)st.st_atime);
+ printf("mtime=%I64d\n", (long long)st.st_mtime);
+ printf("ctime=%I64d\n", (long long)st.st_ctime);
+ printf("\n");
+ errno = 0;
+ ret = _wstat32(argc >= 2 ? wargv[1] : wargv[0], &st32);
+ printf("_wstat32:\n");
+ printf("ret=%d\n", ret);
+ printf("errno=%d (%s)\n", errno, strerror(errno));
+ printf("dev=%u\n", (unsigned)st32.st_dev);
+ printf("ino=%u\n", (unsigned)st32.st_ino);
+ printf("mode=%u\n", (unsigned)st32.st_mode);
+ printf("nlink=%u\n", (unsigned)st32.st_nlink);
+ printf("uid=%u\n", (unsigned)st32.st_uid);
+ printf("gid=%u\n", (unsigned)st32.st_gid);
+ printf("rdev=%u\n", (unsigned)st32.st_rdev);
+ printf("size=%u\n", (unsigned)st32.st_size);
+ printf("atime=%d\n", (int)st32.st_atime);
+ printf("mtime=%d\n", (int)st32.st_mtime);
+ printf("ctime=%d\n", (int)st32.st_ctime);
+ printf("\n");
+ errno = 0;
+ ret = _wstat32i64(argc >= 2 ? wargv[1] : wargv[0], &st32i64);
+ printf("_wstat32i64:\n");
+ printf("ret=%d\n", ret);
+ printf("errno=%d (%s)\n", errno, strerror(errno));
+ printf("dev=%u\n", (unsigned)st32i64.st_dev);
+ printf("ino=%u\n", (unsigned)st32i64.st_ino);
+ printf("mode=%u\n", (unsigned)st32i64.st_mode);
+ printf("nlink=%u\n", (unsigned)st32i64.st_nlink);
+ printf("uid=%u\n", (unsigned)st32i64.st_uid);
+ printf("gid=%u\n", (unsigned)st32i64.st_gid);
+ printf("rdev=%u\n", (unsigned)st32i64.st_rdev);
+ printf("size=%I64u\n", (unsigned long long)st32i64.st_size);
+ printf("atime=%d\n", (int)st32i64.st_atime);
+ printf("mtime=%d\n", (int)st32i64.st_mtime);
+ printf("ctime=%d\n", (int)st32i64.st_ctime);
+ printf("\n");
+ errno = 0;
+ ret = _wstat64(argc >= 2 ? wargv[1] : wargv[0], &st64);
+ printf("_wstat64:\n");
+ printf("ret=%d\n", ret);
+ printf("errno=%d (%s)\n", errno, strerror(errno));
+ printf("dev=%u\n", (unsigned)st64.st_dev);
+ printf("ino=%u\n", (unsigned)st64.st_ino);
+ printf("mode=%u\n", (unsigned)st64.st_mode);
+ printf("nlink=%u\n", (unsigned)st64.st_nlink);
+ printf("uid=%u\n", (unsigned)st64.st_uid);
+ printf("gid=%u\n", (unsigned)st64.st_gid);
+ printf("rdev=%u\n", (unsigned)st64.st_rdev);
+ printf("size=%I64u\n", (unsigned long long)st64.st_size);
+ printf("atime=%I64d\n", (long long)st64.st_atime);
+ printf("mtime=%I64d\n", (long long)st64.st_mtime);
+ printf("ctime=%I64d\n", (long long)st64.st_ctime);
+ printf("\n");
+ errno = 0;
+ ret = _wstat64i32(argc >= 2 ? wargv[1] : wargv[0], &st64i32);
+ printf("_wstat64i32:\n");
+ printf("ret=%d\n", ret);
+ printf("errno=%d (%s)\n", errno, strerror(errno));
+ printf("dev=%u\n", (unsigned)st64i32.st_dev);
+ printf("ino=%u\n", (unsigned)st64i32.st_ino);
+ printf("mode=%u\n", (unsigned)st64i32.st_mode);
+ printf("nlink=%u\n", (unsigned)st64i32.st_nlink);
+ printf("uid=%u\n", (unsigned)st64i32.st_uid);
+ printf("gid=%u\n", (unsigned)st64i32.st_gid);
+ printf("rdev=%u\n", (unsigned)st64i32.st_rdev);
+ printf("size=%u\n", (unsigned)st64i32.st_size);
+ printf("atime=%I64d\n", (long long)st64i32.st_atime);
+ printf("mtime=%I64d\n", (long long)st64i32.st_mtime);
+ printf("ctime=%I64d\n", (long long)st64i32.st_ctime);
+ return 0;
+}
--
2.20.1
_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public