Moved implementation of GetPrinterDriverDirectory from ascii to unicode.
This commit is contained in:
parent
fa93b446d0
commit
facaee4fd0
|
@ -41,6 +41,7 @@
|
||||||
#include "winbase.h"
|
#include "winbase.h"
|
||||||
#include "winerror.h"
|
#include "winerror.h"
|
||||||
#include "winreg.h"
|
#include "winreg.h"
|
||||||
|
#include "winternl.h"
|
||||||
#include "wine/windef16.h"
|
#include "wine/windef16.h"
|
||||||
#include "wine/unicode.h"
|
#include "wine/unicode.h"
|
||||||
#include "wine/debug.h"
|
#include "wine/debug.h"
|
||||||
|
@ -2435,23 +2436,23 @@ BOOL WINAPI GetPrinterDriverW(HANDLE hPrinter, LPWSTR pEnvironment,
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
* GetPrinterDriverDirectoryA [WINSPOOL.@]
|
* GetPrinterDriverDirectoryW [WINSPOOL.@]
|
||||||
*/
|
*/
|
||||||
BOOL WINAPI GetPrinterDriverDirectoryA(LPSTR pName, LPSTR pEnvironment,
|
BOOL WINAPI GetPrinterDriverDirectoryW(LPWSTR pName, LPWSTR pEnvironment,
|
||||||
DWORD Level, LPBYTE pDriverDirectory,
|
DWORD Level, LPBYTE pDriverDirectory,
|
||||||
DWORD cbBuf, LPDWORD pcbNeeded)
|
DWORD cbBuf, LPDWORD pcbNeeded)
|
||||||
{
|
{
|
||||||
DWORD needed;
|
DWORD needed;
|
||||||
|
|
||||||
TRACE("(%s, %s, %ld, %p, %ld, %p)\n", pName, pEnvironment, Level,
|
TRACE("(%s, %s, %ld, %p, %ld, %p)\n", debugstr_w(pName),
|
||||||
pDriverDirectory, cbBuf, pcbNeeded);
|
debugstr_w(pEnvironment), Level, pDriverDirectory, cbBuf, pcbNeeded);
|
||||||
if(pName != NULL) {
|
if(pName != NULL) {
|
||||||
FIXME("pName = `%s' - unsupported\n", pName);
|
FIXME("pName = `%s' - unsupported\n", debugstr_w(pName));
|
||||||
SetLastError(ERROR_INVALID_PARAMETER);
|
SetLastError(ERROR_INVALID_PARAMETER);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
if(pEnvironment != NULL) {
|
if(pEnvironment != NULL) {
|
||||||
FIXME("pEnvironment = `%s' - unsupported\n", pEnvironment);
|
FIXME("pEnvironment = `%s' - unsupported\n", debugstr_w(pEnvironment));
|
||||||
SetLastError(ERROR_INVALID_ENVIRONMENT);
|
SetLastError(ERROR_INVALID_ENVIRONMENT);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -2459,10 +2460,16 @@ BOOL WINAPI GetPrinterDriverDirectoryA(LPSTR pName, LPSTR pEnvironment,
|
||||||
WARN("Level = %ld - assuming 1\n", Level);
|
WARN("Level = %ld - assuming 1\n", Level);
|
||||||
|
|
||||||
/* FIXME should read from registry */
|
/* FIXME should read from registry */
|
||||||
needed = GetSystemDirectoryA(pDriverDirectory, cbBuf);
|
needed = GetSystemDirectoryW( (LPWSTR)pDriverDirectory, cbBuf/sizeof(WCHAR));
|
||||||
|
/* GetSystemDirectoryW returns number of TCHAR without '\0'
|
||||||
|
* adjust this now
|
||||||
|
*/
|
||||||
needed++;
|
needed++;
|
||||||
|
needed*=sizeof(WCHAR);
|
||||||
|
|
||||||
if(pcbNeeded)
|
if(pcbNeeded)
|
||||||
*pcbNeeded = needed;
|
*pcbNeeded = needed;
|
||||||
|
TRACE("required <%08lx>\n", *pcbNeeded);
|
||||||
if(needed > cbBuf) {
|
if(needed > cbBuf) {
|
||||||
SetLastError(ERROR_INSUFFICIENT_BUFFER);
|
SetLastError(ERROR_INSUFFICIENT_BUFFER);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@ -2472,25 +2479,41 @@ BOOL WINAPI GetPrinterDriverDirectoryA(LPSTR pName, LPSTR pEnvironment,
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
* GetPrinterDriverDirectoryW [WINSPOOL.@]
|
* GetPrinterDriverDirectoryA [WINSPOOL.@]
|
||||||
*/
|
*/
|
||||||
BOOL WINAPI GetPrinterDriverDirectoryW(LPWSTR pName, LPWSTR pEnvironment,
|
BOOL WINAPI GetPrinterDriverDirectoryA(LPSTR pName, LPSTR pEnvironment,
|
||||||
DWORD Level, LPBYTE pDriverDirectory,
|
DWORD Level, LPBYTE pDriverDirectory,
|
||||||
DWORD cbBuf, LPDWORD pcbNeeded)
|
DWORD cbBuf, LPDWORD pcbNeeded)
|
||||||
{
|
{
|
||||||
LPSTR pNameA = NULL, pEnvironmentA = NULL;
|
UNICODE_STRING nameW, environmentW;
|
||||||
BOOL ret;
|
BOOL ret;
|
||||||
|
DWORD pcbNeededW;
|
||||||
|
INT len = cbBuf * sizeof(WCHAR)/sizeof(CHAR);
|
||||||
|
WCHAR *driverDirectoryW = NULL;
|
||||||
|
|
||||||
if(pName)
|
if (len) driverDirectoryW = HeapAlloc( GetProcessHeap(), 0, len );
|
||||||
pNameA = HEAP_strdupWtoA( GetProcessHeap(), 0, pName );
|
|
||||||
if(pEnvironment)
|
if(pName) RtlCreateUnicodeStringFromAsciiz(&nameW, pName);
|
||||||
pEnvironmentA = HEAP_strdupWtoA( GetProcessHeap(), 0, pEnvironment );
|
else nameW.Buffer = NULL;
|
||||||
ret = GetPrinterDriverDirectoryA( pNameA, pEnvironmentA, Level,
|
if(pEnvironment) RtlCreateUnicodeStringFromAsciiz(&environmentW, pEnvironment);
|
||||||
pDriverDirectory, cbBuf, pcbNeeded );
|
else environmentW.Buffer = NULL;
|
||||||
if(pNameA)
|
|
||||||
HeapFree( GetProcessHeap(), 0, pNameA );
|
ret = GetPrinterDriverDirectoryW( nameW.Buffer, environmentW.Buffer, Level,
|
||||||
if(pEnvironmentA)
|
(LPBYTE)driverDirectoryW, len, &pcbNeededW );
|
||||||
HeapFree( GetProcessHeap(), 0, pEnvironmentA );
|
if (ret) {
|
||||||
|
ret = WideCharToMultiByte( CP_ACP, 0, driverDirectoryW, -1,
|
||||||
|
pDriverDirectory, cbBuf, NULL, NULL);
|
||||||
|
*pcbNeeded = WideCharToMultiByte( CP_ACP, 0, driverDirectoryW, -1,
|
||||||
|
NULL, 0, NULL, NULL);
|
||||||
|
} else
|
||||||
|
*pcbNeeded = pcbNeededW * sizeof(CHAR)/sizeof(WCHAR);
|
||||||
|
|
||||||
|
TRACE("provided<%ld> required <%ld>\n", cbBuf, *pcbNeeded);
|
||||||
|
|
||||||
|
if(driverDirectoryW)
|
||||||
|
HeapFree( GetProcessHeap(), 0, driverDirectoryW );
|
||||||
|
RtlFreeUnicodeString(&environmentW);
|
||||||
|
RtlFreeUnicodeString(&nameW);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue