Don't dump core if ctime returns NULL; this is possible on
authorJim Meyering <jim@meyering.net>
Sun, 20 Jun 2004 06:53:05 +0000 (06:53 +0000)
committerJim Meyering <jim@meyering.net>
Sun, 20 Jun 2004 06:53:05 +0000 (06:53 +0000)
hosts with 64-bit time_t and 32-bit int.

Include "inttostr.h".
(time_string): If ctime fails, print the raw time as an integer
instead of dumping core.

src/who.c

index 554ae165692d60021b0b31fed1eeada52148e296..6dd1203e6c89f5810162ab5b9530bc82a86cf2d6 100644 (file)
--- a/src/who.c
+++ b/src/who.c
@@ -33,6 +33,7 @@
 
 #include "readutmp.h"
 #include "error.h"
+#include "inttostr.h"
 #include "vasprintf.h"
 
 /* The official name of this program (e.g., no `g' prefix).  */
@@ -233,8 +234,17 @@ time_string (const STRUCT_UTMP *utmp_ent)
      the tv_sec member of a struct timeval value.''  */
   time_t tm = UT_TIME_MEMBER (utmp_ent);
 
-  char *ptr = ctime (&tm) + 4;
-  ptr[12] = '\0';
+  char *ptr = ctime (&tm);
+  if (ptr)
+    {
+      ptr += 4;
+      ptr[12] = '\0';
+    }
+  else
+    {
+      static char buf[INT_BUFSIZE_BOUND (intmax_t)];
+      ptr = (TYPE_SIGNED (time_t) ? imaxtostr (tm, buf) : umaxtostr (tm, buf));
+    }
   return ptr;
 }