who: stop using static buffer, small size optimizations
No binary (build failed)
—
(log yok)
| @@ -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; | |
| } | |