Author: tpot
Date: 2004-10-18 12:18:54 +0000 (Mon, 18 Oct 2004)
New Revision: 3036

WebSVN: 
http://websvn.samba.org/websvn/changeset.php?rep=samba&path=/branches/SAMBA_4_0/source/librpc/ndr&rev=3036&nolog=1

Log:
Add function to pull an array of structures.  Abstracts away the
individual routines in ndr_spoolss_buf.c.

Modified:
   branches/SAMBA_4_0/source/librpc/ndr/ndr.c


Changeset:
Modified: branches/SAMBA_4_0/source/librpc/ndr/ndr.c
===================================================================
--- branches/SAMBA_4_0/source/librpc/ndr/ndr.c  2004-10-18 12:06:21 UTC (rev 3035)
+++ branches/SAMBA_4_0/source/librpc/ndr/ndr.c  2004-10-18 12:18:54 UTC (rev 3036)
@@ -249,7 +249,28 @@
        return NT_STATUS_OK;
 }
 
+/*
+  pull a constant size array of structures
+*/
+NTSTATUS ndr_pull_struct_array(struct ndr_pull *ndr, uint32_t count,
+                              size_t elsize, void **info,
+                              NTSTATUS (*pull_fn)(struct ndr_pull *, int, void *))
+{
+       int i;
+       char *base;
 
+       NDR_ALLOC_N_SIZE(ndr, *info, count, elsize);
+       base = (char *)*info;
+
+       for (i = 0; i < count; i++) {
+               ndr->data += ndr->offset;
+               ndr->offset = 0;
+               NDR_CHECK(pull_fn(ndr, NDR_SCALARS|NDR_BUFFERS, &base[count * 
elsize]));
+       }
+
+       return NT_STATUS_OK;
+}
+
 /*
   print a generic array
 */

Reply via email to