150 lines
		
	
	
	
		
			4.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			150 lines
		
	
	
	
		
			4.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|   | /* posixstat.h -- Posix stat(2) definitions for systems that
 | ||
|  |    don't have them. */ | ||
|  | 
 | ||
|  | /* Copyright (C) 1987,1991 Free Software Foundation, Inc.
 | ||
|  | 
 | ||
|  |    This file is part of GNU Bash, the Bourne Again SHell. | ||
|  | 
 | ||
|  |    Bash is free software; you can redistribute it and/or modify it | ||
|  |    under the terms of the GNU General Public License as published by | ||
|  |    the Free Software Foundation; either version 1, or (at your option) | ||
|  |    any later version. | ||
|  | 
 | ||
|  |    Bash is distributed in the hope that it will be useful, but WITHOUT | ||
|  |    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY | ||
|  |    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public | ||
|  |    License for more details. | ||
|  | 
 | ||
|  |    You should have received a copy of the GNU General Public License | ||
|  |    along with Bash; see the file COPYING.  If not, write to the Free | ||
|  |    Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ | ||
|  | 
 | ||
|  | /* This file should be included instead of <sys/stat.h>.
 | ||
|  |    It relies on the local sys/stat.h to work though. */ | ||
|  | #if !defined (_POSIXSTAT_H)
 | ||
|  | #define _POSIXSTAT_H
 | ||
|  | 
 | ||
|  | #include <sys/stat.h>
 | ||
|  | 
 | ||
|  | #if defined (isc386)
 | ||
|  | #  if !defined (S_IFDIR)
 | ||
|  | #    define S_IFDIR 0040000
 | ||
|  | #  endif /* !S_IFDIR */
 | ||
|  | #  if !defined (S_IFMT)
 | ||
|  | #    define S_IFMT  0170000
 | ||
|  | #  endif /* !S_IFMT */
 | ||
|  | #endif /* isc386 */
 | ||
|  | 
 | ||
|  | /* This text is taken directly from the Cadmus I was trying to
 | ||
|  |    compile on: | ||
|  |     the following MACROs are defined for X/OPEN compatibility | ||
|  |     however, is the param correct ?? | ||
|  |    #define S_ISBLK(s) ((s.st_mode & S_IFMT) == S_IFBLK)
 | ||
|  | 
 | ||
|  |   Well, the answer is no.  Thus... */ | ||
|  | #if defined (BrainDeath)
 | ||
|  | #  undef S_ISBLK
 | ||
|  | #  undef S_ISCHR
 | ||
|  | #  undef S_ISDIR
 | ||
|  | #  undef S_ISFIFO
 | ||
|  | #  undef S_ISREG
 | ||
|  | #endif /* BrainDeath */
 | ||
|  | 
 | ||
|  | /* Posix 1003.1 5.6.1.1 <sys/stat.h> file types */ | ||
|  | 
 | ||
|  | /* Some Posix-wannabe systems define _S_IF* macros instead of S_IF*, but
 | ||
|  |    do not provide the S_IS* macros that Posix requires. */ | ||
|  | 
 | ||
|  | #if defined (_S_IFMT) && !defined (S_IFMT)
 | ||
|  | #define S_IFMT _S_IFMT
 | ||
|  | #endif
 | ||
|  | #if defined (_S_IFIFO) && !defined (S_IFIFO)
 | ||
|  | #define S_IFIFO _S_IFIFO
 | ||
|  | #endif
 | ||
|  | #if defined (_S_IFCHR) && !defined (S_IFCHR)
 | ||
|  | #define S_IFCHR _S_IFCHR
 | ||
|  | #endif
 | ||
|  | #if defined (_S_IFDIR) && !defined (S_IFDIR)
 | ||
|  | #define S_IFDIR _S_IFDIR
 | ||
|  | #endif
 | ||
|  | #if defined (_S_IFBLK) && !defined (S_IFBLK)
 | ||
|  | #define S_IFBLK _S_IFBLK
 | ||
|  | #endif
 | ||
|  | #if defined (_S_IFREG) && !defined (S_IFREG)
 | ||
|  | #define S_IFREG _S_IFREG
 | ||
|  | #endif
 | ||
|  | #if defined (_S_IFLNK) && !defined (S_IFLNK)
 | ||
