source: rtems/cpukit/libmisc/shell/filemode.c @ 26597fc1

4.115
Last change on this file since 26597fc1 was 26597fc1, checked in by Ralf Corsepius <ralf.corsepius@…>, on 12/04/11 at 09:39:44

2011-12-04 Ralf Corsépius <ralf.corsepius@…>

  • libmisc/shell/cat_file.c: #include <rtems/shell.h>.
  • libmisc/shell/filemode.c: #include "internal.h".
  • libmisc/shell/shell.h: Declare functions "extern".
  • Property mode set to 100644
File size: 3.6 KB
Line 
1/*-
2 * Copyright (c) 1990, 1993
3 *      The Regents of the University of California.  All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 *    notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 *    notice, this list of conditions and the following disclaimer in the
12 *    documentation and/or other materials provided with the distribution.
13 * 4. Neither the name of the University nor the names of its contributors
14 *    may be used to endorse or promote products derived from this software
15 *    without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
28 */
29
30#ifdef HAVE_CONFIG_H
31#include "config.h"
32#endif
33
34#if defined(LIBC_SCCS) && !defined(lint)
35static char sccsid[] = "@(#)strmode.c   8.3 (Berkeley) 8/15/94";
36#endif /* LIBC_SCCS and not lint */
37#include <sys/cdefs.h>
38__FBSDID("$FreeBSD: src/lib/libc/string/strmode.c,v 1.5 2007/01/09 00:28:12 imp Exp $");
39
40#include <sys/types.h>
41#include <sys/stat.h>
42#include <string.h>
43
44#include "internal.h"
45
46void
47strmode(
48        mode_t mode,
49        char *p)
50{
51         /* print type */
52        switch (mode & S_IFMT) {
53        case S_IFDIR:                   /* directory */
54                *p++ = 'd';
55                break;
56        case S_IFCHR:                   /* character special */
57                *p++ = 'c';
58                break;
59        case S_IFBLK:                   /* block special */
60                *p++ = 'b';
61                break;
62        case S_IFREG:                   /* regular */
63                *p++ = '-';
64                break;
65        case S_IFLNK:                   /* symbolic link */
66                *p++ = 'l';
67                break;
68        case S_IFSOCK:                  /* socket */
69                *p++ = 's';
70                break;
71#ifdef S_IFIFO
72        case S_IFIFO:                   /* fifo */
73                *p++ = 'p';
74                break;
75#endif
76#ifdef S_IFWHT
77        case S_IFWHT:                   /* whiteout */
78                *p++ = 'w';
79                break;
80#endif
81        default:                        /* unknown */
82                *p++ = '?';
83                break;
84        }
85        /* usr */
86        if (mode & S_IRUSR)
87                *p++ = 'r';
88        else
89                *p++ = '-';
90        if (mode & S_IWUSR)
91                *p++ = 'w';
92        else
93                *p++ = '-';
94        switch (mode & (S_IXUSR | S_ISUID)) {
95        case 0:
96                *p++ = '-';
97                break;
98        case S_IXUSR:
99                *p++ = 'x';
100                break;
101        case S_ISUID:
102                *p++ = 'S';
103                break;
104        case S_IXUSR | S_ISUID:
105                *p++ = 's';
106                break;
107        }
108        /* group */
109        if (mode & S_IRGRP)
110                *p++ = 'r';
111        else
112                *p++ = '-';
113        if (mode & S_IWGRP)
114                *p++ = 'w';
115        else
116                *p++ = '-';
117        switch (mode & (S_IXGRP | S_ISGID)) {
118        case 0:
119                *p++ = '-';
120                break;
121        case S_IXGRP:
122                *p++ = 'x';
123                break;
124        case S_ISGID:
125                *p++ = 'S';
126                break;
127        case S_IXGRP | S_ISGID:
128                *p++ = 's';
129                break;
130        }
131        /* other */
132        if (mode & S_IROTH)
133                *p++ = 'r';
134        else
135                *p++ = '-';
136        if (mode & S_IWOTH)
137                *p++ = 'w';
138        else
139                *p++ = '-';
140        switch (mode & (S_IXOTH | S_ISVTX)) {
141        case 0:
142                *p++ = '-';
143                break;
144        case S_IXOTH:
145                *p++ = 'x';
146                break;
147        case S_ISVTX:
148                *p++ = 'T';
149                break;
150        case S_IXOTH | S_ISVTX:
151                *p++ = 't';
152                break;
153        }
154        *p++ = ' ';             /* will be a '+' if ACL's implemented */
155        *p = '\0';
156}
Note: See TracBrowser for help on using the repository browser.