+int who_main(int argc, char **argv)
+{
+ struct utmp *ut;
+ struct stat st;
+ char *name;
+
+ if (argc > 1) {
+ bb_show_usage();
+ }
+
+ setutent();
+ printf("USER TTY IDLE TIME HOST\n");
+ while ((ut = getutent()) != NULL) {
+ if (ut->ut_user[0] && ut->ut_type == USER_PROCESS) {
+ /* ut->ut_line is device name of tty - "/dev/" */
+ name = concat_path_file("/dev", ut->ut_line);
+ printf("%-10s %-8s %-8s %-12.12s %s\n", ut->ut_user, ut->ut_line,
+ (stat(name, &st)) ? "?" : idle_string(st.st_atime),
+ ctime((time_t*)&(ut->ut_tv.tv_sec)) + 4, ut->ut_host);
+ free(name);
+ }
+ }
+ endutent();
+ return 0;