- if (EnumPrinters(PRINTER_ENUM_LOCAL, NULL, 5,
- (LPBYTE)buffer, needed, &needed, &nprinters) == 0)
- goto error;
+ if (needed < 512)
+ needed = 512;
+
+ buffer = sresize(buffer, offset+needed, char);
+
+ if (EnumPrinters(param, NULL, ENUM_LEVEL, buffer+offset,
+ needed, &needed, &nprinters) == 0)
+ return NULL;
+
+ *nprinters_ptr += nprinters;
+
+ return buffer;
+}
+
+printer_enum *printer_start_enum(int *nprinters_ptr)
+{
+ printer_enum *ret = snew(printer_enum);
+ char *buffer = NULL, *retval;
+
+ *nprinters_ptr = 0; /* default return value */
+ buffer = snewn(512, char);
+
+ retval = printer_add_enum(PRINTER_ENUM_LOCAL | PRINTER_ENUM_CONNECTIONS,
+ buffer, 0, nprinters_ptr);
+ if (!retval)
+ goto error;
+ else
+ buffer = retval;