関数 | |
void | permstring (char *perms, mode_t mode) |
Produce a string representation of Unix mode bits like that used by ls(1). |
void permstring | ( | char * | perms, | |
mode_t | mode | |||
) |
Produce a string representation of Unix mode bits like that used by ls(1).
buf | buffer of at least 11 characters |
permstring.c の 29 行で定義されています。
参照元 list_file()・list_file_entry()・log_formatted().
00030 { 00031 static const char *perm_map = "rwxrwxrwx"; 00032 int i; 00033 00034 strcpy(perms, "----------"); 00035 00036 for (i=0;i<9;i++) { 00037 if (mode & (1<<i)) perms[9-i] = perm_map[8-i]; 00038 } 00039 00040 /* Handle setuid/sticky bits. You might think the indices are 00041 * off by one, but remember there's a type char at the 00042 * start. */ 00043 if (mode & S_ISUID) 00044 perms[3] = (mode & S_IXUSR) ? 's' : 'S'; 00045 00046 if (mode & S_ISGID) 00047 perms[6] = (mode & S_IXGRP) ? 's' : 'S'; 00048 00049 #ifdef S_ISVTX 00050 if (mode & S_ISVTX) 00051 perms[9] = (mode & S_IXOTH) ? 't' : 'T'; 00052 #endif 00053 00054 if (S_ISLNK(mode)) perms[0] = 'l'; 00055 if (S_ISDIR(mode)) perms[0] = 'd'; 00056 if (S_ISBLK(mode)) perms[0] = 'b'; 00057 if (S_ISCHR(mode)) perms[0] = 'c'; 00058 if (S_ISSOCK(mode)) perms[0] = 's'; 00059 if (S_ISFIFO(mode)) perms[0] = 'p'; 00060 }