diff common/logging.c @ 260:e7a8b70021b6

Merged
author Sascha Wilde <wilde@intevation.de>
date Tue, 01 Apr 2014 15:46:40 +0200
parents bd7fb50078b4
children 17e1c8f37d72
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/common/logging.c	Tue Apr 01 15:46:40 2014 +0200
@@ -0,0 +1,40 @@
+#include "logging.h"
+#include "strhelp.h"
+
+#include <stdio.h>
+
+#ifdef WIN32
+char *
+getLastErrorMsg()
+{
+  LPWSTR bufPtr = NULL;
+  DWORD err = GetLastError();
+  char *retval = NULL;
+  FormatMessageW (FORMAT_MESSAGE_ALLOCATE_BUFFER |
+                  FORMAT_MESSAGE_FROM_SYSTEM |
+                  FORMAT_MESSAGE_IGNORE_INSERTS,
+                  NULL, err, 0, (LPWSTR) &bufPtr, 0, NULL);
+  if (!bufPtr)
+    {
+      HMODULE hWinhttp = GetModuleHandleW (L"crypt32");
+      if (hWinhttp)
+        {
+          FormatMessageW (FORMAT_MESSAGE_ALLOCATE_BUFFER |
+                          FORMAT_MESSAGE_FROM_HMODULE |
+                          FORMAT_MESSAGE_IGNORE_INSERTS,
+                          hWinhttp, HRESULT_CODE (err), 0,
+                          (LPWSTR) &bufPtr, 0, NULL);
+        }
+    }
+  if (!bufPtr) {
+    fprintf (stderr, "Error getting last error for code: %lx \n", err);
+    return NULL;
+  }
+
+  retval = wchar_to_utf8(bufPtr, wcslen(bufPtr));
+  LocalFree (bufPtr);
+
+  return retval;
+}
+
+#endif

http://wald.intevation.org/projects/trustbridge/