posixstat.h revision 21308
1100384Speter/* posixstat.h -- Posix stat(2) definitions for systems that 2100384Speter don't have them. */ 3100384Speter 4100384Speter/* Copyright (C) 1987,1991 Free Software Foundation, Inc. 5100384Speter 6100384Speter This file is part of GNU Bash, the Bourne Again SHell. 7100384Speter 8100384Speter Bash is free software; you can redistribute it and/or modify it 9100384Speter under the terms of the GNU General Public License as published by 10100384Speter the Free Software Foundation; either version 1, or (at your option) 11100384Speter any later version. 12100384Speter 13100384Speter Bash is distributed in the hope that it will be useful, but WITHOUT 14100384Speter ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 15100384Speter or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public 16100384Speter License for more details. 17100384Speter 18100384Speter You should have received a copy of the GNU General Public License 19100384Speter along with Bash; see the file COPYING. If not, write to the Free 20100384Speter Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ 21100384Speter 22100384Speter/* This file should be included instead of <sys/stat.h>. 23100384Speter It relies on the local sys/stat.h to work though. */ 24100384Speter#if !defined (_POSIXSTAT_H_) 25100384Speter#define _POSIXSTAT_H_ 26100384Speter 27118031Sobrien#include <sys/stat.h> 28118031Sobrien 29118031Sobrien#if defined (STAT_MACROS_BROKEN) 30104738Speter# undef S_ISBLK 31191673Sjamie# undef S_ISCHR 32191673Sjamie# undef S_ISDIR 33104738Speter# undef S_ISFIFO 34205014Snwhitehorn# undef S_ISREG 35205014Snwhitehorn# undef S_ISLNK 36100384Speter#endif /* STAT_MACROS_BROKEN */ 37100384Speter 38162954Sphk/* These are guaranteed to work only on isc386 */ 39100384Speter#if !defined (S_IFDIR) && !defined (S_ISDIR) 40100384Speter# define S_IFDIR 0040000 41100384Speter#endif /* !S_IFDIR && !S_ISDIR */ 42100384Speter#if !defined (S_IFMT) 43185435Sbz# define S_IFMT 0170000 44100384Speter#endif /* !S_IFMT */ 45161343Sjkim 46100384Speter/* Posix 1003.1 5.6.1.1 <sys/stat.h> file types */ 47100384Speter 48100384Speter/* Some Posix-wannabe systems define _S_IF* macros instead of S_IF*, but 49205014Snwhitehorn do not provide the S_IS* macros that Posix requires. */ 50151909Sps 51100384Speter#if defined (_S_IFMT) && !defined (S_IFMT) 52100384Speter#define S_IFMT _S_IFMT 53100384Speter#endif 54100384Speter#if defined (_S_IFIFO) && !defined (S_IFIFO) 55183044Sobrien#define S_IFIFO _S_IFIFO 56100384Speter#endif 57100384Speter#if defined (_S_IFCHR) && !defined (S_IFCHR) 58100384Speter#define S_IFCHR _S_IFCHR 59100384Speter#endif 60100384Speter#if defined (_S_IFDIR) && !defined (S_IFDIR) 61146950Sps#define S_IFDIR _S_IFDIR 62100384Speter#endif 63100384Speter#if defined (_S_IFBLK) && !defined (S_IFBLK) 64100384Speter#define S_IFBLK _S_IFBLK 65100384Speter#endif 66100384Speter#if defined (_S_IFREG) && !defined (S_IFREG) 67100384Speter#define S_IFREG _S_IFREG 68150883Sjhb#endif 69113859Sjhb#if defined (_S_IFLNK) && !defined (S_IFLNK) 70100384Speter#define S_IFLNK _S_IFLNK 71100384Speter#endif 72100384Speter#if defined (_S_IFSOCK) && !defined (S_IFSOCK) 73183044Sobrien#define S_IFSOCK _S_IFSOCK 74162551Sdavidxu#endif 75100384Speter 76162551Sdavidxu/* Test for each symbol individually and define the ones necessary (some 77100384Speter systems claiming Posix compatibility define some but not all). */ 78127140Sjhb 79157285Sps#if defined (S_IFBLK) && !defined (S_ISBLK) 80174381Sjhb#define S_ISBLK(m) (((m)&S_IFMT) == S_IFBLK) /* block device */ 81174381Sjhb#endif 82157285Sps 83100384Speter#if defined (S_IFCHR) && !defined (S_ISCHR) 84191673Sjamie#define S_ISCHR(m) (((m)&S_IFMT) == S_IFCHR) /* character device */ 85191673Sjamie#endif 86191673Sjamie 87191673Sjamie#if defined (S_IFDIR) && !defined (S_ISDIR) 88100384Speter#define S_ISDIR(m) (((m)&S_IFMT) == S_IFDIR) /* directory */ 89100384Speter#endif 90100384Speter 91100384Speter#if defined (S_IFREG) && !defined (S_ISREG) 92100384Speter#define S_ISREG(m) (((m)&S_IFMT) == S_IFREG) /* file */ 93100384Speter#endif 94100384Speter 95151582Sps#if defined (S_IFIFO) && !defined (S_ISFIFO) 96205014Snwhitehorn#define S_ISFIFO(m) (((m)&S_IFMT) == S_IFIFO) /* fifo - named pipe */ 97151582Sps#endif 98183188Sobrien 99183188Sobrien#if defined (S_IFLNK) && !defined (S_ISLNK) 100119333Speter#define S_ISLNK(m) (((m)&S_IFMT) == S_IFLNK) /* symbolic link */ 101119333Speter#endif 102174380Sjhb 103163018Sdavidxu#if defined (S_IFSOCK) && !defined (S_ISSOCK) 104119333Speter#define S_ISSOCK(m) (((m)&S_IFMT) == S_IFSOCK) /* socket */ 105100384Speter#endif 106121719Speter 107121719Speter/* 108174377Sjhb * POSIX 1003.1 5.6.1.2 <sys/stat.h> File Modes 109121719Speter */ 110121719Speter 111174377Sjhb#if !defined (S_IRWXU) 112174377Sjhb# if !defined (S_IREAD) 113174377Sjhb# define S_IREAD 00400 114174377Sjhb# define S_IWRITE 00200 115174377Sjhb# define S_IEXEC 00100 116174377Sjhb# endif /* S_IREAD */ 117121719Speter 118174377Sjhb# if !defined (S_IRUSR) 119174377Sjhb# define S_IRUSR S_IREAD /* read, owner */ 120174377Sjhb# define S_IWUSR S_IWRITE /* write, owner */ 121205014Snwhitehorn# define S_IXUSR S_IEXEC /* execute, owner */ 122205014Snwhitehorn 123205014Snwhitehorn# define S_IRGRP (S_IREAD >> 3) /* read, group */ 124205014Snwhitehorn# define S_IWGRP (S_IWRITE >> 3) /* write, group */ 125205014Snwhitehorn# define S_IXGRP (S_IEXEC >> 3) /* execute, group */ 126205014Snwhitehorn 127205014Snwhitehorn# define S_IROTH (S_IREAD >> 6) /* read, other */ 128205014Snwhitehorn# define S_IWOTH (S_IWRITE >> 6) /* write, other */ 129205014Snwhitehorn# define S_IXOTH (S_IEXEC >> 6) /* execute, other */ 130205014Snwhitehorn# endif /* !S_IRUSR */ 131207007Skib 132207007Skib# define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR) 133207007Skib# define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP) 134207007Skib# define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH) 135207007Skib#endif /* !S_IRWXU */ 136207007Skib 137207007Skib/* These are non-standard, but are used in builtins.c$symbolic_umask() */ 138207007Skib#define S_IRUGO (S_IRUSR | S_IRGRP | S_IROTH) 139207007Skib#define S_IWUGO (S_IWUSR | S_IWGRP | S_IWOTH) 140207007Skib#define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH) 141207007Skib 142207007Skib#endif /* _POSIXSTAT_H_ */ 143207007Skib