X-Git-Url: https://git.tokkee.org/?p=sysdb.git;a=blobdiff_plain;f=src%2Ffrontend%2Fparser.c;fp=src%2Ffrontend%2Fparser.c;h=037550fbddd731bf4bd84c51c8d126d50466ff16;hp=b970e73671eceefd8fd697d3029046b8fb8ac7f1;hb=ae32792b881853979265e41b49866be9ea2d6b2c;hpb=ea29adb896a47f32e86119d6161dc5bc2259565b diff --git a/src/frontend/parser.c b/src/frontend/parser.c index b970e73..037550f 100644 --- a/src/frontend/parser.c +++ b/src/frontend/parser.c @@ -27,9 +27,11 @@ #include "sysdb.h" +#include "frontend/connection-private.h" #include "frontend/parser.h" #include "frontend/grammar.h" -#include "frontend/connection-private.h" + +#include "utils/llist.h" #include @@ -37,25 +39,33 @@ * public API */ -int +sdb_llist_t * sdb_fe_parse(const char *query) { sdb_fe_yyscan_t scanner; + sdb_fe_yyextra_t yyextra; int yyres; if (! query) - return -1; + return NULL; + + memset(&yyextra, 0, sizeof(yyextra)); + yyextra.parsetree = sdb_llist_create(); - scanner = sdb_fe_scanner_init(query); - if (! scanner) - return -1; + scanner = sdb_fe_scanner_init(query, &yyextra); + if (! scanner) { + sdb_llist_destroy(yyextra.parsetree); + return NULL; + } yyres = sdb_fe_yyparse(scanner); sdb_fe_scanner_destroy(scanner); - if (yyres) - return -1; - return 0; + if (yyres) { + sdb_llist_destroy(yyextra.parsetree); + return NULL; + } + return yyextra.parsetree; } /* sdb_fe_parse */ /* vim: set tw=78 sw=4 ts=4 noexpandtab : */