who: stop using static buffer, small size optimizations
diff --git a/coreutils/who.c b/coreutils/who.c
index 25d35fa..a5d3b02 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 @@
/* 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;
}