/*-
 * Copyright (c) 1990 The Regents of the University of California.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. All advertising materials mentioning features or use of this software
 *    must display the following acknowledgement:
 *  This product includes software developed by the University of
 *  California, Berkeley and its contributors.
 * 4. Neither the name of the University nor the names of its contributors
 *    may be used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 */

#if defined(LIBC_SCCS) && !defined(lint)
static char *rcsid = "$OpenBSD: strmode.c,v 1.3 1997/06/13 13:57:20 deraadt Exp $";
#endif /* LIBC_SCCS and not lint */

#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <libtar/compat.h>

void
strmode(mode, p)
  register mode_t mode;
  register char *p;
{
   /* print type */
  switch (mode & S_IFMT) {
  case S_IFDIR:      /* directory */
    *p++ = 'd';
    break;
  case S_IFCHR:      /* character special */
    *p++ = 'c';
    break;
  case S_IFBLK:      /* block special */
    *p++ = 'b';
    break;
  case S_IFREG:      /* regular */
    *p++ = '-';
    break;
#ifdef S_IFLNK
  case S_IFLNK:      /* symbolic link */
    *p++ = 'l';
    break;
#endif
#ifdef S_IFSOCK
  case S_IFSOCK:      /* socket */
    *p++ = 's';
    break;
#endif
#ifdef S_IFIFO
  case S_IFIFO:      /* fifo */
    *p++ = 'p';
    break;
#endif
#ifdef S_IFWHT
  case S_IFWHT:      /* whiteout */
    *p++ = 'w';
    break;
#endif
  default:      /* unknown */
    *p++ = '?';
    break;
  }
  /* usr */
#ifdef S_IRUSR
  if (mode & S_IRUSR)
    *p++ = 'r';
  else
#endif
    *p++ = '-';

#ifdef S_IWUSR
  if (mode & S_IWUSR)
    *p++ = 'w';
  else
#endif
    *p++ = '-';

#ifndef _MSC_VER
#ifdef S_ISUID
  switch (mode & (S_IXUSR | S_ISUID)) {
#else
  switch (mode & (S_IXUSR)) {
#endif
  case 0:
    *p++ = '-';
    break;
  case S_IXUSR:
    *p++ = 'x';
    break;
#ifdef S_ISUID
  case S_ISUID:
    *p++ = 'S';
    break;
  case S_IXUSR | S_ISUID:
    *p++ = 's';
    break;
#endif
  }
#endif
  /* group */
#ifdef S_IRGRP
  if (mode & S_IRGRP)
    *p++ = 'r';
  else
#endif
    *p++ = '-';
#ifdef S_IWGRP
  if (mode & S_IWGRP)
    *p++ = 'w';
  else
#endif
    *p++ = '-';
#if defined(S_IXGRP) && defined(S_ISGID)
  switch (mode & (S_IXGRP | S_ISGID)) {
  case 0:
    *p++ = '-';
    break;
  case S_IXGRP:
    *p++ = 'x';
    break;
  case S_ISGID:
    *p++ = 'S';
    break;
  case S_IXGRP | S_ISGID:
    *p++ = 's';
    break;
  }
#else
  *p++ = '-';
#endif
#ifndef WIN32
  /* other */
  if (mode & S_IROTH)
    *p++ = 'r';
  else
    *p++ = '-';
  if (mode & S_IWOTH)
    *p++ = 'w';
  else
    *p++ = '-';
  switch (mode & (S_IXOTH | S_ISVTX)) {
  case 0:
    *p++ = '-';
    break;
  case S_IXOTH:
    *p++ = 'x';
    break;
  case S_ISVTX:
    *p++ = 'T';
    break;
  case S_IXOTH | S_ISVTX:
    *p++ = 't';
    break;
  }
#else
  *p++ = '-';
  *p++ = '-';
  *p++ = '-';
#endif
  *p++ = ' ';    /* will be a '+' if ACL's implemented */
  *p = '\0';
}
