[PATCH 4/8] comdlg32: Use a helper to get the printer info
Detlef Riekenberg
wine.dev at web.de
Mon Feb 20 06:55:36 CST 2012
The helper will be reused in the other GetPrinter - locations
--
By by ... Detlef
---
dlls/comdlg32/printdlg.c | 74 +++++++++++++++++++++++++++++++++-------------
1 files changed, 53 insertions(+), 21 deletions(-)
diff --git a/dlls/comdlg32/printdlg.c b/dlls/comdlg32/printdlg.c
index 2647ea3..7acb4ab 100644
--- a/dlls/comdlg32/printdlg.c
+++ b/dlls/comdlg32/printdlg.c
@@ -161,6 +161,54 @@ static LPWSTR strdupW(LPCWSTR p)
return ret;
}
+/***********************************************************************
+ * get_printer_info [internal]
+ *
+ * get PRINTER_INFO_2W for the current printer handle,
+ * alloc the buffer, when needed
+ */
+static PRINTER_INFO_2W * get_printer_infoW(HANDLE hprn)
+{
+ PRINTER_INFO_2W *pi2 = NULL;
+ DWORD needed = 0;
+ BOOL res;
+
+ res = GetPrinterW(hprn, 2, NULL, 0, &needed);
+ if (!res && (GetLastError() == ERROR_INSUFFICIENT_BUFFER)) {
+ HeapFree(GetProcessHeap(), 0, pi2);
+ pi2 = HeapAlloc(GetProcessHeap(), 0, needed);
+ res = GetPrinterW(hprn, 2, (LPBYTE)pi2, needed, &needed);
+ }
+
+ if (res)
+ return pi2;
+
+ TRACE("GetPrinterW failed with %u\n", GetLastError());
+ HeapFree(GetProcessHeap(), 0, pi2);
+ return NULL;
+}
+
+static PRINTER_INFO_2A * get_printer_infoA(HANDLE hprn)
+{
+ PRINTER_INFO_2A *pi2 = NULL;
+ DWORD needed = 0;
+ BOOL res;
+
+ res = GetPrinterA(hprn, 2, NULL, 0, &needed);
+ if (!res && (GetLastError() == ERROR_INSUFFICIENT_BUFFER)) {
+ HeapFree(GetProcessHeap(), 0, pi2);
+ pi2 = HeapAlloc(GetProcessHeap(), 0, needed);
+ res = GetPrinterA(hprn, 2, (LPBYTE)pi2, needed, &needed);
+ }
+
+ if (res)
+ return pi2;
+
+ TRACE("GetPrinterA failed with %u\n", GetLastError());
+ HeapFree(GetProcessHeap(), 0, pi2);
+ return NULL;
+}
+
/***********************************************************
* convert_to_devmodeA
*
@@ -3816,22 +3864,13 @@ HRESULT WINAPI PrintDlgExA(LPPRINTDLGEXA lppd)
return E_FAIL;
}
- pbuf = HeapAlloc(GetProcessHeap(), 0, needed);
- bRet = GetPrinterA(hprn, 2, (LPBYTE)pbuf, needed, &needed);
- if (!bRet && (GetLastError() == ERROR_INSUFFICIENT_BUFFER))
- {
- HeapFree(GetProcessHeap(), 0, pbuf);
- pbuf = HeapAlloc(GetProcessHeap(), 0, needed);
- bRet = GetPrinterA(hprn, 2, (LPBYTE)pbuf, needed, &needed);
- }
- if (!bRet)
+ pbuf = get_printer_infoA(hprn);
+ if (!pbuf)
{
- HeapFree(GetProcessHeap(), 0, pbuf);
ClosePrinter(hprn);
return E_FAIL;
}
- needed = 1024;
dbuf = HeapAlloc(GetProcessHeap(), 0, needed);
bRet = GetPrinterDriverA(hprn, NULL, 3, (LPBYTE)dbuf, needed, &needed);
if (!bRet && (GetLastError() == ERROR_INSUFFICIENT_BUFFER))
@@ -3951,20 +3990,13 @@ HRESULT WINAPI PrintDlgExW(LPPRINTDLGEXW lppd)
return E_FAIL;
}
- pbuf = HeapAlloc(GetProcessHeap(), 0, needed);
- bRet = GetPrinterW(hprn, 2, (LPBYTE)pbuf, needed, &needed);
- if (!bRet && (GetLastError() == ERROR_INSUFFICIENT_BUFFER)) {
- HeapFree(GetProcessHeap(), 0, pbuf);
- pbuf = HeapAlloc(GetProcessHeap(), 0, needed);
- bRet = GetPrinterW(hprn, 2, (LPBYTE)pbuf, needed, &needed);
- }
- if (!bRet) {
- HeapFree(GetProcessHeap(), 0, pbuf);
+ pbuf = get_printer_infoW(hprn);
+ if (!pbuf)
+ {
ClosePrinter(hprn);
return E_FAIL;
}
- needed = 1024;
dbuf = HeapAlloc(GetProcessHeap(), 0, needed);
bRet = GetPrinterDriverW(hprn, NULL, 3, (LPBYTE)dbuf, needed, &needed);
if (!bRet && (GetLastError() == ERROR_INSUFFICIENT_BUFFER)) {
--
1.7.5.4
More information about the wine-patches
mailing list