7d1cece35257940f3fb4024931eaf5d95b41a4d8
[platform/upstream/bash.git] / lib / posixheaders / 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 it
9    under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 1, or (at your option)
11    any later version.
12
13    Bash is distributed in the hope that it will be useful, but WITHOUT
14    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
16    License for more details.
17
18    You should have received a copy of the GNU General Public License
19    along with Bash; see the file COPYING.  If not, write to the Free
20    Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
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 (isc386)
30 #  if !defined (S_IFDIR)
31 #    define S_IFDIR 0040000
32 #  endif /* !S_IFDIR */
33 #  if !defined (S_IFMT)
34 #    define S_IFMT  0170000
35 #  endif /* !S_IFMT */
36 #endif /* isc386 */
37
38 /* This text is taken directly from the Cadmus I was trying to
39    compile on:
40     the following MACROs are defined for X/OPEN compatibility
41     however, is the param correct ??
42    #define S_ISBLK(s) ((s.st_mode & S_IFMT) == S_IFBLK)
43
44   Well, the answer is no.  Thus... */
45 #if defined (BrainDeath)
46 #  undef S_ISBLK
47 #  undef S_ISCHR
48 #  undef S_ISDIR
49 #  undef S_ISFIFO
50 #  undef S_ISREG
51 #endif /* BrainDeath */
52
53 /* Posix 1003.1 5.6.1.1 <sys/stat.h> file types */
54
55 /* Some Posix-wannabe systems define _S_IF* macros instead of S_IF*, but
56    do not provide the S_IS* macros that Posix requires. */
57
58 #if defined (_S_IFMT) && !defined (S_IFMT)
59 #define S_IFMT _S_IFMT
60 #endif
61 #if defined (_S_IFIFO) && !defined (S_IFIFO)
62 #define S_IFIFO _S_IFIFO
63 #endif
64 #if defined (_S_IFCHR) && !defined (S_IFCHR)
65 #define S_IFCHR _S_IFCHR
66 #endif
67 #if defined (_S_IFDIR) && !defined (S_IFDIR)
68 #define S_IFDIR _S_IFDIR
69 #endif
70 #if defined (_S_IFBLK) && !defined (S_IFBLK)
71 #define S_IFBLK _S_IFBLK
72 #endif
73 #if defined (_S_IFREG) && !defined (S_IFREG)
74 #define S_IFREG _S_IFREG
75 #endif
76 #if defined (_S_IFLNK) && !defined (S_IFLNK)
77 #define S_IFLNK _S_IFLNK
78 #endif
79 #if defined (_S_IFSOCK) && !defined (S_IFSOCK)
80 #define S_IFSOCK _S_IFSOCK
81 #endif
82
83 /* Test for each symbol individually and define the ones necessary (some
84    systems claiming Posix compatibility define some but not all). */
85
86 #if defined (S_IFBLK) && !defined (S_ISBLK)
87 #define S_ISBLK(m)      (((m)&S_IFMT) == S_IFBLK)       /* block device */
88 #endif
89
90 #if defined (S_IFCHR) && !defined (S_ISCHR)
91 #define S_ISCHR(m)      (((m)&S_IFMT) == S_IFCHR)       /* character device */
92 #endif
93
94 #if defined (S_IFDIR) && !defined (S_ISDIR)
95 #define S_ISDIR(m)      (((m)&S_IFMT) == S_IFDIR)       /* directory */
96 #endif
97
98 #if defined (S_IFREG) && !defined (S_ISREG)
99 #define S_ISREG(m)      (((m)&S_IFMT) == S_IFREG)       /* file */
100 #endif
101
102 #if defined (S_IFIFO) && !defined (S_ISFIFO)
103 #define S_ISFIFO(m)     (((m)&S_IFMT) == S_IFIFO)       /* fifo - named pipe */
104 #endif
105
106 #if defined (S_IFLNK) && !defined (S_ISLNK)
107 #define S_ISLNK(m)      (((m)&S_IFMT) == S_IFLNK)       /* symbolic link */
108 #endif
109
110 #if defined (S_IFSOCK) && !defined (S_ISSOCK)
111 #define S_ISSOCK(m)     (((m)&S_IFMT) == S_IFSOCK)      /* socket */
112 #endif
113
114 /*
115  * POSIX 1003.1 5.6.1.2 <sys/stat.h> File Modes
116  */
117  
118 #if !defined (S_IRWXU)
119 #  if !defined (S_IREAD)
120 #    define S_IREAD     00400
121 #    define S_IWRITE    00200
122 #    define S_IEXEC     00100
123 #  endif /* S_IREAD */
124
125 #  if !defined (S_IRUSR)
126 #    define S_IRUSR     S_IREAD                 /* read, owner */
127 #    define S_IWUSR     S_IWRITE                /* write, owner */
128 #    define S_IXUSR     S_IEXEC                 /* execute, owner */
129
130 #    define S_IRGRP     (S_IREAD  >> 3)         /* read, group */
131 #    define S_IWGRP     (S_IWRITE >> 3)         /* write, group */
132 #    define S_IXGRP     (S_IEXEC  >> 3)         /* execute, group */
133
134 #    define S_IROTH     (S_IREAD  >> 6)         /* read, other */
135 #    define S_IWOTH     (S_IWRITE >> 6)         /* write, other */
136 #    define S_IXOTH     (S_IEXEC  >> 6)         /* execute, other */
137 #  endif /* !S_IRUSR */
138
139 #  define S_IRWXU       (S_IRUSR | S_IWUSR | S_IXUSR)
140 #  define S_IRWXG       (S_IRGRP | S_IWGRP | S_IXGRP)
141 #  define S_IRWXO       (S_IROTH | S_IWOTH | S_IXOTH)
142 #endif /* !S_IRWXU */
143
144 /* These are non-standard, but are used in builtins.c$symbolic_umask() */
145 #define S_IRUGO         (S_IRUSR | S_IRGRP | S_IROTH)
146 #define S_IWUGO         (S_IWUSR | S_IWGRP | S_IWOTH)
147 #define S_IXUGO         (S_IXUSR | S_IXGRP | S_IXOTH)
148
149 #endif /* _POSIXSTAT_H */