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