17aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley/* who.c - display who is on the system
25232ac079353fb3779e480b74e87c714af6ee707Luis Felipe Strano Moraes *
35232ac079353fb3779e480b74e87c714af6ee707Luis Felipe Strano Moraes * Copyright 2012 ProFUSION Embedded Systems
45232ac079353fb3779e480b74e87c714af6ee707Luis Felipe Strano Moraes *
55232ac079353fb3779e480b74e87c714af6ee707Luis Felipe Strano Moraes * by Luis Felipe Strano Moraes <lfelipe@profusion.mobi>
65232ac079353fb3779e480b74e87c714af6ee707Luis Felipe Strano Moraes *
7f91b7c89bc852868692b9518185421ebb52d67b3Rob Landley * See http://opengroup.org/onlinepubs/9699919799/utilities/who.html
8da7fc1c863c15d9e5fe67185aa3ea47344d1c4ddRob Landley *
9da7fc1c863c15d9e5fe67185aa3ea47344d1c4ddRob Landley * Posix says to support many options (-abdHlmpqrstTu) but this
10da7fc1c863c15d9e5fe67185aa3ea47344d1c4ddRob Landley * isn't aimed at minicomputers with modem pools.
115232ac079353fb3779e480b74e87c714af6ee707Luis Felipe Strano Moraes
121dd3704c5ffea926f61a96bb7de7d9dbee52fa44Paul BarkerUSE_WHO(NEWTOY(who, "a", TOYFLAG_USR|TOYFLAG_BIN))
135232ac079353fb3779e480b74e87c714af6ee707Luis Felipe Strano Moraes
145232ac079353fb3779e480b74e87c714af6ee707Luis Felipe Strano Moraesconfig WHO
157aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley  bool "who"
16da7fc1c863c15d9e5fe67185aa3ea47344d1c4ddRob Landley  default y
1746ddf0e34b03f7711a9c80f7a70dc8cbf732f782Isaac Dunham  depends on TOYBOX_UTMPX
187aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley  help
197aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley    usage: who
205232ac079353fb3779e480b74e87c714af6ee707Luis Felipe Strano Moraes
217aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley    Print logged user information on system
225232ac079353fb3779e480b74e87c714af6ee707Luis Felipe Strano Moraes*/
235232ac079353fb3779e480b74e87c714af6ee707Luis Felipe Strano Moraes
24da7fc1c863c15d9e5fe67185aa3ea47344d1c4ddRob Landley#define FOR_who
255232ac079353fb3779e480b74e87c714af6ee707Luis Felipe Strano Moraes#include "toys.h"
265232ac079353fb3779e480b74e87c714af6ee707Luis Felipe Strano Moraes
275232ac079353fb3779e480b74e87c714af6ee707Luis Felipe Strano Moraesvoid who_main(void)
285232ac079353fb3779e480b74e87c714af6ee707Luis Felipe Strano Moraes{
297aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley  struct utmpx *entry;
305232ac079353fb3779e480b74e87c714af6ee707Luis Felipe Strano Moraes
317aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley  setutxent();
320352f4257da11908b211d704a9ef38e0055711e5Luis Felipe Strano Moraes
337aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley  while ((entry = getutxent())) {
34da7fc1c863c15d9e5fe67185aa3ea47344d1c4ddRob Landley    if ((toys.optflags & FLAG_a) || entry->ut_type == USER_PROCESS) {
357aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley      time_t time;
367aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley      int time_size;
37da7fc1c863c15d9e5fe67185aa3ea47344d1c4ddRob Landley      char *times;
380352f4257da11908b211d704a9ef38e0055711e5Luis Felipe Strano Moraes
397aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley      time = entry->ut_tv.tv_sec;
407aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley      times = ctime(&time);
417aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley      time_size = strlen(times) - 2;
427aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley      printf("%s\t%s\t%*.*s\t(%s)\n", entry->ut_user, entry->ut_line,
437aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley        time_size, time_size, ctime(&time), entry->ut_host);
445232ac079353fb3779e480b74e87c714af6ee707Luis Felipe Strano Moraes    }
457aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley  }
465232ac079353fb3779e480b74e87c714af6ee707Luis Felipe Strano Moraes
477aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley  endutxent();
485232ac079353fb3779e480b74e87c714af6ee707Luis Felipe Strano Moraes}
49