From 657b4d2abdad5691fc37bafe819f75cc440354b9 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Mon, 17 Nov 2003 02:18:11 +0000 Subject: nicer method of handling spoolss EnumPrinters this also handles the return of several printers (an array of relative subcontexts) (This used to be commit 060421c7dc9aa611fe4160843a4f76498ab16bf4) --- source4/librpc/ndr/ndr_spoolss_buf.c | 39 +++++++++++------------------------- 1 file changed, 12 insertions(+), 27 deletions(-) (limited to 'source4/librpc/ndr/ndr_spoolss_buf.c') diff --git a/source4/librpc/ndr/ndr_spoolss_buf.c b/source4/librpc/ndr/ndr_spoolss_buf.c index 2290150b1d..c53a691417 100644 --- a/source4/librpc/ndr/ndr_spoolss_buf.c +++ b/source4/librpc/ndr/ndr_spoolss_buf.c @@ -24,34 +24,19 @@ #include "includes.h" -NTSTATUS ndr_pull_spoolss_PrinterEnum(struct ndr_pull *ndr, int ndr_flags, - uint16 *level, union spoolss_PrinterEnum *info) +NTSTATUS pull_spoolss_PrinterEnumArray(DATA_BLOB *blob, TALLOC_CTX *mem_ctx, + uint16 level, uint32 count, + union spoolss_PrinterEnum **info) { - switch (*level) { - case 1: - NDR_CHECK(ndr_pull_spoolss_PrinterEnum1(ndr, NDR_SCALARS|NDR_BUFFERS, &info->info1)); - break; - case 2: - NDR_CHECK(ndr_pull_spoolss_PrinterEnum2(ndr, NDR_SCALARS|NDR_BUFFERS, &info->info2)); - break; - default: - return NT_STATUS_INVALID_LEVEL; + int i; + struct ndr_pull *ndr; + ndr = ndr_pull_init_blob(blob, mem_ctx); + if (!ndr) { + return NT_STATUS_NO_MEMORY; } - return NT_STATUS_OK; -} - - -void ndr_print_spoolss_PrinterEnum(struct ndr_print *ndr, const char *name, uint16 level, - union spoolss_PrinterEnum *info) -{ - ndr_print_struct(ndr, name, "spoolss_PrinterEnum"); - - switch (level) { - case 1: - ndr_print_spoolss_PrinterEnum1(ndr, "info1", &info->info1); - break; - case 2: - ndr_print_spoolss_PrinterEnum2(ndr, "info2", &info->info2); - break; + NDR_ALLOC_N(ndr, *info, count); + for (i=0;i