Module: wine Branch: master Commit: 62e017c91b1edbe46c55bfff3af7a4e1d02962fe URL: https://gitlab.winehq.org/wine/wine/-/commit/62e017c91b1edbe46c55bfff3af7a4e...
Author: Piotr Caban piotr@codeweavers.com Date: Fri Dec 2 14:47:27 2022 +0100
localspl: Support Port handles in WritePrinter.
---
dlls/localspl/provider.c | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-)
diff --git a/dlls/localspl/provider.c b/dlls/localspl/provider.c index 79a68729b3e..7ac171892d3 100644 --- a/dlls/localspl/provider.c +++ b/dlls/localspl/provider.c @@ -3223,23 +3223,38 @@ static DWORD WINAPI fpStartDocPrinter(HANDLE hprinter, DWORD level, BYTE *doc_in
static BOOL WINAPI fpWritePrinter(HANDLE hprinter, void *buf, DWORD size, DWORD *written) { - printer_t *printer = (printer_t *)hprinter; + handle_header_t *header = (handle_header_t *)hprinter;
TRACE("(%p, %p, %ld, %p)\n", hprinter, buf, size, written);
- if(!printer || printer->header.type != HANDLE_PRINTER) + if (!header) { SetLastError(ERROR_INVALID_HANDLE); return FALSE; }
- if(!printer->doc) + if (header->type == HANDLE_PORT) { - SetLastError(ERROR_SPL_NO_STARTDOC); - return FALSE; + port_t *port = (port_t *)hprinter; + + return port->mon->monitor.pfnWritePort(port->hport, buf, size, written); + } + + if (header->type == HANDLE_PRINTER) + { + printer_t *printer = (printer_t *)hprinter; + + if (!printer->doc) + { + SetLastError(ERROR_SPL_NO_STARTDOC); + return FALSE; + } + + return WriteFile(printer->doc->hf, buf, size, written, NULL); }
- return WriteFile(printer->doc->hf, buf, size, written, NULL); + SetLastError(ERROR_INVALID_HANDLE); + return FALSE; }
static BOOL WINAPI fpSetJob(HANDLE hprinter, DWORD job_id,