version 1.21, 2015/10/10 20:35:01 |
version 1.22, 2018/09/16 02:42:19 |
|
|
int hilo, int what) |
int hilo, int what) |
{ |
{ |
u_int64_t data; |
u_int64_t data; |
char *sdata, lfmt[24], tmp[20]; |
char lfmt[24], tmp[20]; |
char smode[12], sid[12], path[PATH_MAX + 4]; |
char smode[12], sid[12], path[PATH_MAX + 4]; |
struct passwd *pw; |
const char *sdata; |
struct group *gr; |
|
struct tm *tm; |
struct tm *tm; |
time_t secs; |
time_t secs; |
long nsecs; |
long nsecs; |
|
|
small = (sizeof(st->st_mode) == 4); |
small = (sizeof(st->st_mode) == 4); |
data = st->st_mode; |
data = st->st_mode; |
strmode(st->st_mode, smode); |
strmode(st->st_mode, smode); |
sdata = smode; |
l = strlen(smode); |
l = strlen(sdata); |
if (smode[l - 1] == ' ') |
if (sdata[l - 1] == ' ') |
smode[--l] = '\0'; |
sdata[--l] = '\0'; |
switch (hilo) { |
if (hilo == HIGH_PIECE) { |
case HIGH_PIECE: |
data >>= 12; |
data >>= 12; |
sdata += 1; |
smode[4] = '\0'; |
sdata[3] = '\0'; |
sdata = smode + 1; |
hilo = 0; |
break; |
} else if (hilo == MIDDLE_PIECE) { |
case MIDDLE_PIECE: |
data = (data >> 9) & 07; |
data = (data >> 9) & 07; |
sdata += 4; |
smode[7] = '\0'; |
sdata[3] = '\0'; |
sdata = smode + 4; |
hilo = 0; |
break; |
} else if (hilo == LOW_PIECE) { |
case LOW_PIECE: |
data &= 0777; |
data &= 0777; |
sdata += 7; |
smode[10] = '\0'; |
sdata[3] = '\0'; |
sdata = smode + 7; |
hilo = 0; |
break; |
|
default: |
|
sdata = smode; |
|
break; |
} |
} |
|
hilo = 0; |
formats = FMTF_DECIMAL | FMTF_OCTAL | FMTF_UNSIGNED | FMTF_HEX | |
formats = FMTF_DECIMAL | FMTF_OCTAL | FMTF_UNSIGNED | FMTF_HEX | |
FMTF_STRING; |
FMTF_STRING; |
if (ofmt == 0) |
if (ofmt == 0) |
|
|
case SHOW_st_uid: |
case SHOW_st_uid: |
small = (sizeof(st->st_uid) == 4); |
small = (sizeof(st->st_uid) == 4); |
data = st->st_uid; |
data = st->st_uid; |
if ((pw = getpwuid(st->st_uid)) != NULL) |
sdata = user_from_uid(st->st_uid, 1); |
sdata = pw->pw_name; |
if (sdata == NULL) { |
else { |
|
snprintf(sid, sizeof(sid), "(%ld)", (long)st->st_uid); |
snprintf(sid, sizeof(sid), "(%ld)", (long)st->st_uid); |
sdata = sid; |
sdata = sid; |
} |
} |
|
|
case SHOW_st_gid: |
case SHOW_st_gid: |
small = (sizeof(st->st_gid) == 4); |
small = (sizeof(st->st_gid) == 4); |
data = st->st_gid; |
data = st->st_gid; |
if ((gr = getgrgid(st->st_gid)) != NULL) |
sdata = group_from_gid(st->st_uid, 1); |
sdata = gr->gr_name; |
if (sdata == NULL) { |
else { |
|
snprintf(sid, sizeof(sid), "(%ld)", (long)st->st_gid); |
snprintf(sid, sizeof(sid), "(%ld)", (long)st->st_gid); |
sdata = sid; |
sdata = sid; |
} |
} |
|
|
small = 0; |
small = 0; |
data = 0; |
data = 0; |
sdata = smode; |
sdata = smode; |
sdata[0] = '\0'; |
smode[0] = '\0'; |
if (hilo == 0 || hilo == LOW_PIECE) { |
if (hilo == 0 || hilo == LOW_PIECE) { |
switch (st->st_mode & S_IFMT) { |
switch (st->st_mode & S_IFMT) { |
case S_IFIFO: |
case S_IFIFO: |
(void)strlcat(sdata, "|", sizeof(smode)); |
(void)strlcat(smode, "|", sizeof(smode)); |
break; |
break; |
case S_IFDIR: |
case S_IFDIR: |
(void)strlcat(sdata, "/", sizeof(smode)); |
(void)strlcat(smode, "/", sizeof(smode)); |
break; |
break; |
case S_IFREG: |
case S_IFREG: |
if (st->st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)) |
if (st->st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)) |
(void)strlcat(sdata, "*", |
(void)strlcat(smode, "*", |
sizeof(smode)); |
sizeof(smode)); |
break; |
break; |
case S_IFLNK: |
case S_IFLNK: |
(void)strlcat(sdata, "@", sizeof(smode)); |
(void)strlcat(smode, "@", sizeof(smode)); |
break; |
break; |
case S_IFSOCK: |
case S_IFSOCK: |
(void)strlcat(sdata, "=", sizeof(smode)); |
(void)strlcat(smode, "=", sizeof(smode)); |
break; |
break; |
} |
} |
hilo = 0; |
hilo = 0; |