From 94543cb6307decc9b8971553266d17a19bafea84 Mon Sep 17 00:00:00 2001 From: Detlef Riekenberg Date: Fri, 9 Jun 2006 13:06:41 +0200 Subject: [PATCH] winspool: Add GetPrintProcessorDirectoryA. --- dlls/winspool.drv/info.c | 42 ++++++++++++++++++++++++++++++++++------ 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/dlls/winspool.drv/info.c b/dlls/winspool.drv/info.c index 3214ca1f71c..dc8bd795d4d 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; } /*****************************************************************************