Detlef Riekenberg : spoolss: Implement EnumPorts.

Alexandre Julliard julliard at winehq.org
Mon Feb 16 09:35:47 CST 2009


Module: wine
Branch: master
Commit: d10ca7d9c405a296ced9a7a41bfd325d62d073f7
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=d10ca7d9c405a296ced9a7a41bfd325d62d073f7

Author: Detlef Riekenberg <wine.dev at web.de>
Date:   Mon Feb 16 00:18:11 2009 +0100

spoolss: Implement EnumPorts.

---

 dlls/spoolss/router.c     |   44 ++++++++++++++++++++++++++++++++++++++++++++
 dlls/spoolss/spoolss.spec |    2 +-
 2 files changed, 45 insertions(+), 1 deletions(-)

diff --git a/dlls/spoolss/router.c b/dlls/spoolss/router.c
index 8cf02ff..f4e8e96 100644
--- a/dlls/spoolss/router.c
+++ b/dlls/spoolss/router.c
@@ -355,3 +355,47 @@ BOOL WINAPI EnumMonitorsW(LPWSTR pName, DWORD Level, LPBYTE pMonitors, DWORD cbB
 
     return (res == ROUTER_SUCCESS);
 }
+
+/******************************************************************
+ * EnumPortsW (spoolss.@)
+ *
+ * Enumerate available Ports
+ *
+ * PARAMS
+ *  pName      [I] Servername or NULL (local Computer)
+ *  Level      [I] Structure-Level (1 or 2)
+ *  pPorts     [O] PTR to Buffer that receives the Result
+ *  cbBuf      [I] Size of Buffer at pPorts
+ *  pcbNeeded  [O] PTR to DWORD that receives the size in Bytes used / required for pPorts
+ *  pcReturned [O] PTR to DWORD that receives the number of Ports in pPorts
+ *
+ * RETURNS
+ *  Success: TRUE
+ *  Failure: FALSE and in pcbNeeded the Bytes required for pPorts, if cbBuf is too small
+ *
+ */
+BOOL WINAPI EnumPortsW(LPWSTR pName, DWORD Level, LPBYTE pPorts, DWORD cbBuf,
+                       LPDWORD pcbNeeded, LPDWORD pcReturned)
+{
+    backend_t * pb;
+    DWORD res = ROUTER_UNKNOWN;
+
+    TRACE("(%s, %d, %p, %d, %p, %p)\n", debugstr_w(pName), Level, pPorts, cbBuf,
+            pcbNeeded, pcReturned);
+
+    if (pcbNeeded) *pcbNeeded = 0;
+    if (pcReturned) *pcReturned = 0;
+
+    pb = backend_first(pName);
+    if (pb && pb->fpEnumPorts)
+        res = pb->fpEnumPorts(pName, Level, pPorts, cbBuf, pcbNeeded, pcReturned);
+    else
+    {
+        SetLastError(ERROR_PROC_NOT_FOUND);
+    }
+
+    TRACE("got %u with %u (%u byte for %u entries)\n", res, GetLastError(),
+            pcbNeeded ? *pcbNeeded : 0, pcReturned ? *pcReturned : 0);
+
+    return (res == ROUTER_SUCCESS);
+}
diff --git a/dlls/spoolss/spoolss.spec b/dlls/spoolss/spoolss.spec
index 237bab1..2b5fc19 100644
--- a/dlls/spoolss/spoolss.spec
+++ b/dlls/spoolss/spoolss.spec
@@ -47,7 +47,7 @@
 @ stub EnumJobsW
 @ stdcall EnumMonitorsW(wstr long ptr long ptr ptr)
 @ stub EnumPerMachineConnectionsW
-@ stdcall EnumPortsW(wstr long ptr ptr ptr ptr) winspool.drv.EnumPortsW
+@ stdcall EnumPortsW(wstr long ptr long ptr ptr)
 @ stub EnumPrintProcessorDatatypesW
 @ stub EnumPrintProcessorsW
 @ stub EnumPrinterDataExW




More information about the wine-cvs mailing list