summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2020-04-23 11:28:18 +0200
committerManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2020-04-23 11:28:18 +0200
commitf11a80482ae9c42e8d7bbbe8d7a2c34817853467 (patch)
tree00dd374b7a6eb7ed161ee41dbda524a93e07628d /src
parent2ced142adcd8d1f1f1634f9b8e7bfa604cfe7d21 (diff)
Check for success of the FormatMessageW() call.
Diffstat (limited to 'src')
-rw-r--r--src/drivers/WinAPI/Fl_WinAPI_Printer_Driver.cxx30
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);
+ }
}
}
}