Annotation of embedaddon/readline/posixstat.h, revision 1.1.1.2
1.1 misho 1: /* posixstat.h -- Posix stat(2) definitions for systems that
2: don't have them. */
3:
1.1.1.2 ! misho 4: /* Copyright (C) 1987-2019 Free Software Foundation, Inc.
1.1 misho 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)
1.1.1.2 ! misho 135: #else /* !S_IRWXU */
! 136: /* S_IRWXU is defined, but "group" and "other" bits might not be
! 137: (happens in certain versions of MinGW). */
! 138: # if !defined (S_IRGRP)
! 139: # define S_IRGRP (S_IREAD >> 3) /* read, group */
! 140: # define S_IWGRP (S_IWRITE >> 3) /* write, group */
! 141: # define S_IXGRP (S_IEXEC >> 3) /* execute, group */
! 142: # endif /* !S_IRGRP */
! 143:
! 144: # if !defined (S_IROTH)
! 145: # define S_IROTH (S_IREAD >> 6) /* read, other */
! 146: # define S_IWOTH (S_IWRITE >> 6) /* write, other */
! 147: # define S_IXOTH (S_IEXEC >> 6) /* execute, other */
! 148: # endif /* !S_IROTH */
! 149: # if !defined (S_IRWXG)
! 150: # define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP)
! 151: # endif
! 152: # if !defined (S_IRWXO)
! 153: # define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH)
! 154: # endif
1.1 misho 155: #endif /* !S_IRWXU */
156:
157: /* These are non-standard, but are used in builtins.c$symbolic_umask() */
158: #define S_IRUGO (S_IRUSR | S_IRGRP | S_IROTH)
159: #define S_IWUGO (S_IWUSR | S_IWGRP | S_IWOTH)
160: #define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH)
161:
162: #endif /* _POSIXSTAT_H_ */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>