X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=time64.h;h=07bb33fd8492989ec204fb6f9c767a39fce9d0ae;hb=c8937c7ebe545f1bf57f394227d99d1f8f445ef6;hp=85e2ff59a63dea23649eb2f1eb134422ba6e3dc4;hpb=806a119aef40085e6ee4a5a8bbab77cca98c9d08;p=p5sagit%2Fp5-mst-13.2.git diff --git a/time64.h b/time64.h index 85e2ff5..07bb33f 100644 --- a/time64.h +++ b/time64.h @@ -1,68 +1,15 @@ #include +#include "time64_config.h" -#ifndef LOCALTIME64_H -# define LOCALTIME64_H +#ifndef TIME64_H +# define TIME64_H -/* Configuration. */ -/* Define as appropriate for your system */ -/* - HAS_GMTIME_R - Defined if your system has gmtime_r() - HAS_LOCALTIME_R - Defined if your system has localtime_r() +/* Set our custom types */ +typedef INT_64_T Int64; +typedef Int64 Time64_T; +typedef I32 Year; - HAS_TIMEGM - Defined if your system has timegm() - - HAS_TM_TM_GMTOFF - Defined if your tm struct has a "tm_gmtoff" element. - - HAS_TM_TM_ZONE - Defined if your tm struct has a "tm_zone" element. - - SYSTEM_LOCALTIME_MAX - SYSTEM_LOCALTIME_MIN - SYSTEM_GMTIME_MAX - SYSTEM_GMTIME_MIN - Maximum and minimum values your system's gmtime() and localtime() - can handle. - - 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 SYSTEM_GMTIME_MIN GMTIME_MIN - -/* It'll be faster */ -#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 *); /* A copy of the tm struct but with a 64 bit year */ struct TM64 { @@ -81,21 +28,39 @@ struct TM64 { #endif #ifdef HAS_TM_TM_ZONE +# ifdef __GLIBC__ + const char *tm_zone; +# else char *tm_zone; +# endif #endif }; -/* Not everyone has gm/localtime_r() */ +/* Decide which tm struct to use */ +#ifdef USE_TM64 +#define TM TM64 +#else +#define TM tm +#endif + + +/* Declare functions */ +static struct TM *S_gmtime64_r (const Time64_T *, struct TM *); +static struct TM *S_localtime64_r (const Time64_T *, struct TM *); +static Time64_T S_timegm64 (struct TM *); + + +/* Not everyone has gm/localtime_r(), provide a replacement */ #ifdef HAS_LOCALTIME_R -# define LOCALTIME_R(clock, result) localtime_r(clock, result) +# define LOCALTIME_R(clock, result) (L_R_TZSET localtime_r(clock, result)) #else -# define LOCALTIME_R(clock, result) fake_localtime_r(clock, result) +# define LOCALTIME_R(clock, result) (L_R_TZSET S_localtime_r(clock, result)) #endif #ifdef HAS_GMTIME_R # define GMTIME_R(clock, result) gmtime_r(clock, result) #else -# define GMTIME_R(clock, result) fake_gmtime_r(clock, result) +# define GMTIME_R(clock, result) S_gmtime_r(clock, result) #endif #endif