Detlef Riekenberg : winspool: Add GetPrintProcessorDirectoryA.

Alexandre Julliard julliard at wine.codeweavers.com
Fri Jun 9 14:40:00 CDT 2006


Module: wine
Branch: refs/heads/master
Commit: 94543cb6307decc9b8971553266d17a19bafea84
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=94543cb6307decc9b8971553266d17a19bafea84

Author: Detlef Riekenberg <wine.dev at web.de>
Date:   Fri Jun  9 13:06:41 2006 +0200

winspool: Add GetPrintProcessorDirectoryA.

---

 dlls/winspool.drv/info.c |   42 ++++++++++++++++++++++++++++++++++++------
 1 files changed, 36 insertions(+), 6 deletions(-)

diff --git a/dlls/winspool.drv/info.c b/dlls/winspool.drv/info.c
index 3214ca1..dc8bd79 100644
--- a/dlls/winspool.drv/info.c
+++ b/dlls/winspool.drv/info.c
@@ -1831,17 +1831,47 @@ end:
  *
  * See GetPrintProcessorDirectoryW.
  *
- * NOTES
- * On NT, the returned ANSI-Data need the same Size as the Unicode-Version
  *
  */
 BOOL WINAPI GetPrintProcessorDirectoryA(LPSTR server, LPSTR env,
                                         DWORD level,  LPBYTE Info,
-                                        DWORD cbBuf, LPDWORD needed)
+                                        DWORD cbBuf,  LPDWORD pcbNeeded)
 {
-    FIXME("(%s,%s,%ld,%p,0x%08lx): stub\n", debugstr_a(server), debugstr_a(env),
-          level, Info, cbBuf);
-    return 0;
+    LPWSTR  serverW = NULL;
+    LPWSTR  envW = NULL;
+    BOOL    ret;
+    INT     len;
+
+    TRACE("(%s, %s, %ld, %p, %ld, %p)\n", debugstr_a(server), 
+          debugstr_a(env), level, Info, cbBuf, pcbNeeded);
+ 
+
+    if (server) {
+        len = MultiByteToWideChar(CP_ACP, 0, server, -1, NULL, 0);
+        serverW = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
+        MultiByteToWideChar(CP_ACP, 0, server, -1, serverW, len);
+    }
+
+    if (env) {
+        len = MultiByteToWideChar(CP_ACP, 0, env, -1, NULL, 0);
+        envW = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
+        MultiByteToWideChar(CP_ACP, 0, env, -1, envW, len);
+    }
+
+    /* NT requires the buffersize from GetPrintProcessorDirectoryW also
+       for GetPrintProcessorDirectoryA and WC2MB is done in-place.
+     */
+    ret = GetPrintProcessorDirectoryW(serverW, envW, level, Info, 
+                                      cbBuf, pcbNeeded);
+
+    if (ret) ret = WideCharToMultiByte(CP_ACP, 0, (LPWSTR)Info, -1, (LPSTR)Info,
+                                       cbBuf, NULL, NULL) > 0;
+
+
+    TRACE(" required: 0x%lx/%ld\n", pcbNeeded ? *pcbNeeded : 0, pcbNeeded ? *pcbNeeded : 0);
+    HeapFree(GetProcessHeap(), 0, envW);
+    HeapFree(GetProcessHeap(), 0, serverW);
+    return ret;
 }
 
 /*****************************************************************************




More information about the wine-cvs mailing list