[PATCH] winspool: Add our driver for all usable Printer environments

Detlef Riekenberg wine.dev at web.de
Wed Oct 19 05:53:24 CDT 2016


--
bye bye ... Detlef

Signed-off-by: Detlef Riekenberg <wine.dev at web.de>
---
 dlls/winspool.drv/info.c | 31 +++++++++++++++++++------------
 1 file changed, 19 insertions(+), 12 deletions(-)

diff --git a/dlls/winspool.drv/info.c b/dlls/winspool.drv/info.c
index 4dea531..2f0ff3d 100644
--- a/dlls/winspool.drv/info.c
+++ b/dlls/winspool.drv/info.c
@@ -583,31 +583,38 @@ WINSPOOL_SetDefaultPrinter(const char *devname, const char *name, BOOL force) {
 static BOOL add_printer_driver(const WCHAR *name, WCHAR *ppd)
 {
     DRIVER_INFO_3W di3;
+    unsigned int i;
+    BOOL res;
 
     ZeroMemory(&di3, sizeof(DRIVER_INFO_3W));
     di3.cVersion         = 3;
     di3.pName            = (WCHAR*)name;
-    di3.pEnvironment     = envname_x86W;
     di3.pDriverPath      = driver_nt;
     di3.pDataFile        = ppd;
     di3.pConfigFile      = driver_nt;
     di3.pDefaultDataType = rawW;
 
-    if (AddPrinterDriverExW( NULL, 3, (LPBYTE)&di3, APD_COPY_NEW_FILES | APD_COPY_FROM_DIRECTORY ) ||
-        (GetLastError() ==  ERROR_PRINTER_DRIVER_ALREADY_INSTALLED ))
+    for (i = 0; i < sizeof(all_printenv)/sizeof(all_printenv[0]); i++)
     {
-        di3.cVersion     = 0;
-        di3.pEnvironment = envname_win40W;
-        di3.pDriverPath  = driver_9x;
-        di3.pConfigFile  = driver_9x;
-        if (AddPrinterDriverExW( NULL, 3, (LPBYTE)&di3, APD_COPY_NEW_FILES | APD_COPY_FROM_DIRECTORY ) ||
-            (GetLastError() ==  ERROR_PRINTER_DRIVER_ALREADY_INSTALLED ))
+        di3.pEnvironment = (WCHAR *) all_printenv[i]->envname;
+        if (all_printenv[i]->envname == envname_win40W)
         {
-            return TRUE;
+            /* We use wineps16.drv as driver for 16 bit */
+            di3.pDriverPath      = driver_9x;
+            di3.pConfigFile      = driver_9x;
+        }
+        res = AddPrinterDriverExW( NULL, 3, (LPBYTE)&di3, APD_COPY_NEW_FILES | APD_COPY_FROM_DIRECTORY );
+        TRACE("got %d and %d for %s (%s)\n", res, GetLastError(), debugstr_w(name), debugstr_w(di3.pEnvironment));
+
+        if (!res & (GetLastError() != ERROR_PRINTER_DRIVER_ALREADY_INSTALLED))
+        {
+            ERR("failed with %u for %s (%s) %s\n", GetLastError(), debugstr_w(name),
+                debugstr_w(di3.pEnvironment), debugstr_w(di3.pDriverPath));
+                return FALSE;
         }
     }
-    ERR("failed with %u for %s (%s)\n", GetLastError(), debugstr_w(di3.pDriverPath), debugstr_w(di3.pEnvironment));
-    return FALSE;
+
+    return TRUE;
 }
 
 static inline char *expand_env_string( char *str, DWORD type )
-- 
2.7.4




More information about the wine-patches mailing list