/*
   Maximum and minimum inputs your system's respective time functions
   can correctly handle.  time64.h will use your system functions if
   the input falls inside these ranges and corresponding USE_SYSTEM_*
   constant is defined.
*/

#ifndef TIME64_LIMITS_H
#define TIME64_LIMITS_H

#include <time.h>

/* Max/min for localtime() */
#define SYSTEM_LOCALTIME_MAX     2147483647
#define SYSTEM_LOCALTIME_MIN    -2147483647-1

/* Max/min for gmtime() */
#define SYSTEM_GMTIME_MAX        2147483647
#define SYSTEM_GMTIME_MIN       -2147483647-1

/* Max/min for mktime() */
static const struct tm SYSTEM_MKTIME_MAX = {
    7,
    14,
    19,
    18,
    0,
    138,
    1,
    17,
    0
#ifdef HAVE_TM_TM_GMTOFF
    ,-28800
#endif
#ifdef HAVE_TM_TM_ZONE
    ,(char*)"PST"
#endif
};

static const struct tm SYSTEM_MKTIME_MIN = {
    52,
    45,
    12,
    13,
    11,
    1,
    5,
    346,
    0
#ifdef HAVE_TM_TM_GMTOFF
    ,-28800
#endif
#ifdef HAVE_TM_TM_ZONE
    ,(char*)"PST"
#endif
};

/* Max/min for timegm() */
#ifdef HAVE_TIMEGM
static const struct tm SYSTEM_TIMEGM_MAX = {
    7,
    14,
    3,
    19,
    0,
    138,
    2,
    18,
    0
    #ifdef HAVE_TM_TM_GMTOFF
        ,0
    #endif
    #ifdef HAVE_TM_TM_ZONE
        ,(char*)"UTC"
    #endif
};

static const struct tm SYSTEM_TIMEGM_MIN = {
    52,
    45,
    20,
    13,
    11,
    1,
    5,
    346,
    0
    #ifdef HAVE_TM_TM_GMTOFF
        ,0
    #endif
    #ifdef HAVE_TM_TM_ZONE
        ,(char*)"UTC"
    #endif
};
#endif /* HAVE_TIMEGM */

#endif /* TIME64_LIMITS_H */