summaryrefslogtreecommitdiffhomepage
path: root/coreutils
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2007-03-07 00:07:42 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2007-03-07 00:07:42 +0000
commit41cca2b4f54a2c8dadd2469747aca91d891c0b15 (patch)
tree94e1513358497d9e73b1785c67869c0aff20507b /coreutils
parentc115fdbc800d7573d61db98c4697ed12078e7684 (diff)
who: stop using static buffer, small size optimizations
Diffstat (limited to 'coreutils')
-rw-r--r--coreutils/who.c42
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;
}