Blob Blame History Raw
---
 configure.ac |   12 ++++++++++++
 src/file.h   |    6 ++++--
 2 files changed, 16 insertions(+), 2 deletions(-)

--- src/file.h
+++ src/file.h	2023-07-28 14:37:17.000000000 +0000
@@ -159,9 +159,11 @@
 /*
  * Dec 31, 23:59:59 9999
  * we need to make sure that we don't exceed 9999 because some libc
- * implementations like muslc crash otherwise
+ * implementations like muslc crash otherwise. If you are unlucky
+ * to be running on a system with a 32 bit time_t, then it is even less.
  */
-#define	MAX_CTIME	CAST(time_t, 0x3afff487cfULL)
+#define	MAX_CTIME \
+    CAST(time_t, sizeof(time_t) > 4 ? 0x3afff487cfULL : 0x7fffffffULL)
 
 #define FILE_BADSIZE CAST(size_t, ~0ul)
 #define MAXDESC	64		/* max len of text description/MIME type */
--- configure.ac
+++ configure.ac	2023-07-31 06:45:39.269468700 +0000
@@ -152,6 +152,18 @@ AC_TYPE_UINT64_T
 AC_TYPE_INT64_T
 AC_TYPE_INTPTR_T
 AC_TYPE_UINTPTR_T
+m4_ifdef([AC_SYS_YEAR2038], [AC_SYS_YEAR2038], [
+# GNU libc only allows setting _TIME_BITS when FILE_OFFSET_BITS is also set.
+# GNU libc defines __TIMESIZE on systems where _TIME_BITS can be set.
+AS_IF([test X"$ac_cv_sys_file_offset_bits" = X"64"], [
+    AC_CHECK_DECL(__TIMESIZE, [
+	AC_DEFINE([_TIME_BITS], [64], [Number of bits in a timestamp, on hosts where this is settable.])
+    ], [], [
+AC_INCLUDES_DEFAULT
+#include <time.h>
+	])
+    ])
+])
 AC_FUNC_MMAP
 AC_FUNC_FORK
 AC_FUNC_MBRTOWC