- buffer = smalloc(512);
-
- 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);
+ buffer = snewn(512, char);
+
+ /*
+ * Determine what enumeration level to use.
+ * When enumerating printers, we need to use PRINTER_INFO_4 on
+ * NT-class systems to avoid Windows looking too hard for them and
+ * slowing things down; and we need to avoid PRINTER_INFO_5 as
+ * we've seen network printers not show up.
+ * On 9x-class systems, PRINTER_INFO_4 isn't available and
+ * PRINTER_INFO_5 is recommended.
+ * Bletch.
+ */
+ if (osVersion.dwPlatformId != VER_PLATFORM_WIN32_NT) {
+ ret->enum_level = 5;
+ } else {
+ ret->enum_level = 4;
+ }
+
+ retval = printer_add_enum(PRINTER_ENUM_LOCAL | PRINTER_ENUM_CONNECTIONS,
+ ret->enum_level, buffer, 0, nprinters_ptr);