diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2007-03-07 00:07:42 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2007-03-07 00:07:42 +0000 |
commit | 41cca2b4f54a2c8dadd2469747aca91d891c0b15 (patch) | |
tree | 94e1513358497d9e73b1785c67869c0aff20507b /coreutils/who.c | |
parent | c115fdbc800d7573d61db98c4697ed12078e7684 (diff) |
who: stop using static buffer, small size optimizations
Diffstat (limited to 'coreutils/who.c')
-rw-r--r-- | coreutils/who.c | 42 |
1 files changed, 25 insertions, 17 deletions
diff --git a/coreutils/who.c b/coreutils/who.c index 25d35fad9..a5d3b02eb 100644 --- a/coreutils/who.c +++ b/coreutils/who.c @@ -21,26 +21,28 @@ #include <utmp.h> #include <time.h> -static const char * idle_string (time_t t) +static void idle_string(char *str6, time_t t) { - static char str[6]; + t = time(NULL) - t; - time_t s = time(NULL) - t; - - if (s < 60) - return "."; - if (s < (24 * 60 * 60)) { - sprintf(str, "%02d:%02d", - (int) (s / (60 * 60)), - (int) ((s % (60 * 60)) / 60)); - return str; + /*if (t < 60) { + str6[0] = '.'; + str6[1] = '\0'; + return; + }*/ + if (t >= 0 && t < (24 * 60 * 60)) { + sprintf(str6, "%02d:%02d", + (int) (t / (60 * 60)), + (int) ((t % (60 * 60)) / 60)); + return; } - return "old"; + strcpy(str6, "old"); } int who_main(int argc, char **argv); int who_main(int argc, char **argv) { + char str6[6]; struct utmp *ut; struct stat st; char *name; @@ -57,12 +59,18 @@ int who_main(int argc, char **argv) /* 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(&thyme) + 4, ut->ut_host); - if (ENABLE_FEATURE_CLEAN_UP) free(name); + str6[0] = '?'; + str6[1] = '\0'; + if (stat(name, &st) == 0) + idle_string(str6, st.st_atime); + printf("%-10s %-8s %-9s %-14.14s %s\n", + ut->ut_user, ut->ut_line, str6, + ctime(&thyme) + 4, ut->ut_host); + if (ENABLE_FEATURE_CLEAN_UP) + free(name); } } - if (ENABLE_FEATURE_CLEAN_UP) endutent(); + if (ENABLE_FEATURE_CLEAN_UP) + endutent(); return 0; } |