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