Detlef Riekenberg : winspool:
Call the Portmonitor for XcvMonitor and XcvPort in OpenPrinter.
Alexandre Julliard
julliard at wine.codeweavers.com
Sat Jan 6 05:12:54 CST 2007
Module: wine
Branch: master
Commit: 72b126b2204aff20f35be6b8a7b61f589dd9be87
URL: http://source.winehq.org/git/wine.git/?a=commit;h=72b126b2204aff20f35be6b8a7b61f589dd9be87
Author: Detlef Riekenberg <wine.dev at web.de>
Date: Fri Jan 5 01:09:46 2007 +0100
winspool: Call the Portmonitor for XcvMonitor and XcvPort in OpenPrinter.
---
dlls/winspool.drv/info.c | 12 +++++++++++-
1 files changed, 11 insertions(+), 1 deletions(-)
diff --git a/dlls/winspool.drv/info.c b/dlls/winspool.drv/info.c
index 6bd2c92..8b16252 100644
--- a/dlls/winspool.drv/info.c
+++ b/dlls/winspool.drv/info.c
@@ -117,6 +117,7 @@ typedef struct {
LPWSTR name;
LPWSTR printername;
monitor_t *pm;
+ HANDLE hXcv;
jobqueue_t *queue;
started_doc_t *doc;
} opened_printer_t;
@@ -1477,7 +1478,14 @@ static HANDLE get_opened_printer_entry(L
}
if (printer->pm) {
- FIXME("pm->pfnXcvOpenPort not implemented\n");
+ if ((printer->pm->monitor) && (printer->pm->monitor->pfnXcvOpenPort)) {
+ printer->pm->monitor->pfnXcvOpenPort(&printername[len], pDefault->DesiredAccess, &printer->hXcv);
+ }
+ if (printer->hXcv == NULL) {
+ SetLastError(ERROR_INVALID_PARAMETER);
+ handle = 0;
+ goto end;
+ }
}
else
{
@@ -1523,6 +1531,7 @@ end:
LeaveCriticalSection(&printer_handles_cs);
if (!handle && printer) {
/* Something failed: Free all resources */
+ if (printer->hXcv) printer->pm->monitor->pfnXcvClosePort(printer->hXcv);
monitor_unload(printer->pm);
HeapFree(GetProcessHeap(), 0, printer->printername);
HeapFree(GetProcessHeap(), 0, printer->name);
@@ -2912,6 +2921,7 @@ BOOL WINAPI ClosePrinter(HANDLE hPrinter
}
HeapFree(GetProcessHeap(), 0, printer->queue);
}
+ if (printer->hXcv) printer->pm->monitor->pfnXcvClosePort(printer->hXcv);
monitor_unload(printer->pm);
HeapFree(GetProcessHeap(), 0, printer->printername);
HeapFree(GetProcessHeap(), 0, printer->name);
More information about the wine-cvs
mailing list