ret->info = (ENUM_PTR)buffer;
switch (ret->enum_level) { case 4: ret->info.i4 = (LPPRINTER_INFO_4)buffer; break; case 5: ret->info.i5 = (LPPRINTER_INFO_5)buffer; break; }
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;    ret->info = (ENUM_PTR)buffer;    ret->nprinters = *nprinters_ptr;        return ret;    error:    sfree(buffer);    sfree(ret);    *nprinters_ptr = 0;    return NULL;}