aboutsummaryrefslogtreecommitdiff
path: root/coreutils/who.c
diff options
context:
space:
mode:
authorRob Landley <rob@landley.net>2006-03-12 19:26:01 +0000
committerRob Landley <rob@landley.net>2006-03-12 19:26:01 +0000
commite01d746fe962e1c3de57f8b909abc9801ecceff1 (patch)
treed33d03da8572bbce56bdcf2e77f42ad45f1c6379 /coreutils/who.c
parent1c60d9762e150ed9f3bd4584a639ff2d6996699c (diff)
downloadbusybox-w32-e01d746fe962e1c3de57f8b909abc9801ecceff1.tar.gz
busybox-w32-e01d746fe962e1c3de57f8b909abc9801ecceff1.tar.bz2
busybox-w32-e01d746fe962e1c3de57f8b909abc9801ecceff1.zip
Cleanup patch from tito.
Diffstat (limited to 'coreutils/who.c')
-rw-r--r--coreutils/who.c77
1 files changed, 37 insertions, 40 deletions
diff --git a/coreutils/who.c b/coreutils/who.c
index 2773e1a8b..0cb74313e 100644
--- a/coreutils/who.c
+++ b/coreutils/who.c
@@ -21,48 +21,45 @@
21#include <time.h> 21#include <time.h>
22#include "busybox.h" 22#include "busybox.h"
23 23
24int who_main(int argc, char **argv) 24static const char * idle_string (time_t t)
25{ 25{
26 struct utmp *ut; 26 static char str[6];
27 struct stat st; 27
28 time_t idle; 28 time_t s = time(NULL) - t;
29 char *name;
30
31 if (argc > 1)
32 bb_show_usage();
33
34 setutent();
35 printf("USER TTY IDLE FROM HOST\n");
36
37 while ((ut = getutent()) != NULL) {
38
39 if (ut->ut_user[0] && ut->ut_type == USER_PROCESS) {
40 /* ut->ut_line is device name of tty - "/dev/" */
41 printf("%-10s %-8s ", ut->ut_user, ut->ut_line);
42
43 name = concat_path_file("/dev/", ut->ut_line);
44 if (stat(name, &st) == 0) {
45 idle = time(NULL) - st.st_atime;
46 29
47 if (idle < 60) 30 if (s < 60)
48 printf("00:00m "); 31 return ".";
49 else if (idle < (60 * 60)) 32 if (s < (24 * 60 * 60)) {
50 printf("00:%02dm ", (int)(idle / 60)); 33 sprintf (str, "%02d:%02d",
51 else if (idle < (24 * 60 * 60)) 34 (int) (s / (60 * 60)),
52 printf("%02d:%02dm ", (int)(idle / (60 * 60)), 35 (int) ((s % (60 * 60)) / 60));
53 (int)(idle % (60 * 60)) / 60); 36 return (const char *) str;
54 else if (idle < (24 * 60 * 60 * 365))
55 printf("%03ddays ", (int)(idle / (24 * 60 * 60)));
56 else
57 printf("%02dyears ", (int) (idle / (24 * 60 * 60 * 365)));
58 } else
59 printf("%-8s ", "?");
60
61 printf("%-12.12s %s\n", ctime((time_t*)&(ut->ut_tv.tv_sec)) + 4, ut->ut_host);
62 free(name);
63 } 37 }
64 } 38 return "old";
65 endutent(); 39}
66 40
67 return 0; 41int who_main(int argc, char **argv)
42{
43 struct utmp *ut;
44 struct stat st;
45 char *name;
46
47 if (argc > 1) {
48 bb_show_usage();
49 }
50
51 setutent();
52 printf("USER TTY IDLE TIME HOST\n");
53 while ((ut = getutent()) != NULL) {
54 if (ut->ut_user[0] && ut->ut_type == USER_PROCESS) {
55 /* ut->ut_line is device name of tty - "/dev/" */
56 name = concat_path_file("/dev", ut->ut_line);
57 printf("%-10s %-8s %-8s %-12.12s %s\n", ut->ut_user, ut->ut_line,
58 (stat(name, &st)) ? "?" : idle_string(st.st_atime),
59 ctime((time_t*)&(ut->ut_tv.tv_sec)) + 4, ut->ut_host);
60 free(name);
61 }
62 }
63 endutent();
64 return 0;
68} 65}