summaryrefslogtreecommitdiff
path: root/time64.h
diff options
context:
space:
mode:
Diffstat (limited to 'time64.h')
-rw-r--r--time64.h42
1 files changed, 39 insertions, 3 deletions
diff --git a/time64.h b/time64.h
index db8ddbf1ea..85e2ff59a6 100644
--- a/time64.h
+++ b/time64.h
@@ -1,3 +1,5 @@
+#include <time.h>
+
#ifndef LOCALTIME64_H
# define LOCALTIME64_H
@@ -29,7 +31,12 @@
USE_SYSTEM_LOCALTIME
USE_SYSTEM_GMTIME
Should we use the system functions if the time is inside their range?
+
+ USE_TM64
+ Should we use a 64 bit safe tm struct which can handle a
+ year range greater than 2 billion?
*/
+
#define SYSTEM_LOCALTIME_MAX LOCALTIME_MAX
#define SYSTEM_LOCALTIME_MIN LOCALTIME_MIN
#define SYSTEM_GMTIME_MAX GMTIME_MAX
@@ -39,15 +46,44 @@
#define USE_SYSTEM_LOCALTIME 1
#define USE_SYSTEM_GMTIME 1
+/* Let's get all the time */
+#define USE_TM64
+
+#ifdef USE_TM64
+#define TM TM64
+#else
+#define TM tm
+#endif
/* 64 bit types. Set as appropriate for your system. */
typedef Quad_t Time64_T;
typedef Quad_t Int64;
typedef Int64 Year;
-struct tm *gmtime64_r (const Time64_T *, struct tm *);
-struct tm *localtime64_r (const Time64_T *, struct tm *);
-Time64_T timegm64 (struct tm *);
+struct TM *gmtime64_r (const Time64_T *, struct TM *);
+struct TM *localtime64_r (const Time64_T *, struct TM *);
+Time64_T timegm64 (struct TM *);
+
+/* A copy of the tm struct but with a 64 bit year */
+struct TM64 {
+ int tm_sec;
+ int tm_min;
+ int tm_hour;
+ int tm_mday;
+ int tm_mon;
+ Year tm_year;
+ int tm_wday;
+ int tm_yday;
+ int tm_isdst;
+
+#ifdef HAS_TM_TM_GMTOFF
+ long tm_gmtoff;
+#endif
+
+#ifdef HAS_TM_TM_ZONE
+ char *tm_zone;
+#endif
+};
/* Not everyone has gm/localtime_r() */