For PR797:
Remove all exception code from Program.inc and implement its new interface
with an ErrMsg string argument.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29790 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/System/Win32/Win32.h b/lib/System/Win32/Win32.h
index ef2d66f..7243548 100644
--- a/lib/System/Win32/Win32.h
+++ b/lib/System/Win32/Win32.h
@@ -44,6 +44,20 @@
   throw s;
 }
 
+inline void MakeErrMsg(std::string* ErrMsg, const std::string& prefix) {
+  if (!ErrMsg)
+    return;
+  char *buffer = NULL;
+  FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM,
+      NULL, GetLastError(), 0, (LPSTR)&buffer, 1, NULL);
+  ErrMsg = prefix + buffer;
+  LocalFree(buffer);
+}
+
 inline void ThrowErrno(const std::string& prefix) {
-    ThrowError(prefix + ": " + strerror(errno));
+  ThrowError(prefix + ": " + strerror(errno));
+}
+
+inline void MakeErrnoMsg(std::string* ErrMsg, const std::string & prefix) {
+  MakeErrorMsg(prefix + ": " + strerror(errno));
 }