Make Win32 TimeValue::toString() re-entrant and work with mingw


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@18954 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/System/Win32/TimeValue.cpp b/lib/System/Win32/TimeValue.cpp
index f456629..de8f267 100644
--- a/lib/System/Win32/TimeValue.cpp
+++ b/lib/System/Win32/TimeValue.cpp
@@ -31,13 +31,17 @@
 }
 
 std::string TimeValue::toString() const {
-  // Alas, asctime is not re-entrant on Windows...
-
+#ifdef __MINGW
+  time_t ourTime = time_t(this->toEpochTime());
+  struct tm *lt = ::localtime(&ourTime);
+#else
   __time64_t ourTime = this->toEpochTime();
-  char* buffer = ::asctime(::_localtime64(&ourTime));
+  struct tm *lt = ::_localtime64(&ourTime);
+#endif
 
-  std::string result(buffer);
-  return result.substr(0,24);
+  char buffer[25];
+  strftime(buffer, 25, "%a %b %d %H:%M:%S %Y", lt);
+  return std::string(buffer);
 }
 
 // vim: sw=2 smartindent smarttab tw=80 autoindent expandtab