PR 47802 Hack to work around draft POSIX localtime_r
authorJanne Blomqvist <jb@gcc.gnu.org>
Fri, 4 Mar 2011 17:52:10 +0000 (19:52 +0200)
committerJanne Blomqvist <jb@gcc.gnu.org>
Fri, 4 Mar 2011 17:52:10 +0000 (19:52 +0200)
From-SVN: r170680

libgfortran/ChangeLog
libgfortran/intrinsics/ctime.c

index a628fdd8ea10cd44176eb820fe13145d5c7c998b..73e2bb2ad1318a26ad8053e5bb65805851cf2c96 100644 (file)
@@ -1,3 +1,9 @@
+2011-03-04  Janne Blomqvist  <jb@gcc.gnu.org>
+
+       PR libfortran/47802
+       * intrinsics/ctime.c (strctime): Don't use return value of
+       localtime_r.
+
 2011-02-28  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
        PR libgfortran/47567
index 7eb10f5fa2cf0edd4ff7c542c57cf2c3d46bb0c8..29a0e6f00f2fda37344d59e997023df988da4149 100644 (file)
@@ -39,9 +39,13 @@ static size_t
 strctime (char *s, size_t max, const time_t *timep)
 {
 #ifdef HAVE_STRFTIME
-  struct tm res;
-  struct tm *ltm = localtime_r (timep, &res);
-  return strftime (s, max, "%c", ltm);
+  struct tm ltm;
+  /* Note: We can't use the return value of localtime_r, as some
+     targets provide localtime_r based on a draft of the POSIX
+     standard where the return type is int rather than the
+     standardized struct tm*.  */
+  localtime_r (timep, &ltm);
+  return strftime (s, max, "%c", &ltm);
 #else
   return 0;
 #endif