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/build | 2 +- source3/aparser/parser.c | 17 +- source3/aparser/parser.h | 5 +- source3/aparser/parsetree.awk | 115 ++++++- source3/aparser/srvsvc2.struct | 631 ++++++++++++++++++++++++++++------- source3/aparser/templates/fn_end.tpl | 4 +- source3/aparser/token.awk | 63 +++- source3/aparser/vluke.c | 2 +- 8 files changed, 699 insertions(+), 140 deletions(-) (limited to 'source3/aparser') diff --git a/source3/aparser/build b/source3/aparser/build index a8b49451f6..3c212cfe41 100755 --- a/source3/aparser/build +++ b/source3/aparser/build @@ -8,6 +8,6 @@ if ! igawk -f main.awk $file; then fi echo compiling vluke -gcc -Wall -g -o vluke parser.c vluke.c +gcc -Wall -o vluke parser.c vluke.c echo done. 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; diff --git a/source3/aparser/parser.h b/source3/aparser/parser.h index 5c3a14c66f..52d1b83941 100644 --- a/source3/aparser/parser.h +++ b/source3/aparser/parser.h @@ -48,7 +48,6 @@ typedef struct _prs_struct * always little-endian. */ BOOL bigendian_data; - uint8 align; /* data alignment */ BOOL is_dynamic; /* Do we own this memory or not ? */ uint32 data_offset; /* Current working offset into data. */ uint32 buffer_size; /* Current size of the buffer. */ @@ -58,9 +57,9 @@ typedef struct _prs_struct char *prs_mem_get(prs_struct *ps, uint32 extra_size); -BOOL prs_init(prs_struct *ps, uint32 size, uint8 align, BOOL io); +BOOL prs_init(prs_struct *ps, uint32 size, BOOL io); void prs_debug(prs_struct *ps, int depth, char *desc, char *fn_name); -BOOL prs_align(prs_struct *ps); +BOOL prs_align(prs_struct *ps, int align); void print_asc(int level, unsigned char *buf,int len); BOOL prs_read(prs_struct *ps, int fd, size_t len, int timeout); void dump_data(int level,char *buf1,int len); diff --git a/source3/aparser/parsetree.awk b/source3/aparser/parsetree.awk index 6fee6e2a4a..832cd5f2e8 100644 --- a/source3/aparser/parsetree.awk +++ b/source3/aparser/parsetree.awk @@ -1,5 +1,14 @@ # build the parse tree for a struct file +function find_structure(name, + LOCAL, i) +{ + for (i=0;i