1ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef PRIVATE_H
2ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
3ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define PRIVATE_H
4ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
5ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/*
6ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru** This file is in the public domain, so clarified as of
7ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru** 1996-06-05 by Arthur David Olson.
8ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*/
9ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
10ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/*
11ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru** This header is for use ONLY with the time conversion code.
12ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru** There is no guarantee that it will remain unchanged,
13ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru** or that it will remain at all.
14ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru** Do NOT copy it to any system include directory.
15ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru** Thank you!
16ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*/
17ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
18ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/*
19ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru** ID
20ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*/
21ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
22ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef lint
23ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef NOID
2485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hostatic char	privatehid[] = "@(#)private.h	8.6";
25ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* !defined NOID */
26ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* !defined lint */
27ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
28ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define GRANDPARENTED	"Local time zone must be set--see zic manual page"
29ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
30ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/*
31ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru** Defaults for preprocessor symbols.
32ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru** You can override these in your C compiler options, e.g. `-DHAVE_ADJTIME=0'.
33ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*/
34ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
35ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef HAVE_ADJTIME
36ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define HAVE_ADJTIME		1
37ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* !defined HAVE_ADJTIME */
38ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
39ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef HAVE_GETTEXT
40ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define HAVE_GETTEXT		0
41ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* !defined HAVE_GETTEXT */
42ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
43ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef HAVE_INCOMPATIBLE_CTIME_R
44ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define HAVE_INCOMPATIBLE_CTIME_R	0
45ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* !defined INCOMPATIBLE_CTIME_R */
46ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
47ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef HAVE_SETTIMEOFDAY
48ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define HAVE_SETTIMEOFDAY	3
49ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* !defined HAVE_SETTIMEOFDAY */
50ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
51ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef HAVE_SYMLINK
52ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define HAVE_SYMLINK		1
53ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* !defined HAVE_SYMLINK */
54ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
55ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef HAVE_SYS_STAT_H
56ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define HAVE_SYS_STAT_H		1
57ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* !defined HAVE_SYS_STAT_H */
58ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
59ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef HAVE_SYS_WAIT_H
60ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define HAVE_SYS_WAIT_H		1
61ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* !defined HAVE_SYS_WAIT_H */
62ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
63ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef HAVE_UNISTD_H
64ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define HAVE_UNISTD_H		1
65ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* !defined HAVE_UNISTD_H */
66ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
67ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef HAVE_UTMPX_H
68ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define HAVE_UTMPX_H		0
69ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* !defined HAVE_UTMPX_H */
70ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
71ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef LOCALE_HOME
72ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define LOCALE_HOME		"/usr/lib/locale"
73ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* !defined LOCALE_HOME */
74ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
75ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#if HAVE_INCOMPATIBLE_CTIME_R
76ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define asctime_r _incompatible_asctime_r
77ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define ctime_r _incompatible_ctime_r
78ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* HAVE_INCOMPATIBLE_CTIME_R */
79ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
80ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/*
81ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru** Nested includes
82ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*/
83ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
84ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "sys/types.h"	/* for time_t */
85ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "stdio.h"
86ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "errno.h"
87ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "string.h"
88ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "limits.h"	/* for CHAR_BIT et al. */
89ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "time.h"
90ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "stdlib.h"
91ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
92ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#if HAVE_GETTEXT
93ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "libintl.h"
94ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* HAVE_GETTEXT */
95ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
96ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#if HAVE_SYS_WAIT_H
97ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include <sys/wait.h>	/* for WIFEXITED and WEXITSTATUS */
98ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* HAVE_SYS_WAIT_H */
99ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
100ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef WIFEXITED
101ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define WIFEXITED(status)	(((status) & 0xff) == 0)
102ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* !defined WIFEXITED */
103ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef WEXITSTATUS
104ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define WEXITSTATUS(status)	(((status) >> 8) & 0xff)
105ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* !defined WEXITSTATUS */
106ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
107ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#if HAVE_UNISTD_H
10885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#include "unistd.h"	/* for F_OK, R_OK, and other POSIX goodness */
109ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* HAVE_UNISTD_H */
110ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
111ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef F_OK
112ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define F_OK	0
113ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* !defined F_OK */
114ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef R_OK
115ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define R_OK	4
116ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* !defined R_OK */
117ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
118ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* Unlike <ctype.h>'s isdigit, this also works if c < 0 | c > UCHAR_MAX. */
119ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define is_digit(c) ((unsigned)(c) - '0' <= 9)
120ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
121ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/*
122ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru** Define HAVE_STDINT_H's default value here, rather than at the
123ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru** start, since __GLIBC__'s value depends on previously-included
124ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru** files.
125ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru** (glibc 2.1 and later have stdint.h, even with pre-C99 compilers.)
126ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*/
127ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef HAVE_STDINT_H
128ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define HAVE_STDINT_H \
129ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	(199901 <= __STDC_VERSION__ || \
130ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	2 < (__GLIBC__ + (0 < __GLIBC_MINOR__)))
131ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* !defined HAVE_STDINT_H */
132ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
133ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#if HAVE_STDINT_H
134ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "stdint.h"
135ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* !HAVE_STDINT_H */
136ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
137ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef INT_FAST64_MAX
138ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* Pre-C99 GCC compilers define __LONG_LONG_MAX__ instead of LLONG_MAX.  */
139ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#if defined LLONG_MAX || defined __LONG_LONG_MAX__
140ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querutypedef long long	int_fast64_t;
141ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#else /* ! (defined LLONG_MAX || defined __LONG_LONG_MAX__) */
142ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#if (LONG_MAX >> 31) < 0xffffffff
143ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruPlease use a compiler that supports a 64-bit integer type (or wider);
144ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruyou may need to compile with "-DHAVE_STDINT_H".
145ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* (LONG_MAX >> 31) < 0xffffffff */
146ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querutypedef long		int_fast64_t;
147ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* ! (defined LLONG_MAX || defined __LONG_LONG_MAX__) */
148ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* !defined INT_FAST64_MAX */
149ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
150ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef INT32_MAX
151ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define INT32_MAX 0x7fffffff
152ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* !defined INT32_MAX */
153ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef INT32_MIN
154ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define INT32_MIN (-1 - INT32_MAX)
155ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* !defined INT32_MIN */
156ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
157ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/*
158ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru** Workarounds for compilers/systems.
159ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*/
160ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
161ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/*
162ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru** Some time.h implementations don't declare asctime_r.
163ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru** Others might define it as a macro.
164ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru** Fix the former without affecting the latter.
165ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*/
166ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
167ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef asctime_r
16885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hoextern char *	asctime_r(struct tm const *, char *);
169ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif
170ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
171ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/*
172ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru** Private function declarations.
173ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*/
174ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
17585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hochar *		icalloc(int nelem, int elsize);
17685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hochar *		icatalloc(char * old, const char * new);
17785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hochar *		icpyalloc(const char * string);
17885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hochar *		imalloc(int n);
17985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hovoid *		irealloc(void * pointer, int size);
18085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hovoid		icfree(char * pointer);
18185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hovoid		ifree(char * pointer);
18285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hoconst char *	scheck(const char * string, const char * format);
183ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
184ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/*
185ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru** Finally, some convenience items.
186ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*/
187ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
188ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef TRUE
189ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define TRUE	1
190ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* !defined TRUE */
191ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
192ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef FALSE
193ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define FALSE	0
194ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* !defined FALSE */
195ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
196ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef TYPE_BIT
197ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define TYPE_BIT(type)	(sizeof (type) * CHAR_BIT)
198ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* !defined TYPE_BIT */
199ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
200ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef TYPE_SIGNED
201ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define TYPE_SIGNED(type) (((type) -1) < 0)
202ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* !defined TYPE_SIGNED */
203ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
204ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/*
205ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru** Since the definition of TYPE_INTEGRAL contains floating point numbers,
206ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru** it cannot be used in preprocessor directives.
207ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*/
208ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
209ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef TYPE_INTEGRAL
210ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define TYPE_INTEGRAL(type) (((type) 0.5) != 0.5)
211ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* !defined TYPE_INTEGRAL */
212ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
213ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef INT_STRLEN_MAXIMUM
214ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/*
215ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru** 302 / 1000 is log10(2.0) rounded up.
216ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru** Subtract one for the sign bit if the type is signed;
217ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru** add one for integer division truncation;
218ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru** add one more for a minus sign if the type is signed.
219ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*/
220ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define INT_STRLEN_MAXIMUM(type) \
221ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	((TYPE_BIT(type) - TYPE_SIGNED(type)) * 302 / 1000 + \
222ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	1 + TYPE_SIGNED(type))
223ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* !defined INT_STRLEN_MAXIMUM */
224ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
225ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/*
226ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru** INITIALIZE(x)
227ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*/
228ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
229ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef GNUC_or_lint
230ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifdef lint
231ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define GNUC_or_lint
232ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* defined lint */
233ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef lint
234ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifdef __GNUC__
235ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define GNUC_or_lint
236ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* defined __GNUC__ */
237ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* !defined lint */
238ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* !defined GNUC_or_lint */
239ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
240ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef INITIALIZE
241ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifdef GNUC_or_lint
242ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define INITIALIZE(x)	((x) = 0)
243ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* defined GNUC_or_lint */
244ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef GNUC_or_lint
245ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define INITIALIZE(x)
246ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* !defined GNUC_or_lint */
247ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* !defined INITIALIZE */
248ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
249ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/*
250ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru** For the benefit of GNU folk...
251ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru** `_(MSGID)' uses the current locale's message library string for MSGID.
252ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru** The default is to use gettext if available, and use MSGID otherwise.
253ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*/
254ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
255ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef _
256ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#if HAVE_GETTEXT
257ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define _(msgid) gettext(msgid)
258ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#else /* !HAVE_GETTEXT */
259ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define _(msgid) msgid
260ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* !HAVE_GETTEXT */
261ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* !defined _ */
262ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
263ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef TZ_DOMAIN
264ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define TZ_DOMAIN "tz"
265ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* !defined TZ_DOMAIN */
266ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
267ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#if HAVE_INCOMPATIBLE_CTIME_R
268ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#undef asctime_r
269ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#undef ctime_r
27085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hochar *asctime_r(struct tm const *, char *);
27185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hochar *ctime_r(time_t const *, char *);
272ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* HAVE_INCOMPATIBLE_CTIME_R */
273ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
274ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef YEARSPERREPEAT
275ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define YEARSPERREPEAT		400	/* years before a Gregorian repeat */
276ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* !defined YEARSPERREPEAT */
277ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
278ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/*
279ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru** The Gregorian year averages 365.2425 days, which is 31556952 seconds.
280ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*/
281ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
282ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef AVGSECSPERYEAR
283ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define AVGSECSPERYEAR		31556952L
284ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* !defined AVGSECSPERYEAR */
285ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
286ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef SECSPERREPEAT
287ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define SECSPERREPEAT		((int_fast64_t) YEARSPERREPEAT * (int_fast64_t) AVGSECSPERYEAR)
288ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* !defined SECSPERREPEAT */
28985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
290ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef SECSPERREPEAT_BITS
291ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define SECSPERREPEAT_BITS	34	/* ceil(log2(SECSPERREPEAT)) */
292ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* !defined SECSPERREPEAT_BITS */
293ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
294ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/*
295ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru** UNIX was a registered trademark of The Open Group in 2003.
296ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*/
297ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
298ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* !defined PRIVATE_H */
299