[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