Annotation of embedaddon/rsync/lib/permstring.c, revision 1.1.1.3

1.1       misho       1: /*
                      2:  * A single utility routine.
                      3:  *
                      4:  * Copyright (C) 1996 Andrew Tridgell
                      5:  * Copyright (C) 1996 Paul Mackerras
                      6:  * Copyright (C) 2001 Martin Pool <mbp@samba.org>
1.1.1.3 ! misho       7:  * Copyright (C) 2003-2019 Wayne Davison
1.1       misho       8:  *
                      9:  * This program is free software; you can redistribute it and/or modify
                     10:  * it under the terms of the GNU General Public License as published by
                     11:  * the Free Software Foundation; either version 3 of the License, or
                     12:  * (at your option) any later version.
                     13:  *
                     14:  * This program is distributed in the hope that it will be useful,
                     15:  * but WITHOUT ANY WARRANTY; without even the implied warranty of
                     16:  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     17:  * GNU General Public License for more details.
                     18:  *
                     19:  * You should have received a copy of the GNU General Public License along
                     20:  * with this program; if not, visit the http://fsf.org website.
                     21:  */
                     22: 
                     23: #include "rsync.h"
                     24: 
                     25: /* Produce a string representation of Unix mode bits like that used by ls(1).
                     26:  * The "buf" buffer must be at least 11 characters. */
                     27: void permstring(char *perms, mode_t mode)
                     28: {
                     29:        static const char *perm_map = "rwxrwxrwx";
                     30:        int i;
                     31: 
                     32:        strlcpy(perms, "----------", 11);
                     33: 
                     34:        for (i = 0; i < 9; i++) {
                     35:                if (mode & (1 << i))
                     36:                        perms[9-i] = perm_map[8-i];
                     37:        }
                     38: 
                     39:        /* Handle setuid/sticky bits.  You might think the indices are
                     40:         * off by one, but remember there's a type char at the
                     41:         * start.  */
                     42:        if (mode & S_ISUID)
                     43:                perms[3] = (mode & S_IXUSR) ? 's' : 'S';
                     44: 
                     45:        if (mode & S_ISGID)
                     46:                perms[6] = (mode & S_IXGRP) ? 's' : 'S';
                     47: 
                     48: #ifdef S_ISVTX
                     49:        if (mode & S_ISVTX)
                     50:                perms[9] = (mode & S_IXOTH) ? 't' : 'T';
                     51: #endif
                     52: 
                     53:        if (S_ISDIR(mode))
                     54:                perms[0] = 'd';
                     55:        else if (S_ISLNK(mode))
                     56:                perms[0] = 'l';
                     57:        else if (S_ISBLK(mode))
                     58:                perms[0] = 'b';
                     59:        else if (S_ISCHR(mode))
                     60:                perms[0] = 'c';
                     61:        else if (S_ISSOCK(mode))
                     62:                perms[0] = 's';
                     63:        else if (S_ISFIFO(mode))
                     64:                perms[0] = 'p';
                     65: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>