1 /* system-dependent definitions for fileutils programs.
2 Copyright (C) 89, 91, 92, 93, 1994 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
16 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
18 /* Include sys/types.h before this file. */
22 #ifdef STAT_MACROS_BROKEN
33 #endif /* STAT_MACROS_BROKEN. */
36 #define S_IFMT 0170000
38 #if !defined(S_ISBLK) && defined(S_IFBLK)
39 #define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
41 #if !defined(S_ISCHR) && defined(S_IFCHR)
42 #define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
44 #if !defined(S_ISDIR) && defined(S_IFDIR)
45 #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
47 #if !defined(S_ISREG) && defined(S_IFREG)
48 #define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
50 #if !defined(S_ISFIFO) && defined(S_IFIFO)
51 #define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
53 #if !defined(S_ISLNK) && defined(S_IFLNK)
54 #define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
56 #if !defined(S_ISSOCK) && defined(S_IFSOCK)
57 #define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
59 #if !defined(S_ISMPB) && defined(S_IFMPB) /* V7 */
60 #define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB)
61 #define S_ISMPC(m) (((m) & S_IFMT) == S_IFMPC)
63 #if !defined(S_ISNWK) && defined(S_IFNWK) /* HP/UX */
64 #define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK)
68 #define S_IEXEC S_IXUSR
73 #define S_IXUSR S_IEXEC
76 #define S_IXGRP (S_IEXEC >> 3)
79 #define S_IXOTH (S_IEXEC >> 6)
83 #if !defined(HAVE_MKFIFO)
84 #define mkfifo(path, mode) (mknod ((path), (mode) | S_IFIFO, 0))
87 #ifdef HAVE_SYS_PARAM_H
88 #include <sys/param.h>
91 /* <unistd.h> should be included before any preprocessor test
98 #define STDIN_FILENO 0
101 #ifndef STDOUT_FILENO
102 #define STDOUT_FILENO 1
105 #ifndef STDERR_FILENO
106 #define STDERR_FILENO 2
111 /* FIXME: Don't use _POSIX_VERSION. */
112 #ifndef _POSIX_VERSION
116 #ifdef TM_IN_SYS_TIME
117 #include <sys/time.h>
122 /* Since major is a function on SVR4, we can't use `ifndef major'. */
123 #ifdef MAJOR_IN_MKDEV
124 #include <sys/mkdev.h>
127 #ifdef MAJOR_IN_SYSMACROS
128 #include <sys/sysmacros.h>
131 #ifdef major /* Might be defined in sys/types.h. */
136 #define major(dev) (((dev) >> 8) & 0xff)
137 #define minor(dev) ((dev) & 0xff)
138 #define makedev(maj, min) (((maj) << 8) | (min))
152 /* Don't use bcopy! Use memmove if source and destination may overlap,
156 # if !STDC_HEADERS && HAVE_MEMORY_H
161 # include <strings.h>
171 #define getopt system_getopt
174 #else /* not STDC_HEADERS */
176 #endif /* STDC_HEADERS */
181 #include <sys/file.h>
198 # define NLENGTH(direct) (strlen((direct)->d_name))
199 #else /* not HAVE_DIRENT_H */
200 # define dirent direct
201 # define NLENGTH(direct) ((direct)->d_namlen)
202 # ifdef HAVE_SYS_NDIR_H
203 # include <sys/ndir.h>
204 # endif /* HAVE_SYS_NDIR_H */
205 # ifdef HAVE_SYS_DIR_H
206 # include <sys/dir.h>
207 # endif /* HAVE_SYS_DIR_H */
210 # endif /* HAVE_NDIR_H */
211 #endif /* HAVE_DIRENT_H */
214 /* Fake a return value. */
215 #define CLOSEDIR(d) (closedir (d), 0)
217 #define CLOSEDIR(d) closedir (d)
220 /* Get or fake the disk device blocksize.
221 Usually defined by sys/param.h (if at all). */
224 #define DEV_BSIZE BSIZE
226 #define DEV_BSIZE 4096
228 #endif /* !DEV_BSIZE */
230 /* Extract or fake data from a `struct stat'.
231 ST_BLKSIZE: Optimal I/O blocksize for the file, in bytes.
232 ST_NBLOCKS: Number of 512-byte blocks in the file
233 (including indirect blocks). */
234 #ifndef HAVE_ST_BLOCKS
235 # define ST_BLKSIZE(statbuf) DEV_BSIZE
236 # if defined(_POSIX_SOURCE) || !defined(BSIZE) /* fileblocks.c uses BSIZE. */
237 # define ST_NBLOCKS(statbuf) (((statbuf).st_size + 512 - 1) / 512)
238 # else /* !_POSIX_SOURCE && BSIZE */
239 # define ST_NBLOCKS(statbuf) (st_blocks ((statbuf).st_size))
240 # endif /* !_POSIX_SOURCE && BSIZE */
241 #else /* HAVE_ST_BLOCKS */
242 /* Some systems, like Sequents, return st_blksize of 0 on pipes. */
243 # define ST_BLKSIZE(statbuf) ((statbuf).st_blksize > 0 \
244 ? (statbuf).st_blksize : DEV_BSIZE)
245 # if defined(hpux) || defined(__hpux__) || defined(__hpux)
246 /* HP-UX counts st_blocks in 1024-byte units.
247 This loses when mixing HP-UX and BSD filesystems with NFS. */
248 # define ST_NBLOCKS(statbuf) ((statbuf).st_blocks * 2)
250 # if defined(_AIX) && defined(_I386)
251 /* AIX PS/2 counts st_blocks in 4K units. */
252 # define ST_NBLOCKS(statbuf) ((statbuf).st_blocks * 8)
253 # else /* not AIX PS/2 */
254 # define ST_NBLOCKS(statbuf) ((statbuf).st_blocks)
255 # endif /* not AIX PS/2 */
257 #endif /* HAVE_ST_BLOCKS */
259 /* Convert B 512-byte blocks to kilobytes if K is nonzero,
260 otherwise return it unchanged. */
261 #define convert_blocks(b, k) ((k) ? ((b) + 1) / 2 : (b))
264 #define RETSIGTYPE void
269 # define alloca __builtin_alloca
271 # ifdef HAVE_ALLOCA_H
275 /* AIX alloca decl has to be the first thing in the file, bletch! */
283 #if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII))
286 #define ISASCII(c) isascii(c)
290 #define ISBLANK(c) (ISASCII (c) && isblank (c))
292 #define ISBLANK(c) ((c) == ' ' || (c) == '\t')
295 #define ISGRAPH(c) (ISASCII (c) && isgraph (c))
297 #define ISGRAPH(c) (ISASCII (c) && isprint (c) && !isspace (c))
300 #define ISPRINT(c) (ISASCII (c) && isprint (c))
301 #define ISDIGIT(c) (ISASCII (c) && isdigit (c))
302 #define ISALNUM(c) (ISASCII (c) && isalnum (c))
303 #define ISALPHA(c) (ISASCII (c) && isalpha (c))
304 #define ISCNTRL(c) (ISASCII (c) && iscntrl (c))
305 #define ISLOWER(c) (ISASCII (c) && islower (c))
306 #define ISPUNCT(c) (ISASCII (c) && ispunct (c))
307 #define ISSPACE(c) (ISASCII (c) && isspace (c))
308 #define ISUPPER(c) (ISASCII (c) && isupper (c))
309 #define ISXDIGIT(c) (ISASCII (c) && isxdigit (c))