|
|
1.1 ! root 1: /*- ! 2: * Copyright (c) 1990 The Regents of the University of California. ! 3: * All rights reserved. ! 4: * ! 5: * Redistribution and use in source and binary forms are permitted ! 6: * provided that: (1) source distributions retain this entire copyright ! 7: * notice and comment, and (2) distributions including binaries display ! 8: * the following acknowledgement: ``This product includes software ! 9: * developed by the University of California, Berkeley and its contributors'' ! 10: * in the documentation or other materials provided with the distribution ! 11: * and in all advertising materials mentioning features or use of this ! 12: * software. Neither the name of the University nor the names of its ! 13: * contributors may be used to endorse or promote products derived ! 14: * from this software without specific prior written permission. ! 15: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR ! 16: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED ! 17: * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ! 18: */ ! 19: ! 20: #if defined(LIBC_SCCS) && !defined(lint) ! 21: static char sccsid[] = "@(#)strmode.c 5.3 (Berkeley) 5/18/90"; ! 22: #endif /* LIBC_SCCS and not lint */ ! 23: ! 24: #include <sys/types.h> ! 25: #include <sys/stat.h> ! 26: #include <string.h> ! 27: ! 28: void ! 29: strmode(mode, p) ! 30: register mode_t mode; ! 31: register char *p; ! 32: { ! 33: /* print type */ ! 34: switch (mode & S_IFMT) { ! 35: case S_IFDIR: /* directory */ ! 36: *p++ = 'd'; ! 37: break; ! 38: case S_IFCHR: /* character special */ ! 39: *p++ = 'c'; ! 40: break; ! 41: case S_IFBLK: /* block special */ ! 42: *p++ = 'b'; ! 43: break; ! 44: case S_IFREG: /* regular */ ! 45: *p++ = '-'; ! 46: break; ! 47: case S_IFLNK: /* symbolic link */ ! 48: *p++ = 'l'; ! 49: break; ! 50: case S_IFSOCK: /* socket */ ! 51: *p++ = 's'; ! 52: break; ! 53: #ifdef S_IFIFO ! 54: case S_IFIFO: /* fifo */ ! 55: *p++ = 'p'; ! 56: break; ! 57: #endif ! 58: default: /* unknown */ ! 59: *p++ = '?'; ! 60: break; ! 61: } ! 62: /* usr */ ! 63: if (mode & S_IRUSR) ! 64: *p++ = 'r'; ! 65: else ! 66: *p++ = '-'; ! 67: if (mode & S_IWUSR) ! 68: *p++ = 'w'; ! 69: else ! 70: *p++ = '-'; ! 71: switch (mode & (S_IXUSR | S_ISUID)) { ! 72: case 0: ! 73: *p++ = '-'; ! 74: break; ! 75: case S_IXUSR: ! 76: *p++ = 'x'; ! 77: break; ! 78: case S_ISUID: ! 79: *p++ = 'S'; ! 80: break; ! 81: case S_IXUSR | S_ISUID: ! 82: *p++ = 's'; ! 83: break; ! 84: } ! 85: /* group */ ! 86: if (mode & S_IRGRP) ! 87: *p++ = 'r'; ! 88: else ! 89: *p++ = '-'; ! 90: if (mode & S_IWGRP) ! 91: *p++ = 'w'; ! 92: else ! 93: *p++ = '-'; ! 94: switch (mode & (S_IXGRP | S_ISGID)) { ! 95: case 0: ! 96: *p++ = '-'; ! 97: break; ! 98: case S_IXGRP: ! 99: *p++ = 'x'; ! 100: break; ! 101: case S_ISGID: ! 102: *p++ = 'S'; ! 103: break; ! 104: case S_IXGRP | S_ISGID: ! 105: *p++ = 's'; ! 106: break; ! 107: } ! 108: /* other */ ! 109: if (mode & S_IROTH) ! 110: *p++ = 'r'; ! 111: else ! 112: *p++ = '-'; ! 113: if (mode & S_IWOTH) ! 114: *p++ = 'w'; ! 115: else ! 116: *p++ = '-'; ! 117: switch (mode & (S_IXOTH | S_ISVTX)) { ! 118: case 0: ! 119: *p++ = '-'; ! 120: break; ! 121: case S_IXOTH: ! 122: *p++ = 'x'; ! 123: break; ! 124: case S_ISVTX: ! 125: *p++ = 'T'; ! 126: break; ! 127: case S_IXOTH | S_ISVTX: ! 128: *p++ = 't'; ! 129: break; ! 130: } ! 131: *p++ = ' '; /* will be a '+' if ACL's implemented */ ! 132: *p = '\0'; ! 133: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.