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
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to