X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/11773fc1ede54eaa5c497dced449c0a58c511a7c..1d009ae71b849a95c86c3117d1b8f063fda8aae5:/printing.c diff --git a/printing.c b/printing.c index d40e2ac0..fdd96bfc 100644 --- a/printing.c +++ b/printing.c @@ -37,16 +37,20 @@ static char *printer_add_enum(int param, char *buffer, { DWORD needed, nprinters; - buffer = srealloc(buffer, offset+512); + buffer = sresize(buffer, offset+512, char); - 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; - buffer = srealloc(buffer, offset+needed); + buffer = sresize(buffer, offset+needed, char); if (EnumPrinters(param, NULL, ENUM_LEVEL, buffer+offset, needed, &needed, &nprinters) == 0) @@ -59,20 +63,14 @@ static char *printer_add_enum(int param, char *buffer, printer_enum *printer_start_enum(int *nprinters_ptr) { - printer_enum *ret = smalloc(sizeof(printer_enum)); + printer_enum *ret = snew(printer_enum); char *buffer = NULL, *retval; *nprinters_ptr = 0; /* default return value */ - buffer = smalloc(512); + buffer = snewn(512, char); - retval = printer_add_enum(PRINTER_ENUM_LOCAL, buffer, 0, nprinters_ptr); - if (!retval) - goto error; - else - buffer = retval; - retval = printer_add_enum(PRINTER_ENUM_CONNECTIONS, buffer, - sizeof(ENUM_TYPE) * *nprinters_ptr, - nprinters_ptr); + retval = printer_add_enum(PRINTER_ENUM_LOCAL | PRINTER_ENUM_CONNECTIONS, + buffer, 0, nprinters_ptr); if (!retval) goto error; else @@ -109,7 +107,7 @@ void printer_finish_enum(printer_enum *pe) printer_job *printer_start_job(char *printer) { - printer_job *ret = smalloc(sizeof(printer_job)); + printer_job *ret = snew(printer_job); DOC_INFO_1 docinfo; int jobstarted = 0, pagestarted = 0;