Detlef Riekenberg : wineps: Don' t depend on 16-bit PrinterData functions from gdi.
Alexandre Julliard
julliard at winehq.org
Mon Nov 16 11:43:58 CST 2009
Module: wine
Branch: master
Commit: 495267e5f1cf110f041520f1ae8093b47ce9a5a1
URL: http://source.winehq.org/git/wine.git/?a=commit;h=495267e5f1cf110f041520f1ae8093b47ce9a5a1
Author: Detlef Riekenberg <wine.dev at web.de>
Date: Sun Nov 15 23:51:47 2009 +0100
wineps: Don't depend on 16-bit PrinterData functions from gdi.
---
dlls/gdi32/gdi32.spec | 2 --
dlls/wineps.drv/init.c | 42 +++++++++++++++++++++++-------------------
2 files changed, 23 insertions(+), 21 deletions(-)
diff --git a/dlls/gdi32/gdi32.spec b/dlls/gdi32/gdi32.spec
index 6a67f44..ebd9525 100644
--- a/dlls/gdi32/gdi32.spec
+++ b/dlls/gdi32/gdi32.spec
@@ -514,8 +514,6 @@
# Wine extensions: Win16 functions that are needed by other dlls
#
@ stdcall CloseJob16(long)
-@ stdcall DrvGetPrinterData16(str str ptr ptr long ptr)
-@ stdcall DrvSetPrinterData16(str str long ptr long)
@ stdcall GetDCHook(long ptr)
@ stdcall OpenJob16(str str long)
@ stdcall SelectVisRgn(long long)
diff --git a/dlls/wineps.drv/init.c b/dlls/wineps.drv/init.c
index 78aa0cb..b923529 100644
--- a/dlls/wineps.drv/init.c
+++ b/dlls/wineps.drv/init.c
@@ -111,6 +111,8 @@ static const LOGFONTA DefaultLogFont = {
DEFAULT_QUALITY, FIXED_PITCH | FF_MODERN, ""
};
+static const CHAR default_devmodeA[] = "Default DevMode";
+
/*********************************************************************
* DllMain
*
@@ -532,7 +534,7 @@ PRINTERINFO *PSDRV_FindPrinterInfo(LPCSTR name)
PRINTERINFO *pi = PSDRV_PrinterList, **last = &PSDRV_PrinterList;
FONTNAME *font;
const AFM *afm;
- HANDLE hPrinter;
+ HANDLE hPrinter = 0;
const char *ppd = NULL;
DWORD ppdType;
char* ppdFileName = NULL;
@@ -556,32 +558,33 @@ PRINTERINFO *PSDRV_FindPrinterInfo(LPCSTR name)
if (!(pi->FriendlyName = HeapAlloc( PSDRV_Heap, 0, strlen(name)+1 ))) goto fail;
strcpy( pi->FriendlyName, name );
- /* Use Get|SetPrinterDataExA instead? */
+ if (OpenPrinterA (pi->FriendlyName, &hPrinter, NULL) == 0) {
+ ERR ("OpenPrinterA failed with code %i\n", GetLastError ());
+ goto cleanup;
+ }
- res = DrvGetPrinterData16((LPSTR)name, (LPSTR)INT_PD_DEFAULT_DEVMODE, &type,
- NULL, 0, &needed );
+ needed = 0;
+ res = GetPrinterDataExA(hPrinter, NULL, default_devmodeA, &type, NULL, 0, &needed);
- if(res == ERROR_INVALID_PRINTER_NAME || needed != sizeof(DefaultDevmode)) {
+ if (needed < sizeof(DefaultDevmode)) {
pi->Devmode = HeapAlloc( PSDRV_Heap, 0, sizeof(DefaultDevmode) );
- if (pi->Devmode == NULL)
- goto cleanup;
- *pi->Devmode = DefaultDevmode;
- lstrcpynA((LPSTR)pi->Devmode->dmPublic.dmDeviceName,name,CCHDEVICENAME);
- using_default_devmode = TRUE;
+ if (pi->Devmode == NULL)
+ goto closeprinter;
- /* need to do something here AddPrinter?? */
+ *pi->Devmode = DefaultDevmode;
+ lstrcpynA((LPSTR)pi->Devmode->dmPublic.dmDeviceName,name,CCHDEVICENAME);
+ using_default_devmode = TRUE;
}
else {
pi->Devmode = HeapAlloc( PSDRV_Heap, 0, needed );
- DrvGetPrinterData16((LPSTR)name, (LPSTR)INT_PD_DEFAULT_DEVMODE, &type,
- (LPBYTE)pi->Devmode, needed, &needed);
- }
+ if (pi->Devmode == NULL)
+ goto closeprinter;
- if (OpenPrinterA (pi->FriendlyName, &hPrinter, NULL) == 0) {
- ERR ("OpenPrinterA failed with code %i\n", GetLastError ());
- goto cleanup;
+ GetPrinterDataExA(hPrinter, NULL, default_devmodeA, &type, (LPBYTE)pi->Devmode, needed, &needed);
}
+
+
#ifdef SONAME_LIBCUPS
if (cupshandle != (void*)-1) {
typeof(cupsGetPPD) * pcupsGetPPD = NULL;
@@ -687,8 +690,9 @@ PRINTERINFO *PSDRV_FindPrinterInfo(LPCSTR name)
dm.dmPublic.u1.s1.dmPaperSize = papersize;
PSDRV_MergeDevmodes(pi->Devmode, &dm, pi);
}
- DrvSetPrinterData16((LPSTR)name, (LPSTR)INT_PD_DEFAULT_DEVMODE,
- REG_BINARY, (LPBYTE)pi->Devmode, sizeof(DefaultDevmode) );
+
+ SetPrinterDataExA(hPrinter, NULL, default_devmodeA, REG_BINARY,
+ (LPBYTE)pi->Devmode, sizeof(DefaultDevmode));
}
if(pi->ppd->DefaultPageSize) { /* We'll let the ppd override the devmode */
More information about the wine-cvs
mailing list