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 <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;
}