From f11a80482ae9c42e8d7bbbe8d7a2c34817853467 Mon Sep 17 00:00:00 2001 From: ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> Date: Thu, 23 Apr 2020 11:28:18 +0200 Subject: Check for success of the FormatMessageW() call. --- src/drivers/WinAPI/Fl_WinAPI_Printer_Driver.cxx | 30 +++++++++++++------------ 1 file changed, 16 insertions(+), 14 deletions(-) (limited to 'src') diff --git a/src/drivers/WinAPI/Fl_WinAPI_Printer_Driver.cxx b/src/drivers/WinAPI/Fl_WinAPI_Printer_Driver.cxx index 1ae3239a1..9455eb77d 100644 --- a/src/drivers/WinAPI/Fl_WinAPI_Printer_Driver.cxx +++ b/src/drivers/WinAPI/Fl_WinAPI_Printer_Driver.cxx @@ -119,20 +119,22 @@ int Fl_WinAPI_Printer_Driver::begin_job (int pagecount, int *frompage, int *topa err = (dw == ERROR_CANCELLED ? 1 : 2); if (perr_message && err == 2) { wchar_t *lpMsgBuf; - FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, - dw, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - (LPWSTR) &lpMsgBuf, - 0, NULL); - unsigned srclen = lstrlenW(lpMsgBuf) - 2; // ignore terminal ^M - unsigned l = fl_utf8fromwc(NULL, 0, lpMsgBuf, srclen); - char *tmp = new char[l+1]; - fl_utf8fromwc(tmp, l, lpMsgBuf, srclen); - LocalFree(lpMsgBuf); - *perr_message = new char[l + 50]; - sprintf(*perr_message, "begin_job() failed with error %lu: %s", dw, tmp); - delete[] tmp; + DWORD retval = FormatMessageW( + FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, + dw, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPWSTR) &lpMsgBuf, + 0, NULL); + if (retval) { + unsigned srclen = lstrlenW(lpMsgBuf); + while (srclen > 0 && (lpMsgBuf[srclen-1] == '\n' || lpMsgBuf[srclen-1] == '\r')) srclen--; + unsigned l = fl_utf8fromwc(NULL, 0, lpMsgBuf, srclen); + *perr_message = new char[l+51]; + sprintf(*perr_message, "begin_job() failed with error %lu: ", dw); + fl_utf8fromwc(*perr_message + strlen(*perr_message), l+1, lpMsgBuf, srclen); + LocalFree(lpMsgBuf); + } } } } -- cgit v1.2.3