10b459c2cSDavid du Colombier /* System dependent declarations. 20b459c2cSDavid du Colombier Copyright (C) 1988, 1989, 1992, 1993, 1994 Free Software Foundation, Inc. 30b459c2cSDavid du Colombier 40b459c2cSDavid du Colombier This file is part of GNU DIFF. 50b459c2cSDavid du Colombier 60b459c2cSDavid du Colombier GNU DIFF is free software; you can redistribute it and/or modify 70b459c2cSDavid du Colombier it under the terms of the GNU General Public License as published by 80b459c2cSDavid du Colombier the Free Software Foundation; either version 2, or (at your option) 90b459c2cSDavid du Colombier any later version. 100b459c2cSDavid du Colombier 110b459c2cSDavid du Colombier GNU DIFF is distributed in the hope that it will be useful, 120b459c2cSDavid du Colombier but WITHOUT ANY WARRANTY; without even the implied warranty of 130b459c2cSDavid du Colombier MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 140b459c2cSDavid du Colombier GNU General Public License for more details. 150b459c2cSDavid du Colombier 160b459c2cSDavid du Colombier You should have received a copy of the GNU General Public License 170b459c2cSDavid du Colombier along with GNU DIFF; see the file COPYING. If not, write to 180b459c2cSDavid du Colombier the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ 190b459c2cSDavid du Colombier 200b459c2cSDavid du Colombier /* We must define `volatile' and `const' first (the latter inside config.h), 210b459c2cSDavid du Colombier so that they're used consistently in all system includes. */ 220b459c2cSDavid du Colombier #if !__STDC__ 230b459c2cSDavid du Colombier #ifndef volatile 240b459c2cSDavid du Colombier #define volatile 250b459c2cSDavid du Colombier #endif 260b459c2cSDavid du Colombier #endif 270b459c2cSDavid du Colombier #include <config.h> 280b459c2cSDavid du Colombier 290b459c2cSDavid du Colombier #include <sys/types.h> 300b459c2cSDavid du Colombier #include <sys/stat.h> 310b459c2cSDavid du Colombier 320b459c2cSDavid du Colombier #if __STDC__ 330b459c2cSDavid du Colombier #define PARAMS(args) args 340b459c2cSDavid du Colombier #define VOID void 350b459c2cSDavid du Colombier #else 360b459c2cSDavid du Colombier #define PARAMS(args) () 370b459c2cSDavid du Colombier #define VOID char 380b459c2cSDavid du Colombier #endif 390b459c2cSDavid du Colombier 400b459c2cSDavid du Colombier #if STAT_MACROS_BROKEN 410b459c2cSDavid du Colombier #undef S_ISBLK 420b459c2cSDavid du Colombier #undef S_ISCHR 430b459c2cSDavid du Colombier #undef S_ISDIR 440b459c2cSDavid du Colombier #undef S_ISFIFO 450b459c2cSDavid du Colombier #undef S_ISREG 460b459c2cSDavid du Colombier #undef S_ISSOCK 470b459c2cSDavid du Colombier #endif 480b459c2cSDavid du Colombier #ifndef S_ISDIR 490b459c2cSDavid du Colombier #define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR) 500b459c2cSDavid du Colombier #endif 510b459c2cSDavid du Colombier #ifndef S_ISREG 520b459c2cSDavid du Colombier #define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG) 530b459c2cSDavid du Colombier #endif 540b459c2cSDavid du Colombier #if !defined(S_ISBLK) && defined(S_IFBLK) 550b459c2cSDavid du Colombier #define S_ISBLK(mode) (((mode) & S_IFMT) == S_IFBLK) 560b459c2cSDavid du Colombier #endif 570b459c2cSDavid du Colombier #if !defined(S_ISCHR) && defined(S_IFCHR) 580b459c2cSDavid du Colombier #define S_ISCHR(mode) (((mode) & S_IFMT) == S_IFCHR) 590b459c2cSDavid du Colombier #endif 600b459c2cSDavid du Colombier #if !defined(S_ISFIFO) && defined(S_IFFIFO) 610b459c2cSDavid du Colombier #define S_ISFIFO(mode) (((mode) & S_IFMT) == S_IFFIFO) 620b459c2cSDavid du Colombier #endif 630b459c2cSDavid du Colombier #if !defined(S_ISSOCK) && defined(S_IFSOCK) 640b459c2cSDavid du Colombier #define S_ISSOCK(mode) (((mode) & S_IFMT) == S_IFSOCK) 650b459c2cSDavid du Colombier #endif 660b459c2cSDavid du Colombier 670b459c2cSDavid du Colombier #if HAVE_UNISTD_H 680b459c2cSDavid du Colombier #include <unistd.h> 690b459c2cSDavid du Colombier #endif 700b459c2cSDavid du Colombier 710b459c2cSDavid du Colombier #ifndef SEEK_SET 720b459c2cSDavid du Colombier #define SEEK_SET 0 730b459c2cSDavid du Colombier #endif 740b459c2cSDavid du Colombier #ifndef SEEK_CUR 750b459c2cSDavid du Colombier #define SEEK_CUR 1 760b459c2cSDavid du Colombier #endif 770b459c2cSDavid du Colombier 780b459c2cSDavid du Colombier #ifndef STDIN_FILENO 790b459c2cSDavid du Colombier #define STDIN_FILENO 0 800b459c2cSDavid du Colombier #endif 810b459c2cSDavid du Colombier #ifndef STDOUT_FILENO 820b459c2cSDavid du Colombier #define STDOUT_FILENO 1 830b459c2cSDavid du Colombier #endif 840b459c2cSDavid du Colombier #ifndef STDERR_FILENO 850b459c2cSDavid du Colombier #define STDERR_FILENO 2 860b459c2cSDavid du Colombier #endif 870b459c2cSDavid du Colombier 880b459c2cSDavid du Colombier #if HAVE_TIME_H 890b459c2cSDavid du Colombier #include <time.h> 900b459c2cSDavid du Colombier #else 910b459c2cSDavid du Colombier #include <sys/time.h> 920b459c2cSDavid du Colombier #endif 930b459c2cSDavid du Colombier 940b459c2cSDavid du Colombier #if HAVE_FCNTL_H 950b459c2cSDavid du Colombier #include <fcntl.h> 960b459c2cSDavid du Colombier #else 970b459c2cSDavid du Colombier #if HAVE_SYS_FILE_H 980b459c2cSDavid du Colombier #include <sys/file.h> 990b459c2cSDavid du Colombier #endif 1000b459c2cSDavid du Colombier #endif 1010b459c2cSDavid du Colombier 1020b459c2cSDavid du Colombier #if !HAVE_DUP2 1030b459c2cSDavid du Colombier #define dup2(f,t) (close (t), fcntl (f,F_DUPFD,t)) 1040b459c2cSDavid du Colombier #endif 1050b459c2cSDavid du Colombier 1060b459c2cSDavid du Colombier #ifndef O_RDONLY 1070b459c2cSDavid du Colombier #define O_RDONLY 0 1080b459c2cSDavid du Colombier #endif 1090b459c2cSDavid du Colombier 1100b459c2cSDavid du Colombier #if HAVE_SYS_WAIT_H 1110b459c2cSDavid du Colombier #include <sys/wait.h> 1120b459c2cSDavid du Colombier #endif 1130b459c2cSDavid du Colombier #ifndef WEXITSTATUS 1140b459c2cSDavid du Colombier #define WEXITSTATUS(stat_val) ((unsigned) (stat_val) >> 8) 1150b459c2cSDavid du Colombier #endif 1160b459c2cSDavid du Colombier #ifndef WIFEXITED 1170b459c2cSDavid du Colombier #define WIFEXITED(stat_val) (((stat_val) & 255) == 0) 1180b459c2cSDavid du Colombier #endif 1190b459c2cSDavid du Colombier 1200b459c2cSDavid du Colombier #ifndef STAT_BLOCKSIZE 1210b459c2cSDavid du Colombier #if HAVE_ST_BLKSIZE 1220b459c2cSDavid du Colombier #define STAT_BLOCKSIZE(s) (s).st_blksize 1230b459c2cSDavid du Colombier #else 1240b459c2cSDavid du Colombier #define STAT_BLOCKSIZE(s) (8 * 1024) 1250b459c2cSDavid du Colombier #endif 1260b459c2cSDavid du Colombier #endif 1270b459c2cSDavid du Colombier 1280b459c2cSDavid du Colombier #if HAVE_DIRENT_H 1290b459c2cSDavid du Colombier # include <dirent.h> 1300b459c2cSDavid du Colombier # define NAMLEN(dirent) strlen((dirent)->d_name) 1310b459c2cSDavid du Colombier #else 1320b459c2cSDavid du Colombier # define dirent direct 1330b459c2cSDavid du Colombier # define NAMLEN(dirent) ((dirent)->d_namlen) 1340b459c2cSDavid du Colombier # if HAVE_SYS_NDIR_H 1350b459c2cSDavid du Colombier # include <sys/ndir.h> 1360b459c2cSDavid du Colombier # endif 1370b459c2cSDavid du Colombier # if HAVE_SYS_DIR_H 1380b459c2cSDavid du Colombier # include <sys/dir.h> 1390b459c2cSDavid du Colombier # endif 1400b459c2cSDavid du Colombier # if HAVE_NDIR_H 1410b459c2cSDavid du Colombier # include <ndir.h> 1420b459c2cSDavid du Colombier # endif 1430b459c2cSDavid du Colombier #endif 1440b459c2cSDavid du Colombier 1450b459c2cSDavid du Colombier #if HAVE_VFORK_H 1460b459c2cSDavid du Colombier #include <vfork.h> 1470b459c2cSDavid du Colombier #endif 1480b459c2cSDavid du Colombier 1490b459c2cSDavid du Colombier #if HAVE_STDLIB_H 1500b459c2cSDavid du Colombier #include <stdlib.h> 1510b459c2cSDavid du Colombier #else 1520b459c2cSDavid du Colombier VOID *malloc (); 1530b459c2cSDavid du Colombier VOID *realloc (); 1540b459c2cSDavid du Colombier #endif 1550b459c2cSDavid du Colombier #ifndef getenv 1560b459c2cSDavid du Colombier char *getenv (); 1570b459c2cSDavid du Colombier #endif 1580b459c2cSDavid du Colombier 1590b459c2cSDavid du Colombier #if HAVE_LIMITS_H 1600b459c2cSDavid du Colombier #include <limits.h> 1610b459c2cSDavid du Colombier #endif 1620b459c2cSDavid du Colombier #ifndef INT_MAX 1630b459c2cSDavid du Colombier #define INT_MAX 2147483647 1640b459c2cSDavid du Colombier #endif 1650b459c2cSDavid du Colombier #ifndef CHAR_BIT 1660b459c2cSDavid du Colombier #define CHAR_BIT 8 1670b459c2cSDavid du Colombier #endif 1680b459c2cSDavid du Colombier 1690b459c2cSDavid du Colombier #if STDC_HEADERS || HAVE_STRING_H 1700b459c2cSDavid du Colombier # include <string.h> 1710b459c2cSDavid du Colombier # ifndef bzero 1720b459c2cSDavid du Colombier # define bzero(s, n) memset (s, 0, n) 1730b459c2cSDavid du Colombier # endif 1740b459c2cSDavid du Colombier #else 1750b459c2cSDavid du Colombier # if !HAVE_STRCHR 1760b459c2cSDavid du Colombier # define strchr index 1770b459c2cSDavid du Colombier # define strrchr rindex 1780b459c2cSDavid du Colombier # endif 1790b459c2cSDavid du Colombier char *strchr (), *strrchr (); 1800b459c2cSDavid du Colombier # if !HAVE_MEMCHR 1810b459c2cSDavid du Colombier # define memcmp(s1, s2, n) bcmp (s1, s2, n) 1820b459c2cSDavid du Colombier # define memcpy(d, s, n) bcopy (s, d, n) 1830b459c2cSDavid du Colombier void *memchr (); 1840b459c2cSDavid du Colombier # endif 1850b459c2cSDavid du Colombier #endif 1860b459c2cSDavid du Colombier 1870b459c2cSDavid du Colombier #include <ctype.h> 1880b459c2cSDavid du Colombier /* CTYPE_DOMAIN (C) is nonzero if the unsigned char C can safely be given 1890b459c2cSDavid du Colombier as an argument to <ctype.h> macros like `isspace'. */ 1900b459c2cSDavid du Colombier #if STDC_HEADERS 1910b459c2cSDavid du Colombier #define CTYPE_DOMAIN(c) 1 1920b459c2cSDavid du Colombier #else 1930b459c2cSDavid du Colombier #define CTYPE_DOMAIN(c) ((unsigned) (c) <= 0177) 1940b459c2cSDavid du Colombier #endif 1950b459c2cSDavid du Colombier #ifndef ISPRINT 1960b459c2cSDavid du Colombier #define ISPRINT(c) (CTYPE_DOMAIN (c) && isprint (c)) 1970b459c2cSDavid du Colombier #endif 1980b459c2cSDavid du Colombier #ifndef ISSPACE 1990b459c2cSDavid du Colombier #define ISSPACE(c) (CTYPE_DOMAIN (c) && isspace (c)) 2000b459c2cSDavid du Colombier #endif 2010b459c2cSDavid du Colombier #ifndef ISUPPER 2020b459c2cSDavid du Colombier #define ISUPPER(c) (CTYPE_DOMAIN (c) && isupper (c)) 2030b459c2cSDavid du Colombier #endif 2040b459c2cSDavid du Colombier 2050b459c2cSDavid du Colombier #ifndef ISDIGIT 2060b459c2cSDavid du Colombier #define ISDIGIT(c) ((unsigned) (c) - '0' <= 9) 2070b459c2cSDavid du Colombier #endif 2080b459c2cSDavid du Colombier 2090b459c2cSDavid du Colombier #include <errno.h> 2100b459c2cSDavid du Colombier #if !STDC_HEADERS 2110b459c2cSDavid du Colombier extern int errno; 2120b459c2cSDavid du Colombier #endif 2130b459c2cSDavid du Colombier 2140b459c2cSDavid du Colombier #ifdef min 2150b459c2cSDavid du Colombier #undef min 2160b459c2cSDavid du Colombier #endif 2170b459c2cSDavid du Colombier #ifdef max 2180b459c2cSDavid du Colombier #undef max 2190b459c2cSDavid du Colombier #endif 2200b459c2cSDavid du Colombier #define min(a,b) ((a) <= (b) ? (a) : (b)) 2210b459c2cSDavid du Colombier #define max(a,b) ((a) >= (b) ? (a) : (b)) 2220b459c2cSDavid du Colombier 2230b459c2cSDavid du Colombier /* This section contains Posix-compliant defaults for macros 2240b459c2cSDavid du Colombier that are meant to be overridden by hand in config.h as needed. */ 2250b459c2cSDavid du Colombier 2260b459c2cSDavid du Colombier #ifndef filename_cmp 2270b459c2cSDavid du Colombier #define filename_cmp(a, b) strcmp (a, b) 2280b459c2cSDavid du Colombier #endif 2290b459c2cSDavid du Colombier 2300b459c2cSDavid du Colombier #ifndef filename_lastdirchar 2310b459c2cSDavid du Colombier #define filename_lastdirchar(filename) strrchr (filename, '/') 2320b459c2cSDavid du Colombier #endif 2330b459c2cSDavid du Colombier 2340b459c2cSDavid du Colombier #ifndef HAVE_FORK 2350b459c2cSDavid du Colombier #define HAVE_FORK 1 2360b459c2cSDavid du Colombier #endif 2370b459c2cSDavid du Colombier 2380b459c2cSDavid du Colombier #ifndef HAVE_SETMODE 2390b459c2cSDavid du Colombier #define HAVE_SETMODE 0 2400b459c2cSDavid du Colombier #endif 2410b459c2cSDavid du Colombier 2420b459c2cSDavid du Colombier #ifndef initialize_main 2430b459c2cSDavid du Colombier #define initialize_main(argcp, argvp) 2440b459c2cSDavid du Colombier #endif 2450b459c2cSDavid du Colombier 2460b459c2cSDavid du Colombier /* Do struct stat *S, *T describe the same file? Answer -1 if unknown. */ 2470b459c2cSDavid du Colombier #ifndef same_file 248*f5692daaSDavid du Colombier /* #define same_file(s,t) ((s)->st_ino==(t)->st_ino && (s)->st_dev==(t)->st_dev) */ 249*f5692daaSDavid du Colombier #define same_file(s,t) 0 2500b459c2cSDavid du Colombier #endif 2510b459c2cSDavid du Colombier 2520b459c2cSDavid du Colombier /* Place into Q a quoted version of A suitable for `popen' or `system', 2530b459c2cSDavid du Colombier incrementing Q and junking A. 2540b459c2cSDavid du Colombier Do not increment Q by more than 4 * strlen (A) + 2. */ 2550b459c2cSDavid du Colombier #ifndef SYSTEM_QUOTE_ARG 2560b459c2cSDavid du Colombier #define SYSTEM_QUOTE_ARG(q, a) \ 2570b459c2cSDavid du Colombier { \ 2580b459c2cSDavid du Colombier *(q)++ = '\''; \ 2590b459c2cSDavid du Colombier for (; *(a); *(q)++ = *(a)++) \ 2600b459c2cSDavid du Colombier if (*(a) == '\'') \ 2610b459c2cSDavid du Colombier { \ 2620b459c2cSDavid du Colombier *(q)++ = '\''; \ 2630b459c2cSDavid du Colombier *(q)++ = '\\'; \ 2640b459c2cSDavid du Colombier *(q)++ = '\''; \ 2650b459c2cSDavid du Colombier } \ 2660b459c2cSDavid du Colombier *(q)++ = '\''; \ 2670b459c2cSDavid du Colombier } 2680b459c2cSDavid du Colombier #endif 2690b459c2cSDavid du Colombier #ifndef FOLD_FN_CHAR 2700b459c2cSDavid du Colombier #define FOLD_FN_CHAR(c) (c) 2710b459c2cSDavid du Colombier #define fnfold(filename) (filename) 2720b459c2cSDavid du Colombier #define fncmp strcmp 2730b459c2cSDavid du Colombier #endif 274