Mercurial > trustbridge
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