1 | /* Portability cruft. Include after config.h and sys/types.h.
|
---|
2 | Copyright 1996, 1998, 1999, 2000 Free Software Foundation, Inc.
|
---|
3 |
|
---|
4 | This program is free software; you can redistribute it and/or modify
|
---|
5 | it under the terms of the GNU General Public License as published by
|
---|
6 | the Free Software Foundation; either version 2, or (at your option)
|
---|
7 | any later version.
|
---|
8 |
|
---|
9 | This program is distributed in the hope that it will be useful,
|
---|
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
---|
12 | GNU General Public License for more details.
|
---|
13 |
|
---|
14 | You should have received a copy of the GNU General Public License
|
---|
15 | along with this program; if not, write to the Free Software
|
---|
16 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
---|
17 | 02111-1307, USA. */
|
---|
18 |
|
---|
19 | #undef PARAMS
|
---|
20 | #if defined (__STDC__) && __STDC__
|
---|
21 | # ifndef _PTR_T
|
---|
22 | # define _PTR_T
|
---|
23 | typedef void * ptr_t;
|
---|
24 | # endif
|
---|
25 | # define PARAMS(x) x
|
---|
26 | #else
|
---|
27 | # ifndef _PTR_T
|
---|
28 | # define _PTR_T
|
---|
29 | typedef char * ptr_t;
|
---|
30 | # endif
|
---|
31 | # define PARAMS(x) ()
|
---|
32 | #endif
|
---|
33 |
|
---|
34 | #ifdef HAVE_UNISTD_H
|
---|
35 | # include <fcntl.h>
|
---|
36 | # include <unistd.h>
|
---|
37 | #else
|
---|
38 | # define O_RDONLY 0
|
---|
39 | # define SEEK_SET 0
|
---|
40 | # define SEEK_CUR 1
|
---|
41 | int open(), read(), close();
|
---|
42 | #endif
|
---|
43 |
|
---|
44 | #include <errno.h>
|
---|
45 | #ifndef errno
|
---|
46 | extern int errno;
|
---|
47 | #endif
|
---|
48 |
|
---|
49 | #ifndef HAVE_STRERROR
|
---|
50 | extern int sys_nerr;
|
---|
51 | extern char *sys_errlist[];
|
---|
52 | # define strerror(E) (0 <= (E) && (E) < sys_nerr ? _(sys_errlist[E]) : _("Unknown system error"))
|
---|
53 | #endif
|
---|
54 |
|
---|
55 | /* Some operating systems treat text and binary files differently. */
|
---|
56 | #ifdef __BEOS__
|
---|
57 | # undef O_BINARY /* BeOS 5 has O_BINARY and O_TEXT, but they have no effect. */
|
---|
58 | #endif
|
---|
59 | #ifdef HAVE_DOS_FILE_CONTENTS
|
---|
60 | # include <io.h>
|
---|
61 | # ifdef HAVE_SETMODE
|
---|
62 | # define SET_BINARY(fd) setmode (fd, O_BINARY)
|
---|
63 | # else
|
---|
64 | # define SET_BINARY(fd) _setmode (fd, O_BINARY)
|
---|
65 | # endif
|
---|
66 | #endif
|
---|
67 |
|
---|
68 | #ifdef HAVE_DOS_FILE_NAMES
|
---|
69 | # define IS_SLASH(c) ((c) == '/' || (c) == '\\')
|
---|
70 | # define FILESYSTEM_PREFIX_LEN(f) ((f)[0] && (f)[1] == ':' ? 2 : 0)
|
---|
71 | #endif
|
---|
72 |
|
---|
73 | #ifndef IS_SLASH
|
---|
74 | # define IS_SLASH(c) ((c) == '/')
|
---|
75 | #endif
|
---|
76 |
|
---|
77 | #ifndef FILESYSTEM_PREFIX_LEN
|
---|
78 | # define FILESYSTEM_PREFIX_LEN(f) 0
|
---|
79 | #endif
|
---|
80 |
|
---|
81 | int isdir PARAMS ((char const *));
|
---|
82 |
|
---|
83 | #ifdef HAVE_DIR_EACCES_BUG
|
---|
84 | # ifdef EISDIR
|
---|
85 | # define is_EISDIR(e, f) \
|
---|
86 | ((e) == EISDIR \
|
---|
87 | || ((e) == EACCES && isdir (f) && ((e) = EISDIR, 1)))
|
---|
88 | # else
|
---|
89 | # define is_EISDIR(e, f) ((e) == EACCES && isdir (f))
|
---|
90 | # endif
|
---|
91 | #endif
|
---|
92 |
|
---|
93 | #ifndef is_EISDIR
|
---|
94 | # ifdef EISDIR
|
---|
95 | # define is_EISDIR(e, f) ((e) == EISDIR)
|
---|
96 | # else
|
---|
97 | # define is_EISDIR(e, f) 0
|
---|
98 | # endif
|
---|
99 | #endif
|
---|
100 |
|
---|
101 | #if STAT_MACROS_BROKEN
|
---|
102 | # undef S_ISDIR
|
---|
103 | # undef S_ISREG
|
---|
104 | #endif
|
---|
105 | #if !defined(S_ISDIR) && defined(S_IFDIR)
|
---|
106 | # define S_ISDIR(Mode) (((Mode) & S_IFMT) == S_IFDIR)
|
---|
107 | #endif
|
---|
108 | #if !defined(S_ISREG) && defined(S_IFREG)
|
---|
109 | # define S_ISREG(Mode) (((Mode) & S_IFMT) == S_IFREG)
|
---|
110 | #endif
|
---|
111 |
|
---|
112 | #ifdef STDC_HEADERS
|
---|
113 | # include <stdlib.h>
|
---|
114 | #else
|
---|
115 | char *getenv ();
|
---|
116 | ptr_t malloc(), realloc(), calloc();
|
---|
117 | void free();
|
---|
118 | #endif
|
---|
119 |
|
---|
120 | #if __STDC__
|
---|
121 | # include <stddef.h>
|
---|
122 | #endif
|
---|
123 | #ifdef STDC_HEADERS
|
---|
124 | # include <limits.h>
|
---|
125 | #endif
|
---|
126 | #ifndef CHAR_BIT
|
---|
127 | # define CHAR_BIT 8
|
---|
128 | #endif
|
---|
129 | /* The extra casts work around common compiler bugs. */
|
---|
130 | #define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
|
---|
131 | #define TYPE_MINIMUM(t) ((t) (TYPE_SIGNED (t) \
|
---|
132 | ? ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1) \
|
---|
133 | : (t) 0))
|
---|
134 | #define TYPE_MAXIMUM(t) ((t) (~ (t) 0 - TYPE_MINIMUM (t)))
|
---|
135 | #ifndef CHAR_MAX
|
---|
136 | # define CHAR_MAX TYPE_MAXIMUM (char)
|
---|
137 | #endif
|
---|
138 | #ifndef INT_MAX
|
---|
139 | # define INT_MAX TYPE_MAXIMUM (int)
|
---|
140 | #endif
|
---|
141 | #ifndef UCHAR_MAX
|
---|
142 | # define UCHAR_MAX TYPE_MAXIMUM (unsigned char)
|
---|
143 | #endif
|
---|
144 |
|
---|
145 | #if !defined(STDC_HEADERS) && defined(HAVE_STRING_H) && defined(HAVE_MEMORY_H)
|
---|
146 | # include <memory.h>
|
---|
147 | #endif
|
---|
148 | #if defined(STDC_HEADERS) || defined(HAVE_STRING_H)
|
---|
149 | # include <string.h>
|
---|
150 | #else
|
---|
151 | # include <strings.h>
|
---|
152 | # undef strchr
|
---|
153 | # define strchr index
|
---|
154 | # undef strrchr
|
---|
155 | # define strrchr rindex
|
---|
156 | # undef memcpy
|
---|
157 | # define memcpy(d, s, n) bcopy (s, d, n)
|
---|
158 | #endif
|
---|
159 | #ifndef HAVE_MEMCHR
|
---|
160 | ptr_t memchr();
|
---|
161 | #endif
|
---|
162 | #if ! defined HAVE_MEMMOVE && ! defined memmove
|
---|
163 | # define memmove(d, s, n) bcopy (s, d, n)
|
---|
164 | #endif
|
---|
165 |
|
---|
166 | #include <ctype.h>
|
---|
167 |
|
---|
168 | #ifndef isgraph
|
---|
169 | # define isgraph(C) (isprint(C) && !isspace(C))
|
---|
170 | #endif
|
---|
171 |
|
---|
172 | #if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII))
|
---|
173 | # define IN_CTYPE_DOMAIN(c) 1
|
---|
174 | #else
|
---|
175 | # define IN_CTYPE_DOMAIN(c) isascii(c)
|
---|
176 | #endif
|
---|
177 |
|
---|
178 | #define ISALPHA(C) (IN_CTYPE_DOMAIN (C) && isalpha (C))
|
---|
179 | #define ISUPPER(C) (IN_CTYPE_DOMAIN (C) && isupper (C))
|
---|
180 | #define ISLOWER(C) (IN_CTYPE_DOMAIN (C) && islower (C))
|
---|
181 | #define ISDIGIT(C) (IN_CTYPE_DOMAIN (C) && isdigit (C))
|
---|
182 | #define ISXDIGIT(C) (IN_CTYPE_DOMAIN (C) && isxdigit (C))
|
---|
183 | #define ISSPACE(C) (IN_CTYPE_DOMAIN (C) && isspace (C))
|
---|
184 | #define ISPUNCT(C) (IN_CTYPE_DOMAIN (C) && ispunct (C))
|
---|
185 | #define ISALNUM(C) (IN_CTYPE_DOMAIN (C) && isalnum (C))
|
---|
186 | #define ISPRINT(C) (IN_CTYPE_DOMAIN (C) && isprint (C))
|
---|
187 | #define ISGRAPH(C) (IN_CTYPE_DOMAIN (C) && isgraph (C))
|
---|
188 | #define ISCNTRL(C) (IN_CTYPE_DOMAIN (C) && iscntrl (C))
|
---|
189 |
|
---|
190 | #define TOLOWER(C) (ISUPPER(C) ? tolower(C) : (C))
|
---|
191 |
|
---|
192 | #if ENABLE_NLS
|
---|
193 | # include <libintl.h>
|
---|
194 | # define _(String) gettext (String)
|
---|
195 | #else
|
---|
196 | # define _(String) String
|
---|
197 | #endif
|
---|
198 | #define N_(String) String
|
---|
199 |
|
---|
200 | #if HAVE_SETLOCALE
|
---|
201 | # include <locale.h>
|
---|
202 | #endif
|
---|
203 |
|
---|
204 | #ifndef initialize_main
|
---|
205 | #define initialize_main(argcp, argvp)
|
---|
206 | #endif
|
---|