[winspool 6/6] Use the now correctly set PPD file location from GetPrinterDriver

Jeremy White jwhite at codeweavers.com
Wed Dec 23 14:21:06 CST 2009


---
 dlls/wineps.drv/init.c |  109 +++---------------------------------------------
 1 files changed, 6 insertions(+), 103 deletions(-)

diff --git a/dlls/wineps.drv/init.c b/dlls/wineps.drv/init.c
index ef5d9d8..e83b2fa 100644
--- a/dlls/wineps.drv/init.c
+++ b/dlls/wineps.drv/init.c
@@ -27,9 +27,6 @@
 #ifdef HAVE_UNISTD_H
 # include <unistd.h>
 #endif
-#ifdef HAVE_CUPS_CUPS_H
-# include <cups/cups.h>
-#endif
 
 #define NONAMELESSUNION
 #define NONAMELESSSTRUCT
@@ -46,10 +43,6 @@
 
 WINE_DEFAULT_DEBUG_CHANNEL(psdrv);
 
-#ifdef SONAME_LIBCUPS
-static void *cupshandle = NULL;
-#endif
-
 static const PSDRV_DEVMODEA DefaultDevmode =
 {
   { /* dmPublic */
@@ -145,25 +138,12 @@ BOOL WINAPI DllMain( HINSTANCE hinst, DWORD reason, LPVOID reserved )
 		HeapDestroy(PSDRV_Heap);
 		return FALSE;
 	    }
-#ifdef SONAME_LIBCUPS
-	    /* dynamically load CUPS if not yet loaded */
-	    if (!cupshandle) {
-		cupshandle = wine_dlopen(SONAME_LIBCUPS, RTLD_NOW, NULL, 0);
-		if (!cupshandle) cupshandle = (void*)-1;
-	    }
-#endif
             break;
 
 	case DLL_PROCESS_DETACH:
 
 	    DeleteObject( PSDRV_DefaultFont );
 	    HeapDestroy( PSDRV_Heap );
-#ifdef SONAME_LIBCUPS
-	    if (cupshandle && (cupshandle != (void*)-1)) {
-		wine_dlclose(cupshandle, NULL, 0);
-		cupshandle = NULL;
-	    }
-#endif
             break;
     }
 
@@ -534,9 +514,7 @@ PRINTERINFO *PSDRV_FindPrinterInfo(LPCSTR name)
     const AFM *afm;
     HANDLE hPrinter = 0;
     const char *ppd = NULL;
-    DWORD ppdType;
     char* ppdFileName = NULL;
-    HKEY hkey;
     BOOL using_default_devmode = FALSE;
 
     TRACE("'%s'\n", name);
@@ -581,88 +559,13 @@ PRINTERINFO *PSDRV_FindPrinterInfo(LPCSTR name)
         GetPrinterDataExA(hPrinter, NULL, default_devmodeA, &type, (LPBYTE)pi->Devmode, needed, &needed);
     }
 
-
-
-#ifdef SONAME_LIBCUPS
-    if (cupshandle != (void*)-1) {
-	typeof(cupsGetPPD) * pcupsGetPPD = NULL;
-
-	pcupsGetPPD = wine_dlsym(cupshandle, "cupsGetPPD", NULL, 0);
-	if (pcupsGetPPD) {
-	    ppd = pcupsGetPPD(name);
-
-	    if (ppd) {
-		needed=strlen(ppd)+1;
-		ppdFileName=HeapAlloc(PSDRV_Heap, 0, needed);
-		memcpy(ppdFileName, ppd, needed);
-		ppdType=REG_SZ;
-		res = ERROR_SUCCESS;
-		/* we should unlink() that file later */
-	    } else {
-		res = ERROR_FILE_NOT_FOUND;
-		WARN("Did not find ppd for %s\n",name);
-	    }
-	}
-    }
-#endif
-    if (!ppdFileName) {
-        res = GetPrinterDataExA(hPrinter, "PrinterDriverData", "PPD File", NULL, NULL, 0, &needed);
-        if ((res==ERROR_SUCCESS) || (res==ERROR_MORE_DATA)) {
-            ppdFileName=HeapAlloc(PSDRV_Heap, 0, needed);
-            res = GetPrinterDataExA(hPrinter, "PrinterDriverData", "PPD File", &ppdType,
-                                    (LPBYTE)ppdFileName, needed, &needed);
-        }
-    }
-    /* Look for a ppd file for this printer in the config file.
-     * First look under that printer's name, and then under 'generic'
-     */
-    /* @@ Wine registry key: HKCU\Software\Wine\Printing\PPD Files */
-    if((res != ERROR_SUCCESS) && !RegOpenKeyA(HKEY_CURRENT_USER, "Software\\Wine\\Printing\\PPD Files", &hkey))
-    {
-        const char* value_name;
-
-        if (RegQueryValueExA(hkey, name, 0, NULL, NULL, &needed) == ERROR_SUCCESS) {
-            value_name=name;
-        } else if (RegQueryValueExA(hkey, "generic", 0, NULL, NULL, &needed) == ERROR_SUCCESS) {
-            value_name="generic";
-        } else {
-            value_name=NULL;
-        }
-        if (value_name) {
-            HeapFree(PSDRV_Heap, 0, ppdFileName);
-            ppdFileName=HeapAlloc(PSDRV_Heap, 0, needed);
-            RegQueryValueExA(hkey, value_name, 0, &ppdType, (LPBYTE)ppdFileName, &needed);
-        }
-        RegCloseKey(hkey);
-    }
-
-    if (!ppdFileName)
+    if (! GetPrinterDriverW(hPrinter, NULL, 2, NULL, 0, &needed) && GetLastError() == ERROR_INSUFFICIENT_BUFFER)
     {
-        const char *data_dir, *filename;
-
-        if ((data_dir = wine_get_data_dir())) filename = "/generic.ppd";
-        else if ((data_dir = wine_get_build_dir())) filename = "/dlls/wineps.drv/generic.ppd";
-        else
-        {
-            res = ERROR_FILE_NOT_FOUND;
-            ERR ("Error %i getting PPD file name for printer '%s'\n", res, name);
-            goto closeprinter;
-        }
-        ppdFileName = HeapAlloc( PSDRV_Heap, 0, strlen(data_dir) + strlen(filename) + 1 );
-        strcpy( ppdFileName, data_dir );
-        strcat( ppdFileName, filename );
-    } else {
-        res = ERROR_SUCCESS;
-        if (ppdType==REG_EXPAND_SZ) {
-            char* tmp;
-
-            /* Expand environment variable references */
-            needed=ExpandEnvironmentStringsA(ppdFileName,NULL,0);
-            tmp=HeapAlloc(PSDRV_Heap, 0, needed);
-            ExpandEnvironmentStringsA(ppdFileName,tmp,needed);
-            HeapFree(PSDRV_Heap, 0, ppdFileName);
-            ppdFileName=tmp;
-        }
+        DRIVER_INFO_2W *di_2;
+        di_2 = (DRIVER_INFO_2W *) HeapAlloc(GetProcessHeap(), 0, needed);
+        GetPrinterDriverW(hPrinter, NULL, 2, (LPBYTE) di_2, needed, &needed);
+        ppdFileName = wine_get_unix_file_name(di_2->pDataFile);
+        HeapFree(GetProcessHeap(), 0, di_2);
     }
 
     pi->ppd = PSDRV_ParsePPD(ppdFileName);



More information about the wine-patches mailing list