summaryrefslogtreecommitdiffabout
path: root/src
authorSergey Poznyakoff <gray@gnu.org.ua>2016-01-21 15:25:55 (GMT)
committer Sergey Poznyakoff <gray@gnu.org.ua>2016-07-04 12:41:59 (GMT)
commit8e541ddaffcab6eaa36faf86304b51a0bc6a92a1 (patch) (side-by-side diff)
treefc909de2e7322c9ad04e8d51d0f9e5213b552cb1 /src
parent17d95ceb6d3f749e9ce20747197703e40e453759 (diff)
downloadgrecs-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') (more/less context) (ignore whitespace changes)
-rw-r--r--src/Make-inst.am1
-rw-r--r--src/Make-shared.am6
-rw-r--r--src/Make-static.am1
-rw-r--r--src/Make.am14
-rw-r--r--src/bind-gram.y1
-rw-r--r--src/bind-lex.l1
-rw-r--r--src/cidr.c1
-rw-r--r--src/dhcpd-gram.y1
-rw-r--r--src/dhcpd-lex.l1
-rw-r--r--src/diag.c1
-rw-r--r--src/format.c2
-rw-r--r--src/grecs-gram.y1
-rw-r--r--src/grecs-lex.l1
-rw-r--r--src/grecs-locus.h57
-rw-r--r--src/grecs.hin584
-rw-r--r--src/grecsopt.h58
-rw-r--r--src/json-gram.y4
-rw-r--r--src/json-lex.l3
-rw-r--r--src/json.h99
-rw-r--r--src/jsonfmt.c3
-rw-r--r--src/lookup.c3
-rw-r--r--src/meta1-gram.y1
-rw-r--r--src/meta1-lex.l1
-rw-r--r--src/opthelp.c2
-rw-r--r--src/preproc.c3
-rw-r--r--src/sockaddr.c1
-rw-r--r--src/txtacc.c3
-rw-r--r--src/version.c1
-rw-r--r--src/wordsplit.h250
29 files changed, 20 insertions, 1085 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
@@ -14,9 +14,8 @@
# You should have received a copy of the GNU General Public License
# along with Grecs. If not, see <http://www.gnu.org/licenses/>.
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
@@ -14,12 +14,6 @@
# You should have received a copy of the GNU General Public License
# along with Grecs. If not, see <http://www.gnu.org/licenses/>.
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
@@ -13,9 +13,8 @@
#
# You should have received a copy of the GNU General Public License
# along with Grecs. If not, see <http://www.gnu.org/licenses/>.
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
@@ -72,35 +72,25 @@ GRECS_SRC = \
$(GRECS_JSON)\
$(GRECS_PARSER_BIND)\
$(GRECS_PARSER_DHCPD)\
$(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)\
$(GRECS_EXTRA_META1)\
$(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@\
@GRECS_INCLUDES@\
@GRECS_HOST_PROJECT_INCLUDES@\
$(PARSER_DEFS)
@@ -109,6 +99,10 @@ AM_LFLAGS = -d
incdir=$(pkgdatadir)/$(VERSION)/include
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
@@ -16,13 +16,12 @@
with Grecs. If not, see <http://www.gnu.org/licenses/>. */
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include <grecs.h>
-#include <grecs-locus.h>
#include <bind-gram.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <errno.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
@@ -21,13 +21,12 @@
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/>. */
#include <grecs.h>
-#include <grecs-locus.h>
#include <bind-gram.h>
#include <unistd.h>
#include <fcntl.h>
#include <ctype.h>
#include <stdlib.h>
#include <errno.h>
diff --git a/src/cidr.c b/src/cidr.c
index bffa35e..7566fa6 100644
--- a/src/cidr.c
+++ b/src/cidr.c
@@ -19,12 +19,13 @@
#endif
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <netinet/in.h>
#include <arpa/inet.h>
+#include <stdlib.h>
#include "grecs.h"
static void
uint32_to_bytes (unsigned char *bytes, uint32_t u)
{
int i;
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
@@ -16,13 +16,12 @@
with Grecs. If not, see <http://www.gnu.org/licenses/>. */
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include <grecs.h>
-#include <grecs-locus.h>
#include <dhcpd-gram.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <errno.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
@@ -20,13 +20,12 @@
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/>. */
#include <grecs.h>
-#include <grecs-locus.h>
#include <dhcpd-gram.h>
#include <unistd.h>
#include <fcntl.h>
#include <ctype.h>
#include <stdlib.h>
#include <errno.h>
diff --git a/src/diag.c b/src/diag.c
index 1424437..bdbb407 100644
--- a/src/diag.c
+++ b/src/diag.c
@@ -15,13 +15,12 @@
with Grecs. If not, see <http://www.gnu.org/licenses/>. */
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include <grecs.h>
-#include <grecs-locus.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
static void
diff --git a/src/format.c b/src/format.c
index 89202a0..af87329 100644
--- a/src/format.c
+++ b/src/format.c
@@ -15,18 +15,18 @@
with Grecs. If not, see <http://www.gnu.org/licenses/>. */
#ifdef HAVE_CONFIG_H
# 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)
{
switch (type) {
case grecs_type_void:
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
@@ -16,13 +16,12 @@
with Grecs. If not, see <http://www.gnu.org/licenses/>. */
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include <grecs.h>
-#include <grecs-locus.h>
#include <grecs-gram.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <errno.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
@@ -21,13 +21,12 @@
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/>. */
#include <grecs.h>
-#include <grecs-locus.h>
#include <grecs-gram.h>
#include <unistd.h>
#include <fcntl.h>
#include <ctype.h>
#include <stdlib.h>
#include <errno.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
+++ b/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
+++ b/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,
- grecs_locus_t const *locus);
-#endif
-
-#define GRECS_INADDR_BYTES 16
-
-struct grecs_cidr
-{
- int family;
- int len;
- unsigned char address[GRECS_INADDR_BYTES];
- unsigned char netmask[GRECS_INADDR_BYTES];
-};
-
-int grecs_str_to_cidr(struct grecs_cidr *pcidr, const char *str,
- grecs_locus_t const *locus);
-
-int grecs_sockaddr_to_cidr(struct grecs_cidr *cidr, const struct sockaddr *sa);
-int grecs_sockadd_cidr_match(struct sockaddr *sa, struct grecs_cidr *cidr);
-
-#endif
diff --git a/src/grecsopt.h b/src/grecsopt.h
deleted file mode 100644
index 49c0b53..0000000
--- a/src/grecsopt.h
+++ b/dev/null
@@ -1,58 +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/>. */
-
-#ifndef _GRECSOPT_H
-#define _GRECSOPT_H
-
-struct grecs_proginfo {
- const char *progname;
- char **subcmd;
- const char *docstring;
- const char *args_doc;
- struct grecs_opthelp *opthelp;
- size_t optcount;
- void (*print_help_hook)(FILE *stream);
- void (*print_version_hook)(FILE *stream);
- const char *package;
- const char *version;
- const char *license;
- const char *copyright_year;
- const char *copyright_holder;
- const char **authors;
- const char *bug_address;
- const char *url;
- const char *epilogue;
-};
-
-struct grecs_opthelp {
- const char *opt;
- const char *arg;
- int is_optional;
- const char *descr;
-};
-
-#define DESCRCOLUMN 30
-#define RMARGIN 79
-#define GROUPCOLUMN 2
-#define USAGECOLUMN 13
-
-void grecs_print_help(struct grecs_proginfo *pinfo);
-void grecs_print_usage(struct grecs_proginfo *pinfo);
-void grecs_print_version_only(struct grecs_proginfo *pinfo, FILE *stream);
-void grecs_print_version(struct grecs_proginfo *pinfo, FILE *stream);
-
-#endif
-
diff --git a/src/json-gram.y b/src/json-gram.y
index 4d5ae0f..fe8996b 100644
--- a/src/json-gram.y
+++ b/src/json-gram.y
@@ -16,17 +16,17 @@
along with Grecs. If not, see <http://www.gnu.org/licenses/>. */
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include "grecs.h"
-#include <grecs-locus.h>
#include <string.h>
#include <errno.h>
+#include <stdlib.h>
#include "json-gram.h"
-#include "json.h"
+#include "grecs/json.h"
struct json_value *json_return_obj;
extern int yylex(void);
static int yyerror(char const *s);
diff --git a/src/json-lex.l b/src/json-lex.l
index 1ab6f74..169cf32 100644
--- a/src/json-lex.l
+++ b/src/json-lex.l
@@ -20,15 +20,14 @@
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/>. */
#include "grecs.h"
-#include <grecs-locus.h>
#include "json-gram.h"
-#include "json.h"
+#include "grecs/json.h"
static char const *input_ptr;
static size_t input_size;
struct grecs_locus_point json_current_locus_point; /* Input location */
char const *json_err_diag;
diff --git a/src/json.h b/src/json.h
deleted file mode 100644
index f8402e7..0000000
--- a/src/json.h
+++ b/dev/null
@@ -1,99 +0,0 @@
-/* This file is part of Grecs.
- Copyright (C) 2012-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, 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/>. */
-
-#include <grecs.h>
-
-enum json_value_type
-{
- json_null,
- json_bool,
- json_number,
- json_string,
- json_arr,
- json_object
-};
-
-struct json_value;
-struct json_array {
- size_t oc;
- struct json_value **ov;
- struct grecs_list *ol;
-};
-
-struct json_value {
- enum json_value_type type;
- union {
- int b; /* json_bool */
- double n; /* json_number */
- char *s; /* json_string */
- struct json_array *a; /* json_arr */
- struct grecs_symtab *o; /* json_object */
- } v;
-};
-
-struct json_pair {
- char *k;
- struct json_value *v;
-};
-
-extern char const *json_err_diag;
-extern struct grecs_locus json_err_locus;
-extern struct json_value *json_return_obj;
-
-void jsonlex_setup(char const *s, size_t l);
-void jsonlex_diag(const char *s);
-int json_unescape(char c, char *o);
-
-struct json_value *json_value_create(int type);
-struct grecs_symtab *json_assoc_create(void);
-void json_value_free(struct json_value *obj);
-
-struct json_value *json_parse_string(char const *input, size_t len);
-
-struct json_value *json_value_lookup(struct json_value *obj,
- const char *ident);
-
-
-struct json_format
-{
- size_t indent;
- int precision;
- void (*write) (void *, char const *, size_t);
- void *data;
-};
-
-void json_format_value(struct json_value *obj, struct json_format *fmt);
-
-struct json_value *json_new_null(void);
-struct json_value *json_new_bool(int b);
-struct json_value *json_new_number(double n);
-struct json_value *json_new_string(char const *str);
-
-struct json_value *json_new_object(void);
-int json_object_set(struct json_value *obj, char const *name,
- struct json_value *val);
-int json_object_get(struct json_value *obj, char const *name,
- struct json_value **retval);
-
-struct json_value *json_new_array(void);
-size_t json_array_size(struct json_value *j);
-void json_array_flatten(struct json_value *j);
-int json_array_insert(struct json_value *j, size_t idx, struct json_value *v);
-int json_array_append(struct json_value *j, struct json_value *v);
-int json_array_set(struct json_value *j, size_t idx, struct json_value *v);
-int json_array_get(struct json_value *j, size_t idx,
- struct json_value **retval);
-
diff --git a/src/jsonfmt.c b/src/jsonfmt.c
index dda919b..9ccac37 100644
--- a/src/jsonfmt.c
+++ b/src/jsonfmt.c
@@ -15,14 +15,15 @@
with Grecs. If not, see <http://www.gnu.org/licenses/>. */
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include <string.h>
+#include <stdlib.h>
#include "grecs.h"
-#include "json.h"
+#include "grecs/json.h"
static void
json_writez(struct json_format *fmt, char const *str)
{
size_t len = strlen(str);
fmt->write(fmt->data, str, len);
diff --git a/src/lookup.c b/src/lookup.c
index f6c0865..7cb95df 100644
--- a/src/lookup.c
+++ b/src/lookup.c
@@ -20,12 +20,13 @@
#include <string.h>
#include <errno.h>
#include <ctype.h>
#include "grecs.h"
#include "wordsplit.h"
#include <fnmatch.h>
+#include <stdlib.h>
static int
_grecs_list_eq(struct grecs_value *a, struct grecs_value *b)
{
struct grecs_list_entry *aent, *bent;
if (grecs_list_size(a->v.list) != grecs_list_size(b->v.list))
@@ -174,13 +175,13 @@ grecs_match_buf_create(int argc, char **argv, struct grecs_value **labelv)
for (i = 0; i < buf->argc; i++) {
if (ISWC(buf->argv[i], '*')) {
int j;
for (j = i + 1;
j < buf->argc && ISWC(buf->argv[j], '*'); j++) {
- free(buf->argv[j]);
+ free(buf->argv[j]);
grecs_value_free_content(buf->labelv[i]);
}
j -= i;
if (j > 1) {
memmove(&buf->argv[i+1], &buf->argv[i+j],
(buf->argc - (i + j)) *
diff --git a/src/meta1-gram.y b/src/meta1-gram.y
index 96ebd3d..3b9ca63 100644
--- a/src/meta1-gram.y
+++ b/src/meta1-gram.y
@@ -18,13 +18,12 @@
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include <errno.h>
#include <string.h>
#include "grecs.h"
-#include "grecs-locus.h"
int yylex(void);
int yyerror(char const *s);
static struct grecs_node *parse_tree;
extern int yy_flex_debug;
diff --git a/src/meta1-lex.l b/src/meta1-lex.l
index 8050e5b..a5f873b 100644
--- a/src/meta1-lex.l
+++ b/src/meta1-lex.l
@@ -22,13 +22,12 @@
*/
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include "grecs.h"
-#include "grecs-locus.h"
#include "meta1-gram.h"
#include <ctype.h>
}
%{
static int yywrap(void);
diff --git a/src/opthelp.c b/src/opthelp.c
index 6428a46..c9b7b46 100644
--- a/src/opthelp.c
+++ b/src/opthelp.c
@@ -18,13 +18,13 @@
# include <config.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "grecs.h"
-#include "grecsopt.h"
+#include "grecs/opt.h"
#include "wordsplit.h"
static void
indent(size_t start, size_t col)
{
for (; start < col; start++)
diff --git a/src/preproc.c b/src/preproc.c
index cf752f6..4d69602 100644
--- a/src/preproc.c
+++ b/src/preproc.c
@@ -15,25 +15,26 @@
with Grecs. If not, see <http://www.gnu.org/licenses/>. */
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include <grecs.h>
+#include <wordsplit.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <errno.h>
#include <signal.h>
#include <glob.h>
+#include <unistd.h>
-#include <wordsplit.h>
int grecs_log_to_stderr = 1;
void (*grecs_log_setup_hook) () = NULL;
struct input_file_ident {
ino_t i_node;
diff --git a/src/sockaddr.c b/src/sockaddr.c
index d3a969b..8cd790d 100644
--- a/src/sockaddr.c
+++ b/src/sockaddr.c
@@ -25,12 +25,13 @@
#include <sys/socket.h>
#include <sys/un.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <errno.h>
+#include <stdlib.h>
#include "grecs.h"
struct grecs_sockaddr *
grecs_sockaddr_new(size_t s)
{
struct grecs_sockaddr *sp = grecs_malloc(sizeof(*sp));
diff --git a/src/txtacc.c b/src/txtacc.c
index ee00170..5b9a197 100644
--- a/src/txtacc.c
+++ b/src/txtacc.c
@@ -15,12 +15,13 @@
with wydawca. If not, see <http://www.gnu.org/licenses/>. */
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include <string.h>
+#include <stdlib.h>
#include "grecs.h"
struct grecs_txtacc_entry
{
char *buf; /* Text buffer */
size_t size; /* Buffer size */
@@ -70,13 +71,13 @@ grecs_txtacc_entry_append(struct grecs_txtacc_entry *ent,
}
static void
grecs_txtacc_entry_tailor(struct grecs_txtacc_entry *ent)
{
if (ent->size > ent->len) {
- char *p = realloc(ent->buf, ent->len);
+ char *p = grecs_realloc(ent->buf, ent->len);
if (!p)
return;
ent->buf = p;
ent->size = ent->len;
}
}
diff --git a/src/version.c b/src/version.c
index 58ed799..e769e31 100644
--- a/src/version.c
+++ b/src/version.c
@@ -17,12 +17,13 @@
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include <grecs.h>
#include <string.h>
#include <ctype.h>
+#include <stdlib.h>
#include "gitid.h"
const char *grecs_vcs_id = "$Id: " GRECS_GIT_ID " $";
struct grecs_version_info *
grecs_version_split(const char *vstr)
diff --git a/src/wordsplit.h b/src/wordsplit.h
deleted file mode 100644
index a7f6dd5..0000000
--- a/src/wordsplit.h
+++ b/dev/null
@@ -1,250 +0,0 @@
-/* wordsplit - a word splitter
- Copyright (C) 2009-2016 Sergey Poznyakoff
-
- 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 3 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, see <http://www.gnu.org/licenses/>. */
-
-#ifndef __WORDSPLIT_H
-#define __WORDSPLIT_H
-
-#include <stddef.h>
-
-typedef struct wordsplit wordsplit_t;
-
-/* Structure used to direct the splitting. Members marked with [Input]
- can be defined before calling wordsplit(), those marked with [Output]
- provide return values when the function returns. If neither mark is
- used, the member is internal and must not be used by the caller.
-
- In the comments below, the
- identifiers in parentheses indicate bits that must be set (or unset, if
- starting with !) in the ws_flags to initialize or use the given member.
- If not redefined explicitly, most of them are set to some reasonable
- default value upon entry to wordsplit(). */
-struct wordsplit
-{
- size_t ws_wordc; /* [Output] Number of words in ws_wordv. */
- char **ws_wordv; /* [Output] Array of parsed out words. */
- size_t ws_offs; /* [Input] (WRDSF_DOOFFS) Number of initial
- elements in ws_wordv to fill with NULLs. */
- size_t ws_wordn; /* Number of elements ws_wordv can accomodate. */
- int ws_flags; /* [Input] Flags passed to wordsplit. */
- int ws_options; /* [Input] (WRDSF_PATHEXPAND)
- Additional options. */
- const char *ws_delim; /* [Input] (WRDSF_DELIM) Word delimiters. */
- const char *ws_comment; /* [Input] (WRDSF_COMMENT) Comment characters. */
- const char *ws_escape[2]; /* [Input] (WRDSF_ESCAPE) Characters to be escaped
- with backslash. */
- void (*ws_alloc_die) (wordsplit_t *wsp);
- /* [Input] (WRDSF_ALLOC_DIE) Function called when
- out of memory. Must not return. */
- void (*ws_error) (const char *, ...)
- __attribute__ ((__format__ (__printf__, 1, 2)));
- /* [Input] (WRDSF_ERROR) Function used for error
- reporting */
- void (*ws_debug) (const char *, ...)
- __attribute__ ((__format__ (__printf__, 1, 2)));
- /* [Input] (WRDSF_DEBUG) Function used for debug
- output. */
- const char **ws_env; /* [Input] (WRDSF_ENV, !WRDSF_NOVAR) Array of
- environment variables. */
-
- char **ws_envbuf;
- size_t ws_envidx;
- size_t ws_envsiz;
-
- int (*ws_getvar) (char **ret, const char *var, size_t len, void *clos);
- /* [Input] (WRDSF_GETVAR, !WRDSF_NOVAR) Looks up
- the name VAR (LEN bytes long) in the table of
- variables and if found returns in memory
- location pointed to by RET the value of that
- variable. Returns WRDSE_OK (0) on success,
- and an error code (see WRDSE_* defines below)
- on error. User-specific errors can be returned
- by storing the error diagnostic string in RET
- and returning WRDSE_USERERR.
- Whatever is stored in RET, it must be allocated
- using malloc(3). */
- void *ws_closure; /* [Input] (WRDSF_CLOSURE) Passed as the CLOS
- argument to ws_getvar and ws_command. */
- int (*ws_command) (char **ret, const char *cmd, size_t len, char **argv,
- void *clos);
- /* [Input] (!WRDSF_NOCMD) Returns in the memory
- location pointed to by RET the expansion of
- the command CMD (LEN bytes nong). If WRDSF_ARGV
- flag is set, ARGV contains CMD split out to
- words. Otherwise ARGV is NULL.
-
- See ws_getvar for a discussion of possible
- return values. */
-
- const char *ws_input; /* Input string (the S argument to wordsplit. */
- size_t ws_len; /* Length of ws_input. */
- size_t ws_endp; /* Points past the last processed byte in
- ws_input. */
- int ws_errno; /* [Output] Error code, if an error occurred. */
- char *ws_usererr; /* Points to textual description of
- the error, if ws_errno is WRDSE_USERERR. Must
- be allocated with malloc(3). */
- struct wordsplit_node *ws_head, *ws_tail;
- /* Doubly-linked list of parsed out nodes. */
- int ws_lvl; /* Invocation nesting level. */
-};
-
-/* Initial size for ws_env, if allocated automatically */
-#define WORDSPLIT_ENV_INIT 16
-
-/* Wordsplit flags. */
-/* Append the words found to the array resulting from a previous
- call. */
-#define WRDSF_APPEND 0x00000001
-/* Insert ws_offs initial NULLs in the array ws_wordv.
- (These are not counted in the returned ws_wordc.) */
-#define WRDSF_DOOFFS 0x00000002
-/* Don't do command substitution. */
-#define WRDSF_NOCMD 0x00000004
-/* The parameter p resulted from a previous call to
- wordsplit(), and wordsplit_free() was not called. Reuse the
- allocated storage. */
-#define WRDSF_REUSE 0x00000008
-/* Print errors */
-#define WRDSF_SHOWERR 0x00000010
-/* Consider it an error if an undefined variable is expanded. */
-#define WRDSF_UNDEF 0x00000020
-/* Don't do variable expansion. */
-#define WRDSF_NOVAR 0x00000040
-/* Abort on ENOMEM error */
-#define WRDSF_ENOMEMABRT 0x00000080
-/* Trim off any leading and trailind whitespace */
-#define WRDSF_WS 0x00000100
-/* Handle single quotes */
-#define WRDSF_SQUOTE 0x00000200
-/* Handle double quotes */
-#define WRDSF_DQUOTE 0x00000400
-/* Handle single and double quotes */
-#define WRDSF_QUOTE (WRDSF_SQUOTE|WRDSF_DQUOTE)
-/* Replace each input sequence of repeated delimiters with a single
- delimiter */
-#define WRDSF_SQUEEZE_DELIMS 0x00000800
-/* Return delimiters */
-#define WRDSF_RETURN_DELIMS 0x00001000
-/* Treat sed expressions as words */
-#define WRDSF_SED_EXPR 0x00002000
-/* ws_delim field is initialized */
-#define WRDSF_DELIM 0x00004000
-/* ws_comment field is initialized */
-#define WRDSF_COMMENT 0x00008000
-/* ws_alloc_die field is initialized */
-#define WRDSF_ALLOC_DIE 0x00010000
-/* ws_error field is initialized */
-#define WRDSF_ERROR 0x00020000
-/* ws_debug field is initialized */
-#define WRDSF_DEBUG 0x00040000
-/* ws_env field is initialized */
-#define WRDSF_ENV 0x00080000
-/* ws_getvar field is initialized */
-#define WRDSF_GETVAR 0x00100000
-/* enable debugging */
-#define WRDSF_SHOWDBG 0x00200000
-/* Don't split input into words. Useful for side effects. */
-#define WRDSF_NOSPLIT 0x00400000
-/* Keep undefined variables in place, instead of expanding them to
- empty strings. */
-#define WRDSF_KEEPUNDEF 0x00800000
-/* Warn about undefined variables */
-#define WRDSF_WARNUNDEF 0x01000000
-/* Handle C escapes */
-#define WRDSF_CESCAPES 0x02000000
-/* ws_closure is set */
-#define WRDSF_CLOSURE 0x04000000
-/* ws_env is a Key/Value environment, i.e. the value of a variable is
- stored in the element that follows its name. */
-#define WRDSF_ENV_KV 0x08000000
-/* ws_escape is set */
-#define WRDSF_ESCAPE 0x10000000
-/* Incremental mode */
-#define WRDSF_INCREMENTAL 0x20000000
-/* Perform pathname and tilde expansion */
-#define WRDSF_PATHEXPAND 0x40000000
-/* ws_options is initialized */
-#define WRDSF_OPTIONS 0x80000000
-
-#define WRDSF_DEFFLAGS \
- (WRDSF_NOVAR | WRDSF_NOCMD | \
- WRDSF_QUOTE | WRDSF_SQUEEZE_DELIMS | WRDSF_CESCAPES)
-
-/* Remove the word that produces empty string after path expansion */
-#define WRDSO_NULLGLOB 0x00000001
-/* Print error message if path expansion produces empty string */
-#define WRDSO_FAILGLOB 0x00000002
-/* Allow a leading period to be matched by metacharacters. */
-#define WRDSO_DOTGLOB 0x00000004
-/* ws_command needs argv parameter */
-#define WRDSO_ARGV 0x00000008
-/* Keep backslash in unrecognized escape sequences in words */
-#define WRDSO_BSKEEP_WORD 0x00000010
-/* Handle octal escapes in words */
-#define WRDSO_OESC_WORD 0x00000020
-/* Handle hex escapes in words */
-#define WRDSO_XESC_WORD 0x00000040
-
-/* Keep backslash in unrecognized escape sequences in quoted strings */
-#define WRDSO_BSKEEP_QUOTE 0x00000100
-/* Handle octal escapes in quoted strings */
-#define WRDSO_OESC_QUOTE 0x00000200
-/* Handle hex escapes in quoted strings */
-#define WRDSO_XESC_QUOTE 0x00000400
-
-#define WRDSO_BSKEEP WRDSO_BSKEEP_WORD
-#define WRDSO_OESC WRDSO_OESC_WORD
-#define WRDSO_XESC WRDSO_XESC_WORD
-
-/* Indices into ws_escape */
-#define WRDSX_WORD 0
-#define WRDSX_QUOTE 1
-
-/* Set escape option F in WS for words (Q==0) or quoted strings (Q==1) */
-#define WRDSO_ESC_SET(ws,q,f) ((ws)->ws_options |= ((f) << 4*(q)))
-/* Test WS for escape option F for words (Q==0) or quoted strings (Q==1) */
-#define WRDSO_ESC_TEST(ws,q,f) ((ws)->ws_options & ((f) << 4*(q)))
-
-#define WRDSE_OK 0
-#define WRDSE_EOF WRDSE_OK
-#define WRDSE_QUOTE 1
-#define WRDSE_NOSPACE 2
-#define WRDSE_USAGE 3
-#define WRDSE_CBRACE 4
-#define WRDSE_UNDEF 5
-#define WRDSE_NOINPUT 6
-#define WRDSE_PAREN 7
-#define WRDSE_GLOBERR 8
-#define WRDSE_USERERR 9
-
-int wordsplit (const char *s, wordsplit_t *ws, int flags);
-int wordsplit_len (const char *s, size_t len, wordsplit_t *ws, int flags);
-void wordsplit_free (wordsplit_t *ws);
-void wordsplit_free_words (wordsplit_t *ws);
-void wordsplit_free_envbuf (wordsplit_t *ws);
-void wordsplit_getwords (wordsplit_t *ws, size_t *wordc, char ***wordv);
-
-int wordsplit_c_unquote_char (int c);
-int wordsplit_c_quote_char (int c);
-size_t wordsplit_c_quoted_length (const char *str, int quote_hex, int *quote);
-void wordsplit_c_quote_copy (char *dst, const char *src, int quote_hex);
-
-void wordsplit_perror (wordsplit_t *ws);
-const char *wordsplit_strerror (wordsplit_t *ws);
-
-void wordsplit_clearerr (wordsplit_t *ws);
-
-#endif

Return to:

Send suggestions and report system problems to the System administrator.