diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2018-03-15 13:29:52 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2018-03-15 14:12:23 +0200 |
commit | 58a8936d30bbb18b8ad93fecfe3fe2210d1c18b2 (patch) | |
tree | 01fcd1416af582e2429f0ae8d120e2af39b8f9d9 | |
parent | 677473cdfc42b9fd83623902e80de946f108825c (diff) | |
download | eclat-58a8936d30bbb18b8ad93fecfe3fe2210d1c18b2.tar.gz eclat-58a8936d30bbb18b8ad93fecfe3fe2210d1c18b2.tar.bz2 |
Upgrade grecs
* grecs: pull
* configure.ac: Enable json
* lib/Makefile.am (AM_CPPFLAGS): Use @GRECS_INCLUDES@
(libeclat_a_SOURCES): Remove json sources.
* src/Makefile.am (AM_CPPFLAGS): Use @GRECS_INCLUDES@
* tests/Makefile.am: Likewise.
* lib/json.h: Remove.
* lib/jsongrm.y: Remove.
* lib/jsonlex.l: Remove.
* tests/tjson.c: Remove.
* src/config.c (eclat_kw): Mark statically initialized memory locations
as such.
* src/mktags.c (process_tags): Use wordsplit to process quoted arguments.
* lib/bidimap.c (bidimap_config): Fill allocated memory with 0's
* lib/filemap.c (filemap_config): Likewise.
* lib/gdbmmap.c (gdbm_map_config): Likewise.
* lib/seqmap.c (seqmap_config): Likewise.
-rw-r--r-- | configure.ac | 2 | ||||
m--------- | grecs | 0 | ||||
-rw-r--r-- | lib/Makefile.am | 11 | ||||
-rw-r--r-- | lib/bidimap.c | 4 | ||||
-rw-r--r-- | lib/filemap.c | 4 | ||||
-rw-r--r-- | lib/forlangrm.y | 4 | ||||
-rw-r--r-- | lib/forlanlex.l | 15 | ||||
-rw-r--r-- | lib/gdbmmap.c | 4 | ||||
-rw-r--r-- | lib/json.h | 66 | ||||
-rw-r--r-- | lib/jsongrm.y | 316 | ||||
-rw-r--r-- | lib/jsonlex.l | 183 | ||||
-rw-r--r-- | lib/map.c | 6 | ||||
-rw-r--r-- | lib/req2url.c | 6 | ||||
-rw-r--r-- | lib/reqcreat.c | 2 | ||||
-rw-r--r-- | lib/reqencode.c | 4 | ||||
-rw-r--r-- | lib/reqsign.c | 8 | ||||
-rw-r--r-- | lib/seqmap.c | 4 | ||||
-rw-r--r-- | src/.gitignore | 1 | ||||
-rw-r--r-- | src/Makefile.am | 6 | ||||
-rw-r--r-- | src/config.c | 7 | ||||
-rw-r--r-- | src/eclat.h | 2 | ||||
-rw-r--r-- | src/ispeek.c | 26 | ||||
-rw-r--r-- | src/mktags.c | 32 | ||||
-rw-r--r-- | src/util.c | 43 | ||||
-rw-r--r-- | tests/Makefile.am | 5 | ||||
-rw-r--r-- | tests/tjson.c | 116 |
26 files changed, 97 insertions, 780 deletions
diff --git a/configure.ac b/configure.ac index 1673dbb..72aee3e 100644 --- a/configure.ac +++ b/configure.ac @@ -111,13 +111,13 @@ if test $status_ldap != no; then fi fi AM_CONDITIONAL([COND_LDAP],[test $status_ldap = yes]) # Grecs subsystem -GRECS_SETUP([grecs],[tests getopt git2chg]) +GRECS_SETUP([grecs],[tests getopt json git2chg]) # AC_ARG_ENABLE([split-format], [AC_HELP_STRING([--enable-split-format], [build split format files])], [split_fmt=$enableval], diff --git a/grecs b/grecs -Subproject 6331e7708f13efed852e6b85aa17ac21dc158ad +Subproject 27ca9f5819d0e44173a5f61a241cd066ad15713 diff --git a/lib/Makefile.am b/lib/Makefile.am index 711bc98..e1ed1c3 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -1,8 +1,8 @@ # This file is part of Eclat -# Copyright (C) 2012-2015 Sergey Poznyakoff +# Copyright (C) 2012-2018 Sergey Poznyakoff # # Eclat 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. # @@ -40,16 +40,12 @@ libeclat_a_SOURCES=\ forlan.c\ forlan.h\ forlangrm.h\ forlangrm.y\ forlanlex.l\ istore.c\ - json.h\ - jsongrm.h\ - jsongrm.y\ - jsonlex.l\ getans.c\ getyn.c\ hmac_sha1.c\ hmac_sha256.c\ libeclat.h\ map.c\ @@ -68,20 +64,17 @@ libeclat_a_SOURCES=\ trace.c\ urlencode.c\ xmltree.c\ $(maps) AM_LDFLAGS = $(CURL_LIBS) -AM_CPPFLAGS = -I$(top_srcdir)/grecs/src/ $(CURL_CFLAGS) +AM_CPPFLAGS = @GRECS_INCLUDES@ $(CURL_CFLAGS) forlanlex.c: forlangrm.h forlangrm.c forlangrm.h: forlangrm.y -jsonlex.c: jsongrm.h -jsongrm.c jsongrm.h: jsongrm.y - AM_YFLAGS=-tdv AM_LFLAGS=-dp 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/lib/bidimap.c b/lib/bidimap.c index fc601c8..aafc736 100644 --- a/lib/bidimap.c +++ b/lib/bidimap.c @@ -1,8 +1,8 @@ /* This file is part of Eclat. - Copyright (C) 2012-2015 Sergey Poznyakoff. + Copyright (C) 2012-2018 Sergey Poznyakoff. Eclat 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. @@ -97,13 +97,13 @@ bidimap_free(int dbg, void *data) static int bidimap_config(int dbg, struct grecs_node *node, void *data) { struct bidimap *map, **return_map = data; int i; - map = grecs_malloc(sizeof(*map)); + map = grecs_zalloc(sizeof(*map)); for (i = 0; bidimap_kw[i].ident; i++) bidimap_kw[i].varptr = map; if (grecs_tree_process(node->down, bidimap_kw)) { bidimap_free(dbg, map); return eclat_map_failure; } diff --git a/lib/filemap.c b/lib/filemap.c index 6c5e286..26582ec 100644 --- a/lib/filemap.c +++ b/lib/filemap.c @@ -1,8 +1,8 @@ /* This file is part of Eclat. - Copyright (C) 2012-2015 Sergey Poznyakoff. + Copyright (C) 2012-2018 Sergey Poznyakoff. Eclat 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. @@ -57,13 +57,13 @@ static int filemap_config(int dbg, struct grecs_node *node, void *data) { struct filemap *filemap, **return_filemap = data; int i; struct grecs_node *p; - filemap = grecs_malloc(sizeof(*filemap)); + filemap = grecs_zalloc(sizeof(*filemap)); for (i = 0; filemap_kw[i].ident; i++) filemap_kw[i].varptr = filemap; if (grecs_tree_process(node->down, filemap_kw)) { filemap_free(dbg, filemap); return eclat_map_failure; } diff --git a/lib/forlangrm.y b/lib/forlangrm.y index ecfbf25..2db1274 100644 --- a/lib/forlangrm.y +++ b/lib/forlangrm.y @@ -1,9 +1,9 @@ %{ /* This file is part of Eclat. - Copyright (C) 2012-2015 Sergey Poznyakoff. + Copyright (C) 2012-2018 Sergey Poznyakoff. Eclat 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. @@ -14,13 +14,13 @@ You should have received a copy of the GNU General Public License along with Eclat. If not, see <http://www.gnu.org/licenses/>. */ #include "libeclat.h" #include <grecs.h> -#include <grecs-locus.h> +#include <grecs/locus.h> #include "forlangrm.h" #include "forlan.h" #include <string.h> int yylex(); static int yyerror(char *); diff --git a/lib/forlanlex.l b/lib/forlanlex.l index db893df..62265cb 100644 --- a/lib/forlanlex.l +++ b/lib/forlanlex.l @@ -1,9 +1,9 @@ %{ /* This file is part of Eclat. - Copyright (C) 2012-2015 Sergey Poznyakoff. + Copyright (C) 2012-2018 Sergey Poznyakoff. Eclat 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. @@ -16,13 +16,13 @@ along with Eclat. If not, see <http://www.gnu.org/licenses/>. */ #include "libeclat.h" #include <sysexits.h> #include <ctype.h> #include <grecs.h> -#include <grecs-locus.h> +#include <grecs/locus.h> #include "forlangrm.h" #include "forlan.h" static const char *forlan_input_base; static size_t forlan_input_len; static size_t forlan_input_pos; @@ -97,21 +97,24 @@ continue return CONTINUE; grecs_line_add(yytext + 1, yyleng - 2); yylval.string = grecs_line_finish(); return STRING; } \"[^\\"\n]*\\\n { BEGIN(STR); grecs_line_begin(); grecs_line_acc_grow_unescape_last(yytext + 1, - yyleng - 1); + yyleng - 1, + &yylloc); grecs_locus_point_advance_line(grecs_current_locus_point); } \"[^\\"\n]*\\. { BEGIN(STR); grecs_line_begin(); grecs_line_acc_grow_unescape_last(yytext + 1, - yyleng - 1); } -<STR>\"[^\\"\n]*\\\n { grecs_line_acc_grow_unescape_last(yytext, yyleng); + yyleng - 1, + &yylloc); } +<STR>\"[^\\"\n]*\\\n { grecs_line_acc_grow_unescape_last(yytext, yyleng, + &yylloc); grecs_locus_point_advance_line(grecs_current_locus_point); } -<STR>[^\\"\n]*\\. { grecs_line_acc_grow_unescape_last(yytext, yyleng); } +<STR>[^\\"\n]*\\. { grecs_line_acc_grow_unescape_last(yytext, yyleng, &yylloc); } <STR>[^\\"\n]*\" { BEGIN(INITIAL); if (yyleng > 1) grecs_line_add(yytext, yyleng - 1); yylval.string = grecs_line_finish(); return STRING; } /* Other tokens */ diff --git a/lib/gdbmmap.c b/lib/gdbmmap.c index dde6b02..a2887df 100644 --- a/lib/gdbmmap.c +++ b/lib/gdbmmap.c @@ -1,8 +1,8 @@ /* This file is part of Eclat. - Copyright (C) 2012-2015 Sergey Poznyakoff. + Copyright (C) 2012-2018 Sergey Poznyakoff. Eclat 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. @@ -66,13 +66,13 @@ static int gdbm_map_config(int dbg, struct grecs_node *node, void *data) { struct gdbm_map *gdbm_map, **return_gdbm_map = data; struct grecs_node *p; int i; - gdbm_map = grecs_malloc(sizeof(*gdbm_map)); + gdbm_map = grecs_zalloc(sizeof(*gdbm_map)); for (i = 0; gdbm_map_kw[i].ident; i++) gdbm_map_kw[i].varptr = gdbm_map; if (grecs_tree_process(node->down, gdbm_map_kw)) { gdbm_map_free(dbg, gdbm_map); return eclat_map_failure; } diff --git a/lib/json.h b/lib/json.h deleted file mode 100644 index 36ca243..0000000 --- a/lib/json.h +++ /dev/null @@ -1,66 +0,0 @@ -/* This file is part of Eclat. - Copyright (C) 2012-2015 Sergey Poznyakoff. - - Eclat 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. - - Eclat 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 Eclat. If not, see <http://www.gnu.org/licenses/>. */ - -#include <grecs.h> - -enum json_object_type -{ - json_null, - json_bool, - json_number, - json_string, - json_arr, - json_obj -}; - -struct json_object; -struct json_array { - size_t oc; - struct json_object **ov; -}; - -struct json_object { - enum json_object_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_o */ - } v; -}; - -struct json_pair { - char *k; - struct json_object *v; -}; - -extern char const *json_err_diag; -extern char const *json_err_ptr; -extern struct json_object *json_return_obj; - -void jsonlex_setup(char const *s, size_t l); -void jsonlex_diag(const char *s, size_t off); -struct json_object *json_object_create(int type); -struct grecs_symtab *json_assoc_create(void); -void json_object_free(struct json_object *obj); - -struct json_object *json_parse_string(char const *input, size_t len); - -struct json_object *json_object_lookup(struct json_object *obj, - const char *ident); - - diff --git a/lib/jsongrm.y b/lib/jsongrm.y deleted file mode 100644 index 398d2e7..0000000 --- a/lib/jsongrm.y +++ /dev/null @@ -1,316 +0,0 @@ -%{ -/* This file is part of Eclat. - Copyright (C) 2012-2015 Sergey Poznyakoff. - - Eclat 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. - - Eclat 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 Eclat. If not, see <http://www.gnu.org/licenses/>. */ - -#include "libeclat.h" -#include <string.h> -#include "jsongrm.h" -#include "json.h" - -struct json_object *json_return_obj; - -static int yyerror(char const *s); - -static struct json_pair * -pairdup(struct json_pair *in) -{ - struct json_pair *out = grecs_malloc(sizeof(*out)); - out->k = in->k; - out->v = in->v; - return out; -} - -static void -pairfree(void *ptr) -{ - struct json_pair *p = ptr; - free(p->k); - json_object_free(p->v); - free(p); -} - -static void -objfree(void *ptr) -{ - struct json_object *o = ptr; - json_object_free(o); -} - -%} -%token <n> T_NUMBER -%token <s> T_STRING -%token <b> T_BOOL -%token T_NULL T_ERR - -%type <a> array -%type <list> objects objlist pairs pairlist -%type <p> pair -%type <obj> object -%type <o> assoc - -%union { - int b; - double n; - char *s; - struct json_array *a; - struct grecs_symtab *o; - struct json_object *obj; - struct grecs_list *list; - struct json_pair *p; -} -%% - -input : object - { - json_return_obj = $1; - } - ; - -object : T_NUMBER - { - $$ = json_object_create(json_number); - $$->v.n = $1; - } - | T_STRING - { - $$ = json_object_create(json_string); - $$->v.s = $1; - } - | T_BOOL - { - $$ = json_object_create(json_bool); - $$->v.b = $1; - } - | T_NULL - { - $$ = json_object_create(json_null); - } - | array - { - $$ = json_object_create(json_arr); - $$->v.a = $1; - } - | assoc - { - $$ = json_object_create(json_obj); - $$->v.o = $1; - } - ; - -array : '[' objects ']' - { - struct json_array *a = grecs_malloc(sizeof(*a)); - if (!$2) { - a->oc = 0; - a->ov = NULL; - } else { - size_t i; - struct grecs_list_entry *ep; - a->oc = $2->count; - a->ov = grecs_calloc(a->oc, sizeof(a->ov)); - for (i = 0, ep = $2->head; ep; i++, ep = ep->next) { - struct json_object *p = ep->data; - a->ov[i] = p; - } - } - $$ = a; - } - ; - -objects : /* empty */ - { - $$ = NULL; - } - | objlist - ; - -objlist : object - { - $$ = grecs_list_create(); - $$->free_entry = objfree; - grecs_list_append($$, $1); - } - | objlist ',' object - { - grecs_list_append($1, $3); - } - ; - -assoc : '{' pairs '}' - { - struct grecs_symtab *s; - - s = json_assoc_create(); - if ($2) { - struct grecs_list_entry *ep; - for (ep = $2->head; ep; ep = ep->next) { - struct json_pair *p = ep->data; - int install = 1; - grecs_symtab_lookup_or_install(s, p, &install); - if (install) { - p->k = NULL; - p->v = NULL; - } - } - grecs_list_free($2); - } - $$ = s; - } - ; - -pairs : /* empty */ - { - $$ = NULL; - } - | pairlist - ; - -pairlist: pair - { - $$ = grecs_list_create(); - $$->free_entry = pairfree; - grecs_list_append($$, $1); - } - | pairlist ',' pair - { - grecs_list_append($1, $3); - } - ; - -pair : T_STRING ':' object - { - struct json_pair *p = grecs_malloc(sizeof(*p)); - p->k = $1; - p->v = $3; - $$ = p; - } - ; -%% - -static int -yyerror(char const *s) -{ - jsonlex_diag(s, 0); - return 0; -} - -struct json_object * -json_object_create(int type) -{ - struct json_object *obj = grecs_zalloc(sizeof(*obj)); - obj->type = type; - return obj; -} - -void -json_object_free(struct json_object *obj) -{ - size_t i; - - if (!obj) - return; - - switch (obj->type) { - case json_bool: - case json_number: - break; - case json_string: - free(obj->v.s); - break; - case json_arr: - for (i = 0; i < obj->v.a->oc; i++) - json_object_free(obj->v.a->ov[i]); - free(obj->v.a); - break; - case json_obj: - grecs_symtab_free(obj->v.o); - } - free(obj); -} - -static unsigned -json_st_hash(void *data, unsigned long n_buckets) -{ - struct json_pair *p = data; - return grecs_hash_string(p->k, n_buckets); -} - -static int -json_st_cmp(const void *a, const void *b) -{ - struct json_pair const *pa = a; - struct json_pair const *pb = b; - return strcmp(pa->k, pb->k); -} - -static int -json_st_copy(void *a, void *b) -{ - struct json_pair *pa = a; - struct json_pair *pb = b; - memcpy(pa, pb, sizeof(*pa)); - return 0; -} - -static void -json_st_free(void *ptr) -{ - struct json_pair *p = ptr; -// printf("FREE %s\n", p->k); - free(p->k); - json_object_free(p->v); - free(p); -} - -struct grecs_symtab * -json_assoc_create() -{ - return grecs_symtab_create(sizeof(struct json_pair), - json_st_hash, - json_st_cmp, - json_st_copy, - NULL, - json_st_free); -} - -struct json_object * -json_parse_string(char const *input, size_t len) -{ - jsonlex_setup(input, len); - if (yyparse()) { - /* FIXME: error recovery */ - return NULL; - } - return json_return_obj; -} - -struct json_object * -json_object_lookup(struct json_object *obj, const char *ident) -{ - struct json_pair key, *p; - if (!obj || obj->type != json_obj) - return NULL; - key.k = ident; - p = grecs_symtab_lookup_or_install(obj->v.o, &key, NULL); - if (!p) - return NULL; - return p->v; -} - - - - - diff --git a/lib/jsonlex.l b/lib/jsonlex.l deleted file mode 100644 index 322b05d..0000000 --- a/lib/jsonlex.l +++ /dev/null @@ -1,183 +0,0 @@ -%{ -/* This file is part of Eclat. - Copyright (C) 2012-2015 Sergey Poznyakoff. - - Eclat 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. - - Eclat 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 Eclat. If not, see <http://www.gnu.org/licenses/>. */ - -#include "libeclat.h" -#include "jsongrm.h" -#include "json.h" - -static char const *input_ptr; -static size_t input_size; - -char const *json_err_diag; -char const *json_err_ptr; - -#undef YY_INPUT -#define YY_INPUT(buf,result,max_size) \ - do { \ - size_t n = (max_size > input_size) ? input_size : max_size; \ - if (n) { \ - memcpy(buf, input_ptr, n); \ - input_ptr += n; \ - input_size -= n; \ - } \ - result = n; \ - } while(0) - -void -jsonlex_setup(char const *s, size_t l) -{ - input_ptr = s; - input_size = l; - json_err_diag = NULL; - json_err_ptr = NULL; - yy_flex_debug = 0; -} - -void -jsonlex_diag(const char *s, size_t off) -{ - if (!json_err_diag) { - json_err_diag = s; - json_err_ptr = input_ptr - off; - } -} - -static int -utf8_wctomb(char *u) -{ - unsigned int wc = strtoul(u, NULL, 16); - int count; - char r[6]; - - if (wc < 0x80) - count = 1; - else if (wc < 0x800) - count = 2; - else if (wc < 0x10000) - count = 3; - else if (wc < 0x200000) - count = 4; - else if (wc < 0x4000000) - count = 5; - else if (wc <= 0x7fffffff) - count = 6; - else - return -1; - - switch (count) { - /* Note: code falls through cases! */ - case 6: - r[5] = 0x80 | (wc & 0x3f); - wc = wc >> 6; - wc |= 0x4000000; - case 5: - r[4] = 0x80 | (wc & 0x3f); - wc = wc >> 6; - wc |= 0x200000; - case 4: - r[3] = 0x80 | (wc & 0x3f); - wc = wc >> 6; - wc |= 0x10000; - case 3: - r[2] = 0x80 | (wc & 0x3f); - wc = wc >> 6; - wc |= 0x800; - case 2: - r[1] = 0x80 | (wc & 0x3f); - wc = wc >> 6; - wc |= 0xc0; - case 1: - r[0] = wc; - } - grecs_line_acc_grow(r, count); - return count; -} - -static int -unescape(int c, int *o) -{ - static char transtab[] = "\\\\\"\"//b\bf\fn\nr\rt\t"; - char *p; - - for (p = transtab; *p; p += 2) { - if (*p == c) { - *o = p[1]; - return 0; - } - } - return -1; -} - -#define YY_SKIP_YYWRAP 1 -static int -yywrap() -{ - return 1; -} -%} -D [0-9] -X [0-9a-fA-F] -%x STR -%% -"-"?{D}{D}*(.{D}{D}*)?([eE][-+]?{D}{D}*)? { - yylval.n = strtod(yytext, NULL); - return T_NUMBER; - } -\"[^\\\"]*\" { grecs_line_begin(); - grecs_line_add(yytext + 1, yyleng - 2); - yylval.s = grecs_line_finish(); - return T_STRING; } -\"[^\\\"]*\\{X}{4} { BEGIN(STR); - grecs_line_begin(); - grecs_line_add(yytext + 1, yyleng - 5); - utf8_wctomb(yytext + yyleng - 4); - } -\"[^\\\"]*\\. { int c; - BEGIN(STR); - grecs_line_begin(); - grecs_line_acc_grow(yytext + 1, yyleng - 2); - if (unescape(yytext[yyleng - 1], &c)) { - jsonlex_diag("invalid UTF-8 codepoint", 5); - return T_ERR; - } - grecs_line_acc_grow_char(c); - } -<STR>[^\\\"]*\" { BEGIN(INITIAL); - if (yyleng > 1) - grecs_line_acc_grow(yytext, yyleng - 1); - yylval.s = grecs_line_finish(); - return T_STRING; } -<STR>[^\\\"]*\\{X}{4} { - grecs_line_add(yytext, yyleng - 5); - utf8_wctomb(yytext + yyleng - 4); -} -<STR>[^\\\"]*\\. { - int c; - grecs_line_acc_grow(yytext, yyleng - 2); - if (unescape(yytext[yyleng - 1], &c)) { - jsonlex_diag("invalid UTF-8 codepoint", 5); - return T_ERR; - } - grecs_line_acc_grow_char(c); } - -null { return T_NULL; } -true { yylval.b = 1; return T_BOOL; } -false { yylval.b = 0; return T_BOOL; } -"{"|"}"|"["|"]"|":"|"," return yytext[0]; -[ \t\n]* ; -. { jsonlex_diag("bogus character", 0); - return T_ERR; } @@ -1,8 +1,8 @@ /* This file is part of Eclat. - Copyright (C) 2012-2015 Sergey Poznyakoff. + Copyright (C) 2012-2018 Sergey Poznyakoff. Eclat 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. @@ -320,13 +320,13 @@ eclat_map_foreach(int (*fun)(struct eclat_map *, void *), void *data) if (!openmap_symtab) return; cl.fun = fun; cl.data = data; - grecs_symtab_enumerate(openmap_symtab, map_foreach, &cl); + grecs_symtab_foreach(openmap_symtab, map_foreach, &cl); } void eclat_map_free_all() { if (openmap_symtab) { @@ -345,13 +345,13 @@ drv_help(void *data, void *unused) return 0; } void eclat_map_confhelp() { - grecs_symtab_enumerate(mapdrv_symtab, drv_help, NULL); + grecs_symtab_foreach(mapdrv_symtab, drv_help, NULL); } int eclat_map_name_split(const char *mapname, char **name, char **endp) { size_t len = strcspn(mapname, ":"); diff --git a/lib/req2url.c b/lib/req2url.c index b9d7512..c97d321 100644 --- a/lib/req2url.c +++ b/lib/req2url.c @@ -1,8 +1,8 @@ /* This file is part of Eclat. - Copyright (C) 2012-2015 Sergey Poznyakoff. + Copyright (C) 2012-2018 Sergey Poznyakoff. Eclat 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. @@ -57,13 +57,13 @@ eclat_request_to_url(struct ec2_request *req) grecs_txtacc_grow(acc, req->endpoint, strlen(req->endpoint)); grecs_txtacc_grow(acc, req->uri, strlen(req->uri)); /* Add parameters */ pc.acc = acc; pc.delim = '?'; - grecs_symtab_enumerate(req->params, add_param, &pc); + grecs_symtab_foreach(req->params, add_param, &pc); grecs_txtacc_grow_char(acc, 0); url = grecs_txtacc_finish(acc, 1); grecs_txtacc_free(acc); return url; @@ -77,12 +77,12 @@ eclat_request_finalize(struct ec2_request *req) if (!(req->flags & EC2_RF_POST) || req->postdata) return; eclat_request_encode(req); pc.acc = grecs_txtacc_create(); pc.delim = 0; - grecs_symtab_enumerate(req->params, add_param, &pc); + grecs_symtab_foreach(req->params, add_param, &pc); grecs_txtacc_grow_char(pc.acc, 0); req->postdata = grecs_txtacc_finish(pc.acc, 1); grecs_txtacc_free(pc.acc); grecs_symtab_clear(req->params); } diff --git a/lib/reqcreat.c b/lib/reqcreat.c index 753a415..8bfca56 100644 --- a/lib/reqcreat.c +++ b/lib/reqcreat.c @@ -76,13 +76,13 @@ eclat_request_dup(struct ec2_request const *src) NULL, NULL, NULL, NULL, ec2_param_free); - grecs_symtab_enumerate(src->params, ec2_param_dup, dst); + grecs_symtab_foreach(src->params, ec2_param_dup, dst); if (src->headers == NULL) { dst->headers = NULL; } else { struct grecs_list_entry *ep; for (ep = src->headers->head; ep; ep = ep->next) { struct ec2_param *ent = ep->data; diff --git a/lib/reqencode.c b/lib/reqencode.c index 70ac16d..c5a9655 100644 --- a/lib/reqencode.c +++ b/lib/reqencode.c @@ -1,8 +1,8 @@ /* This file is part of Eclat. - Copyright (C) 2012-2015 Sergey Poznyakoff. + Copyright (C) 2012-2018 Sergey Poznyakoff. Eclat 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. @@ -34,9 +34,9 @@ encode_param(void *sym, void *data) return 0; } void eclat_request_encode(struct ec2_request *req) { - grecs_symtab_enumerate(req->params, encode_param, NULL); + grecs_symtab_foreach(req->params, encode_param, NULL); } |