Browse Source

Add test to *stat() after 2038y with time64.

Signed-off-by: Dmitry Chestnykh <dm.chestnykh@gmail.com>
Dmitry Chestnykh 2 months ago
parent
commit
8b085caa64
1 changed files with 74 additions and 0 deletions
  1. 74 0
      test/stat/stat-time64.c

+ 74 - 0
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
+}