From: Sergey Poznyakoff Date: Sat, 4 Oct 2003 18:13:51 +0000 (+0000) Subject: (SET_BINARY_MODE, ERRNO_IS_EACCESS): New defines X-Git-Url: https://git.dogcows.com/gitweb?a=commitdiff_plain;h=3b76d26206a1c3e7b2c6dde68571eb31b7c9b173;p=chaz%2Ftar (SET_BINARY_MODE, ERRNO_IS_EACCESS): New defines --- diff --git a/src/system.h b/src/system.h index 0aceb69..9fd1c1b 100644 --- a/src/system.h +++ b/src/system.h @@ -1,5 +1,7 @@ /* System dependent definitions for GNU tar. - Copyright (C) 1994, 1995, 1996, 1997 Free Software Foundation, Inc. + + Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2003 + Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -20,51 +22,31 @@ # include #endif -/* Declare alloca. AIX requires this to be the first thing in the file. */ +#include -#if __GNUC__ -# define alloca __builtin_alloca -#else -# if HAVE_ALLOCA_H -# include -# else -# ifdef _AIX - #pragma alloca -# else -# ifndef alloca -char *alloca (); -# endif -# endif +#ifndef __attribute__ +/* This feature is available in gcc versions 2.5 and later. */ +# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__ +# define __attribute__(Spec) /* empty */ # endif #endif #include - -/* Declare a generic pointer type. */ -#if __STDC__ || defined(__TURBOC__) -# define voidstar void * -#else -# define voidstar char * -#endif - -/* Declare ISASCII. */ - #include +/* IN_CTYPE_DOMAIN (C) is nonzero if the unsigned char C can safely be given + as an argument to macros like `isspace'. */ #if STDC_HEADERS -# define ISASCII(Char) 1 +# define IN_CTYPE_DOMAIN(c) 1 #else -# ifdef isascii -# define ISASCII(Char) isascii (Char) -# else -# if HAVE_ISASCII -# define ISASCII(Char) isascii (Char) -# else -# define ISASCII(Char) 1 -# endif -# endif +# define IN_CTYPE_DOMAIN(c) ((unsigned) (c) <= 0177) #endif +#define ISDIGIT(c) ((unsigned) (c) - '0' <= 9) +#define ISODIGIT(c) ((unsigned) (c) - '0' <= 7) +#define ISPRINT(c) (IN_CTYPE_DOMAIN (c) && isprint (c)) +#define ISSPACE(c) (IN_CTYPE_DOMAIN (c) && isspace (c)) + /* Declare string and memory handling routines. Take care that an ANSI string.h and pre-ANSI memory.h might conflict, and that memory.h and strings.h conflict on some systems. */ @@ -83,10 +65,10 @@ char *alloca (); # define strrchr rindex # endif # ifndef memcpy -# define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num) +# define memcpy(d, s, n) bcopy ((char const *) (s), (char *) (d), n) # endif # ifndef memcmp -# define memcmp(Src1, Src2, Num) bcmp (Src1, Src2, Num) +# define memcmp(a, b, n) bcmp ((char const *) (a), (char const *) (b), n) # endif #endif @@ -114,10 +96,10 @@ extern int errno; #ifndef O_RDWR # define O_RDWR 2 /* both are allowed */ #endif - /* The rest can be OR-ed in to the above: */ -#ifndef O_NDELAY -# define O_NDELAY 4 /* don't block on opening devices */ +#ifndef O_ACCMODE +# define O_ACCMODE (O_RDONLY | O_RDWR | O_WRONLY) #endif + /* The rest can be OR-ed in to the above: */ #ifndef O_CREAT # define O_CREAT 8 /* create file if needed */ #endif @@ -126,36 +108,38 @@ extern int errno; #endif #ifndef O_TRUNC # define O_TRUNC 32 /* truncate file on open */ -#endif -#ifndef O_APPEND -# define O_APPEND 64 /* always write at end of file */ #endif /* MS-DOG forever, with my love! */ #ifndef O_BINARY # define O_BINARY 0 -#endif - /* Emulate System V 3-argument open call */ -#if EMUL_OPEN3 -# define open open3 #endif /* Declare file status routines and bits. */ #include -#ifndef S_ISLNK +#if !HAVE_LSTAT && !defined lstat # define lstat stat #endif +#if STX_HIDDEN && !_LARGE_FILES /* AIX */ +# ifdef stat +# undef stat +# endif +# define stat(path, buf) statx (path, buf, STATSIZE, STX_HIDDEN) +# ifdef lstat +# undef lstat +# endif +# define lstat(path, buf) statx (path, buf, STATSIZE, STX_HIDDEN | STX_LINK) +#endif + #if STAT_MACROS_BROKEN # undef S_ISBLK # undef S_ISCHR +# undef S_ISCTG # undef S_ISDIR # undef S_ISFIFO # undef S_ISLNK -# undef S_ISMPB -# undef S_ISMPC -# undef S_ISNWK # undef S_ISREG # undef S_ISSOCK #endif @@ -167,58 +151,131 @@ extern int errno; # define S_ISVTX 0 #endif -#ifndef S_ISREG /* POSIX.1 stat stuff missing */ -# define mode_t unsigned short -#endif -#if !defined(S_ISBLK) && defined(S_IFBLK) -# define S_ISBLK(Mode) (((Mode) & S_IFMT) == S_IFBLK) -#endif -#if !defined(S_ISCHR) && defined(S_IFCHR) -# define S_ISCHR(Mode) (((Mode) & S_IFMT) == S_IFCHR) -#endif -#if !defined(S_ISDIR) && defined(S_IFDIR) +#ifndef S_ISDIR # define S_ISDIR(Mode) (((Mode) & S_IFMT) == S_IFDIR) #endif -#if !defined(S_ISREG) && defined(S_IFREG) +#ifndef S_ISREG # define S_ISREG(Mode) (((Mode) & S_IFMT) == S_IFREG) #endif -#if !defined(S_ISFIFO) && defined(S_IFIFO) -# define S_ISFIFO(Mode) (((Mode) & S_IFMT) == S_IFIFO) + +#ifndef S_ISBLK +# ifdef S_IFBLK +# define S_ISBLK(Mode) (((Mode) & S_IFMT) == S_IFBLK) +# else +# define S_ISBLK(Mode) 0 +# endif +#endif +#ifndef S_ISCHR +# ifdef S_IFCHR +# define S_ISCHR(Mode) (((Mode) & S_IFMT) == S_IFCHR) +# else +# define S_ISCHR(Mode) 0 +# endif +#endif +#ifndef S_ISCTG +# ifdef S_IFCTG +# define S_ISCTG(Mode) (((Mode) & S_IFMT) == S_IFCTG) +# else +# define S_ISCTG(Mode) 0 +# endif #endif -#if !defined(S_ISLNK) && defined(S_IFLNK) -# define S_ISLNK(Mode) (((Mode) & S_IFMT) == S_IFLNK) +#ifndef S_ISDOOR +# define S_ISDOOR(Mode) 0 #endif -#if !defined(S_ISSOCK) && defined(S_IFSOCK) -# define S_ISSOCK(Mode) (((Mode) & S_IFMT) == S_IFSOCK) +#ifndef S_ISFIFO +# ifdef S_IFIFO +# define S_ISFIFO(Mode) (((Mode) & S_IFMT) == S_IFIFO) +# else +# define S_ISFIFO(Mode) 0 +# endif #endif -#if !defined(S_ISMPB) && defined(S_IFMPB) /* V7 */ -# define S_ISMPB(Mode) (((Mode) & S_IFMT) == S_IFMPB) -# define S_ISMPC(Mode) (((Mode) & S_IFMT) == S_IFMPC) +#ifndef S_ISLNK +# ifdef S_IFLNK +# define S_ISLNK(Mode) (((Mode) & S_IFMT) == S_IFLNK) +# else +# define S_ISLNK(Mode) 0 +# endif #endif -#if !defined(S_ISNWK) && defined(S_IFNWK) /* HP/UX */ -# define S_ISNWK(Mode) (((Mode) & S_IFMT) == S_IFNWK) +#ifndef S_ISSOCK +# ifdef S_IFSOCK +# define S_ISSOCK(Mode) (((Mode) & S_IFMT) == S_IFSOCK) +# else +# define S_ISSOCK(Mode) 0 +# endif #endif -#if !HAVE_MKFIFO +#if !HAVE_MKFIFO && !defined mkfifo && defined S_IFIFO # define mkfifo(Path, Mode) (mknod (Path, (Mode) | S_IFIFO, 0)) #endif -#if !defined(S_ISCTG) && defined(S_IFCTG) /* contiguous file */ -# define S_ISCTG(Mode) (((Mode) & S_IFMT) == S_IFCTG) +#ifndef S_ISUID +# define S_ISUID 0004000 #endif -#if !defined(S_ISVTX) +#ifndef S_ISGID +# define S_ISGID 0002000 +#endif +#ifndef S_ISVTX # define S_ISVTX 0001000 #endif - -#ifndef _POSIX_SOURCE -# include +#ifndef S_IRUSR +# define S_IRUSR 0000400 +#endif +#ifndef S_IWUSR +# define S_IWUSR 0000200 +#endif +#ifndef S_IXUSR +# define S_IXUSR 0000100 +#endif +#ifndef S_IRGRP +# define S_IRGRP 0000040 +#endif +#ifndef S_IWGRP +# define S_IWGRP 0000020 +#endif +#ifndef S_IXGRP +# define S_IXGRP 0000010 +#endif +#ifndef S_IROTH +# define S_IROTH 0000004 +#endif +#ifndef S_IWOTH +# define S_IWOTH 0000002 +#endif +#ifndef S_IXOTH +# define S_IXOTH 0000001 #endif +#define MODE_WXUSR (S_IWUSR | S_IXUSR) +#define MODE_R (S_IRUSR | S_IRGRP | S_IROTH) +#define MODE_RW (S_IWUSR | S_IWGRP | S_IWOTH | MODE_R) +#define MODE_RWX (S_IXUSR | S_IXGRP | S_IXOTH | MODE_RW) +#define MODE_ALL (S_ISUID | S_ISGID | S_ISVTX | MODE_RWX) + /* Include before any preprocessor test of _POSIX_VERSION. */ #if HAVE_UNISTD_H # include #endif +#ifndef SEEK_SET +# define SEEK_SET 0 +#endif +#ifndef SEEK_CUR +# define SEEK_CUR 1 +#endif +#ifndef SEEK_END +# define SEEK_END 2 +#endif + +#ifndef STDIN_FILENO +# define STDIN_FILENO 0 +#endif +#ifndef STDOUT_FILENO +# define STDOUT_FILENO 1 +#endif +#ifndef STDERR_FILENO +# define STDERR_FILENO 2 +#endif + /* Declare make device, major and minor. Since major is a function on SVR4, we have to resort to GOT_MAJOR instead of just testing if major is #define'd. */ @@ -263,68 +320,19 @@ extern int errno; #undef GOT_MAJOR -/* Declare directory reading routines and structures. */ - -#if __TURBOC__ -# include "msd_dir.h" -# define NAMLEN(dirent) ((dirent)->d_namlen) -#else -# if HAVE_DIRENT_H -# include -# define NAMLEN(dirent) (strlen((dirent)->d_name)) -# else -# define dirent direct -# define NAMLEN(dirent) ((dirent)->d_namlen) -# if HAVE_SYS_NDIR_H -# include -# endif -# if HAVE_SYS_DIR_H -# include -# endif -# if HAVE_NDIR_H -# include -# endif -# endif -#endif - /* Declare wait status. */ #if HAVE_SYS_WAIT_H # include #endif - -#if HAVE_UNION_WAIT -# define WAIT_T union wait -# ifndef WTERMSIG -# define WTERMSIG(Status) ((Status).w_termsig) -# endif -# ifndef WCOREDUMP -# define WCOREDUMP(Status) ((Status).w_coredump) -# endif -# ifndef WEXITSTATUS -# define WEXITSTATUS(Status) ((Status).w_retcode) -# endif -#else -# define WAIT_T int -# ifndef WTERMSIG -# define WTERMSIG(Status) ((Status) & 0x7f) -# endif -# ifndef WCOREDUMP -# define WCOREDUMP(Status) ((Status) & 0x80) -# endif -# ifndef WEXITSTATUS -# define WEXITSTATUS(Status) (((Status) >> 8) & 0xff) -# endif -#endif - -#ifndef WIFSTOPPED -# define WIFSTOPPED(Status) (WTERMSIG(Status) == 0x7f) +#ifndef WEXITSTATUS +# define WEXITSTATUS(s) (((s) >> 8) & 0xff) #endif #ifndef WIFSIGNALED -# define WIFSIGNALED(Status) (WTERMSIG(Status) != 0) +# define WIFSIGNALED(s) (((s) & 0xffff) - 1 < (unsigned) 0xff) #endif -#ifndef WIFEXITED -# define WIFEXITED(Status) (WTERMSIG(Status) == 0) +#ifndef WTERMSIG +# define WTERMSIG(s) ((s) & 0x7f) #endif /* FIXME: It is wrong to use BLOCKSIZE for buffers when the logical block @@ -356,29 +364,33 @@ extern int errno; #endif /* Extract or fake data from a `struct stat'. ST_NBLOCKS gives the - number of 512-byte blocks in the file (including indirect blocks). - fileblocks.c uses BSIZE. HP-UX counts st_blocks in 1024-byte units, + number of ST_NBLOCKSIZE-byte blocks in the file (including indirect blocks). + HP-UX counts st_blocks in 1024-byte units, this loses when mixing HP-UX and BSD filesystems with NFS. AIX PS/2 counts st_blocks in 4K units. */ #if !HAVE_ST_BLOCKS # if defined(_POSIX_SOURCE) || !defined(BSIZE) -# define ST_NBLOCKS(Statbuf) (((Statbuf).st_size + 512 - 1) / 512) +# define ST_NBLOCKS(Statbuf) ((Statbuf).st_size / ST_NBLOCKSIZE + ((Statbuf).st_size % ST_NBLOCKSIZE != 0)) # else + off_t st_blocks (); # define ST_NBLOCKS(Statbuf) (st_blocks ((Statbuf).st_size)) # endif #else +# define ST_NBLOCKS(Statbuf) ((Statbuf).st_blocks) # if defined(hpux) || defined(__hpux__) || defined(__hpux) -# define ST_NBLOCKS(Statbuf) ((Statbuf).st_blocks * 2) +# define ST_NBLOCKSIZE 1024 # else # if defined(_AIX) && defined(_I386) -# define ST_NBLOCKS(Statbuf) ((Statbuf).st_blocks * 8) -# else -# define ST_NBLOCKS(Statbuf) ((Statbuf).st_blocks) +# define ST_NBLOCKSIZE (4 * 1024) # endif # endif #endif +#ifndef ST_NBLOCKSIZE +#define ST_NBLOCKSIZE 512 +#endif + /* This is a real challenge to properly get MTIO* symbols :-(. ISC uses . SCO and BSDi uses ; BSDi also requires and for defining tp_dev and tpr_t. It @@ -418,75 +430,96 @@ extern int errno; #if STDC_HEADERS # include #else -voidstar malloc (); -voidstar realloc (); -# if HAVE_GETCWD -char *getcwd (); -# endif +void *malloc (); char *getenv (); #endif -#include +#include +#include -#ifndef _POSIX_VERSION -# if MSDOS -# include -# else -off_t lseek (); -# endif +#include +#if !defined _POSIX_VERSION && MSDOS +# include #endif -#include - #if WITH_DMALLOC -# undef HAVE_VALLOC +# undef HAVE_DECL_VALLOC # define DMALLOC_FUNC_CHECK # include #endif - -/* Prototypes for external functions. */ -#ifndef PARAMS -# if PROTOTYPES -# define PARAMS(Args) Args -# else -# define PARAMS(Args) () -# endif +#include + +#ifndef MB_LEN_MAX +# define MB_LEN_MAX 1 #endif +#if HAVE_INTTYPES_H +# include +#endif + +/* These macros work even on ones'-complement hosts (!). + The extra casts work around common compiler bugs. */ +#define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) +#define TYPE_MINIMUM(t) (TYPE_SIGNED (t) \ + ? ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1) \ + : (t) 0) +#define TYPE_MAXIMUM(t) ((t) (~ (t) 0 - TYPE_MINIMUM (t))) + +/* Bound on length of the string representing an integer value of type t. + Subtract one for the sign bit if t is signed; + 302 / 1000 is log10 (2) rounded up; + add one for integer division truncation; + add one more for a minus sign if t is signed. */ +#define INT_STRLEN_BOUND(t) \ + ((sizeof (t) * CHAR_BIT - TYPE_SIGNED (t)) * 302 / 1000 \ + + 1 + TYPE_SIGNED (t)) + +#define UINTMAX_STRSIZE_BOUND (INT_STRLEN_BOUND (uintmax_t) + 1) + +/* Prototypes for external functions. */ + #if HAVE_LOCALE_H # include #endif #if !HAVE_SETLOCALE -# define setlocale(Category, Locale) +# define setlocale(Category, Locale) /* empty */ #endif -#if ENABLE_NLS -# include -# define _(Text) gettext (Text) -#else -# define bindtextdomain(Domain, Directory) -# define textdomain(Domain) -# define _(Text) Text +#include +#ifndef time +time_t time (); #endif -#define N_(Text) Text /* Library modules. */ -#include "error.h" +#include +#include +#include +#include +#include + +#include +#define _(msgid) gettext (msgid) +#define N_(msgid) msgid -#if !HAVE_STRSTR -char *strstr PARAMS ((const char *, const char *)); +#if ! defined valloc && ! HAVE_DECL_VALLOC +# define valloc(Size) malloc (Size) #endif -#if HAVE_VALLOC -# ifndef valloc -voidstar valloc PARAMS ((size_t)); -# endif +#if MSDOS +# include +# define SET_BINARY_MODE(arc) setmode(arc, O_BINARY) +# define ERRNO_IS_EACCESS errno == EACCESS #else -# define valloc(Size) malloc (Size) +# include +# include +# define SET_BINARY_MODE(arc) +# define ERRNO_IS_EACCESS 0 #endif -voidstar xmalloc PARAMS ((size_t)); -voidstar xrealloc PARAMS ((voidstar, size_t)); -char *xstrdup PARAMS ((const char *)); +#if XENIX +# include +#endif + +