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