who: stop using static buffer, small size optimizations

This commit is contained in:
Denis Vlasenko 2007-03-07 00:07:42 +00:00
parent c115fdbc80
commit 41cca2b4f5

View File

@ -21,26 +21,28 @@
#include <utmp.h> #include <utmp.h>
#include <time.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 (t < 60) {
str6[0] = '.';
if (s < 60) str6[1] = '\0';
return "."; return;
if (s < (24 * 60 * 60)) { }*/
sprintf(str, "%02d:%02d", if (t >= 0 && t < (24 * 60 * 60)) {
(int) (s / (60 * 60)), sprintf(str6, "%02d:%02d",
(int) ((s % (60 * 60)) / 60)); (int) (t / (60 * 60)),
return str; (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);
int who_main(int argc, char **argv) int who_main(int argc, char **argv)
{ {
char str6[6];
struct utmp *ut; struct utmp *ut;
struct stat st; struct stat st;
char *name; char *name;
@ -57,12 +59,18 @@ int who_main(int argc, char **argv)
/* ut->ut_line is device name of tty - "/dev/" */ /* ut->ut_line is device name of tty - "/dev/" */
name = concat_path_file("/dev", ut->ut_line); name = concat_path_file("/dev", ut->ut_line);
printf("%-10s %-8s %-8s %-12.12s %s\n", ut->ut_user, ut->ut_line, str6[0] = '?';
(stat(name, &st)) ? "?" : idle_string(st.st_atime), str6[1] = '\0';
ctime(&thyme) + 4, ut->ut_host); if (stat(name, &st) == 0)
if (ENABLE_FEATURE_CLEAN_UP) free(name); 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; return 0;
} }