diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2016-01-21 17:25:55 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2016-07-04 15:41:59 +0300 |
commit | 8e541ddaffcab6eaa36faf86304b51a0bc6a92a1 (patch) | |
tree | fc909de2e7322c9ad04e8d51d0f9e5213b552cb1 /src | |
parent | 17d95ceb6d3f749e9ce20747197703e40e453759 (diff) | |
download | grecs-8e541ddaffcab6eaa36faf86304b51a0bc6a92a1.tar.gz grecs-8e541ddaffcab6eaa36faf86304b51a0bc6a92a1.tar.bz2 |
Split declarations between several header files.
* Makefile.am (SUBDIRS): Add include
* am/grecs.m4 (GRECS_INCLUDES): Update
(GRECS_COND_BUILD_INSTALL)
(GRECS_COND_BUILD_SHARED)
(GRECS_COND_BUILD_STATIC): New conditions.
Build include/Makefile and include/grecs/Makefile.
* configure.ac: Use src/grecs-gram.y as a source
validity marker
* include/Makefile.a: New file.
* src/grecs.hin: Remove. Split into include/*. See below.
* include/grecs.h: New file.
* include/grecs/.gitignore: New file.
* include/grecs/Makefile.am: New file.
* include/grecs/doc.h: New file.
* include/grecs/error.h: New file.
* include/grecs/format.h: New file.
* include/grecs/lex.h: New file.
* include/grecs/list.h: New file.
* include/grecs/mem.h: New file.
* include/grecs/node.h: New file.
* include/grecs/parser.h: New file.
* include/grecs/preproc.h: New file.
* include/grecs/sockaddr.h: New file.
* include/grecs/symtab.h: New file.
* include/grecs/table.h: New file.
* include/grecs/tree.h: New file.
* include/grecs/txtacc.h: New file.
* include/grecs/types.h.in: New file.
* include/grecs/util.h: New file.
* include/grecs/value.h: New file.
* include/grecs/version.h: New file.
* src/grecs-locus.h: Move to ...
* include/grecs/locus.h: ... here
* src/grecsopt.h: Move to ...
* include/grecs/opt.h: ... here
* src/json.h: Move to ...
* include/grecs/json.h: ... here
* src/wordsplit.h: Move to ...
* include/wordsplit.h: ... here
* src/Make-inst.am (include_HEADERS): Remove.
* src/Make-shared.am (grecsinclude_HEADERS)
(noinst_HEADERS): Remove.
* src/Make-static.am (noinst_HEADERS): Remove.
* src/Make.am: Remove header-related stuff
* src/bind-gram.y: Fix includes.
* src/bind-lex.l: Likewise.
* src/cidr.c: Likewise.
* src/dhcpd-gram.y: Likewise.
* src/dhcpd-lex.l: Likewise.
* src/diag.c: Likewise.
* src/format.c: Likewise.
* src/grecs-gram.y: Likewise.
* src/grecs-lex.l: Likewise.
* src/json-gram.y: Likewise.
* src/json-lex.l: Likewise.
* src/jsonfmt.c: Likewise.
* src/lookup.c: Likewise.
* src/meta1-gram.y: Likewise.
* src/meta1-lex.l: Likewise.
* src/opthelp.c: Likewise.
* src/preproc.c: Likewise.
* src/sockaddr.c: Likewise.
* src/txtacc.c: Likewise.
* src/version.c: Likewise.
* tests/gcfenum.c: Likewise.
* tests/gcffmt.c: Likewise.
* tests/gcfpeek.c: Likewise.
* tests/gcfset.c: Likewise.
* tests/gcfver.c: Likewise.
* tests/json.c: Likewise.
Diffstat (limited to 'src')
-rw-r--r-- | src/Make-inst.am | 1 | ||||
-rw-r--r-- | src/Make-shared.am | 6 | ||||
-rw-r--r-- | src/Make-static.am | 1 | ||||
-rw-r--r-- | src/Make.am | 14 | ||||
-rw-r--r-- | src/bind-gram.y | 1 | ||||
-rw-r--r-- | src/bind-lex.l | 1 | ||||
-rw-r--r-- | src/cidr.c | 1 | ||||
-rw-r--r-- | src/dhcpd-gram.y | 1 | ||||
-rw-r--r-- | src/dhcpd-lex.l | 1 | ||||
-rw-r--r-- | src/diag.c | 1 | ||||
-rw-r--r-- | src/format.c | 2 | ||||
-rw-r--r-- | src/grecs-gram.y | 1 | ||||
-rw-r--r-- | src/grecs-lex.l | 1 | ||||
-rw-r--r-- | src/grecs-locus.h | 57 | ||||
-rw-r--r-- | src/grecs.hin | 584 | ||||
-rw-r--r-- | src/grecsopt.h | 58 | ||||
-rw-r--r-- | src/json-gram.y | 4 | ||||
-rw-r--r-- | src/json-lex.l | 3 | ||||
-rw-r--r-- | src/json.h | 99 | ||||
-rw-r--r-- | src/jsonfmt.c | 3 | ||||
-rw-r--r-- | src/lookup.c | 1 | ||||
-rw-r--r-- | src/meta1-gram.y | 1 | ||||
-rw-r--r-- | src/meta1-lex.l | 1 | ||||
-rw-r--r-- | src/opthelp.c | 2 | ||||
-rw-r--r-- | src/preproc.c | 3 | ||||
-rw-r--r-- | src/sockaddr.c | 1 | ||||
-rw-r--r-- | src/txtacc.c | 3 | ||||
-rw-r--r-- | src/version.c | 1 | ||||
-rw-r--r-- | src/wordsplit.h | 250 |
29 files changed, 19 insertions, 1084 deletions
diff --git a/src/Make-inst.am b/src/Make-inst.am index 9dac1ad..a4b6aea 100644 --- a/src/Make-inst.am +++ b/src/Make-inst.am @@ -17,6 +17,5 @@ include Make.am lib_LTLIBRARIES=libgrecs.la libgrecs_la_SOURCES = $(GRECS_SRC) -include_HEADERS = $(GRECS_HDR) m4datadir = $(datadir)/aclocal dist_m4data_DATA = libgrecs.m4 diff --git a/src/Make-shared.am b/src/Make-shared.am index 8ec4a76..9a762a4 100644 --- a/src/Make-shared.am +++ b/src/Make-shared.am @@ -17,9 +17,3 @@ include Make.am noinst_LTLIBRARIES=libgrecs.la libgrecs_la_SOURCES = $(GRECS_SRC) -if GRECS_COND_INSTALLHEADERS - grecsincludedir = @GRECS_INCLUDE_DIR@ - grecsinclude_HEADERS = $(GRECS_HDR) -else - noinst_HEADERS += $(GRECS_HDR) -endif diff --git a/src/Make-static.am b/src/Make-static.am index 7532562..2688b40 100644 --- a/src/Make-static.am +++ b/src/Make-static.am @@ -16,6 +16,5 @@ include Make.am noinst_LIBRARIES=libgrecs.a libgrecs_a_SOURCES = $(GRECS_SRC) -noinst_HEADERS += $(GRECS_HDR) diff --git a/src/Make.am b/src/Make.am index cfae734..227973e 100644 --- a/src/Make.am +++ b/src/Make.am @@ -75,20 +75,12 @@ GRECS_SRC = \ $(GRECS_PARSER_GIT)\ $(GRECS_PARSER_META1) -GRECS_HDR = grecs.h grecsopt.h wordsplit.h -if GRECS_COND_JSON - GRECS_HDR += json.h -endif - if GRECS_COND_SOCKADDR_LIST GRECS_SRC += sockaddr.c endif -noinst_HEADERS = grecs-locus.h - EXTRA_DIST=\ grecs-gram.h\ - grecs.hin\ $(GRECS_EXTRA_BIND)\ $(GRECS_EXTRA_DHCPD)\ $(GRECS_EXTRA_JSON)\ @@ -96,8 +88,6 @@ EXTRA_DIST=\ $(PP_SETUP_FILE)\ Make.am Make-inst.am Make-shared.am Make-static.am -BUILT_SOURCES=grecs.h - AM_CPPFLAGS = \ -I$(srcdir)\ -I$(top_srcdir)/@GRECS_SUBDIR@\ @@ -112,3 +102,7 @@ inc_DATA = $(PP_SETUP_FILE) LEXCOMPILE = $(top_srcdir)/@GRECS_SUBDIR@/build-aux/yyrename '$(LEX) $(LFLAGS) $(AM_LFLAGS)' YACCCOMPILE = $(top_srcdir)/@GRECS_SUBDIR@/build-aux/yyrename '$(YACC) $(YFLAGS) $(AM_YFLAGS)' + + + + diff --git a/src/bind-gram.y b/src/bind-gram.y index 4c8d394..18deb0d 100644 --- a/src/bind-gram.y +++ b/src/bind-gram.y @@ -19,7 +19,6 @@ # include <config.h> #endif #include <grecs.h> -#include <grecs-locus.h> #include <bind-gram.h> #include <stdlib.h> #include <stdarg.h> diff --git a/src/bind-lex.l b/src/bind-lex.l index 096d1f2..e0659e7 100644 --- a/src/bind-lex.l +++ b/src/bind-lex.l @@ -24,7 +24,6 @@ with Grecs. If not, see <http://www.gnu.org/licenses/>. */ #include <grecs.h> -#include <grecs-locus.h> #include <bind-gram.h> #include <unistd.h> #include <fcntl.h> @@ -22,6 +22,7 @@ #include <sys/un.h> #include <netinet/in.h> #include <arpa/inet.h> +#include <stdlib.h> #include "grecs.h" static void diff --git a/src/dhcpd-gram.y b/src/dhcpd-gram.y index 86bfde9..11dd1b2 100644 --- a/src/dhcpd-gram.y +++ b/src/dhcpd-gram.y @@ -19,7 +19,6 @@ # include <config.h> #endif #include <grecs.h> -#include <grecs-locus.h> #include <dhcpd-gram.h> #include <stdlib.h> #include <stdarg.h> diff --git a/src/dhcpd-lex.l b/src/dhcpd-lex.l index 490fd72..79c7274 100644 --- a/src/dhcpd-lex.l +++ b/src/dhcpd-lex.l @@ -23,7 +23,6 @@ with Grecs. If not, see <http://www.gnu.org/licenses/>. */ #include <grecs.h> -#include <grecs-locus.h> #include <dhcpd-gram.h> #include <unistd.h> #include <fcntl.h> @@ -18,7 +18,6 @@ # include <config.h> #endif #include <grecs.h> -#include <grecs-locus.h> #include <stdlib.h> #include <stdio.h> #include <string.h> diff --git a/src/format.c b/src/format.c index 89202a0..af87329 100644 --- a/src/format.c +++ b/src/format.c @@ -18,12 +18,12 @@ # include <config.h> #endif #include <grecs.h> +#include <wordsplit.h> #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> #include <errno.h> -#include "wordsplit.h" const char * grecs_data_type_string(enum grecs_data_type type) diff --git a/src/grecs-gram.y b/src/grecs-gram.y index 4545c85..05ed2f5 100644 --- a/src/grecs-gram.y +++ b/src/grecs-gram.y @@ -19,7 +19,6 @@ # include <config.h> #endif #include <grecs.h> -#include <grecs-locus.h> #include <grecs-gram.h> #include <stdlib.h> #include <stdarg.h> diff --git a/src/grecs-lex.l b/src/grecs-lex.l index 5223765..113ee88 100644 --- a/src/grecs-lex.l +++ b/src/grecs-lex.l @@ -24,7 +24,6 @@ with Grecs. If not, see <http://www.gnu.org/licenses/>. */ #include <grecs.h> -#include <grecs-locus.h> #include <grecs-gram.h> #include <unistd.h> #include <fcntl.h> diff --git a/src/grecs-locus.h b/src/grecs-locus.h deleted file mode 100644 index b5573fd..0000000 --- a/src/grecs-locus.h +++ /dev/null @@ -1,57 +0,0 @@ -/* grecs - Gray's Extensible Configuration System - Copyright (C) 2007-2016 Sergey Poznyakoff - - Grecs 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 3 of the License, or (at your - option) any later version. - - Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ - -#define YYLTYPE grecs_locus_t - -#define YYLLOC_DEFAULT(Current, Rhs, N) \ - do { \ - if (N) { \ - (Current).beg = YYRHSLOC(Rhs, 1).beg; \ - (Current).end = YYRHSLOC(Rhs, N).end; \ - } else { \ - (Current).beg = YYRHSLOC(Rhs, 0).end; \ - (Current).end = (Current).beg; \ - } \ - } while (0) - -#define YY_LOCATION_PRINT(File, Loc) do { \ - if ((Loc).beg.col == 0) \ - fprintf(File, "%s:%u", \ - (Loc).beg.file, \ - (Loc).beg.line); \ - else if (strcmp((Loc).beg.file, (Loc).end.file)) \ - fprintf(File, "%s:%u.%u-%s:%u.%u", \ - (Loc).beg.file, \ - (Loc).beg.line, (Loc).beg.col, \ - (Loc).end.file, \ - (Loc).end.line, (Loc).end.col); \ - else if ((Loc).beg.line != (Loc).end.line) \ - fprintf(File, "%s:%u.%u-%u.%u", \ - (Loc).beg.file, \ - (Loc).beg.line, (Loc).beg.col, \ - (Loc).end.line, (Loc).end.col); \ - else if ((Loc).beg.col != (Loc).end.col) \ - fprintf(File, "%s:%u.%u-%u", \ - (Loc).beg.file, \ - (Loc).beg.line, (Loc).beg.col, \ - (Loc).end.col); \ - else \ - fprintf(File, "%s:%u.%u", \ - (Loc).beg.file, \ - (Loc).beg.line, \ - (Loc).beg.col); \ - } while (0) - diff --git a/src/grecs.hin b/src/grecs.hin deleted file mode 100644 index bfaaa49..0000000 --- a/src/grecs.hin +++ /dev/null @@ -1,584 +0,0 @@ -/* grecs - Gray's Extensible Configuration System -*- c -*- - Copyright (C) 2007-2016 Sergey Poznyakoff - - Grecs 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 3 of the License, or (at your - option) any later version. - - Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef _GRECS_H -#define _GRECS_H - -#include <sys/types.h> -#include <unistd.h> -#include <stdlib.h> -#include <stdio.h> -#include <stdarg.h> - -#if ENABLE_NLS -# include "gettext.h" -#else -# ifndef gettext -# define gettext(msgid) msgid -# endif -#endif -#ifndef _ -# define _(msgid) gettext(msgid) -#endif -#ifndef N_ -# define N_(s) s -#endif - -#define GRECS_VERSION_MAJOR 1 -#define GRECS_VERSION_MINOR 0 - -#define GRECS_TREE_API @GRECS_TREE_API@ -#define GRECS_SOCKADDR_LIST @GRECS_SOCKADDR_LIST@ - -struct grecs_version_info { - const char *package; - const char *version; - const char *id; - int major; - int minor; - int patch; - char *suffix; - char *buffer; -}; - -struct grecs_locus_point { - char *file; - unsigned line; - unsigned col; -}; - -#define grecs_locus_point_advance_line(loc) do { \ - (loc).line++; \ - (loc).col = 0; \ - } while (0) - -#define GRECS_LOCUS_POINT_EQ(a,b) \ - ((strcmp((a)->file, (b)->file) == 0) && ((a)->line == (b)->line)) - -typedef struct grecs_locus { - struct grecs_locus_point beg; - struct grecs_locus_point end; -} grecs_locus_t; - -extern grecs_locus_t grecs_locus; -extern int grecs_adjust_string_locations; - -enum grecs_data_type { - grecs_type_void, - grecs_type_string, - grecs_type_short, - grecs_type_ushort, - grecs_type_int, - grecs_type_uint, - grecs_type_long, - grecs_type_ulong, - grecs_type_size, -/* grecs_type_off,*/ - grecs_type_time, - grecs_type_bool, - grecs_type_ipv4, - grecs_type_cidr, - grecs_type_host, - grecs_type_sockaddr, - grecs_type_section, - grecs_type_null -}; - -#define GRECS_DFLT 0x00 /* Default keyword flags */ -#define GRECS_AGGR 0x01 /* Multiple entries aggregate */ -#define GRECS_MULT 0x02 /* Statement can appear multiple times */ -#define GRECS_INAC 0x04 /* Inactive keyword */ -#define GRECS_LIST 0x08 /* Value is a list of declared type */ -#define GRECS_HIDDEN 0x10 /* Hidden keyword: don't display in help output */ -#define GRECS_CONST 0x20 /* For string types: initial value is constant, - don't try to free it before assigning new value. - This flag is cleared after the first assignment. - */ - -enum grecs_callback_command { - grecs_callback_section_begin, - grecs_callback_section_end, - grecs_callback_set_value -}; - -#define GRECS_TYPE_STRING 0 -#define GRECS_TYPE_LIST 1 -#define GRECS_TYPE_ARRAY 2 - -struct grecs_list_entry { - struct grecs_list_entry *next, *prev; - void *data; -}; - -struct grecs_list { - struct grecs_list_entry *head, *tail; - size_t count; - int (*cmp)(const void *, const void *); - void (*free_entry)(void *); -}; - -typedef struct grecs_value { - int type; - grecs_locus_t locus; - union { - struct grecs_list *list; - char *string; - struct { - size_t c; - struct grecs_value **v; - } arg; - } v; -} grecs_value_t; - -#define GRECS_VALUE_EMPTY_P(val) \ - (!(val) || \ - ((val)->type == GRECS_TYPE_STRING && (val)->v.string == NULL)) - -enum grecs_node_type { - grecs_node_root, - grecs_node_stmt, - grecs_node_block -}; - -typedef struct grecs_node { - enum grecs_node_type type; - grecs_locus_t locus; - struct grecs_node *up; - struct grecs_node *down; - struct grecs_node *next; - struct grecs_node *prev; - char *ident; - grecs_locus_t idloc; - union { - struct grecs_value *value; - struct grecs_symtab *texttab; - } v; -} grecs_node_t; - -typedef int (*grecs_callback_fn)( -#if GRECS_TREE_API - enum grecs_callback_command cmd, - grecs_node_t * /* node */, - void * /* varptr */, - void * /* cb_data */ -#else - enum grecs_callback_command cmd, - grecs_locus_t * /* locus */, - void * /* varptr */, - grecs_value_t * /* value */, - void * /* cb_data */ -#endif - ); - -struct grecs_keyword { - const char *ident; - const char *argname; - const char *docstring; - enum grecs_data_type type; - int flags; - void *varptr; - size_t offset; - grecs_callback_fn callback; - void *callback_data; - struct grecs_keyword *kwd; -}; - -struct grecs_sockaddr { -#if GRECS_SOCKADDR_LIST - struct grecs_sockaddr *next; -#endif - int len; - struct sockaddr *sa; -}; - -struct grecs_version_info *grecs_version(void); -int grecs_version_cmp(const char *vstr1, const char *vstr2, int *pres); -int grecs_version_ok(const char *vstr); -void grecs_version_info_free(struct grecs_version_info *pv); -struct grecs_version_info *grecs_version_split(const char *vstr); -int grecs_version_info_cmp(struct grecs_version_info *vx, - struct grecs_version_info *vy, - int *pres); - -extern void *(*grecs_malloc_fun)(size_t size); -extern void *(*grecs_realloc_fun)(void *ptr, size_t size); -extern void (*grecs_alloc_die_fun)(void); -extern void (*grecs_free_fun)(void *ptr); - -void *grecs_malloc(size_t size); -void *grecs_zalloc(size_t size); -void *grecs_calloc(size_t nmemb, size_t size); -void *grecs_realloc(void *ptr, size_t size); -void grecs_alloc_die(void); -char *grecs_strdup(const char *str); -void grecs_free(void *ptr); - -grecs_value_t *grecs_value_ptr_from_static(grecs_value_t *input); - -extern void (*grecs_print_diag_fun)(grecs_locus_t const *, int, int, const char*); - -void grecs_warning(grecs_locus_t const *locus, - int errcode, const char *fmt, ...) - __attribute__ ((__format__ (__printf__, 3, 4))); -void grecs_error(grecs_locus_t const *locus, int errcode, - const char *fmt, ...) - __attribute__ ((__format__ (__printf__, 3, 4))); - -int grecs_asprint_locus(char **locstr, size_t *size, - grecs_locus_t const *locus); - - -extern int grecs_trace_flags; - -#define GRECS_TRACE_GRAM 0x01 -#define GRECS_TRACE_LEX 0x02 -void grecs_gram_trace(int n); -void grecs_lex_trace(int n); - -void grecs_parse_line_directive(char *text, grecs_locus_t *ploc, - struct grecs_locus_point *ppoint, - size_t *pxlines); -void grecs_parse_line_directive_cpp(char *text, grecs_locus_t *ploc, - struct grecs_locus_point *ppoint, - size_t *pxlines); - - - -int grecs_lex_begin(const char*, int); -void grecs_lex_end(int err); -struct grecs_node *grecs_parse(const char *name); - -typedef struct grecs_node *(*grecs_parser_t)(const char *name, int trace); - -extern grecs_parser_t grecs_parser_fun; - -/* Parsers: */ -struct grecs_node *grecs_grecs_parser(const char *name, int traceflags); -struct grecs_node *grecs_meta1_parser(const char *name, int traceflags); -struct grecs_node *grecs_bind_parser(const char *name, int traceflags); -struct grecs_node *grecs_dhcpd_parser(const char *name, int traceflags); -struct grecs_node *grecs_git_parser(const char *name, int traceflags); -struct grecs_node *grecs_path_parser(const char *name, int traceflags); - - -/* Parser database */ -int grecs_enumerate_parsers(int (*fun)(const char *, grecs_parser_t, void *), - void *); -grecs_parser_t grecs_get_parser_by_type(const char *type); - - -struct grecs_list *_grecs_simple_list_create(int dispose); -struct grecs_list *grecs_value_list_create(void); - -void grecs_line_acc_create(void); -void grecs_line_acc_free(void); -void grecs_line_acc_grow_char(int c); -int grecs_line_acc_grow_char_unescape(int c); -void grecs_line_acc_grow(const char *text, size_t len); -void grecs_line_acc_grow_unescape_last(char *text, size_t len, - grecs_locus_t const *loc); - -void grecs_line_begin(void); -#define grecs_line_add grecs_line_acc_grow -char *grecs_line_finish(void); - -extern int grecs_string_convert(void *target, enum grecs_data_type type, - const char *string, - grecs_locus_t const *locus); -extern void grecs_process_ident(struct grecs_keyword *kwp, - grecs_value_t *value, - void *base, - grecs_locus_t *locus); - -struct grecs_node *grecs_node_create(enum grecs_node_type type, - grecs_locus_t *loc); -struct grecs_node *grecs_node_create_points(enum grecs_node_type type, - struct grecs_locus_point beg, - struct grecs_locus_point end); -void grecs_node_bind(struct grecs_node *master, struct grecs_node *node, - int dn); -int grecs_node_eq(struct grecs_node *a, struct grecs_node *b); - - -extern struct grecs_locus_point grecs_current_locus_point; -extern int grecs_error_count; -extern int grecs_default_port; - -extern const char *grecs_preprocessor; -extern int grecs_log_to_stderr; -extern void (*grecs_log_setup_hook)(); - -size_t grecs_preproc_fill_buffer(char *buf, size_t size); -void grecs_preproc_add_include_dir(char *dir); -int grecs_preproc_init(const char *name); -void grecs_preproc_done(void); -int grecs_preproc_run(const char *config_file, const char *extpp); - -#define GRECS_STD_INCLUDE 0x01 -#define GRECS_USR_INCLUDE 0x02 - -size_t grecs_include_path_count(int flag); -int grecs_foreach_include_dir(int flag, int (*fun)(int, const char *, void *), - void *data); - -char *grecs_find_include_file(const char *name, int allow_cwd); - -FILE *grecs_preproc_extrn_start(const char *file, pid_t *ppid); -void grecs_preproc_extrn_shutdown(pid_t pid); - -char *grecs_install_text(const char *str); -void grecs_destroy_text(void); -struct grecs_symtab *grecs_text_table(void); - -void grecs_include_path_clear(void); -void grecs_include_path_setup(const char *dir, ...); -void grecs_include_path_setup_v(char **dirs); - -ssize_t grecs_getline(char **pbuf, size_t *psize, FILE *fp); - -const char *grecs_data_type_string(enum grecs_data_type type); -void grecs_print_docstring(const char *docstring, unsigned level, - FILE *stream); -void grecs_print_simple_statement(struct grecs_keyword *kwp, - unsigned level, FILE *stream); -void grecs_print_block_statement(struct grecs_keyword *kwp, - unsigned level, FILE *stream); -void grecs_print_statement_array(struct grecs_keyword *kwp, - unsigned n, - unsigned level, FILE *stream); - -struct grecs_format_closure -{ - int (*fmtfun)(const char *, void *); - void *data; -}; - -void grecs_format_locus(grecs_locus_t *locus, struct grecs_format_closure *fp); -void grecs_format_node_path(struct grecs_node *node, int flag, - struct grecs_format_closure *fp); -void grecs_format_value(struct grecs_value *val, int flags, - struct grecs_format_closure *fp); - -#define GRECS_NODE_FLAG_PATH 0x00100 -#define GRECS_NODE_FLAG_VALUE 0x00200 -#define GRECS_NODE_FLAG_DESCEND 0x01000 -#define GRECS_NODE_FLAG_LOCUS 0x02000 -#define GRECS_NODE_FLAG_QUOTE 0x04000 -#define GRECS_NODE_FLAG_NOQUOTE 0x08000 -#define GRECS_NODE_FLAG_QUOTE_HEX 0x10000 - -#define _GRECS_NODE_MASK_DELIM 0x000ff -#define _GRECS_NODE_MASK_OUTPUT 0x00f00 - -#define GRECS_NODE_FLAG_DEFAULT \ - (GRECS_NODE_FLAG_PATH|GRECS_NODE_FLAG_VALUE|\ - GRECS_NODE_FLAG_DESCEND|GRECS_NODE_FLAG_QUOTE) -int grecs_format_node(struct grecs_node *node, int flags, - struct grecs_format_closure *fp); - -void grecs_print_locus(grecs_locus_t *locus, FILE *fp); -void grecs_print_node_path(struct grecs_node *node, int flag, FILE *fp); -void grecs_print_value(struct grecs_value *val, int flags, FILE *fp); - -int grecs_print_node(struct grecs_node *node, int flags, FILE *fp); - -struct grecs_txtacc; -void grecs_txtacc_format_value(struct grecs_value *val, int flags, - struct grecs_txtacc *acc); - - - -struct grecs_list *grecs_list_create(void); -size_t grecs_list_size(struct grecs_list *lp); -void grecs_list_append(struct grecs_list *lp, void *val); -void grecs_list_push(struct grecs_list *lp, void *val); -void *grecs_list_pop(struct grecs_list *lp); -void *grecs_list_locate(struct grecs_list *lp, void *data); -void *grecs_list_index(struct grecs_list *lp, size_t idx); -void *grecs_list_remove_tail(struct grecs_list *lp); -void grecs_list_remove_entry(struct grecs_list *lp, - struct grecs_list_entry *ent); -void grecs_list_clear(struct grecs_list *lp); -void grecs_list_free(struct grecs_list *lp); -void grecs_list_add(struct grecs_list *dst, struct grecs_list *src); -int grecs_list_compare(struct grecs_list *a, struct grecs_list *b); - -int grecs_vasprintf(char **pbuf, size_t *psize, const char *fmt, va_list ap); -int grecs_asprintf(char **pbuf, size_t *psize, const char *fmt, ...); - -#define GRECS_TXTACC_BUFSIZE 1024 -struct grecs_txtacc *grecs_txtacc_create(void); -void grecs_txtacc_free(struct grecs_txtacc *acc); -void grecs_txtacc_grow(struct grecs_txtacc *acc, const char *buf, size_t size); -void grecs_txtacc_grow_string(struct grecs_txtacc *acc, const char *buf); -void grecs_txtacc_grow_string_escape(struct grecs_txtacc *acc, - const char *buf); -#define grecs_txtacc_grow_char(acc,c) \ - do { \ - char __ch = c; \ - grecs_txtacc_grow(acc,&__ch,1); \ - } while (0) -char *grecs_txtacc_finish(struct grecs_txtacc *acc, int steal); -void grecs_txtacc_free_string(struct grecs_txtacc *acc, char *str); - -struct grecs_symtab; - -struct grecs_syment { - char *name; -}; - -typedef int (*grecs_symtab_enumerator_t)(void *sym, void *data); - -const char *grecs_symtab_strerror(int rc); - -void *grecs_symtab_lookup_or_install(struct grecs_symtab *st, - void *key, int *install); -void grecs_symtab_clear(struct grecs_symtab *st); -struct grecs_symtab *grecs_symtab_create(size_t elsize, - unsigned (*hash_fun)(void *, unsigned long), - int (*cmp_fun)(const void *, const void *), - int (*copy_fun)(void *, void *), - void *(*alloc_fun)(size_t), - void (*free_fun)(void *)); -struct grecs_symtab *grecs_symtab_create_default(size_t elsize); - -void grecs_symtab_free(struct grecs_symtab *pst); -int grecs_symtab_remove(struct grecs_symtab *st, void *elt); -int grecs_symtab_replace(struct grecs_symtab *st, void *ent, void **old_ent); -int grecs_symtab_enumerate(struct grecs_symtab *st, - grecs_symtab_enumerator_t fun, void *data); - -size_t grecs_symtab_count_entries(struct grecs_symtab *st); - -unsigned grecs_hash_string(const char *name, unsigned long hashsize); -unsigned grecs_hash_string_ci(const char *name, unsigned long hashsize); - - -void grecs_value_free(struct grecs_value *val); -void grecs_value_free_content(struct grecs_value *val); -void grecs_node_free(struct grecs_node *node); -int grecs_node_unlink(struct grecs_node *node); -int grecs_tree_free(struct grecs_node *node); - -enum grecs_tree_recurse_op { - grecs_tree_recurse_set, - grecs_tree_recurse_pre, - grecs_tree_recurse_post -}; - -enum grecs_tree_recurse_res { - grecs_tree_recurse_ok, - grecs_tree_recurse_fail, - grecs_tree_recurse_skip, - grecs_tree_recurse_stop -}; - -typedef enum grecs_tree_recurse_res - (*grecs_tree_recursor_t)(enum grecs_tree_recurse_op, - struct grecs_node *, void *); - -int grecs_tree_recurse(struct grecs_node *node, grecs_tree_recursor_t recfun, - void *data); -int grecs_tree_join(struct grecs_node *dst, struct grecs_node *src); - - -int grecs_tree_process(struct grecs_node *node, struct grecs_keyword *kwd); - -typedef struct grecs_match_buf *grecs_match_buf_t; -struct grecs_node *grecs_match_first(struct grecs_node *tree, - const char *pattern, - grecs_match_buf_t *buf); -struct grecs_node *grecs_match_next(struct grecs_match_buf *buf); -void grecs_match_buf_free(struct grecs_match_buf *buf); -grecs_match_buf_t grecs_match_buf_create(int argc, char **argv, - struct grecs_value **labelv); -struct grecs_node *grecs_match_buf_first(struct grecs_match_buf *buf, - struct grecs_node *tree); -struct grecs_node *grecs_match_buf_get_node(grecs_match_buf_t buf); -size_t grecs_match_buf_get_args(grecs_match_buf_t buf, char ***argv); -struct grecs_node *grecs_match_buf_get_root(grecs_match_buf_t buf); -void grecs_match_buf_set_root(grecs_match_buf_t buf, struct grecs_node *root); - -int grecs_value_eq(struct grecs_value *a, struct grecs_value *b); -int grecs_value_match(struct grecs_value *pat, struct grecs_value *b, - int flags); - -enum grecs_tree_recurse_res grecs_node_exact_match( - enum grecs_tree_recurse_op op, - struct grecs_node *node, void *data); - -struct grecs_node *grecs_find_node(struct grecs_node *node, const char *path); - -struct grecs_node *grecs_node_from_path(const char *path, const char *value); -struct grecs_node *grecs_node_from_path_locus(const char *path, - const char *value, - grecs_locus_t *locus, - grecs_locus_t *vallocus); -int grecs_tree_reduce(struct grecs_node *node, struct grecs_keyword *kwd, - int flags); - -void grecs_tree_sort(struct grecs_node *node, - int (*compare)(struct grecs_node const *, - struct grecs_node const *)); - -struct grecs_node *grecs_tree_first_node(struct grecs_node *tree); -struct grecs_node *grecs_next_node(struct grecs_node *node); - -int grecs_str_is_ipv4(const char *addr); -int grecs_str_is_num(const char *s); -int grecs_str_is_ipv6(const char *addr); -int grecs_str_is_num(const char *s); -int grecs_str_is_ipaddr(const char *addr); - -#if GRECS_SOCKADDR_LIST - -#define GRECS_AH_PASSIVE 0x01 -#define GRECS_HINT_SERVICE 0x02 -#define GRECS_HINT_PORT 0x04 - -struct grecs_sockaddr_hints { - int flags; - char *service; - unsigned short port; -}; - -extern struct grecs_sockaddr_hints *grecs_sockaddr_hints; - -struct grecs_sockaddr *grecs_sockaddr_new(size_t s); -void grecs_sockaddr_free(struct grecs_sockaddr *p); - -int grecs_str_to_sockaddr(struct grecs_sockaddr **sap, - const char *arg, struct grecs_sockaddr_hints *gh, - |