From 6813094751c44484eb0647fd5178e6e7de3d219f Mon Sep 17 00:00:00 2001 From: Simon Tatham Date: Mon, 2 Sep 2002 13:47:50 +0000 Subject: [PATCH] After trying a succession of tests on Jacob's machine, I think I've finally isolated the _important_ difference between Romano Trampus's working printing.c and my failing one: he ignores the error return from the first exploratory how-big-does-my-buffer-need-to-be call to EnumPrinters(), because not having enough buffer space counts as an error condition. Hence I am officially a klutz, but this should now work. (Also reverted ENUM_LEVEL to 1, again, because that seems to be the choice of people whose code works.) [originally from svn r1915] --- printing.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/printing.c b/printing.c index ebec7ac6..17bf6ffa 100644 --- a/printing.c +++ b/printing.c @@ -11,7 +11,7 @@ * under PRINTER_ENUM_CONNECTIONS on NT 4. I don't pretend to * understand this... */ -#if 1 +#if 0 #define ENUM_LEVEL 5 #define ENUM_PTR LPPRINTER_INFO_5 #define ENUM_TYPE PRINTER_INFO_5 @@ -39,9 +39,13 @@ static char *printer_add_enum(int param, char *buffer, buffer = srealloc(buffer, offset+512); - if (EnumPrinters(param, NULL, ENUM_LEVEL, buffer+offset, - 512, &needed, &nprinters) == 0) - return NULL; + /* + * Exploratory call to EnumPrinters to determine how much space + * we'll need for the output. Discard the return value since it + * will almost certainly be a failure due to lack of space. + */ + EnumPrinters(param, NULL, ENUM_LEVEL, buffer+offset, 512, + &needed, &nprinters); if (needed < 512) needed = 512;