summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorattilamolnar <attilamolnar@hush.com>2012-12-03 20:32:22 +0100
committerattilamolnar <attilamolnar@hush.com>2012-12-03 21:28:38 +0100
commit4451fd13a1accec8d7c2b1bb7fdafd6e50a2566b (patch)
tree9c707e4384c5be2eee462729e3e378e3a738c0b1
parenta99f41c3ebdb464518d18d83a45f1e0ad86d9d88 (diff)
Fix broken RetrieveLastError()
- FORMAT_MESSAGE_IGNORE_INSERTS flag wasn't used and we never pass insertion parameters, this could cause FormatMessage() to fail - The return value of FormatMessage() wasn't checked, if it returned zero (failure) then RetrieveLastError() returned garbage if err[] wasn't initialized previously
-rw-r--r--win/win32service.cpp4
1 files changed, 3 insertions, 1 deletions
diff --git a/win/win32service.cpp b/win/win32service.cpp
index 81f8e7516..b04eff558 100644
--- a/win/win32service.cpp
+++ b/win/win32service.cpp
@@ -55,7 +55,9 @@ SETSERVDESC ChangeServiceConf;
LPCSTR RetrieveLastError()
{
static char err[100];
- FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, 0, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)err, sizeof(err), 0);
+ DWORD LastError = GetLastError();
+ if (FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS, 0, LastError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)err, sizeof(err), 0) == 0)
+ snprintf(err, sizeof(err), "Error code: %d", LastError);
SetLastError(ERROR_SUCCESS);
return err;
}