From 943340a5a3f5d725e2cd35ab47f33083837cb904 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Mon, 22 May 2000 09:09:37 +0000 Subject: more aparser stuff - we now handle everything but the idl headers in srvsvc.idl (This used to be commit 5f1e8422d0ebc589cdfe95f1001a8e55cb60af4a) --- source3/aparser/parser.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'source3/aparser/parser.c') diff --git a/source3/aparser/parser.c b/source3/aparser/parser.c index bcd317b57e..0e5f29b2bc 100644 --- a/source3/aparser/parser.c +++ b/source3/aparser/parser.c @@ -129,12 +129,11 @@ char *prs_mem_get(prs_struct *ps, uint32 extra_size) Initialise a parse structure - malloc the data if requested. ********************************************************************/ -BOOL prs_init(prs_struct *ps, uint32 size, uint8 align, BOOL io) +BOOL prs_init(prs_struct *ps, uint32 size, BOOL io) { ZERO_STRUCTP(ps); ps->io = io; ps->bigendian_data = False; - ps->align = align; ps->is_dynamic = False; ps->data_offset = 0; ps->buffer_size = 0; @@ -168,12 +167,12 @@ void prs_debug(prs_struct *ps, int depth, char *desc, char *fn_name) zeros. ********************************************************************/ -BOOL prs_align(prs_struct *ps) +BOOL prs_align(prs_struct *ps, int align) { - uint32 mod = ps->data_offset & (ps->align-1); + uint32 mod = ps->data_offset & (align-1); - if (ps->align != 0 && mod != 0) { - uint32 extra_space = (ps->align - mod); + if (align != 0 && mod != 0) { + uint32 extra_space = (align - mod); if(!prs_grow(ps, extra_space)) return False; memset(&ps->data_p[ps->data_offset], '\0', (size_t)extra_space); @@ -257,6 +256,8 @@ BOOL io_uint32(char *name, prs_struct *ps, int depth, uint32 *data32, unsigned f if (!(flags & PARSE_SCALARS)) return True; + if (!prs_align(ps, 4)) return False; + q = prs_mem_get(ps, sizeof(uint32)); if (q == NULL) return False; @@ -275,6 +276,8 @@ BOOL io_uint16(char *name, prs_struct *ps, int depth, uint16 *data16, unsigned f if (!(flags & PARSE_SCALARS)) return True; + if (!prs_align(ps, 2)) return False; + q = prs_mem_get(ps, sizeof(uint16)); if (q == NULL) return False; @@ -326,6 +329,8 @@ BOOL io_wstring(char *name, prs_struct *ps, int depth, uint16 *data16s, int len, if (!(flags & PARSE_SCALARS)) return True; + if (!prs_align(ps, 2)) return False; + q = prs_mem_get(ps, len * sizeof(uint16)); if (q == NULL) return False; -- cgit