1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19: ^L
20: #ifdef HAVE_CONFIG_H
21: #include <config.h>
22: #endif
23:
24: #include <sys/types.h>
25: #include <sys/stat.h>
26:
27: #if !S_IRUSR
28: # if S_IREAD
29: # define S_IRUSR S_IREAD
30: # else
31: # define S_IRUSR 00400
32: # endif
33: #endif
34:
35: #if !S_IWUSR
36: # if S_IWRITE
37: # define S_IWUSR S_IWRITE
38: # else
39: # define S_IWUSR 00200
40: # endif
41: #endif
42:
43: #if !S_IXUSR
44: # if S_IEXEC
45: # define S_IXUSR S_IEXEC
46: # else
47: # define S_IXUSR 00100
48: # endif
49: #endif
50:
51: #ifdef STAT_MACROS_BROKEN
52: #undef S_ISBLK
53: #undef S_ISCHR
54: #undef S_ISDIR
55: #undef S_ISFIFO
56: #undef S_ISLNK
57: #undef S_ISMPB
58: #undef S_ISMPC
59: #undef S_ISNWK
60: #undef S_ISREG
61: #undef S_ISSOCK
62: #endif
63:
64: #if !defined(S_ISBLK) && defined(S_IFBLK)
65: #define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
66: #endif
67: #if !defined(S_ISCHR) && defined(S_IFCHR)
68: #define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
69: #endif
70: #if !defined(S_ISDIR) && defined(S_IFDIR)
71: #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
72: #endif
73: #if !defined(S_ISREG) && defined(S_IFREG)
74: #define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
75: #endif
76: #if !defined(S_ISFIFO) && defined(S_IFIFO)
77: #define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
78: #endif
79: #if !defined(S_ISLNK) && defined(S_IFLNK)
80: #define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
81: #endif
82: #if !defined(S_ISSOCK) && defined(S_IFSOCK)
83: #define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
84: #endif
85: #if !defined(S_ISMPB) && defined(S_IFMPB)
86: #define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB)
87: #define S_ISMPC(m) (((m) & S_IFMT) == S_IFMPC)
88: #endif
89: #if !defined(S_ISNWK) && defined(S_IFNWK)
90: #define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK)
91: #endif
92:
93: void mode_string ();
94: static char ftypelet ();
95: static void rwx ();
96: static void setst ();
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134: void
135: filemodestring (statp, str)
136: struct stat *statp;
137: char *str;
138: {
139: mode_string (statp->st_mode, str);
140: }
141:
142:
143:
144:
145: void
146: mode_string (mode, str)
147: unsigned short mode;
148: char *str;
149: {
150: str[0] = ftypelet ((long) mode);
151: rwx ((mode & 0700) << 0, &str[1]);
152: rwx ((mode & 0070) << 3, &str[4]);
153: rwx ((mode & 0007) << 6, &str[7]);
154: setst (mode, str);
155: }
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169: static char
170: ftypelet (bits)
171: long bits;
172: {
173: #ifdef S_ISBLK
174: if (S_ISBLK (bits))
175: return 'b';
176: #endif
177: if (S_ISCHR (bits))
178: return 'c';
179: if (S_ISDIR (bits))
180: return 'd';
181: if (S_ISREG (bits))
182: return '-';
183: #ifdef S_ISFIFO
184: if (S_ISFIFO (bits))
185: return 'p';
186: #endif
187: #ifdef S_ISLNK
188: if (S_ISLNK (bits))
189: return 'l';
190: #endif
191: #ifdef S_ISSOCK
192: if (S_ISSOCK (bits))
193: return 's';
194: #endif
195: #ifdef S_ISMPC
196: if (S_ISMPC (bits))
197: return 'm';
198: #endif
199: #ifdef S_ISNWK
200: if (S_ISNWK (bits))
201: return 'n';
202: #endif
203: return '?';
204: }
205:
206:
207:
208:
209: static void
210: rwx (bits, chars)
211: unsigned short bits;
212: char *chars;
213: {
214: chars[0] = (bits & S_IRUSR) ? 'r' : '-';
215: chars[1] = (bits & S_IWUSR) ? 'w' : '-';
216: chars[2] = (bits & S_IXUSR) ? 'x' : '-';
217: }
218:
219:
220:
221:
222: static void
223: setst (bits, chars)
224: unsigned short bits;
225: char *chars;
226: {
227: #ifdef S_ISUID
228: if (bits & S_ISUID)
229: {
230: if (chars[3] != 'x')
231:
232: chars[3] = 'S';
233: else
234: chars[3] = 's';
235: }
236: #endif
237: #ifdef S_ISGID
238: if (bits & S_ISGID)
239: {
240: if (chars[6] != 'x')
241:
242: chars[6] = 'S';
243: else
244: chars[6] = 's';
245: }
246: #endif
247: #ifdef S_ISVTX
248: if (bits & S_ISVTX)
249: {
250: if (chars[9] != 'x')
251:
252: chars[9] = 'T';
253: else
254: chars[9] = 't';
255: }
256: #endif
257: }
258:
259:
260: