diff options
Diffstat (limited to 'who.c')
-rw-r--r-- | who.c | 54 |
1 files changed, 52 insertions, 2 deletions
@@ -21,7 +21,16 @@ enum { IDLE = 1<<10, }; -char * utmpx_time(const struct utmpx *u) +static int utmpx_exit(const struct utmpx *u) +{ + #ifdef __linux__ + return u->ut_exit.__e_exit; + #else + return 0; + #endif +} + +static char * utmpx_time(const struct utmpx *u) { static char dt[32]; time_t t = u->ut_tv.tv_sec; @@ -30,7 +39,7 @@ char * utmpx_time(const struct utmpx *u) return dt; } -char utmpx_state(const struct utmpx *u) +static char utmpx_state(const struct utmpx *u) { char term[FILENAME_MAX]; snprintf(term, sizeof(term), "/dev/%s", u->ut_line); @@ -156,6 +165,10 @@ int main(int argc, char *argv[]) strcpy(u->ut_line, "system boot"); } + if (u->ut_type == DEAD_PROCESS && !(flags & DEAD)) { + continue; + } + if (!strcmp(u->ut_user, "runlevel")) { if (!(flags & RUNLEVEL)) { continue; @@ -182,6 +195,43 @@ int main(int argc, char *argv[]) /* exit */ } + if ((flags & DEAD) && u->ut_type == DEAD_PROCESS) { + printf("\texit=%d", utmpx_exit(u)); + } + + /* + printf("\t"); + switch (u->ut_type) { + case EMPTY: + printf("EMPTY"); + break; + case BOOT_TIME: + printf("BOOT_TIME"); + break; + case OLD_TIME: + printf("OLD_TIME"); + break; + case NEW_TIME: + printf("NEW_TIME"); + break; + case USER_PROCESS: + printf("USER_PROCESS"); + break; + case INIT_PROCESS: + printf("INIT_PROCESS"); + break; + case LOGIN_PROCESS: + printf("LOGIN_PROCESS"); + break; + case DEAD_PROCESS: + printf("DEAD_PROCESS"); + break; + default: + printf("Unknown type (%hd)", u->ut_type); + break; + } + */ + printf("\n"); } |