| Index: source/tools/tzcode/private.h
|
| diff --git a/source/tools/tzcode/private.h b/source/tools/tzcode/private.h
|
| index 008d468ac7876d553156cbd03d9481811a648021..1a85c889fa06ae86609f1b6e588f643a1e9e48b3 100644
|
| --- a/source/tools/tzcode/private.h
|
| +++ b/source/tools/tzcode/private.h
|
| @@ -15,16 +15,6 @@
|
| ** Thank you!
|
| */
|
|
|
| -/*
|
| -** ID
|
| -*/
|
| -
|
| -#ifndef lint
|
| -#ifndef NOID
|
| -static char privatehid[] = "@(#)private.h 8.6";
|
| -#endif /* !defined NOID */
|
| -#endif /* !defined lint */
|
| -
|
| #define GRANDPARENTED "Local time zone must be set--see zic manual page"
|
|
|
| /*
|
| @@ -44,6 +34,10 @@ static char privatehid[] = "@(#)private.h 8.6";
|
| #define HAVE_INCOMPATIBLE_CTIME_R 0
|
| #endif /* !defined INCOMPATIBLE_CTIME_R */
|
|
|
| +#ifndef HAVE_LINK
|
| +#define HAVE_LINK 1
|
| +#endif /* !defined HAVE_LINK */
|
| +
|
| #ifndef HAVE_SETTIMEOFDAY
|
| #define HAVE_SETTIMEOFDAY 3
|
| #endif /* !defined HAVE_SETTIMEOFDAY */
|
| @@ -134,19 +128,76 @@ static char privatehid[] = "@(#)private.h 8.6";
|
| #include "stdint.h"
|
| #endif /* !HAVE_STDINT_H */
|
|
|
| +#ifndef HAVE_INTTYPES_H
|
| +# define HAVE_INTTYPES_H HAVE_STDINT_H
|
| +#endif
|
| +#if HAVE_INTTYPES_H
|
| +# include <inttypes.h>
|
| +#endif
|
| +
|
| #ifndef INT_FAST64_MAX
|
| /* Pre-C99 GCC compilers define __LONG_LONG_MAX__ instead of LLONG_MAX. */
|
| #if defined LLONG_MAX || defined __LONG_LONG_MAX__
|
| typedef long long int_fast64_t;
|
| +# ifdef LLONG_MAX
|
| +# define INT_FAST64_MIN LLONG_MIN
|
| +# define INT_FAST64_MAX LLONG_MAX
|
| +# else
|
| +# define INT_FAST64_MIN __LONG_LONG_MIN__
|
| +# define INT_FAST64_MAX __LONG_LONG_MAX__
|
| +# endif
|
| +# define SCNdFAST64 "lld"
|
| #else /* ! (defined LLONG_MAX || defined __LONG_LONG_MAX__) */
|
| #if (LONG_MAX >> 31) < 0xffffffff
|
| Please use a compiler that supports a 64-bit integer type (or wider);
|
| you may need to compile with "-DHAVE_STDINT_H".
|
| #endif /* (LONG_MAX >> 31) < 0xffffffff */
|
| typedef long int_fast64_t;
|
| +# define INT_FAST64_MIN LONG_MIN
|
| +# define INT_FAST64_MAX LONG_MAX
|
| +# define SCNdFAST64 "ld"
|
| #endif /* ! (defined LLONG_MAX || defined __LONG_LONG_MAX__) */
|
| #endif /* !defined INT_FAST64_MAX */
|
|
|
| +#ifndef INT_FAST32_MAX
|
| +# if INT_MAX >> 31 == 0
|
| +typedef long int_fast32_t;
|
| +# else
|
| +typedef int int_fast32_t;
|
| +# endif
|
| +#endif
|
| +
|
| +#ifndef INTMAX_MAX
|
| +# if defined LLONG_MAX || defined __LONG_LONG_MAX__
|
| +typedef long long intmax_t;
|
| +# define strtoimax strtoll
|
| +# define PRIdMAX "lld"
|
| +# ifdef LLONG_MAX
|
| +# define INTMAX_MAX LLONG_MAX
|
| +# define INTMAX_MIN LLONG_MIN
|
| +# else
|
| +# define INTMAX_MAX __LONG_LONG_MAX__
|
| +# define INTMAX_MIN __LONG_LONG_MIN__
|
| +# endif
|
| +# else
|
| +typedef long intmax_t;
|
| +# define strtoimax strtol
|
| +# define PRIdMAX "ld"
|
| +# define INTMAX_MAX LONG_MAX
|
| +# define INTMAX_MIN LONG_MIN
|
| +# endif
|
| +#endif
|
| +
|
| +#ifndef UINTMAX_MAX
|
| +# if defined ULLONG_MAX || defined __LONG_LONG_MAX__
|
| +typedef unsigned long long uintmax_t;
|
| +# define PRIuMAX "llu"
|
| +# else
|
| +typedef unsigned long uintmax_t;
|
| +# define PRIuMAX "lu"
|
| +# endif
|
| +#endif
|
| +
|
| #ifndef INT32_MAX
|
| #define INT32_MAX 0x7fffffff
|
| #endif /* !defined INT32_MAX */
|
| @@ -154,6 +205,32 @@ typedef long int_fast64_t;
|
| #define INT32_MIN (-1 - INT32_MAX)
|
| #endif /* !defined INT32_MIN */
|
|
|
| +#ifndef SIZE_MAX
|
| +#define SIZE_MAX ((size_t) -1)
|
| +#endif
|
| +
|
| +#if 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
|
| +# define ATTRIBUTE_CONST __attribute__ ((const))
|
| +# define ATTRIBUTE_PURE __attribute__ ((__pure__))
|
| +# define ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec))
|
| +#else
|
| +# define ATTRIBUTE_CONST /* empty */
|
| +# define ATTRIBUTE_PURE /* empty */
|
| +# define ATTRIBUTE_FORMAT(spec) /* empty */
|
| +#endif
|
| +
|
| +#if !defined _Noreturn && __STDC_VERSION__ < 201112
|
| +# if 2 < __GNUC__ + (8 <= __GNUC_MINOR__)
|
| +# define _Noreturn __attribute__ ((__noreturn__))
|
| +# else
|
| +# define _Noreturn
|
| +# endif
|
| +#endif
|
| +
|
| +#if __STDC_VERSION__ < 199901 && !defined restrict
|
| +# define restrict /* empty */
|
| +#endif
|
| +
|
| /*
|
| ** Workarounds for compilers/systems.
|
| */
|
| @@ -169,16 +246,63 @@ extern char * asctime_r(struct tm const *, char *);
|
| #endif
|
|
|
| /*
|
| +** Compile with -Dtime_tz=T to build the tz package with a private
|
| +** time_t type equivalent to T rather than the system-supplied time_t.
|
| +** This debugging feature can test unusual design decisions
|
| +** (e.g., time_t wider than 'long', or unsigned time_t) even on
|
| +** typical platforms.
|
| +*/
|
| +#ifdef time_tz
|
| +static time_t sys_time(time_t *x) { return time(x); }
|
| +
|
| +# undef ctime
|
| +# define ctime tz_ctime
|
| +# undef ctime_r
|
| +# define ctime_r tz_ctime_r
|
| +# undef difftime
|
| +# define difftime tz_difftime
|
| +# undef gmtime
|
| +# define gmtime tz_gmtime
|
| +# undef gmtime_r
|
| +# define gmtime_r tz_gmtime_r
|
| +# undef localtime
|
| +# define localtime tz_localtime
|
| +# undef localtime_r
|
| +# define localtime_r tz_localtime_r
|
| +# undef mktime
|
| +# define mktime tz_mktime
|
| +# undef time
|
| +# define time tz_time
|
| +# undef time_t
|
| +# define time_t tz_time_t
|
| +
|
| +typedef time_tz time_t;
|
| +
|
| +char *ctime(time_t const *);
|
| +char *ctime_r(time_t const *, char *);
|
| +double difftime(time_t, time_t);
|
| +struct tm *gmtime(time_t const *);
|
| +struct tm *gmtime_r(time_t const *restrict, struct tm *restrict);
|
| +struct tm *localtime(time_t const *);
|
| +struct tm *localtime_r(time_t const *restrict, struct tm *restrict);
|
| +time_t mktime(struct tm *);
|
| +
|
| +static time_t
|
| +time(time_t *p)
|
| +{
|
| + time_t r = sys_time(0);
|
| + if (p)
|
| + *p = r;
|
| + return r;
|
| +}
|
| +#endif
|
| +
|
| +/*
|
| ** Private function declarations.
|
| */
|
|
|
| -char * icalloc(int nelem, int elsize);
|
| char * icatalloc(char * old, const char * new);
|
| char * icpyalloc(const char * string);
|
| -char * imalloc(int n);
|
| -void * irealloc(void * pointer, int size);
|
| -void icfree(char * pointer);
|
| -void ifree(char * pointer);
|
| const char * scheck(const char * string, const char * format);
|
|
|
| /*
|
| @@ -201,14 +325,15 @@ const char * scheck(const char * string, const char * format);
|
| #define TYPE_SIGNED(type) (((type) -1) < 0)
|
| #endif /* !defined TYPE_SIGNED */
|
|
|
| -/*
|
| -** Since the definition of TYPE_INTEGRAL contains floating point numbers,
|
| -** it cannot be used in preprocessor directives.
|
| -*/
|
| -
|
| -#ifndef TYPE_INTEGRAL
|
| -#define TYPE_INTEGRAL(type) (((type) 0.5) != 0.5)
|
| -#endif /* !defined TYPE_INTEGRAL */
|
| +/* The minimum and maximum finite time values. */
|
| +static time_t const time_t_min =
|
| + (TYPE_SIGNED(time_t)
|
| + ? (time_t) -1 << (CHAR_BIT * sizeof (time_t) - 1)
|
| + : 0);
|
| +static time_t const time_t_max =
|
| + (TYPE_SIGNED(time_t)
|
| + ? - (~ 0 < 0) - ((time_t) -1 << (CHAR_BIT * sizeof (time_t) - 1))
|
| + : -1);
|
|
|
| #ifndef INT_STRLEN_MAXIMUM
|
| /*
|
|
|