wineps: Don't depend on 16-bit PrinterData functions from gdi.
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 @@
DEFAULT_QUALITY, FIXED_PITCH | FF_MODERN, ""
};
+static const CHAR default_devmodeA[] = "Default DevMode";
+
/*********************************************************************
* DllMain
*
@@ -532,7 +534,7 @@
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,31 +558,32 @@
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;
+
+ GetPrinterDataExA(hPrinter, NULL, default_devmodeA, &type, (LPBYTE)pi->Devmode, needed, &needed);
}
- if (OpenPrinterA (pi->FriendlyName, &hPrinter, NULL) == 0) {
- ERR ("OpenPrinterA failed with code %i\n", GetLastError ());
- goto cleanup;
- }
+
#ifdef SONAME_LIBCUPS
if (cupshandle != (void*)-1) {
@@ -687,8 +690,9 @@
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 */