diff options
author | Tim Potter <tpot@samba.org> | 2004-10-18 12:18:54 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 13:00:01 -0500 |
commit | 3406ac309252fc978fcfcbf39f85d7e9483b2758 (patch) | |
tree | ddaaaa72645296db1ac95b75dee9380690d91cde /source4 | |
parent | 8e8c6aef3c99931cdfe8d0bf8ca74616e0960014 (diff) | |
download | samba-3406ac309252fc978fcfcbf39f85d7e9483b2758.tar.gz samba-3406ac309252fc978fcfcbf39f85d7e9483b2758.tar.bz2 samba-3406ac309252fc978fcfcbf39f85d7e9483b2758.zip |
r3036: Add function to pull an array of structures. Abstracts away the
individual routines in ndr_spoolss_buf.c.
(This used to be commit e080a2483da61ee95d21b0355471a4af13c20a81)
Diffstat (limited to 'source4')
-rw-r--r-- | source4/librpc/ndr/ndr.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/source4/librpc/ndr/ndr.c b/source4/librpc/ndr/ndr.c index 4f6f135cd6..02eb3e95ba 100644 --- a/source4/librpc/ndr/ndr.c +++ b/source4/librpc/ndr/ndr.c @@ -249,6 +249,27 @@ done: 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 |