12708Swollman#ifndef PRIVATE_H 22708Swollman 32708Swollman#define PRIVATE_H 4130461Sstefanf 517209Swollman/* 617209Swollman** This file is in the public domain, so clarified as of 7192625Sedwin** 1996-06-05 by Arthur David Olson. 892991Sobrien** 992991Sobrien** $FreeBSD$ 1017209Swollman*/ 112708Swollman 122741Swollman/* Stuff moved from Makefile.inc to reduce clutter */ 132741Swollman#ifndef TM_GMTOFF 142741Swollman#define TM_GMTOFF tm_gmtoff 152741Swollman#define TM_ZONE tm_zone 162741Swollman#define STD_INSPIRED 1 172741Swollman#define PCTS 1 182741Swollman#define HAVE_LONG_DOUBLE 1 1917209Swollman#define HAVE_STRERROR 1 2017209Swollman#define HAVE_UNISTD_H 1 2117209Swollman#define LOCALE_HOME _PATH_LOCALE 222741Swollman#define TZDIR "/usr/share/zoneinfo" 232741Swollman#endif /* ndef TM_GMTOFF */ 242741Swollman 252708Swollman/* 262708Swollman** This header is for use ONLY with the time conversion code. 272708Swollman** There is no guarantee that it will remain unchanged, 282708Swollman** or that it will remain at all. 292708Swollman** Do NOT copy it to any system include directory. 302708Swollman** Thank you! 312708Swollman*/ 322708Swollman 332708Swollman/* 342708Swollman** ID 352708Swollman*/ 362708Swollman 372708Swollman#ifndef lint 382708Swollman#ifndef NOID 3917209Swollman/* 40192625Sedwinstatic char privatehid[] = "@(#)private.h 8.6"; 4117209Swollman*/ 422708Swollman#endif /* !defined NOID */ 432708Swollman#endif /* !defined lint */ 442708Swollman 45192625Sedwin#define GRANDPARENTED "Local time zone must be set--see zic manual page" 46192625Sedwin 472708Swollman/* 489936Swollman** Defaults for preprocessor symbols. 499936Swollman** You can override these in your C compiler options, e.g. `-DHAVE_ADJTIME=0'. 502708Swollman*/ 512708Swollman 529936Swollman#ifndef HAVE_ADJTIME 539936Swollman#define HAVE_ADJTIME 1 549936Swollman#endif /* !defined HAVE_ADJTIME */ 552708Swollman 5617209Swollman#ifndef HAVE_GETTEXT 5717209Swollman#define HAVE_GETTEXT 0 5817209Swollman#endif /* !defined HAVE_GETTEXT */ 5917209Swollman 60130461Sstefanf#ifndef HAVE_INCOMPATIBLE_CTIME_R 61130461Sstefanf#define HAVE_INCOMPATIBLE_CTIME_R 0 62130461Sstefanf#endif /* !defined INCOMPATIBLE_CTIME_R */ 63130461Sstefanf 649936Swollman#ifndef HAVE_SETTIMEOFDAY 659936Swollman#define HAVE_SETTIMEOFDAY 3 669936Swollman#endif /* !defined HAVE_SETTIMEOFDAY */ 679936Swollman 68130461Sstefanf#ifndef HAVE_SYMLINK 69130461Sstefanf#define HAVE_SYMLINK 1 70130461Sstefanf#endif /* !defined HAVE_SYMLINK */ 71130461Sstefanf 72130461Sstefanf#ifndef HAVE_SYS_STAT_H 73130461Sstefanf#define HAVE_SYS_STAT_H 1 74130461Sstefanf#endif /* !defined HAVE_SYS_STAT_H */ 75130461Sstefanf 76130461Sstefanf#ifndef HAVE_SYS_WAIT_H 77130461Sstefanf#define HAVE_SYS_WAIT_H 1 78130461Sstefanf#endif /* !defined HAVE_SYS_WAIT_H */ 79130461Sstefanf 809936Swollman#ifndef HAVE_UNISTD_H 819936Swollman#define HAVE_UNISTD_H 1 829936Swollman#endif /* !defined HAVE_UNISTD_H */ 839936Swollman 8417209Swollman#ifndef HAVE_UTMPX_H 8517209Swollman#define HAVE_UTMPX_H 0 8617209Swollman#endif /* !defined HAVE_UTMPX_H */ 8717209Swollman 8817209Swollman#ifndef LOCALE_HOME 8917209Swollman#define LOCALE_HOME "/usr/lib/locale" 9017209Swollman#endif /* !defined LOCALE_HOME */ 9117209Swollman 92130461Sstefanf#if HAVE_INCOMPATIBLE_CTIME_R 93130461Sstefanf#define asctime_r _incompatible_asctime_r 94130461Sstefanf#define ctime_r _incompatible_ctime_r 95130461Sstefanf#endif /* HAVE_INCOMPATIBLE_CTIME_R */ 96130461Sstefanf 972708Swollman/* 989936Swollman** Nested includes 992708Swollman*/ 1002708Swollman 1019936Swollman#include "sys/types.h" /* for time_t */ 1029936Swollman#include "stdio.h" 1039936Swollman#include "errno.h" 1049936Swollman#include "string.h" 105192625Sedwin#include "limits.h" /* for CHAR_BIT et al. */ 1069936Swollman#include "time.h" 1079936Swollman#include "stdlib.h" 1089936Swollman 109192625Sedwin#if HAVE_GETTEXT 11017209Swollman#include "libintl.h" 111192625Sedwin#endif /* HAVE_GETTEXT */ 11217209Swollman 113192625Sedwin#if HAVE_SYS_WAIT_H 114130461Sstefanf#include <sys/wait.h> /* for WIFEXITED and WEXITSTATUS */ 115192625Sedwin#endif /* HAVE_SYS_WAIT_H */ 116130461Sstefanf 117130461Sstefanf#ifndef WIFEXITED 118130461Sstefanf#define WIFEXITED(status) (((status) & 0xff) == 0) 119130461Sstefanf#endif /* !defined WIFEXITED */ 120130461Sstefanf#ifndef WEXITSTATUS 121130461Sstefanf#define WEXITSTATUS(status) (((status) >> 8) & 0xff) 122130461Sstefanf#endif /* !defined WEXITSTATUS */ 123130461Sstefanf 124192625Sedwin#if HAVE_UNISTD_H 125192625Sedwin#include "unistd.h" /* for F_OK, R_OK, and other POSIX goodness */ 126192625Sedwin#endif /* HAVE_UNISTD_H */ 1279936Swollman 128192625Sedwin#if !(HAVE_UNISTD_H) 1299936Swollman#ifndef F_OK 1309936Swollman#define F_OK 0 1319936Swollman#endif /* !defined F_OK */ 1329936Swollman#ifndef R_OK 1339936Swollman#define R_OK 4 1349936Swollman#endif /* !defined R_OK */ 135192625Sedwin#endif /* !(HAVE_UNISTD_H) */ 1369936Swollman 137192625Sedwin/* Unlike <ctype.h>'s isdigit, this also works if c < 0 | c > UCHAR_MAX. */ 13817209Swollman#define is_digit(c) ((unsigned)(c) - '0' <= 9) 13917209Swollman 1409936Swollman/* 141192625Sedwin** Define HAVE_STDINT_H's default value here, rather than at the 142192625Sedwin** start, since __GLIBC__'s value depends on previously-included 143192625Sedwin** files. 144192625Sedwin** (glibc 2.1 and later have stdint.h, even with pre-C99 compilers.) 1459936Swollman*/ 146192625Sedwin#ifndef HAVE_STDINT_H 147192625Sedwin#define HAVE_STDINT_H \ 148192625Sedwin (199901 <= __STDC_VERSION__ || \ 149192625Sedwin 2 < (__GLIBC__ + (0 < __GLIBC_MINOR__))) 150192625Sedwin#endif /* !defined HAVE_STDINT_H */ 1519936Swollman 152192625Sedwin#if HAVE_STDINT_H 153192625Sedwin#include "stdint.h" 154192625Sedwin#endif /* !HAVE_STDINT_H */ 1552708Swollman 156192625Sedwin#ifndef INT_FAST64_MAX 157192625Sedwin/* Pre-C99 GCC compilers define __LONG_LONG_MAX__ instead of LLONG_MAX. */ 158192625Sedwin#if defined LLONG_MAX || defined __LONG_LONG_MAX__ 159192625Sedwintypedef long long int_fast64_t; 160192625Sedwin#else /* ! (defined LLONG_MAX || defined __LONG_LONG_MAX__) */ 161192625Sedwin#if (LONG_MAX >> 31) < 0xffffffff 162192625SedwinPlease use a compiler that supports a 64-bit integer type (or wider); 163192625Sedwinyou may need to compile with "-DHAVE_STDINT_H". 164192625Sedwin#endif /* (LONG_MAX >> 31) < 0xffffffff */ 165192625Sedwintypedef long int_fast64_t; 166192625Sedwin#endif /* ! (defined LLONG_MAX || defined __LONG_LONG_MAX__) */ 167192625Sedwin#endif /* !defined INT_FAST64_MAX */ 1682708Swollman 169192625Sedwin#ifndef INT32_MAX 170192625Sedwin#define INT32_MAX 0x7fffffff 171192625Sedwin#endif /* !defined INT32_MAX */ 172192625Sedwin#ifndef INT32_MIN 173192625Sedwin#define INT32_MIN (-1 - INT32_MAX) 174192625Sedwin#endif /* !defined INT32_MIN */ 1752708Swollman 176192625Sedwin/* 177192625Sedwin** Workarounds for compilers/systems. 178192625Sedwin*/ 1792708Swollman 1809936Swollman/* 181192625Sedwin** Some time.h implementations don't declare asctime_r. 182192625Sedwin** Others might define it as a macro. 183192625Sedwin** Fix the former without affecting the latter. 184192625Sedwin*/ 185192625Sedwin 186192625Sedwin#ifndef asctime_r 187192625Sedwinextern char * asctime_r(struct tm const *, char *); 188192625Sedwin#endif 189192625Sedwin 190192625Sedwin/* 191130461Sstefanf** Private function declarations. 192130461Sstefanf*/ 193130461Sstefanf 194192625Sedwinchar * icalloc(int nelem, int elsize); 195192625Sedwinchar * icatalloc(char * old, const char * new); 196192625Sedwinchar * icpyalloc(const char * string); 197192625Sedwinchar * imalloc(int n); 198192625Sedwinvoid * irealloc(void * pointer, int size); 199192625Sedwinvoid icfree(char * pointer); 200192625Sedwinvoid ifree(char * pointer); 201192625Sedwinconst char * scheck(const char * string, const char * format); 202130461Sstefanf 203130461Sstefanf/* 2049936Swollman** Finally, some convenience items. 2052708Swollman*/ 2062708Swollman 2072708Swollman#ifndef TRUE 2082708Swollman#define TRUE 1 2092708Swollman#endif /* !defined TRUE */ 2102708Swollman 2112708Swollman#ifndef FALSE 2122708Swollman#define FALSE 0 2132708Swollman#endif /* !defined FALSE */ 2142708Swollman 21517209Swollman#ifndef TYPE_BIT 21617209Swollman#define TYPE_BIT(type) (sizeof (type) * CHAR_BIT) 21717209Swollman#endif /* !defined TYPE_BIT */ 21817209Swollman 21917209Swollman#ifndef TYPE_SIGNED 22017209Swollman#define TYPE_SIGNED(type) (((type) -1) < 0) 22117209Swollman#endif /* !defined TYPE_SIGNED */ 22217209Swollman 223192625Sedwin/* 224192625Sedwin** Since the definition of TYPE_INTEGRAL contains floating point numbers, 225192625Sedwin** it cannot be used in preprocessor directives. 226192625Sedwin*/ 227192625Sedwin 228192625Sedwin#ifndef TYPE_INTEGRAL 229192625Sedwin#define TYPE_INTEGRAL(type) (((type) 0.5) != 0.5) 230192625Sedwin#endif /* !defined TYPE_INTEGRAL */ 231192625Sedwin 232192625Sedwin/* 233192625Sedwin** Since the definition of TYPE_INTEGRAL contains floating point numbers, 234192625Sedwin** it cannot be used in preprocessor directives. 235192625Sedwin*/ 236192625Sedwin 237192625Sedwin#ifndef TYPE_INTEGRAL 238192625Sedwin#define TYPE_INTEGRAL(type) (((type) 0.5) != 0.5) 239192625Sedwin#endif /* !defined TYPE_INTEGRAL */ 240192625Sedwin 2412708Swollman#ifndef INT_STRLEN_MAXIMUM 2422708Swollman/* 2432708Swollman** 302 / 1000 is log10(2.0) rounded up. 24417209Swollman** Subtract one for the sign bit if the type is signed; 2452708Swollman** add one for integer division truncation; 24617209Swollman** add one more for a minus sign if the type is signed. 2472708Swollman*/ 2482708Swollman#define INT_STRLEN_MAXIMUM(type) \ 249192625Sedwin ((TYPE_BIT(type) - TYPE_SIGNED(type)) * 302 / 1000 + \ 250192625Sedwin 1 + TYPE_SIGNED(type)) 2512708Swollman#endif /* !defined INT_STRLEN_MAXIMUM */ 2522708Swollman 2532708Swollman/* 2549936Swollman** INITIALIZE(x) 2552708Swollman*/ 2562708Swollman 2579936Swollman#ifndef GNUC_or_lint 2589936Swollman#ifdef lint 2599936Swollman#define GNUC_or_lint 2609936Swollman#endif /* defined lint */ 2619936Swollman#ifndef lint 2629936Swollman#ifdef __GNUC__ 2639936Swollman#define GNUC_or_lint 2649936Swollman#endif /* defined __GNUC__ */ 2659936Swollman#endif /* !defined lint */ 2669936Swollman#endif /* !defined GNUC_or_lint */ 2679936Swollman 2689936Swollman#ifndef INITIALIZE 2699936Swollman#ifdef GNUC_or_lint 2709936Swollman#define INITIALIZE(x) ((x) = 0) 2719936Swollman#endif /* defined GNUC_or_lint */ 2729936Swollman#ifndef GNUC_or_lint 2739936Swollman#define INITIALIZE(x) 2749936Swollman#endif /* !defined GNUC_or_lint */ 2759936Swollman#endif /* !defined INITIALIZE */ 2769936Swollman 2779936Swollman/* 27817209Swollman** For the benefit of GNU folk... 27917209Swollman** `_(MSGID)' uses the current locale's message library string for MSGID. 28017209Swollman** The default is to use gettext if available, and use MSGID otherwise. 28117209Swollman*/ 28217209Swollman 28317209Swollman#ifndef _ 284192625Sedwin#if HAVE_GETTEXT 28517209Swollman#define _(msgid) gettext(msgid) 286192625Sedwin#else /* !HAVE_GETTEXT */ 28717209Swollman#define _(msgid) msgid 288192625Sedwin#endif /* !HAVE_GETTEXT */ 28917209Swollman#endif /* !defined _ */ 29017209Swollman 29117209Swollman#ifndef TZ_DOMAIN 29217209Swollman#define TZ_DOMAIN "tz" 29317209Swollman#endif /* !defined TZ_DOMAIN */ 29417209Swollman 295130461Sstefanf#if HAVE_INCOMPATIBLE_CTIME_R 296130461Sstefanf#undef asctime_r 297130461Sstefanf#undef ctime_r 298130461Sstefanfchar *asctime_r(struct tm const *, char *); 299130461Sstefanfchar *ctime_r(time_t const *, char *); 300130461Sstefanf#endif /* HAVE_INCOMPATIBLE_CTIME_R */ 301192625Sedwin 302192625Sedwin#ifndef YEARSPERREPEAT 303192625Sedwin#define YEARSPERREPEAT 400 /* years before a Gregorian repeat */ 304192625Sedwin#endif /* !defined YEARSPERREPEAT */ 305130461Sstefanf 30617209Swollman/* 307192625Sedwin** The Gregorian year averages 365.2425 days, which is 31556952 seconds. 308192625Sedwin*/ 309192625Sedwin 310192625Sedwin#ifndef AVGSECSPERYEAR 311192625Sedwin#define AVGSECSPERYEAR 31556952L 312192625Sedwin#endif /* !defined AVGSECSPERYEAR */ 313192625Sedwin 314192625Sedwin#ifndef SECSPERREPEAT 315192625Sedwin#define SECSPERREPEAT ((int_fast64_t) YEARSPERREPEAT * (int_fast64_t) AVGSECSPERYEAR) 316192625Sedwin#endif /* !defined SECSPERREPEAT */ 317192625Sedwin 318192625Sedwin#ifndef SECSPERREPEAT_BITS 319192625Sedwin#define SECSPERREPEAT_BITS 34 /* ceil(log2(SECSPERREPEAT)) */ 320192625Sedwin#endif /* !defined SECSPERREPEAT_BITS */ 321192625Sedwin 322192625Sedwin/* 323130461Sstefanf** UNIX was a registered trademark of The Open Group in 2003. 3249936Swollman*/ 3259936Swollman 3262708Swollman#endif /* !defined PRIVATE_H */ 327