home *** CD-ROM | disk | FTP | other *** search
/ The CDPD Public Domain Collection for CDTV 3 / CDPDIII.bin / pd / programming / gnuc / string / rcs / strmode.c,v < prev    next >
Encoding:
Text File  |  1992-07-04  |  3.8 KB  |  175 lines

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