opcodes/
[external/binutils.git] / readline / posixstat.h
1 /* posixstat.h -- Posix stat(2) definitions for systems that
2    don't have them. */
3
4 /* Copyright (C) 1987,1991 Free Software Foundation, Inc.
5
6    This file is part of GNU Bash, the Bourne Again SHell.
7
8    Bash is free software: you can redistribute it and/or modify
9    it under the terms of the GNU General Public License as published by
10    the Free Software Foundation, either version 3 of the License, or
11    (at your option) any later version.
12
13    Bash is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16    GNU General Public License for more details.
17
18    You should have received a copy of the GNU General Public License
19    along with Bash.  If not, see <http://www.gnu.org/licenses/>.
20 */
21
22 /* This file should be included instead of <sys/stat.h>.
23    It relies on the local sys/stat.h to work though. */
24 #if !defined (_POSIXSTAT_H_)
25 #define _POSIXSTAT_H_
26
27 #include <sys/stat.h>
28
29 #if defined (STAT_MACROS_BROKEN)
30 #  undef S_ISBLK
31 #  undef S_ISCHR
32 #  undef S_ISDIR
33 #  undef S_ISFIFO
34 #  undef S_ISREG
35 #  undef S_ISLNK
36 #endif /* STAT_MACROS_BROKEN */
37
38 /* These are guaranteed to work only on isc386 */
39 #if !defined (S_IFDIR) && !defined (S_ISDIR)
40 #  define S_IFDIR 0040000
41 #endif /* !S_IFDIR && !S_ISDIR */
42 #if !defined (S_IFMT)
43 #  define S_IFMT  0170000
44 #endif /* !S_IFMT */
45
46 /* Posix 1003.1 5.6.1.1 <sys/stat.h> file types */
47
48 /* Some Posix-wannabe systems define _S_IF* macros instead of S_IF*, but
49    do not provide the S_IS* macros that Posix requires. */
50
51 #if defined (_S_IFMT) && !defined (S_IFMT)
52 #define S_IFMT _S_IFMT
53 #endif
54 #if defined (_S_IFIFO) && !defined (S_IFIFO)
55 #define S_IFIFO _S_IFIFO
56 #endif
57 #if defined (_S_IFCHR) && !defined (S_IFCHR)
58 #define S_IFCHR _S_IFCHR
59 #endif
60 #if defined (_S_IFDIR) && !defined (S_IFDIR)
61 #define S_IFDIR _S_IFDIR
62 #endif
63 #if defined (_S_IFBLK) && !defined (S_IFBLK)
64 #define S_IFBLK _S_IFBLK
65 #endif
66 #if defined (_S_IFREG) && !defined (S_IFREG)
67 #define S_IFREG _S_IFREG
68 #endif
69 #if defined (_S_IFLNK) && !defined (S_IFLNK)
70 #define S_IFLNK _S_IFLNK
71 #endif
72 #if defined (_S_IFSOCK) && !defined (S_IFSOCK)
73 #define S_IFSOCK _S_IFSOCK
74 #endif
75
76 /* Test for each symbol individually and define the ones necessary (some
77    systems claiming Posix compatibility define some but not all). */
78
79 #if defined (S_IFBLK) && !defined (S_ISBLK)
80 #define S_ISBLK(m)      (((m)&S_IFMT) == S_IFBLK)       /* block device */
81 #endif
82
83 #if defined (S_IFCHR) && !defined (S_ISCHR)
84 #define S_ISCHR(m)      (((m)&S_IFMT) == S_IFCHR)       /* character device */
85 #endif
86
87 #if defined (S_IFDIR) && !defined (S_ISDIR)
88 #define S_ISDIR(m)      (((m)&S_IFMT) == S_IFDIR)       /* directory */
89 #endif
90
91 #if defined (S_IFREG) && !defined (S_ISREG)
92 #define S_ISREG(m)      (((m)&S_IFMT) == S_IFREG)       /* file */
93 #endif
94
95 #if defined (S_IFIFO) && !defined (S_ISFIFO)
96 #define S_ISFIFO(m)     (((m)&S_IFMT) == S_IFIFO)       /* fifo - named pipe */
97 #endif
98
99 #if defined (S_IFLNK) && !defined (S_ISLNK)
100 #define S_ISLNK(m)      (((m)&S_IFMT) == S_IFLNK)       /* symbolic link */
101 #endif
102
103 #if defined (S_IFSOCK) && !defined (S_ISSOCK)
104 #define S_ISSOCK(m)     (((m)&S_IFMT) == S_IFSOCK)      /* socket */
105 #endif
106
107 /*
108  * POSIX 1003.1 5.6.1.2 <sys/stat.h> File Modes
109  */
110
111 #if !defined (S_IRWXU)
112 #  if !defined (S_IREAD)
113 #    define S_IREAD     00400
114 #    define S_IWRITE    00200
115 #    define S_IEXEC     00100
116 #  endif /* S_IREAD */
117
118 #  if !defined (S_IRUSR)
119 #    define S_IRUSR     S_IREAD                 /* read, owner */
120 #    define S_IWUSR     S_IWRITE                /* write, owner */
121 #    define S_IXUSR     S_IEXEC                 /* execute, owner */
122
123 #    define S_IRGRP     (S_IREAD  >> 3)         /* read, group */
124 #    define S_IWGRP     (S_IWRITE >> 3)         /* write, group */
125 #    define S_IXGRP     (S_IEXEC  >> 3)         /* execute, group */
126
127 #    define S_IROTH     (S_IREAD  >> 6)         /* read, other */
128 #    define S_IWOTH     (S_IWRITE >> 6)         /* write, other */
129 #    define S_IXOTH     (S_IEXEC  >> 6)         /* execute, other */
130 #  endif /* !S_IRUSR */
131
132 #  define S_IRWXU       (S_IRUSR | S_IWUSR | S_IXUSR)
133 #  define S_IRWXG       (S_IRGRP | S_IWGRP | S_IXGRP)
134 #  define S_IRWXO       (S_IROTH | S_IWOTH | S_IXOTH)
135 #endif /* !S_IRWXU */
136
137 /* These are non-standard, but are used in builtins.c$symbolic_umask() */
138 #define S_IRUGO         (S_IRUSR | S_IRGRP | S_IROTH)
139 #define S_IWUGO         (S_IWUSR | S_IWGRP | S_IWOTH)
140 #define S_IXUGO         (S_IXUSR | S_IXGRP | S_IXOTH)
141
142 #endif /* _POSIXSTAT_H_ */