Module: wine Branch: master Commit: 9108eede84422b6b727e9cb447cc09fc2aa80aad URL: http://source.winehq.org/git/wine.git/?a=commit;h=9108eede84422b6b727e9cb447...
Author: Huw Davies huw@codeweavers.com Date: Mon Dec 4 14:32:36 2006 +0000
winspool.drv: Outlook 2003 relies on the buffer size returned by EnumPrintersA being big enough to hold the buffer returned by EnumPrintersW.
---
dlls/winspool.drv/info.c | 7 ++++--- dlls/winspool.drv/tests/info.c | 24 ++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 3 deletions(-)
diff --git a/dlls/winspool.drv/info.c b/dlls/winspool.drv/info.c index 9234509..f357c3c 100644 --- a/dlls/winspool.drv/info.c +++ b/dlls/winspool.drv/info.c @@ -4039,13 +4039,14 @@ BOOL WINAPI EnumPrintersA(DWORD dwType, DWORD cbBuf, LPDWORD lpdwNeeded, LPDWORD lpdwReturned) { - BOOL ret; + BOOL ret, unicode = FALSE; UNICODE_STRING lpszNameW; PWSTR pwstrNameW; - + pwstrNameW = asciitounicode(&lpszNameW,lpszName); + if(!cbBuf) unicode = TRUE; /* return a buffer that's big enough for the unicode version */ ret = WINSPOOL_EnumPrinters(dwType, pwstrNameW, dwLevel, lpbPrinters, cbBuf, - lpdwNeeded, lpdwReturned, FALSE); + lpdwNeeded, lpdwReturned, unicode); RtlFreeUnicodeString(&lpszNameW); return ret; } diff --git a/dlls/winspool.drv/tests/info.c b/dlls/winspool.drv/tests/info.c index b9c4807..eafddd6 100644 --- a/dlls/winspool.drv/tests/info.c +++ b/dlls/winspool.drv/tests/info.c @@ -1638,6 +1638,28 @@ static void test_DocumentProperties(void ok(ret, "ClosePrinter error %d\n", GetLastError()); }
+static void test_EnumPrinters(void) +{ + DWORD neededA, neededW, num; + DWORD ret; + + SetLastError(0xdeadbeef); + ret = EnumPrintersA(PRINTER_ENUM_LOCAL, NULL, 2, NULL, 0, &neededA, &num); + ok(ret == 0, "ret %d\n", ret); + ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, "gle %d\n", GetLastError()); + ok(num == 0, "num %d\n", num); + + SetLastError(0xdeadbeef); + EnumPrintersW(PRINTER_ENUM_LOCAL, NULL, 2, NULL, 0, &neededW, &num); + ok(ret == 0, "ret %d\n", ret); + ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, "gle %d\n", GetLastError()); + ok(num == 0, "num %d\n", num); + + /* Outlook2003 relies on the buffer size returned by EnumPrintersA being big enough + to hold the buffer returned by EnumPrintersW */ + ok(neededA == neededW, "neededA %d neededW %d\n", neededA, neededW); +} + START_TEST(info) { LPSTR default_printer; @@ -1664,4 +1686,6 @@ START_TEST(info) test_OpenPrinter(); test_GetPrinterDriver(); test_SetDefaultPrinter(); + + test_EnumPrinters(); }