From ef2e26c91b80556af033d3335e55f5dfa6fff31d Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 13 Aug 2003 01:53:07 +0000 Subject: first public release of samba4 code (This used to be commit b0510b5428b3461aeb9bbe3cc95f62fc73e2b97f) --- source4/include/genparser.h | 78 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 source4/include/genparser.h (limited to 'source4/include/genparser.h') diff --git a/source4/include/genparser.h b/source4/include/genparser.h new file mode 100644 index 0000000000..f28cd78249 --- /dev/null +++ b/source4/include/genparser.h @@ -0,0 +1,78 @@ +/* + Copyright (C) Andrew Tridgell 2002 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#ifndef _GENPARSER_H +#define _GENPARSER_H + +/* these macros are needed for genstruct auto-parsers */ +#ifndef GENSTRUCT +#define GENSTRUCT +#define _LEN(x) +#define _NULLTERM +#endif + +/* + automatic marshalling/unmarshalling system for C structures +*/ + +/* flag to mark a fixed size array as actually being null terminated */ +#define FLAG_NULLTERM 1 +#define FLAG_ALWAYS 2 + +struct enum_struct { + const char *name; + unsigned value; +}; + +/* intermediate dumps are stored in one of these */ +struct parse_string { + unsigned allocated; + unsigned length; + char *s; +}; + +typedef int (*gen_dump_fn)(TALLOC_CTX *, struct parse_string *, const char *ptr, unsigned indent); +typedef int (*gen_parse_fn)(TALLOC_CTX *, char *ptr, const char *str); + +/* genstruct.pl generates arrays of these */ +struct parse_struct { + const char *name; + unsigned ptr_count; + unsigned size; + unsigned offset; + unsigned array_len; + const char *dynamic_len; + unsigned flags; + gen_dump_fn dump_fn; + gen_parse_fn parse_fn; +}; + +#define DUMP_PARSE_DECL(type) \ + int gen_dump_ ## type(TALLOC_CTX *, struct parse_string *, const char *, unsigned); \ + int gen_parse_ ## type(TALLOC_CTX *, char *, const char *); + +DUMP_PARSE_DECL(char) +DUMP_PARSE_DECL(int) +DUMP_PARSE_DECL(unsigned) +DUMP_PARSE_DECL(double) +DUMP_PARSE_DECL(float) + +#define gen_dump_unsigned_char gen_dump_char +#define gen_parse_unsigned_char gen_parse_char + +#endif /* _GENPARSER_H */ -- cgit