[WINSPOOL] GetPrinterA(): Refactor failure handling (#2830)
authorSerge Gautherie <32623169+SergeGautherie@users.noreply.github.com>
Sat, 23 May 2020 07:08:00 +0000 (09:08 +0200)
committerGitHub <noreply@github.com>
Sat, 23 May 2020 07:08:00 +0000 (09:08 +0200)
Addendum to ecde3768254664ca40a3f2fa49d1342d4bd92c02.

win32ss/printing/base/winspool/printers.c

index 219e831..1576ca0 100644 (file)
@@ -1117,6 +1117,8 @@ Cleanup:
 BOOL WINAPI
 GetPrinterA(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter, DWORD cbBuf, LPDWORD pcbNeeded)
 {
+    DWORD dwErrorCode;
+    BOOL bResult;
     PPRINTER_INFO_1A ppi1a = (PPRINTER_INFO_1A)pPrinter;
     PPRINTER_INFO_1W ppi1w = (PPRINTER_INFO_1W)pPrinter;
     PPRINTER_INFO_2A ppi2a = (PPRINTER_INFO_2A)pPrinter;
@@ -1128,23 +1130,21 @@ GetPrinterA(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter, DWORD cbBuf, LPDWORD
     PPRINTER_INFO_7A ppi7a = (PPRINTER_INFO_7A)pPrinter;
     PPRINTER_INFO_7W ppi7w = (PPRINTER_INFO_7W)pPrinter;
     DWORD cch;
-    BOOL bReturnValue = FALSE;
 
     TRACE("GetPrinterA(%p, %lu, %p, %lu, %p)\n", hPrinter, Level, pPrinter, cbBuf, pcbNeeded);
 
     // Check for invalid levels here for early error return. Should be 1-9.
     if (Level <  1 || Level > 9)
     {
-        SetLastError(ERROR_INVALID_LEVEL);
+        dwErrorCode = ERROR_INVALID_LEVEL;
         ERR("Invalid Level!\n");
         goto Cleanup;
     }
 
-    bReturnValue = GetPrinterW(hPrinter, Level, pPrinter, cbBuf, pcbNeeded);
-
-    if (!bReturnValue)
+    bResult = GetPrinterW(hPrinter, Level, pPrinter, cbBuf, pcbNeeded);
+    if (!bResult)
     {
-        TRACE("GetPrinterW failed!\n");
+        dwErrorCode = GetLastError();
         goto Cleanup;
     }
 
@@ -1162,7 +1162,7 @@ GetPrinterA(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter, DWORD cbBuf, LPDWORD
                 pszDescription = HeapAlloc(hProcessHeap, 0, (cch + 1) * sizeof(CHAR));
                 if (!pszDescription)
                 {
-                    SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+                    dwErrorCode = ERROR_NOT_ENOUGH_MEMORY;
                     ERR("HeapAlloc failed!\n");
                     goto Cleanup;
                 }
@@ -1183,7 +1183,7 @@ GetPrinterA(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter, DWORD cbBuf, LPDWORD
                 pszName = HeapAlloc(hProcessHeap, 0, (cch + 1) * sizeof(CHAR));
                 if (!pszName)
                 {
-                    SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+                    dwErrorCode = ERROR_NOT_ENOUGH_MEMORY;
                     ERR("HeapAlloc failed!\n");
                     goto Cleanup;
                 }
@@ -1204,7 +1204,7 @@ GetPrinterA(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter, DWORD cbBuf, LPDWORD
                 pszComment = HeapAlloc(hProcessHeap, 0, (cch + 1) * sizeof(CHAR));
                 if (!pszComment)
                 {
-                    SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+                    dwErrorCode = ERROR_NOT_ENOUGH_MEMORY;
                     ERR("HeapAlloc failed!\n");
                     goto Cleanup;
                 }
@@ -1229,7 +1229,7 @@ GetPrinterA(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter, DWORD cbBuf, LPDWORD
                 pszServerName = HeapAlloc(hProcessHeap, 0, (cch + 1) * sizeof(CHAR));
                 if (!pszServerName)
                 {
-                    SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+                    dwErrorCode = ERROR_NOT_ENOUGH_MEMORY;
                     ERR("HeapAlloc failed!\n");
                     goto Cleanup;
                 }
@@ -1250,7 +1250,7 @@ GetPrinterA(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter, DWORD cbBuf, LPDWORD
                 pszPrinterName = HeapAlloc(hProcessHeap, 0, (cch + 1) * sizeof(CHAR));
                 if (!pszPrinterName)
                 {
-                    SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+                    dwErrorCode = ERROR_NOT_ENOUGH_MEMORY;
                     ERR("HeapAlloc failed!\n");
                     goto Cleanup;
                 }
@@ -1271,7 +1271,7 @@ GetPrinterA(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter, DWORD cbBuf, LPDWORD
                 pszShareName = HeapAlloc(hProcessHeap, 0, (cch + 1) * sizeof(CHAR));
                 if (!pszShareName)
                 {
-                    SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+                    dwErrorCode = ERROR_NOT_ENOUGH_MEMORY;
                     ERR("HeapAlloc failed!\n");
                     goto Cleanup;
                 }
@@ -1292,7 +1292,7 @@ GetPrinterA(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter, DWORD cbBuf, LPDWORD
                 pszPortName = HeapAlloc(hProcessHeap, 0, (cch + 1) * sizeof(CHAR));
                 if (!pszPortName)
                 {
-                    SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+                    dwErrorCode = ERROR_NOT_ENOUGH_MEMORY;
                     ERR("HeapAlloc failed!\n");
                     goto Cleanup;
                 }
@@ -1313,7 +1313,7 @@ GetPrinterA(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter, DWORD cbBuf, LPDWORD
                 pszDriverName = HeapAlloc(hProcessHeap, 0, (cch + 1) * sizeof(CHAR));
                 if (!pszDriverName)
                 {
-                    SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+                    dwErrorCode = ERROR_NOT_ENOUGH_MEMORY;
                     ERR("HeapAlloc failed!\n");
                     goto Cleanup;
                 }
@@ -1334,7 +1334,7 @@ GetPrinterA(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter, DWORD cbBuf, LPDWORD
                 pszComment = HeapAlloc(hProcessHeap, 0, (cch + 1) * sizeof(CHAR));
                 if (!pszComment)
                 {
-                    SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+                    dwErrorCode = ERROR_NOT_ENOUGH_MEMORY;
                     ERR("HeapAlloc failed!\n");
                     goto Cleanup;
                 }
@@ -1355,7 +1355,7 @@ GetPrinterA(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter, DWORD cbBuf, LPDWORD
                 pszLocation = HeapAlloc(hProcessHeap, 0, (cch + 1) * sizeof(CHAR));
                 if (!pszLocation)
                 {
-                    SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+                    dwErrorCode = ERROR_NOT_ENOUGH_MEMORY;
                     ERR("HeapAlloc failed!\n");
                     goto Cleanup;
                 }
@@ -1376,7 +1376,7 @@ GetPrinterA(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter, DWORD cbBuf, LPDWORD
                 pszSepFile = HeapAlloc(hProcessHeap, 0, (cch + 1) * sizeof(CHAR));
                 if (!pszSepFile)
                 {
-                    SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+                    dwErrorCode = ERROR_NOT_ENOUGH_MEMORY;
                     ERR("HeapAlloc failed!\n");
                     goto Cleanup;
                 }
@@ -1397,7 +1397,7 @@ GetPrinterA(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter, DWORD cbBuf, LPDWORD
                 pszPrintProcessor = HeapAlloc(hProcessHeap, 0, (cch + 1) * sizeof(CHAR));
                 if (!pszPrintProcessor)
                 {
-                    SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+                    dwErrorCode = ERROR_NOT_ENOUGH_MEMORY;
                     ERR("HeapAlloc failed!\n");
                     goto Cleanup;
                 }
@@ -1418,7 +1418,7 @@ GetPrinterA(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter, DWORD cbBuf, LPDWORD
                 pszDatatype = HeapAlloc(hProcessHeap, 0, (cch + 1) * sizeof(CHAR));
                 if (!pszDatatype)
                 {
-                    SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+                    dwErrorCode = ERROR_NOT_ENOUGH_MEMORY;
                     ERR("HeapAlloc failed!\n");
                     goto Cleanup;
                 }
@@ -1439,7 +1439,7 @@ GetPrinterA(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter, DWORD cbBuf, LPDWORD
                 pszParameters = HeapAlloc(hProcessHeap, 0, (cch + 1) * sizeof(CHAR));
                 if (!pszParameters)
                 {
-                    SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+                    dwErrorCode = ERROR_NOT_ENOUGH_MEMORY;
                     ERR("HeapAlloc failed!\n");
                     goto Cleanup;
                 }
@@ -1464,7 +1464,7 @@ GetPrinterA(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter, DWORD cbBuf, LPDWORD
                 pszPrinterName = HeapAlloc(hProcessHeap, 0, (cch + 1) * sizeof(CHAR));
                 if (!pszPrinterName)
                 {
-                    SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+                    dwErrorCode = ERROR_NOT_ENOUGH_MEMORY;
                     ERR("HeapAlloc failed!\n");
                     goto Cleanup;
                 }
@@ -1485,7 +1485,7 @@ GetPrinterA(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter, DWORD cbBuf, LPDWORD
                 pszServerName = HeapAlloc(hProcessHeap, 0, (cch + 1) * sizeof(CHAR));
                 if (!pszServerName)
                 {
-                    SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+                    dwErrorCode = ERROR_NOT_ENOUGH_MEMORY;
                     ERR("HeapAlloc failed!\n");
                     goto Cleanup;
                 }
@@ -1510,7 +1510,7 @@ GetPrinterA(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter, DWORD cbBuf, LPDWORD
                 pszPrinterName = HeapAlloc(hProcessHeap, 0, (cch + 1) * sizeof(CHAR));
                 if (!pszPrinterName)
                 {
-                    SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+                    dwErrorCode = ERROR_NOT_ENOUGH_MEMORY;
                     ERR("HeapAlloc failed!\n");
                     goto Cleanup;
                 }
@@ -1531,7 +1531,7 @@ GetPrinterA(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter, DWORD cbBuf, LPDWORD
                 pszPortName = HeapAlloc(hProcessHeap, 0, (cch + 1) * sizeof(CHAR));
                 if (!pszPortName)
                 {
-                    SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+                    dwErrorCode = ERROR_NOT_ENOUGH_MEMORY;
                     ERR("HeapAlloc failed!\n");
                     goto Cleanup;
                 }
@@ -1556,7 +1556,7 @@ GetPrinterA(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter, DWORD cbBuf, LPDWORD
                 pszaObjectGUID = HeapAlloc(hProcessHeap, 0, (cch + 1) * sizeof(CHAR));
                 if (!pszaObjectGUID)
                 {
-                    SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+                    dwErrorCode = ERROR_NOT_ENOUGH_MEMORY;
                     ERR("HeapAlloc failed!\n");
                     goto Cleanup;
                 }
@@ -1570,8 +1570,11 @@ GetPrinterA(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter, DWORD cbBuf, LPDWORD
         }
     }       // switch
 
+    dwErrorCode = ERROR_SUCCESS;
+
 Cleanup:
-    return bReturnValue;
+    SetLastError(dwErrorCode);
+    return (dwErrorCode == ERROR_SUCCESS);
 }
 
 BOOL WINAPI