diff options
| author | ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> | 2020-04-23 11:28:18 +0200 |
|---|---|---|
| committer | ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> | 2020-04-23 11:28:18 +0200 |
| commit | f11a80482ae9c42e8d7bbbe8d7a2c34817853467 (patch) | |
| tree | 00dd374b7a6eb7ed161ee41dbda524a93e07628d /src | |
| parent | 2ced142adcd8d1f1f1634f9b8e7bfa604cfe7d21 (diff) | |
Check for success of the FormatMessageW() call.
Diffstat (limited to 'src')
| -rw-r--r-- | src/drivers/WinAPI/Fl_WinAPI_Printer_Driver.cxx | 30 |
1 files changed, 16 insertions, 14 deletions
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); + } } } } |
