Module: wine Branch: master Commit: 18193b193bd80190b51b57ef8312e7e38369ad9a URL: http://source.winehq.org/git/wine.git/?a=commit;h=18193b193bd80190b51b57ef83...
Author: Detlef Riekenberg wine.dev@web.de Date: Wed Jun 16 00:42:23 2010 +0200
winspool: Return ERROR_MORE_DATA, when the app probe for the needed buffer size.
---
dlls/winspool.drv/info.c | 12 ++++++++++++ dlls/winspool.drv/tests/info.c | 15 +++++++++++++++ 2 files changed, 27 insertions(+), 0 deletions(-)
diff --git a/dlls/winspool.drv/info.c b/dlls/winspool.drv/info.c index 3f97ebd..885b8df 100644 --- a/dlls/winspool.drv/info.c +++ b/dlls/winspool.drv/info.c @@ -5367,6 +5367,8 @@ DWORD WINAPI GetPrinterDataExA(HANDLE hPrinter, LPCSTR pKeyName, ret = RegOpenKeyW(HKEY_LOCAL_MACHINE, PrintersW, &hkeyPrinters); if (ret) return ret;
+ TRACE("printer->name: %s\n", debugstr_w(printer->name)); + if (printer->name) {
ret = RegOpenKeyW(hkeyPrinters, printer->name, &hkeyPrinter); @@ -5385,9 +5387,13 @@ DWORD WINAPI GetPrinterDataExA(HANDLE hPrinter, LPCSTR pKeyName, ret = RegQueryValueExA(printer->name ? hkeySubkey : hkeyPrinters, pValueName, 0, pType, pData, pcbNeeded);
+ if (!ret && !pData) ret = ERROR_MORE_DATA; + RegCloseKey(hkeySubkey); RegCloseKey(hkeyPrinter); RegCloseKey(hkeyPrinters); + + TRACE("--> %d\n", ret); return ret; }
@@ -5411,6 +5417,8 @@ DWORD WINAPI GetPrinterDataExW(HANDLE hPrinter, LPCWSTR pKeyName, ret = RegOpenKeyW(HKEY_LOCAL_MACHINE, PrintersW, &hkeyPrinters); if (ret) return ret;
+ TRACE("printer->name: %s\n", debugstr_w(printer->name)); + if (printer->name) {
ret = RegOpenKeyW(hkeyPrinters, printer->name, &hkeyPrinter); @@ -5429,9 +5437,13 @@ DWORD WINAPI GetPrinterDataExW(HANDLE hPrinter, LPCWSTR pKeyName, ret = RegQueryValueExW(printer->name ? hkeySubkey : hkeyPrinters, pValueName, 0, pType, pData, pcbNeeded);
+ if (!ret && !pData) ret = ERROR_MORE_DATA; + RegCloseKey(hkeySubkey); RegCloseKey(hkeyPrinter); RegCloseKey(hkeyPrinters); + + TRACE("--> %d\n", ret); return ret; }
diff --git a/dlls/winspool.drv/tests/info.c b/dlls/winspool.drv/tests/info.c index be7be7d..b86d367 100644 --- a/dlls/winspool.drv/tests/info.c +++ b/dlls/winspool.drv/tests/info.c @@ -2364,6 +2364,14 @@ static void test_GetPrinterData(void) ok( !res && (type == REG_SZ) && ((needed == len) || (needed == (len * sizeof(WCHAR)))), "got %d, type %d, needed: %d and '%s' (expected ERROR_SUCCESS, REG_SZ and %d or %d)\n", res, type, needed, buffer, len, len * sizeof(WCHAR)); + + needed = 0xdeadbeef; + SetLastError(0xdeadbeef); + res = GetPrinterDataA(hprn, defaultspooldirectory, NULL, NULL, 0, &needed); + ok( (res == ERROR_MORE_DATA) && ((needed == len) || (needed == (len * sizeof(WCHAR)))), + "got %d, needed: %d (expected ERROR_MORE_DATA and %d or %d)\n", + res, needed, len, len * sizeof(WCHAR)); + /* ToDo: test SPLREG_* */
SetLastError(0xdeadbeef); @@ -2451,6 +2459,13 @@ static void test_GetPrinterDataEx(void) "got %d, type %d, needed: %d and '%s' (expected ERROR_SUCCESS, REG_SZ and %d or %d)\n", res, type, needed, buffer, len, len * sizeof(WCHAR));
+ needed = 0xdeadbeef; + SetLastError(0xdeadbeef); + res = pGetPrinterDataExA(hprn, NULL, defaultspooldirectory, NULL, NULL, 0, &needed); + ok( (res == ERROR_MORE_DATA) && ((needed == len) || (needed == (len * sizeof(WCHAR)))), + "got %d, needed: %d (expected ERROR_MORE_DATA and %d or %d)\n", + res, needed, len, len * sizeof(WCHAR)); + SetLastError(0xdeadbeef); res = ClosePrinter(hprn); ok(res, "ClosePrinter error %d\n", GetLastError());