commit 55aa433f8f1327733b5f8695d0f211c8c3ab8077 from: Omar Polo date: Sun Apr 24 10:15:32 2022 UTC provide parser_parsef: a printf-like function for parsers commit - 88930849b9f3a3fbc9a395f21d4b47c2b1e11ae8 commit + 55aa433f8f1327733b5f8695d0f211c8c3ab8077 blob - d78c06a5d79487bdde5bcf29258b85c61328dd2f blob + 7dcf584964c0faeedfd4bcc0337a56535601d897 --- include/parser.h +++ include/parser.h @@ -23,6 +23,7 @@ typedef void (*parserfn)(struct parser *); void parser_init(struct tab *, parserfn); int parser_parse(struct tab *, const char *, size_t); +int parser_parsef(struct tab *, const char *, ...); int parser_free(struct tab *); int parser_serialize(struct tab *, FILE *); blob - 45201b7cab3fcfecf1c0847838242ecdac11e89e blob + f28aa10423a0b52f2045f8f71c9cf209dc54b784 --- parser/parser.c +++ parser/parser.c @@ -37,6 +37,25 @@ parser_parse(struct tab *tab, const char *chunk, size_ } int +parser_parsef(struct tab *tab, const char *fmt, ...) +{ + char *s; + va_list ap; + int r; + + va_start(ap, fmt); + r = vasprintf(&s, fmt, ap); + va_end(ap); + + if (r == -1) + return 0; + + r = parser_parse(tab, s, strlen(s)); + free(s); + return r; +} + +int parser_free(struct tab *tab) { int r;