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