factor out windows perror equivalent
authorEvan Martin <martine@danga.com>
Tue, 20 Dec 2011 19:43:57 +0000 (11:43 -0800)
committerEvan Martin <martine@danga.com>
Tue, 20 Dec 2011 19:43:57 +0000 (11:43 -0800)
src/subprocess-win32.cc
src/util.cc
src/util.h

index 79c4eba..cf61feb 100644 (file)
 namespace {
 
 void Win32Fatal(const char* function) {
-  DWORD err = GetLastError();
-
-  char* msg_buf;
-  FormatMessageA(
-        FORMAT_MESSAGE_ALLOCATE_BUFFER |
-        FORMAT_MESSAGE_FROM_SYSTEM |
-        FORMAT_MESSAGE_IGNORE_INSERTS,
-        NULL,
-        err,
-        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
-        (char*)&msg_buf,
-        0,
-        NULL);
-  Fatal("%s: %s", function, msg_buf);
-  LocalFree(msg_buf);
+  Fatal("%s: %s", function, GetLastErrorString().c_str());
 }
 
 }  // anonymous namespace
index e8cd11e..0511806 100644 (file)
@@ -210,3 +210,24 @@ const char* SpellcheckString(const string& text, ...) {
   va_end(ap);
   return result;
 }
+
+#ifdef WIN32
+string GetLastErrorString() {
+  DWORD err = GetLastError();
+
+  char* msg_buf;
+  FormatMessageA(
+        FORMAT_MESSAGE_ALLOCATE_BUFFER |
+        FORMAT_MESSAGE_FROM_SYSTEM |
+        FORMAT_MESSAGE_IGNORE_INSERTS,
+        NULL,
+        err,
+        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+        (char*)&msg_buf,
+        0,
+        NULL);
+  string msg = msg_buf;
+  LocalFree(msg_buf);
+  return msg;
+}
+#endif
index d36e2e1..f6601d3 100644 (file)
@@ -57,6 +57,9 @@ const char* SpellcheckString(const string& text, ...);
 
 #ifdef _WIN32
 #define snprintf _snprintf
+
+/// Convert the value returned by GetLastError() into a string.
+string GetLastErrorString();
 #endif
 
 #endif  // NINJA_UTIL_H_