This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Remove the AIX work around code. Instead it should just set it's LOCALTIME_MAX to...
[perl5.git] / time64.h
index db8ddbf..85e2ff5 100644 (file)
--- a/time64.h
+++ b/time64.h
@@ -1,3 +1,5 @@
+#include <time.h>
+
 #ifndef LOCALTIME64_H
 #    define LOCALTIME64_H
 
    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
 #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() */