|  | #define S_IFLNK _S_IFLNK
 | ||
|  | #endif
 | ||
|  | #if defined (_S_IFSOCK) && !defined (S_IFSOCK)
 | ||
|  | #define S_IFSOCK _S_IFSOCK
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | /* Test for each symbol individually and define the ones necessary (some
 | ||
|  |    systems claiming Posix compatibility define some but not all). */ | ||
|  | 
 | ||
|  | #if defined (S_IFBLK) && !defined (S_ISBLK)
 | ||
|  | #define	S_ISBLK(m)	(((m)&S_IFMT) == S_IFBLK)	/* block device */
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #if defined (S_IFCHR) && !defined (S_ISCHR)
 | ||
|  | #define	S_ISCHR(m)	(((m)&S_IFMT) == S_IFCHR)	/* character device */
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #if defined (S_IFDIR) && !defined (S_ISDIR)
 | ||
|  | #define	S_ISDIR(m)	(((m)&S_IFMT) == S_IFDIR)	/* directory */
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #if defined (S_IFREG) && !defined (S_ISREG)
 | ||
|  | #define	S_ISREG(m)	(((m)&S_IFMT) == S_IFREG)	/* file */
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #if defined (S_IFIFO) && !defined (S_ISFIFO)
 | ||
|  | #define	S_ISFIFO(m)	(((m)&S_IFMT) == S_IFIFO)	/* fifo - named pipe */
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #if defined (S_IFLNK) && !defined (S_ISLNK)
 | ||
|  | #define	S_ISLNK(m)	(((m)&S_IFMT) == S_IFLNK)	/* symbolic link */
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #if defined (S_IFSOCK) && !defined (S_ISSOCK)
 | ||
|  | #define	S_ISSOCK(m)	(((m)&S_IFMT) == S_IFSOCK)	/* socket */
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * POSIX 1003.1 5.6.1.2 <sys/stat.h> File Modes | ||
|  |  */ | ||
|  |   | ||
|  | #if !defined (S_IRWXU)
 | ||
|  | #  if !defined (S_IREAD)
 | ||
|  | #    define S_IREAD	00400
 | ||
|  | #    define S_IWRITE	00200
 | ||
|  | #    define S_IEXEC	00100
 | ||
|  | #  endif /* S_IREAD */
 | ||
|  | 
 | ||
|  | #  if !defined (S_IRUSR)
 | ||
|  | #    define S_IRUSR	S_IREAD			/* read, owner */
 | ||
|  | #    define S_IWUSR	S_IWRITE		/* write, owner */
 | ||
|  | #    define S_IXUSR	S_IEXEC			/* execute, owner */
 | ||
|  | 
 | ||
|  | #    define S_IRGRP	(S_IREAD  >> 3)		/* read, group */
 | ||
|  | #    define S_IWGRP	(S_IWRITE >> 3)		/* write, group */
 | ||
|  | #    define S_IXGRP	(S_IEXEC  >> 3)		/* execute, group */
 | ||
|  | 
 | ||
|  | #    define S_IROTH	(S_IREAD  >> 6)		/* read, other */
 | ||
|  | #    define S_IWOTH	(S_IWRITE >> 6)		/* write, other */
 | ||
|  | #    define S_IXOTH	(S_IEXEC  >> 6)		/* execute, other */
 | ||
|  | #  endif /* !S_IRUSR */
 | ||
|  | 
 | ||
|  | #  define S_IRWXU	(S_IRUSR | S_IWUSR | S_IXUSR)
 | ||
|  | #  define S_IRWXG	(S_IRGRP | S_IWGRP | S_IXGRP)
 | ||
|  | #  define S_IRWXO	(S_IROTH | S_IWOTH | S_IXOTH)
 | ||
|  | #endif /* !S_IRWXU */
 | ||
|  | 
 | ||
|  | /* These are non-standard, but are used in builtins.c$symbolic_umask() */ | ||
|  | #define S_IRUGO		(S_IRUSR | S_IRGRP | S_IROTH)
 | ||
|  | #define S_IWUGO		(S_IWUSR | S_IWGRP | S_IWOTH)
 | ||
|  | #define S_IXUGO		(S_IXUSR | S_IXGRP | S_IXOTH)
 | ||
|  | 
 | ||
|  | #endif /* _POSIXSTAT_H */
 |