1 /* system-dependent definitions for fileutils, textutils, and sh-utils packages.
2 Copyright (C) 1989, 1991-2004 Free Software Foundation, Inc.
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)
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.
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 Foundation,
16 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
20 /* Include sys/types.h before this file. */
22 #if 2 <= __GLIBC__ && 2 <= __GLIBC_MINOR__
23 # if ! defined _SYS_TYPES_H
24 you must include <sys/types.h> before including this file
30 #if !defined HAVE_MKFIFO
31 # define mkfifo(path, mode) (mknod ((path), (mode) | S_IFIFO, 0))
35 # include <sys/param.h>
38 /* <unistd.h> should be included before any preprocessor test
45 # define STDIN_FILENO 0
49 # define STDOUT_FILENO 1
53 # define STDERR_FILENO 2
57 /* limits.h must come before pathmax.h because limits.h on some systems
58 undefs PATH_MAX, whereas pathmax.h sets PATH_MAX. */
62 #include "localedir.h"
64 #if TIME_WITH_SYS_TIME
65 # include <sys/time.h>
69 # include <sys/time.h>
75 /* Since major is a function on SVR4, we can't use `ifndef major'. */
77 # include <sys/mkdev.h>
80 #if MAJOR_IN_SYSMACROS
81 # include <sys/sysmacros.h>
84 #ifdef major /* Might be defined in sys/types.h. */
89 # define major(dev) (((dev) >> 8) & 0xff)
90 # define minor(dev) ((dev) & 0xff)
91 # define makedev(maj, min) (((maj) << 8) | (min))
95 #if ! defined makedev && defined mkdev
96 # define makedev(maj, min) mkdev (maj, min)
103 /* Some systems (even some that do have <utime.h>) don't declare this
104 structure anywhere. */
105 #ifndef HAVE_STRUCT_UTIMBUF
113 /* Don't use bcopy! Use memmove if source and destination may overlap,
117 #if ! HAVE_DECL_MEMRCHR
118 void *memrchr (const void *, int, size_t);
123 /* Some systems don't define the following symbols. */
133 #define getopt system_getopt
137 /* The following test is to work around the gross typo in
138 systems like Sony NEWS-OS Release 4.0C, whereby EXIT_FAILURE
139 is defined to 0, not 1. */
142 # define EXIT_FAILURE 1
146 # define EXIT_SUCCESS 0
149 /* Exit statuses for programs like 'env' that exec other programs.
150 EXIT_FAILURE might not be 1, so use EXIT_FAIL in such programs. */
154 EXIT_CANNOT_INVOKE = 126,
158 #include "exitfail.h"
160 /* Set exit_failure to STATUS if that's not the default already. */
162 initialize_exit_failure (int status)
164 if (status != EXIT_FAILURE)
165 exit_failure = status;
171 # include <sys/file.h>
174 #if !defined SEEK_SET
186 /* For systems that distinguish between text and binary I/O.
187 O_BINARY is usually declared in fcntl.h */
188 #if !defined O_BINARY && defined _O_BINARY
189 /* For MSC-compatible compilers. */
190 # define O_BINARY _O_BINARY
191 # define O_TEXT _O_TEXT
194 #if !defined O_DIRECT
202 #if !defined O_NDELAY
206 #if !defined O_NONBLOCK
207 # define O_NONBLOCK O_NDELAY
210 #if !defined O_NOCTTY
214 #if !defined O_NOFOLLOW
215 # define O_NOFOLLOW 0
227 /* BeOS 5 has O_BINARY and O_TEXT, but they have no effect. */
234 # define setmode _setmode
235 # define fileno(_fp) _fileno (_fp)
236 # endif /* not DJGPP */
237 # define SET_MODE(_f, _m) setmode (_f, _m)
238 # define SET_BINARY(_f) do {if (!isatty(_f)) setmode (_f, O_BINARY);} while (0)
239 # define SET_BINARY2(_f1, _f2) \
243 setmode (_f1, O_BINARY); \
245 setmode (_f2, O_BINARY); \
249 # define SET_MODE(_f, _m) (void)0
250 # define SET_BINARY(f) (void)0
251 # define SET_BINARY2(f1,f2) (void)0
254 #endif /* O_BINARY */
258 # define NLENGTH(direct) (strlen((direct)->d_name))
259 #else /* not HAVE_DIRENT_H */
260 # define dirent direct
261 # define NLENGTH(direct) ((direct)->d_namlen)
263 # include <sys/ndir.h>
264 # endif /* HAVE_SYS_NDIR_H */
266 # include <sys/dir.h>
267 # endif /* HAVE_SYS_DIR_H */
270 # endif /* HAVE_NDIR_H */
271 #endif /* HAVE_DIRENT_H */
274 /* Fake a return value. */
275 # define CLOSEDIR(d) (closedir (d), 0)
277 # define CLOSEDIR(d) closedir (d)
280 /* Get or fake the disk device blocksize.
281 Usually defined by sys/param.h (if at all). */
282 #if !defined DEV_BSIZE && defined BSIZE
283 # define DEV_BSIZE BSIZE
285 #if !defined DEV_BSIZE && defined BBSIZE /* SGI */
286 # define DEV_BSIZE BBSIZE
289 # define DEV_BSIZE 4096
292 /* Extract or fake data from a `struct stat'.
293 ST_BLKSIZE: Preferred I/O blocksize for the file, in bytes.
294 ST_NBLOCKS: Number of blocks in the file, including indirect blocks.
295 ST_NBLOCKSIZE: Size of blocks used when calculating ST_NBLOCKS. */
296 #ifndef HAVE_STRUCT_STAT_ST_BLOCKS
297 # define ST_BLKSIZE(statbuf) DEV_BSIZE
298 # if defined _POSIX_SOURCE || !defined BSIZE /* fileblocks.c uses BSIZE. */
299 # define ST_NBLOCKS(statbuf) \
300 ((statbuf).st_size / ST_NBLOCKSIZE + ((statbuf).st_size % ST_NBLOCKSIZE != 0))
301 # else /* !_POSIX_SOURCE && BSIZE */
302 # define ST_NBLOCKS(statbuf) \
303 (S_ISREG ((statbuf).st_mode) \
304 || S_ISDIR ((statbuf).st_mode) \
305 ? st_blocks ((statbuf).st_size) : 0)
306 # endif /* !_POSIX_SOURCE && BSIZE */
307 #else /* HAVE_STRUCT_STAT_ST_BLOCKS */
308 /* Some systems, like Sequents, return st_blksize of 0 on pipes.
309 Also, when running `rsh hpux11-system cat any-file', cat would
310 determine that the output stream had an st_blksize of 2147421096.
311 So here we arbitrarily limit the `optimal' block size to 4MB.
312 If anyone knows of a system for which the legitimate value for
313 st_blksize can exceed 4MB, please report it as a bug in this code. */
314 # define ST_BLKSIZE(statbuf) ((0 < (statbuf).st_blksize \
315 && (statbuf).st_blksize <= (1 << 22)) /* 4MB */ \
316 ? (statbuf).st_blksize : DEV_BSIZE)
317 # if defined hpux || defined __hpux__ || defined __hpux
318 /* HP-UX counts st_blocks in 1024-byte units.
319 This loses when mixing HP-UX and BSD file systems with NFS. */
320 # define ST_NBLOCKSIZE 1024
322 # if defined _AIX && defined _I386
323 /* AIX PS/2 counts st_blocks in 4K units. */
324 # define ST_NBLOCKSIZE (4 * 1024)
325 # else /* not AIX PS/2 */
327 # define ST_NBLOCKS(statbuf) \
328 (S_ISREG ((statbuf).st_mode) \
329 || S_ISDIR ((statbuf).st_mode) \
330 ? (statbuf).st_blocks * ST_BLKSIZE(statbuf)/ST_NBLOCKSIZE : 0)
332 # endif /* not AIX PS/2 */
334 #endif /* HAVE_STRUCT_STAT_ST_BLOCKS */
337 # define ST_NBLOCKS(statbuf) ((statbuf).st_blocks)
340 #ifndef ST_NBLOCKSIZE
341 # define ST_NBLOCKSIZE 512
344 /* Redirection and wildcarding when done by the utility itself.
345 Generally a noop, but used in particular for native VMS. */
346 #ifndef initialize_main
347 # define initialize_main(ac, av)
350 #include "stat-macros.h"
352 #include "timespec.h"
355 # define RETSIGTYPE void
359 /* We need the declaration of setmode. */
361 /* We need the declaration of __djgpp_set_ctrl_c. */
362 # include <sys/exceptn.h>
366 # include <inttypes.h>
372 #if !defined PRIdMAX || PRI_MACROS_BROKEN
374 # define PRIdMAX (sizeof (uintmax_t) == sizeof (long int) ? "ld" : "lld")
376 #if !defined PRIoMAX || PRI_MACROS_BROKEN
378 # define PRIoMAX (sizeof (uintmax_t) == sizeof (long int) ? "lo" : "llo")
380 #if !defined PRIuMAX || PRI_MACROS_BROKEN
382 # define PRIuMAX (sizeof (uintmax_t) == sizeof (long int) ? "lu" : "llu")
384 #if !defined PRIxMAX || PRI_MACROS_BROKEN
386 # define PRIxMAX (sizeof (uintmax_t) == sizeof (long int) ? "lx" : "llx")
391 /* Jim Meyering writes:
393 "... Some ctype macros are valid only for character codes that
394 isascii says are ASCII (SGI's IRIX-4.0.5 is one such system --when
395 using /bin/cc or gcc but without giving an ansi option). So, all
396 ctype uses should be through macros like ISPRINT... If
397 STDC_HEADERS is defined, then autoconf has verified that the ctype
398 macros don't need to be guarded with references to isascii. ...
399 Defining isascii to 1 should let any compiler worth its salt
400 eliminate the && through constant folding."
404 "... Furthermore, isupper(c) etc. have an undefined result if c is
405 outside the range -1 <= c <= 255. One is tempted to write isupper(c)
406 with c being of type `char', but this is wrong if c is an 8-bit
407 character >= 128 which gets sign-extended to a negative value.
408 The macro ISUPPER protects against this as well." */
410 #if STDC_HEADERS || (!defined (isascii) && !HAVE_ISASCII)
411 # define IN_CTYPE_DOMAIN(c) 1
413 # define IN_CTYPE_DOMAIN(c) isascii(c)
417 # define ISBLANK(c) (IN_CTYPE_DOMAIN (c) && isblank (c))
419 # define ISBLANK(c) ((c) == ' ' || (c) == '\t')
422 # define ISGRAPH(c) (IN_CTYPE_DOMAIN (c) && isgraph (c))
424 # define ISGRAPH(c) (IN_CTYPE_DOMAIN (c) && isprint (c) && !isspace (c))
427 /* This is defined in <sys/euc.h> on at least Solaris2.6 systems. */
430 #define ISPRINT(c) (IN_CTYPE_DOMAIN (c) && isprint (c))
431 #define ISALNUM(c) (IN_CTYPE_DOMAIN (c) && isalnum (c))
432 #define ISALPHA(c) (IN_CTYPE_DOMAIN (c) && isalpha (c))
433 #define ISCNTRL(c) (IN_CTYPE_DOMAIN (c) && iscntrl (c))
434 #define ISLOWER(c) (IN_CTYPE_DOMAIN (c) && islower (c))
435 #define ISPUNCT(c) (IN_CTYPE_DOMAIN (c) && ispunct (c))
436 #define ISSPACE(c) (IN_CTYPE_DOMAIN (c) && isspace (c))
437 #define ISUPPER(c) (IN_CTYPE_DOMAIN (c) && isupper (c))
438 #define ISXDIGIT(c) (IN_CTYPE_DOMAIN (c) && isxdigit (c))
439 #define ISDIGIT_LOCALE(c) (IN_CTYPE_DOMAIN (c) && isdigit (c))
442 # define TOLOWER(Ch) tolower (Ch)
443 # define TOUPPER(Ch) toupper (Ch)
445 # define TOLOWER(Ch) (ISUPPER (Ch) ? tolower (Ch) : (Ch))
446 # define TOUPPER(Ch) (ISLOWER (Ch) ? toupper (Ch) : (Ch))
449 /* ISDIGIT differs from ISDIGIT_LOCALE, as follows:
450 - Its arg may be any int or unsigned int; it need not be an unsigned char.
451 - It's guaranteed to evaluate its argument exactly once.
452 - It's typically faster.
453 POSIX says that only '0' through '9' are digits. Prefer ISDIGIT to
454 ISDIGIT_LOCALE unless it's important to use the locale's definition
455 of `digit' even when the host does not conform to POSIX. */
456 #define ISDIGIT(c) ((unsigned int) (c) - '0' <= 9)
458 /* Convert a possibly-signed character to an unsigned character. This is
459 a bit safer than casting to unsigned char, since it catches some type
460 errors that the cast doesn't. */
461 static inline unsigned char to_uchar (char ch) { return ch; }
463 /* Take care of NLS matters. */
468 # define setlocale(Category, Locale) /* empty */
474 # define textdomain(Domainname) /* empty */
475 # undef bindtextdomain
476 # define bindtextdomain(Domainname, Dirname) /* empty */
479 #define _(msgid) gettext (msgid)
480 #define N_(msgid) msgid
482 #ifndef HAVE_SETLOCALE
483 # define HAVE_SETLOCALE 0
486 #define STREQ(a, b) (strcmp ((a), (b)) == 0)
492 #if !HAVE_DECL_MALLOC
496 #if !HAVE_DECL_MEMCHR
500 #if !HAVE_DECL_REALLOC
504 #if !HAVE_DECL_STPCPY
510 #if !HAVE_DECL_STRNDUP
514 #if !HAVE_DECL_STRSTR
518 #if !HAVE_DECL_GETENV
526 /* This is needed on some AIX systems. */
527 #if !HAVE_DECL_STRTOUL
528 unsigned long strtoul ();
531 #if !HAVE_DECL_GETLOGIN
535 #if !HAVE_DECL_TTYNAME
539 #if !HAVE_DECL_GETEUID
543 #if !HAVE_DECL_GETPWUID
544 struct passwd *getpwuid ();
547 #if !HAVE_DECL_GETGRGID
548 struct group *getgrgid ();
551 #if !HAVE_DECL_GETUID
557 #if ! defined HAVE_MEMPCPY && ! defined mempcpy
558 /* Be CAREFUL that there are no side effects in N. */
559 # define mempcpy(D, S, N) ((void *) ((char *) memcpy (D, S, N) + (N)))
562 /* Include automatically-generated macros for unlocked I/O. */
563 #include "unlocked-io.h"
565 #define SAME_INODE(Stat_buf_1, Stat_buf_2) \
566 ((Stat_buf_1).st_ino == (Stat_buf_2).st_ino \
567 && (Stat_buf_1).st_dev == (Stat_buf_2).st_dev)
569 #define DOT_OR_DOTDOT(Basename) \
570 (Basename[0] == '.' && (Basename[1] == '\0' \
571 || (Basename[1] == '.' && Basename[2] == '\0')))
573 /* A wrapper for readdir so that callers don't see entries for `.' or `..'. */
574 static inline struct dirent const *
575 readdir_ignoring_dot_and_dotdot (DIR *dirp)
579 struct dirent const *dp = readdir (dirp);
580 if (dp == NULL || ! DOT_OR_DOTDOT (dp->d_name))
586 # define SETVBUF(Stream, Buffer, Type, Size) \
587 setvbuf (Stream, Type, Buffer, Size)
589 # define SETVBUF(Stream, Buffer, Type, Size) \
590 setvbuf (Stream, Buffer, Type, Size)
593 /* Factor out some of the common --help and --version processing code. */
595 /* These enum values cannot possibly conflict with the option values
596 ordinarily used by commands, including CHAR_MAX + 1, etc. Avoid
597 CHAR_MIN - 1, as it may equal -1, the getopt end-of-options value. */
600 GETOPT_HELP_CHAR = (CHAR_MIN - 2),
601 GETOPT_VERSION_CHAR = (CHAR_MIN - 3)
604 #define GETOPT_HELP_OPTION_DECL \
605 "help", no_argument, 0, GETOPT_HELP_CHAR
606 #define GETOPT_VERSION_OPTION_DECL \
607 "version", no_argument, 0, GETOPT_VERSION_CHAR
609 #define case_GETOPT_HELP_CHAR \
610 case GETOPT_HELP_CHAR: \
611 usage (EXIT_SUCCESS); \
614 #define HELP_OPTION_DESCRIPTION \
615 _(" --help display this help and exit\n")
616 #define VERSION_OPTION_DESCRIPTION \
617 _(" --version output version information and exit\n")
619 #include "closeout.h"
620 #include "version-etc.h"
622 #define case_GETOPT_VERSION_CHAR(Program_name, Authors) \
623 case GETOPT_VERSION_CHAR: \
624 version_etc (stdout, Program_name, GNU_PACKAGE, VERSION, Authors, \
626 exit (EXIT_SUCCESS); \
630 # define MAX(a, b) ((a) > (b) ? (a) : (b))
634 # define MIN(a,b) (((a) < (b)) ? (a) : (b))
637 /* The extra casts work around common compiler bugs. */
638 #define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
639 /* The outer cast is needed to work around a bug in Cray C 5.0.3.0.
640 It is necessary at least when t == time_t. */
641 #define TYPE_MINIMUM(t) ((t) (TYPE_SIGNED (t) \
642 ? ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1) : (t) 0))
643 #define TYPE_MAXIMUM(t) ((t) (~ (t) 0 - TYPE_MINIMUM (t)))
645 /* Upper bound on the string length of an integer converted to string.
646 302 / 1000 is ceil (log10 (2.0)). Subtract 1 for the sign bit;
647 add 1 for integer division truncation; add 1 more for a minus sign. */
648 #define INT_STRLEN_BOUND(t) ((sizeof (t) * CHAR_BIT - 1) * 302 / 1000 + 2)
651 # define CHAR_MIN TYPE_MINIMUM (char)
655 # define CHAR_MAX TYPE_MAXIMUM (char)
659 # define SCHAR_MIN (-1 - SCHAR_MAX)
663 # define SCHAR_MAX (CHAR_MAX == UCHAR_MAX ? CHAR_MAX / 2 : CHAR_MAX)
667 # define UCHAR_MAX TYPE_MAXIMUM (unsigned char)
671 # define SHRT_MIN TYPE_MINIMUM (short int)
675 # define SHRT_MAX TYPE_MAXIMUM (short int)
679 # define INT_MAX TYPE_MAXIMUM (int)
683 # define INT_MIN TYPE_MINIMUM (int)
687 # define UINT_MAX TYPE_MAXIMUM (unsigned int)
691 # define LONG_MAX TYPE_MAXIMUM (long int)
695 # define ULONG_MAX TYPE_MAXIMUM (unsigned long int)
699 # define SIZE_MAX TYPE_MAXIMUM (size_t)
703 # define SSIZE_MAX TYPE_MAXIMUM (ssize_t)
707 # define UINTMAX_MAX TYPE_MAXIMUM (uintmax_t)
711 # define OFF_T_MIN TYPE_MINIMUM (off_t)
715 # define OFF_T_MAX TYPE_MAXIMUM (off_t)
719 # define UID_T_MAX TYPE_MAXIMUM (uid_t)
723 # define GID_T_MAX TYPE_MAXIMUM (gid_t)
727 # define PID_T_MAX TYPE_MAXIMUM (pid_t)
730 /* Use this to suppress gcc's `...may be used before initialized' warnings. */
732 # define IF_LINT(Code) Code
734 # define IF_LINT(Code) /* empty */
737 #ifndef __attribute__
738 # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) || __STRICT_ANSI__
739 # define __attribute__(x)
743 #ifndef ATTRIBUTE_NORETURN
744 # define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
747 #ifndef ATTRIBUTE_UNUSED
748 # define ATTRIBUTE_UNUSED __attribute__ ((__unused__))
752 # define ASSIGN_STRDUPA(DEST, S) \
753 do { DEST = strdupa (S); } while (0)
755 # define ASSIGN_STRDUPA(DEST, S) \
758 const char *s_ = (S); \
759 size_t len_ = strlen (s_) + 1; \
760 char *tmp_dest_ = alloca (len_); \
761 DEST = memcpy (tmp_dest_, (s_), len_); \
767 # define EOVERFLOW EINVAL
770 #if ! HAVE_FSEEKO && ! defined fseeko
771 # define fseeko(s, o, w) ((o) == (long int) (o) \
773 : (errno = EOVERFLOW, -1))
776 /* Compute the greatest common divisor of U and V using Euclid's
777 algorithm. U and V must be nonzero. */
780 gcd (size_t u, size_t v)
793 /* Compute the least common multiple of U and V. U and V must be
794 nonzero. There is no overflow checking, so callers should not
795 specify outlandish sizes. */
798 lcm (size_t u, size_t v)
800 return u * (v / gcd (u, v));
803 /* Return PTR, aligned upward to the next multiple of ALIGNMENT.
804 ALIGNMENT must be nonzero. The caller must arrange for ((char *)
805 PTR) through ((char *) PTR + ALIGNMENT - 1) to be addressable
809 ptr_align (void *ptr, size_t alignment)
812 char *p1 = p0 + alignment - 1;
813 return p1 - (uintptr_t) p1 % alignment;