myth7> list /usr/class/cs110/WWW
drwxr-xr-x 8 70296 root 2048 Sep 24 15:07 .
drwxr-xr-x >9 root root 2048 Sep 25 12:46 ..
drwxr-xr-x 2 70296 root 2048 Sep 24 09:23 restricted
drwx------ 2 poohbear operator 2048 Sep 24 09:23 repos
drwx------ >9 poohbear operator 2048 Sep 25 16:29 autumn-2017
-rw------- 1 poohbear operator 89 Sep 24 15:03 index.html
Implementation of list's listPermissions:
static inline void updatePermissionsBit(bool flag, char permissions[], size_t column, char ch) {
if (flag) permissions[column] = ch;
}
static const size_t kNumPermissionColumns = 10;
static const char kPermissionChars[] = {'r', 'w', 'x'};
static const size_t kNumPermissionChars = sizeof(kPermissionChars);
static const mode_t kPermissionFlags[] = {
S_IRUSR, S_IWUSR, S_IXUSR, // user flags
S_IRGRP, S_IWGRP, S_IXGRP, // group flags
S_IROTH, S_IWOTH, S_IXOTH // everyone (other) flags
};
static const size_t kNumPermissionFlags = sizeof(kPermissionFlags)/sizeof(kPermissionFlags[0]);
static void listPermissions(mode_t mode) {
char permissions[kNumPermissionColumns + 1];
memset(permissions, '-', sizeof(permissions));
permissions[kNumPermissionColumns] = '\0';
updatePermissionsBit(S_ISDIR(mode), permissions, 0, 'd');
updatePermissionsBit(S_ISLNK(mode), permissions, 0, 'l');
for (size_t i = 0; i < kNumPermissionFlags; i++) {
updatePermissionsBit(mode & kPermissionFlags[i], permissions, i + 1,
kPermissionChars[i % kNumPermissionChars]);
}
printf("%s ", permissions);
}