diff --git a/coreutils/who.c b/coreutils/who.c index 1156ba20f..2773e1a8b 100644 --- a/coreutils/who.c +++ b/coreutils/who.c @@ -14,14 +14,10 @@ *---------------------------------------------------------------------- */ -#include -#include -#include +#include #include #include #include -#include -#include #include #include "busybox.h" @@ -29,36 +25,24 @@ int who_main(int argc, char **argv) { struct utmp *ut; struct stat st; - int devlen, len; - time_t now, idle; + time_t idle; + char *name; if (argc > 1) bb_show_usage(); setutent(); - devlen = sizeof("/dev/") - 1; printf("USER TTY IDLE FROM HOST\n"); while ((ut = getutent()) != NULL) { - char name[40]; if (ut->ut_user[0] && ut->ut_type == USER_PROCESS) { - len = strlen(ut->ut_line); - if (ut->ut_line[0] == '/') { - strncpy(name, ut->ut_line, len); - name[len] = '\0'; - strcpy(ut->ut_line, ut->ut_line + devlen); - } else { - strcpy(name, "/dev/"); - strncpy(name+devlen, ut->ut_line, len); - name[devlen+len] = '\0'; - } - + /* ut->ut_line is device name of tty - "/dev/" */ printf("%-10s %-8s ", ut->ut_user, ut->ut_line); + name = concat_path_file("/dev/", ut->ut_line); if (stat(name, &st) == 0) { - now = time(NULL); - idle = now - st.st_atime; + idle = time(NULL) - st.st_atime; if (idle < 60) printf("00:00m "); @@ -75,6 +59,7 @@ int who_main(int argc, char **argv) printf("%-8s ", "?"); printf("%-12.12s %s\n", ctime((time_t*)&(ut->ut_tv.tv_sec)) + 4, ut->ut_host); + free(name); } } endutent();