Alexandre Julliard : start: Pass a valid filename argument to FormatMessage .
Module: wine Branch: master Commit: 0f01be47ee915228627d9cfd1a055b55919b527c URL: http://source.winehq.org/git/wine.git/?a=commit;h=0f01be47ee915228627d9cfd1a... Author: Alexandre Julliard <julliard(a)winehq.org> Date: Mon Mar 29 12:26:55 2010 +0200 start: Pass a valid filename argument to FormatMessage. --- programs/start/start.c | 15 +++++++++------ 1 files changed, 9 insertions(+), 6 deletions(-) diff --git a/programs/start/start.c b/programs/start/start.c index 0c26cbc..81c1d27 100644 --- a/programs/start/start.c +++ b/programs/start/start.c @@ -70,8 +70,9 @@ static void output(const WCHAR *message) then terminate. */ -static void fatal_error(const WCHAR *msg, DWORD error_code) +static void fatal_error(const WCHAR *msg, DWORD error_code, const WCHAR *filename) { + DWORD_PTR args[1]; LPVOID lpMsgBuf; int status; static const WCHAR colonsW[] = { ':', ' ', 0 }; @@ -79,7 +80,9 @@ static void fatal_error(const WCHAR *msg, DWORD error_code) output(msg); output(colonsW); - status = FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, error_code, 0, (LPWSTR) & lpMsgBuf, 0, NULL); + args[0] = (DWORD_PTR)filename; + status = FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ARGUMENT_ARRAY, + NULL, error_code, 0, (LPWSTR)&lpMsgBuf, 0, (__ms_va_list *)args ); if (!status) { WINE_ERR("FormatMessage failed\n"); @@ -92,7 +95,7 @@ static void fatal_error(const WCHAR *msg, DWORD error_code) ExitProcess(1); } -static void fatal_string_error(int which, DWORD error_code) +static void fatal_string_error(int which, DWORD error_code, const WCHAR *filename) { WCHAR msg[2048]; @@ -100,7 +103,7 @@ static void fatal_string_error(int which, DWORD error_code) msg, sizeof(msg)/sizeof(WCHAR))) WINE_ERR("LoadString failed, error %d\n", GetLastError()); - fatal_error(msg, error_code); + fatal_error(msg, error_code, filename); } static void fatal_string(int which) @@ -332,7 +335,7 @@ int wmain (int argc, WCHAR *argv[]) &startup_info, /* lpStartupInfo */ &process_information /* lpProcessInformation */ )) { - fatal_string_error(STRING_EXECFAIL, GetLastError()); + fatal_string_error(STRING_EXECFAIL, GetLastError(), sei.lpFile); } sei.hProcess = process_information.hProcess; goto done; @@ -340,7 +343,7 @@ int wmain (int argc, WCHAR *argv[]) } if (!ShellExecuteExW(&sei)) - fatal_string_error(STRING_EXECFAIL, GetLastError()); + fatal_string_error(STRING_EXECFAIL, GetLastError(), sei.lpFile); done: HeapFree( GetProcessHeap(), 0, args );
participants (1)
-
Alexandre Julliard