Verify that mtime passed to the _futime is same as mtime read from _fstat.
---
mingw-w64-crt/testcases/Makefile.am | 1 +
mingw-w64-crt/testcases/t_utime.c | 108 ++++++++++++++++++++++++++++
2 files changed, 109 insertions(+)
create mode 100644 mingw-w64-crt/testcases/t_utime.c
diff --git a/mingw-w64-crt/testcases/Makefile.am
b/mingw-w64-crt/testcases/Makefile.am
index 57e62d1fa905..a77760fcb362 100644
--- a/mingw-w64-crt/testcases/Makefile.am
+++ b/mingw-w64-crt/testcases/Makefile.am
@@ -69,6 +69,7 @@ testcase_progs = \
t_tmpfile \
t_trycatch \
t_stat_slash \
+ t_utime \
t_vsscanf \
t_wcrtomb \
t_wcsrtombs \
diff --git a/mingw-w64-crt/testcases/t_utime.c
b/mingw-w64-crt/testcases/t_utime.c
new file mode 100644
index 000000000000..dc0895c23b3a
--- /dev/null
+++ b/mingw-w64-crt/testcases/t_utime.c
@@ -0,0 +1,108 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <utime.h>
+#include <sys/stat.h>
+#include <assert.h>
+
+int main() {
+ FILE *file;
+ int fd;
+ struct _utimbuf times;
+ struct __utimbuf32 times32;
+ struct __utimbuf64 times64;
+ struct stat st;
+ struct _stat32 st32;
+ struct _stat64 st64;
+
+
+ /* prepare temporary file */
+
+ file = tmpfile();
+ assert(file);
+ fd = fileno(file);
+ assert(fd >= 0);
+
+
+ /* set timezone to some very strange value, to ensure that set-get
roundtrip is not affected by timezone */
+
+ assert(putenv("TZ=+04:05:06") == 0);
+ tzset();
+
+
+ /* set and get 32-bit mtime via different 32-bit and 64-bit interfaces */
+
+ times.actime = 0x2FFFFFF0;
+ times.modtime = 0x4FFFFFF0;
+ printf("_futime( mtime=%I64x)\n", (long long)times.modtime);
+ assert(_futime(fd, ×) == 0);
+
+ assert(fstat(fd, &st) == 0);
+ printf("fstat(): mtime=%I64x\n", (long long)st.st_mtime);
+ assert(st.st_mtime == 0x4FFFFFF0);
+
+ assert(_fstat32(fd, &st32) == 0);
+ printf("_fstat32(): mtime=%lx\n", st32.st_mtime);
+ assert(st32.st_mtime == 0x4FFFFFF0);
+
+ assert(_fstat64(fd, &st64) == 0);
+ printf("_fstat64(): mtime=%I64x\n", st64.st_mtime);
+ assert(st64.st_mtime == 0x4FFFFFF0);
+
+ printf("\n");
+
+
+ times32.actime = 0x2FFFFF00;
+ times32.modtime = 0x4FFFFF00;
+ printf("_futime32( mtime=%lx)\n", times32.modtime);
+ assert(_futime32(fd, ×32) == 0);
+
+ assert(fstat(fd, &st) == 0);
+ printf("fstat(): mtime=%I64x\n", (long long)st.st_mtime);
+ assert(st.st_mtime == 0x4FFFFF00);
+
+ assert(_fstat32(fd, &st32) == 0);
+ printf("_fstat32(): mtime=%lx\n", st32.st_mtime);
+ assert(st32.st_mtime == 0x4FFFFF00);
+
+ assert(_fstat64(fd, &st64) == 0);
+ printf("_fstat64(): mtime=%I64x\n", st64.st_mtime);
+ assert(st64.st_mtime == 0x4FFFFF00);
+
+ printf("\n");
+
+
+ times64.actime = 0x2FFFF000;
+ times64.modtime = 0x4FFFF000;
+ printf("_futime64( mtime=%I64x)\n", times64.modtime);
+ assert(_futime64(fd, ×64) == 0);
+
+ assert(fstat(fd, &st) == 0);
+ printf("fstat(): mtime=%I64x\n", (long long)st.st_mtime);
+ assert(st.st_mtime == 0x4FFFF000);
+
+ assert(_fstat32(fd, &st32) == 0);
+ printf("_fstat32(): mtime=%lx\n", st32.st_mtime);
+ assert(st32.st_mtime == 0x4FFFF000);
+
+ assert(_fstat64(fd, &st64) == 0);
+ printf("_fstat64(): mtime=%I64x\n", st64.st_mtime);
+ assert(st64.st_mtime == 0x4FFFF000);
+
+ printf("\n");
+
+
+ /* set and get 64-bit mtime via 64-bit interfaces */
+
+ times64.actime = 0x13FFFF000LL;
+ times64.modtime = 0x15FFFF000LL;
+ printf("_futime64( mtime=%I64x)\n", times64.modtime);
+ assert(_futime64(fd, ×64) == 0);
+
+ assert(_fstat64(fd, &st64) == 0);
+ printf("_fstat64(): mtime=%I64x\n", st64.st_mtime);
+ assert(st64.st_mtime == 0x15FFFF000LL);
+
+
+ return 0;
+}
--
2.20.1
_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public