Huw Davies : winspool: Don't leak the handle returned by AddPrinter.

Alexandre Julliard julliard at winehq.org
Tue Apr 24 13:14:41 CDT 2012


Module: wine
Branch: master
Commit: 5d47a691f1283341f8afabb52ac26889d752f7df
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=5d47a691f1283341f8afabb52ac26889d752f7df

Author: Huw Davies <huw at codeweavers.com>
Date:   Tue Apr 24 12:55:48 2012 +0100

winspool: Don't leak the handle returned by AddPrinter.

---

 dlls/winspool.drv/info.c |   22 ++++++++++++----------
 1 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/dlls/winspool.drv/info.c b/dlls/winspool.drv/info.c
index a09ebbe..2f09855 100644
--- a/dlls/winspool.drv/info.c
+++ b/dlls/winspool.drv/info.c
@@ -494,6 +494,7 @@ static BOOL CUPS_LoadPrinters(void)
     HKEY hkeyPrinter, hkeyPrinters;
     char    loaderror[256];
     WCHAR   nameW[MAX_PATH];
+    HANDLE  added_printer;
 
     cupshandle = wine_dlopen(SONAME_LIBCUPS, RTLD_NOW, loaderror, sizeof(loaderror));
     if (!cupshandle) {
@@ -548,10 +549,10 @@ static BOOL CUPS_LoadPrinters(void)
             pi2.pShareName      = emptyStringW;
             pi2.pSepFile        = emptyStringW;
 
-            if (!AddPrinterW(NULL, 2, (LPBYTE)&pi2)) {
-                if (GetLastError() != ERROR_PRINTER_ALREADY_EXISTS)
-                    ERR("printer '%s' not added by AddPrinter (error %d)\n", debugstr_w(nameW), GetLastError());
-            }
+            added_printer = AddPrinterW( NULL, 2, (LPBYTE)&pi2 );
+            if (added_printer) ClosePrinter( added_printer );
+            else if (GetLastError() != ERROR_PRINTER_ALREADY_EXISTS)
+                ERR( "printer '%s' not added by AddPrinter (error %d)\n", debugstr_w(nameW), GetLastError() );
         }
 	HeapFree(GetProcessHeap(),0,port);
 
@@ -571,8 +572,8 @@ static BOOL CUPS_LoadPrinters(void)
 }
 #endif
 
-static BOOL
-PRINTCAP_ParseEntry(const char *pent, BOOL isfirst) {
+static BOOL PRINTCAP_ParseEntry( const char *pent, BOOL isfirst )
+{
     PRINTER_INFO_2A	pinfo2a;
     const char	*r;
     size_t		name_len;
@@ -581,6 +582,7 @@ PRINTCAP_ParseEntry(const char *pent, BOOL isfirst) {
     char *port = NULL, *env_default;
     HKEY hkeyPrinter, hkeyPrinters;
     WCHAR devnameW[MAX_PATH];
+    HANDLE added_printer;
 
     while (isspace(*pent)) pent++;
     r = strchr(pent,':');
@@ -678,10 +680,10 @@ PRINTCAP_ParseEntry(const char *pent, BOOL isfirst) {
         pinfo2a.pShareName      = share_name;
         pinfo2a.pSepFile        = sep_file;
 
-        if (!AddPrinterA(NULL,2,(LPBYTE)&pinfo2a)) {
-            if (GetLastError()!=ERROR_PRINTER_ALREADY_EXISTS)
-                ERR("%s not added by AddPrinterA (%d)\n",name,GetLastError());
-        }
+        added_printer = AddPrinterA( NULL, 2, (LPBYTE)&pinfo2a );
+        if (added_printer) ClosePrinter( added_printer );
+        else if (GetLastError() != ERROR_PRINTER_ALREADY_EXISTS)
+            ERR( "printer '%s' not added by AddPrinter (error %d)\n", debugstr_a(name), GetLastError() );
     }
     RegCloseKey(hkeyPrinters);
 




More information about the wine-cvs mailing list