]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Fix broken RetrieveLastError()
authorattilamolnar <attilamolnar@hush.com>
Mon, 3 Dec 2012 19:32:22 +0000 (20:32 +0100)
committerattilamolnar <attilamolnar@hush.com>
Mon, 3 Dec 2012 20:28:38 +0000 (21:28 +0100)
- 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

win/win32service.cpp

index 81f8e7516e6f6becb85df2f1451900ba44bf8291..b04eff558f7d46184dadcdf49d026f5f7812b7ba 100644 (file)
@@ -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;
 }