https://git.reactos.org/?p=reactos.git;a=commitdiff;h=373a8dbb5c654e9cbde05f...
commit 373a8dbb5c654e9cbde05f77363f537548c838eb Author: Serge Gautherie 32623169+SergeGautherie@users.noreply.github.com AuthorDate: Sat May 23 09:08:00 2020 +0200 Commit: GitHub noreply@github.com CommitDate: Sat May 23 09:08:00 2020 +0200
[WINSPOOL] GetPrinterA(): Refactor failure handling (#2830)
Addendum to ecde3768254664ca40a3f2fa49d1342d4bd92c02. --- win32ss/printing/base/winspool/printers.c | 55 ++++++++++++++++--------------- 1 file changed, 29 insertions(+), 26 deletions(-)
diff --git a/win32ss/printing/base/winspool/printers.c b/win32ss/printing/base/winspool/printers.c index 219e831cb16..1576ca0edd4 100644 --- a/win32ss/printing/base/winspool/printers.c +++ b/win32ss/printing/base/winspool/printers.c @@ -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