Absolute File Name: | /home/opencoverage/opencoverage/guest-scripts/openssh/src/openbsd-compat/strmode.c |
Source code | Switch to Preprocessed file |
Line | Source | Count | ||||||
---|---|---|---|---|---|---|---|---|
1 | /* $OpenBSD: strmode.c,v 1.7 2005/08/08 08:05:37 espie Exp $ */ | - | ||||||
2 | /*- | - | ||||||
3 | * Copyright (c) 1990 The Regents of the University of California. | - | ||||||
4 | * All rights reserved. | - | ||||||
5 | * | - | ||||||
6 | * Redistribution and use in source and binary forms, with or without | - | ||||||
7 | * modification, are permitted provided that the following conditions | - | ||||||
8 | * are met: | - | ||||||
9 | * 1. Redistributions of source code must retain the above copyright | - | ||||||
10 | * notice, this list of conditions and the following disclaimer. | - | ||||||
11 | * 2. Redistributions in binary form must reproduce the above copyright | - | ||||||
12 | * notice, this list of conditions and the following disclaimer in the | - | ||||||
13 | * documentation and/or other materials provided with the distribution. | - | ||||||
14 | * 3. Neither the name of the University nor the names of its contributors | - | ||||||
15 | * may be used to endorse or promote products derived from this software | - | ||||||
16 | * without specific prior written permission. | - | ||||||
17 | * | - | ||||||
18 | * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND | - | ||||||
19 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | - | ||||||
20 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | - | ||||||
21 | * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | - | ||||||
22 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | - | ||||||
23 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | - | ||||||
24 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | - | ||||||
25 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | - | ||||||
26 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | - | ||||||
27 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | - | ||||||
28 | * SUCH DAMAGE. | - | ||||||
29 | */ | - | ||||||
30 | - | |||||||
31 | /* OPENBSD ORIGINAL: lib/libc/string/strmode.c */ | - | ||||||
32 | - | |||||||
33 | #include "includes.h" | - | ||||||
34 | #ifndef HAVE_STRMODE | - | ||||||
35 | - | |||||||
36 | #include <sys/types.h> | - | ||||||
37 | #include <sys/stat.h> | - | ||||||
38 | #include <string.h> | - | ||||||
39 | - | |||||||
40 | /* XXX mode should be mode_t */ | - | ||||||
41 | - | |||||||
42 | void | - | ||||||
43 | strmode(int mode, char *p) | - | ||||||
44 | { | - | ||||||
45 | /* print type */ | - | ||||||
46 | switch (mode & S_IFMT) { | - | ||||||
47 | case S_IFDIR: /* directory */ never executed: case 0040000 : | 0 | ||||||
48 | *p++ = 'd'; | - | ||||||
49 | break; never executed: break; | 0 | ||||||
50 | case S_IFCHR: /* character special */ never executed: case 0020000 : | 0 | ||||||
51 | *p++ = 'c'; | - | ||||||
52 | break; never executed: break; | 0 | ||||||
53 | case S_IFBLK: /* block special */ never executed: case 0060000 : | 0 | ||||||
54 | *p++ = 'b'; | - | ||||||
55 | break; never executed: break; | 0 | ||||||
56 | case S_IFREG: /* regular */ never executed: case 0100000 : | 0 | ||||||
57 | *p++ = '-'; | - | ||||||
58 | break; never executed: break; | 0 | ||||||
59 | case S_IFLNK: /* symbolic link */ never executed: case 0120000 : | 0 | ||||||
60 | *p++ = 'l'; | - | ||||||
61 | break; never executed: break; | 0 | ||||||
62 | #ifdef S_IFSOCK | - | ||||||
63 | case S_IFSOCK: /* socket */ never executed: case 0140000 : | 0 | ||||||
64 | *p++ = 's'; | - | ||||||
65 | break; never executed: break; | 0 | ||||||
66 | #endif | - | ||||||
67 | #ifdef S_IFIFO | - | ||||||
68 | case S_IFIFO: /* fifo */ never executed: case 0010000 : | 0 | ||||||
69 | *p++ = 'p'; | - | ||||||
70 | break; never executed: break; | 0 | ||||||
71 | #endif | - | ||||||
72 | default: /* unknown */ never executed: default: | 0 | ||||||
73 | *p++ = '?'; | - | ||||||
74 | break; never executed: break; | 0 | ||||||
75 | } | - | ||||||
76 | /* usr */ | - | ||||||
77 | if (mode & S_IRUSR)
| 0 | ||||||
78 | *p++ = 'r'; never executed: *p++ = 'r'; | 0 | ||||||
79 | else | - | ||||||
80 | *p++ = '-'; never executed: *p++ = '-'; | 0 | ||||||
81 | if (mode & S_IWUSR)
| 0 | ||||||
82 | *p++ = 'w'; never executed: *p++ = 'w'; | 0 | ||||||
83 | else | - | ||||||
84 | *p++ = '-'; never executed: *p++ = '-'; | 0 | ||||||
85 | switch (mode & (S_IXUSR | S_ISUID)) { | - | ||||||
86 | case 0: never executed: case 0: | 0 | ||||||
87 | *p++ = '-'; | - | ||||||
88 | break; never executed: break; | 0 | ||||||
89 | case S_IXUSR: never executed: case 0100 : | 0 | ||||||
90 | *p++ = 'x'; | - | ||||||
91 | break; never executed: break; | 0 | ||||||
92 | case S_ISUID: never executed: case 04000 : | 0 | ||||||
93 | *p++ = 'S'; | - | ||||||
94 | break; never executed: break; | 0 | ||||||
95 | case S_IXUSR | S_ISUID: never executed: case 0100 | 04000 : | 0 | ||||||
96 | *p++ = 's'; | - | ||||||
97 | break; never executed: break; | 0 | ||||||
98 | } | - | ||||||
99 | /* group */ | - | ||||||
100 | if (mode & S_IRGRP)
| 0 | ||||||
101 | *p++ = 'r'; never executed: *p++ = 'r'; | 0 | ||||||
102 | else | - | ||||||
103 | *p++ = '-'; never executed: *p++ = '-'; | 0 | ||||||
104 | if (mode & S_IWGRP)
| 0 | ||||||
105 | *p++ = 'w'; never executed: *p++ = 'w'; | 0 | ||||||
106 | else | - | ||||||
107 | *p++ = '-'; never executed: *p++ = '-'; | 0 | ||||||
108 | switch (mode & (S_IXGRP | S_ISGID)) { | - | ||||||
109 | case 0: never executed: case 0: | 0 | ||||||
110 | *p++ = '-'; | - | ||||||
111 | break; never executed: break; | 0 | ||||||
112 | case S_IXGRP: never executed: case (0100 >> 3) : | 0 | ||||||
113 | *p++ = 'x'; | - | ||||||
114 | break; never executed: break; | 0 | ||||||
115 | case S_ISGID: never executed: case 02000 : | 0 | ||||||
116 | *p++ = 'S'; | - | ||||||
117 | break; never executed: break; | 0 | ||||||
118 | case S_IXGRP | S_ISGID: never executed: case (0100 >> 3) | 02000 : | 0 | ||||||
119 | *p++ = 's'; | - | ||||||
120 | break; never executed: break; | 0 | ||||||
121 | } | - | ||||||
122 | /* other */ | - | ||||||
123 | if (mode & S_IROTH)
| 0 | ||||||
124 | *p++ = 'r'; never executed: *p++ = 'r'; | 0 | ||||||
125 | else | - | ||||||
126 | *p++ = '-'; never executed: *p++ = '-'; | 0 | ||||||
127 | if (mode & S_IWOTH)
| 0 | ||||||
128 | *p++ = 'w'; never executed: *p++ = 'w'; | 0 | ||||||
129 | else | - | ||||||
130 | *p++ = '-'; never executed: *p++ = '-'; | 0 | ||||||
131 | switch (mode & (S_IXOTH | S_ISVTX)) { | - | ||||||
132 | case 0: never executed: case 0: | 0 | ||||||
133 | *p++ = '-'; | - | ||||||
134 | break; never executed: break; | 0 | ||||||
135 | case S_IXOTH: never executed: case ((0100 >> 3) >> 3) : | 0 | ||||||
136 | *p++ = 'x'; | - | ||||||
137 | break; never executed: break; | 0 | ||||||
138 | case S_ISVTX: never executed: case 01000 : | 0 | ||||||
139 | *p++ = 'T'; | - | ||||||
140 | break; never executed: break; | 0 | ||||||
141 | case S_IXOTH | S_ISVTX: never executed: case ((0100 >> 3) >> 3) | 01000 : | 0 | ||||||
142 | *p++ = 't'; | - | ||||||
143 | break; never executed: break; | 0 | ||||||
144 | } | - | ||||||
145 | *p++ = ' '; /* will be a '+' if ACL's implemented */ | - | ||||||
146 | *p = '\0'; | - | ||||||
147 | } never executed: end of block | 0 | ||||||
148 | #endif | - | ||||||
Source code | Switch to Preprocessed file |