No empty .Rs/.Re
[netbsd-mini2440.git] / gnu / dist / diffutils / src / system.h
blob3c623938a1ba14962d007aed5f9f39760be16290
1 /* $NetBSD: system.h,v 1.1.1.1 2003/01/26 00:43:16 wiz Exp $ */
3 /* System dependent declarations.
5 Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1998, 2001, 2002
6 Free Software Foundation, Inc.
8 This file is part of GNU DIFF.
10 GNU DIFF is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 2, or (at your option)
13 any later version.
15 GNU DIFF is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
20 You should have received a copy of the GNU General Public License
21 along with this program; see the file COPYING.
22 If not, write to the Free Software Foundation,
23 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
25 #include <config.h>
27 /* Don't bother to support K&R C compilers any more; it's not worth
28 the trouble. These macros prevent some library modules from being
29 compiled in K&R C mode. */
30 #define PARAMS(Args) Args
31 #define PROTOTYPES 1
33 /* Define `__attribute__' and `volatile' first
34 so that they're used consistently in all system includes. */
35 #if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 6) || __STRICT_ANSI__
36 # define __attribute__(x)
37 #endif
38 #if defined const && !defined volatile
39 # define volatile
40 #endif
42 /* Verify a requirement at compile-time (unlike assert, which is runtime). */
43 #define verify(name, assertion) struct name { char a[(assertion) ? 1 : -1]; }
46 /* Determine whether an integer type is signed, and its bounds.
47 This code assumes two's (or one's!) complement with no holes. */
49 /* The extra casts work around common compiler bugs,
50 e.g. Cray C 5.0.3.0 when t == time_t. */
51 #ifndef TYPE_SIGNED
52 # define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
53 #endif
54 #ifndef TYPE_MINIMUM
55 # define TYPE_MINIMUM(t) ((t) (TYPE_SIGNED (t) \
56 ? ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1) \
57 : (t) 0))
58 #endif
59 #ifndef TYPE_MAXIMUM
60 # define TYPE_MAXIMUM(t) ((t) (~ (t) 0 - TYPE_MINIMUM (t)))
61 #endif
63 #include <sys/types.h>
64 #include <sys/stat.h>
66 #if STAT_MACROS_BROKEN
67 # undef S_ISBLK
68 # undef S_ISCHR
69 # undef S_ISDIR
70 # undef S_ISFIFO
71 # undef S_ISREG
72 # undef S_ISSOCK
73 #endif
74 #ifndef S_ISDIR
75 # define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR)
76 #endif
77 #ifndef S_ISREG
78 # define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG)
79 #endif
80 #if !defined S_ISBLK && defined S_IFBLK
81 # define S_ISBLK(mode) (((mode) & S_IFMT) == S_IFBLK)
82 #endif
83 #if !defined S_ISCHR && defined S_IFCHR
84 # define S_ISCHR(mode) (((mode) & S_IFMT) == S_IFCHR)
85 #endif
86 #if !defined S_ISFIFO && defined S_IFFIFO
87 # define S_ISFIFO(mode) (((mode) & S_IFMT) == S_IFFIFO)
88 #endif
89 #if !defined S_ISSOCK && defined S_IFSOCK
90 # define S_ISSOCK(mode) (((mode) & S_IFMT) == S_IFSOCK)
91 #endif
92 #ifndef S_IXUSR
93 # define S_IXUSR 0100
94 #endif
95 #ifndef S_IXGRP
96 # define S_IXGRP 0010
97 #endif
98 #ifndef S_IXOTH
99 # define S_IXOTH 0001
100 #endif
102 #if HAVE_UNISTD_H
103 # include <unistd.h>
104 #endif
106 #ifndef SEEK_SET
107 # define SEEK_SET 0
108 #endif
109 #ifndef SEEK_CUR
110 # define SEEK_CUR 1
111 #endif
113 #ifndef STDIN_FILENO
114 # define STDIN_FILENO 0
115 #endif
116 #ifndef STDOUT_FILENO
117 # define STDOUT_FILENO 1
118 #endif
119 #ifndef STDERR_FILENO
120 # define STDERR_FILENO 2
121 #endif
123 #if HAVE_TIME_H
124 # include <time.h>
125 #else
126 # include <sys/time.h>
127 #endif
129 #if HAVE_FCNTL_H
130 # include <fcntl.h>
131 #else
132 # if HAVE_SYS_FILE_H
133 # include <sys/file.h>
134 # endif
135 #endif
137 #if !HAVE_DUP2
138 # define dup2(f, t) (close (t), fcntl (f, F_DUPFD, t))
139 #endif
141 #ifndef O_RDONLY
142 # define O_RDONLY 0
143 #endif
144 #ifndef O_RDWR
145 # define O_RDWR 2
146 #endif
147 #ifndef S_IRUSR
148 # define S_IRUSR 0400
149 #endif
150 #ifndef S_IWUSR
151 # define S_IWUSR 0200
152 #endif
154 #if HAVE_SYS_WAIT_H
155 # include <sys/wait.h>
156 #endif
157 #ifndef WEXITSTATUS
158 # define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8)
159 #endif
160 #ifndef WIFEXITED
161 # define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
162 #endif
164 #ifndef STAT_BLOCKSIZE
165 # if HAVE_STRUCT_STAT_ST_BLKSIZE
166 # define STAT_BLOCKSIZE(s) ((s).st_blksize)
167 # else
168 # define STAT_BLOCKSIZE(s) (8 * 1024)
169 # endif
170 #endif
172 #if HAVE_DIRENT_H
173 # include <dirent.h>
174 # define NAMLEN(dirent) strlen ((dirent)->d_name)
175 #else
176 # define dirent direct
177 # define NAMLEN(dirent) ((dirent)->d_namlen)
178 # if HAVE_SYS_NDIR_H
179 # include <sys/ndir.h>
180 # endif
181 # if HAVE_SYS_DIR_H
182 # include <sys/dir.h>
183 # endif
184 # if HAVE_NDIR_H
185 # include <ndir.h>
186 # endif
187 #endif
189 #if HAVE_STDLIB_H
190 # include <stdlib.h>
191 #else
192 # ifndef getenv
193 char *getenv ();
194 # endif
195 #endif
196 #ifndef EXIT_SUCCESS
197 # define EXIT_SUCCESS 0
198 #endif
199 #if !EXIT_FAILURE
200 # undef EXIT_FAILURE /* Sony NEWS-OS 4.0C defines EXIT_FAILURE to 0. */
201 # define EXIT_FAILURE 1
202 #endif
203 #define EXIT_TROUBLE 2
205 #include <limits.h>
206 #ifndef SSIZE_MAX
207 # define SSIZE_MAX TYPE_MAXIMUM (ssize_t)
208 #endif
210 #if HAVE_INTTYPES_H
211 # include <inttypes.h>
212 #endif
213 #ifndef PTRDIFF_MAX
214 # define PTRDIFF_MAX TYPE_MAXIMUM (ptrdiff_t)
215 #endif
216 #ifndef SIZE_MAX
217 # define SIZE_MAX TYPE_MAXIMUM (size_t)
218 #endif
219 #ifndef UINTMAX_MAX
220 # define UINTMAX_MAX TYPE_MAXIMUM (uintmax_t)
221 #endif
222 #if ! HAVE_STRTOUMAX && ! defined strtoumax
223 uintmax_t strtoumax (char const *, char **, int);
224 #endif
226 #include <stddef.h>
228 #if STDC_HEADERS || HAVE_STRING_H
229 # include <string.h>
230 #else
231 # if !HAVE_STRCHR
232 # define strchr index
233 # define strrchr rindex
234 # endif
235 char *strchr (), *strrchr ();
236 # if !HAVE_MEMCHR
237 # define memcmp(s1, s2, n) bcmp (s1, s2, n)
238 # define memcpy(d, s, n) bcopy (s, d, n)
239 void *memchr ();
240 # endif
241 #endif
243 #if HAVE_LOCALE_H
244 # include <locale.h>
245 #else
246 # define setlocale(category, locale)
247 #endif
249 #include <gettext.h>
251 #define _(msgid) gettext (msgid)
252 #define N_(msgid) msgid
254 #include <ctype.h>
256 /* CTYPE_DOMAIN (C) is nonzero if the unsigned char C can safely be given
257 as an argument to <ctype.h> macros like `isspace'. */
258 #if STDC_HEADERS
259 # define CTYPE_DOMAIN(c) 1
260 #else
261 # define CTYPE_DOMAIN(c) ((unsigned int) (c) <= 0177)
262 #endif
263 #define ISPRINT(c) (CTYPE_DOMAIN (c) && isprint (c))
264 #define ISSPACE(c) (CTYPE_DOMAIN (c) && isspace (c))
266 #if STDC_HEADERS
267 # define TOLOWER(c) tolower (c)
268 #else
269 # ifndef _tolower
270 # define _tolower(c) tolower (c)
271 # endif
272 # define TOLOWER(c) (CTYPE_DOMAIN (c) && isupper (c) ? _tolower (c) : (c))
273 #endif
275 /* ISDIGIT differs from isdigit, as follows:
276 - Its arg may be any int or unsigned int; it need not be an unsigned char.
277 - It's guaranteed to evaluate its argument exactly once.
278 - It's typically faster.
279 POSIX 1003.1-2001 says that only '0' through '9' are digits.
280 Prefer ISDIGIT to isdigit unless it's important to use the locale's
281 definition of `digit' even when the host does not conform to POSIX. */
282 #define ISDIGIT(c) ((unsigned int) (c) - '0' <= 9)
284 #include <errno.h>
285 #if !STDC_HEADERS
286 extern int errno;
287 #endif
289 #include <signal.h>
290 #ifndef SA_RESTART
291 # ifdef SA_INTERRUPT /* e.g. SunOS 4.1.x */
292 # define SA_RESTART SA_INTERRUPT
293 # else
294 # define SA_RESTART 0
295 # endif
296 #endif
297 #if !defined SIGCHLD && defined SIGCLD
298 # define SIGCHLD SIGCLD
299 #endif
301 #undef MIN
302 #undef MAX
303 #define MIN(a, b) ((a) <= (b) ? (a) : (b))
304 #define MAX(a, b) ((a) >= (b) ? (a) : (b))
306 #if HAVE_STDBOOL_H
307 # include <stdbool.h>
308 #else
309 # define bool unsigned char
310 #endif
312 #if HAVE_VFORK_H
313 # include <vfork.h>
314 #endif
316 #if ! HAVE_WORKING_VFORK
317 # define vfork fork
318 #endif
320 /* Type used for fast comparison of several bytes at a time. */
322 #ifndef word
323 # define word uintmax_t
324 #endif
326 /* The integer type of a line number. Since files are read into main
327 memory, ptrdiff_t should be wide enough. */
329 typedef ptrdiff_t lin;
330 #define LIN_MAX PTRDIFF_MAX
331 verify (lin_is_signed, TYPE_SIGNED (lin));
332 verify (lin_is_wide_enough, sizeof (ptrdiff_t) <= sizeof (lin));
333 verify (lin_is_printable_as_long, sizeof (lin) <= sizeof (long));
335 /* This section contains POSIX-compliant defaults for macros
336 that are meant to be overridden by hand in config.h as needed. */
338 #ifndef file_name_cmp
339 # define file_name_cmp strcmp
340 #endif
342 #ifndef initialize_main
343 # define initialize_main(argcp, argvp)
344 #endif
346 #ifndef NULL_DEVICE
347 # define NULL_DEVICE "/dev/null"
348 #endif
350 /* Do struct stat *S, *T describe the same special file? */
351 #ifndef same_special_file
352 # if HAVE_STRUCT_STAT_ST_RDEV && defined S_ISBLK && defined S_ISCHR
353 # define same_special_file(s, t) \
354 (((S_ISBLK ((s)->st_mode) && S_ISBLK ((t)->st_mode)) \
355 || (S_ISCHR ((s)->st_mode) && S_ISCHR ((t)->st_mode))) \
356 && (s)->st_rdev == (t)->st_rdev)
357 # else
358 # define same_special_file(s, t) 0
359 # endif
360 #endif
362 /* Do struct stat *S, *T describe the same file? Answer -1 if unknown. */
363 #ifndef same_file
364 # define same_file(s, t) \
365 ((((s)->st_ino == (t)->st_ino) && ((s)->st_dev == (t)->st_dev)) \
366 || same_special_file (s, t))
367 #endif
369 /* Do struct stat *S, *T have the same file attributes?
371 POSIX says that two files are identical if st_ino and st_dev are
372 the same, but many filesystems incorrectly assign the same (device,
373 inode) pair to two distinct files, including:
375 - GNU/Linux NFS servers that export all local filesystems as a
376 single NFS filesystem, if a local device number (st_dev) exceeds
377 255, or if a local inode number (st_ino) exceeds 16777215.
379 - Network Appliance NFS servers in snapshot directories; see
380 Network Appliance bug #195.
382 - ClearCase MVFS; see bug id ATRia04618.
384 Check whether two files that purport to be the same have the same
385 attributes, to work around instances of this common bug. Do not
386 inspect all attributes, only attributes useful in checking for this
387 bug.
389 It's possible for two distinct files on a buggy filesystem to have
390 the same attributes, but it's not worth slowing down all
391 implementations (or complicating the configuration) to cater to
392 these rare cases in buggy implementations. */
394 #ifndef same_file_attributes
395 # define same_file_attributes(s, t) \
396 ((s)->st_mode == (t)->st_mode \
397 && (s)->st_nlink == (t)->st_nlink \
398 && (s)->st_uid == (t)->st_uid \
399 && (s)->st_gid == (t)->st_gid \
400 && (s)->st_size == (t)->st_size \
401 && (s)->st_mtime == (t)->st_mtime \
402 && (s)->st_ctime == (t)->st_ctime)
403 #endif