summaryrefslogtreecommitdiff
path: root/test/stat
diff options
context:
space:
mode:
authorDmitry Chestnykh <dm.chestnykh@gmail.com>2024-02-26 22:13:28 +0300
committerWaldemar Brodkorb <wbx@openadk.org>2024-02-27 03:38:29 +0100
commit8b085caa64e69284b4d6442e7c66057f5902782c (patch)
treea3fba72cb5a03c67ee559adabef1615e128fbd40 /test/stat
parent4794ece7134f184f8be934f081904d93ff6c34d9 (diff)
Add test to *stat() after 2038y with time64.
Signed-off-by: Dmitry Chestnykh <dm.chestnykh@gmail.com>
Diffstat (limited to 'test/stat')
-rw-r--r--test/stat/stat-time64.c74
1 files changed, 74 insertions, 0 deletions
diff --git a/test/stat/stat-time64.c b/test/stat/stat-time64.c
new file mode 100644
index 0000000..0102317
--- /dev/null
+++ b/test/stat/stat-time64.c
@@ -0,0 +1,74 @@
+/* Test for stat() after 2038 year. */
+
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/stat.h>
+#include <time.h>
+
+#define assert(x) \
+ if (!(x)) \
+ { \
+ fputs ("test failed: " #x "\n", stderr); \
+ retval = 1; \
+ goto the_end; \
+ }
+
+int
+main (int argc, char *argv[])
+{
+#if defined(__arm__) || defined(__mips__) || defined(__or1k__) || defined(__powerpc__) || defined(__sparc__) || defined(__xtensa__)
+ char name[PATH_MAX];
+ int retval = 0;
+ int fd;
+ struct stat st;
+
+ if (sizeof(time_t) == 8) {
+
+ memset(name, 0, PATH_MAX);
+
+ struct timespec y2090_ts = {
+ .tv_sec = 3786962400,
+ .tv_nsec = 0
+ };
+
+ assert(clock_settime (CLOCK_REALTIME, &y2090_ts) == 0);
+
+ /* hack to get a tempfile name w/out using tmpname()
+ * as that func causes a link time warning */
+ sprintf(name, "%s-uClibc-test.XXXXXX", __FILE__);
+ fd = mkstemp(name);
+
+ assert(stat (name, &st) == 0)
+ assert(st.st_atime >= 3786962400);
+ assert(st.st_mtime >= 3786962400);
+ assert(st.st_ctime >= 3786962400);
+
+ assert(fstat (fd, &st) == 0)
+ assert(st.st_atime >= 3786962400);
+ assert(st.st_mtime >= 3786962400);
+ assert(st.st_ctime >= 3786962400);
+
+ assert(lstat (name, &st) == 0)
+ assert(st.st_atime >= 3786962400);
+ assert(st.st_mtime >= 3786962400);
+ assert(st.st_ctime >= 3786962400);
+
+ close(fd);
+ retval = 0;
+
+the_end:
+ unlink (name);
+
+ return retval;
+ }
+ else {
+ printf("Nothing to test.\n");
+ }
+#else
+ printf("Nothing to test.\n");
+ return 0;
+#endif
+}