vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Wed Sep 30 21:33:26 2020 +0300| [e68f793d3dc041162506f789cfd1b5135718bae6] | committer: Rémi Denis-Courmont
ytdl: use custom function for input > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=e68f793d3dc041162506f789cfd1b5135718bae6 --- modules/demux/json/grammar.y | 4 +--- modules/demux/json/json.h | 3 ++- modules/demux/json/lexicon.l | 6 ++++++ modules/demux/ytdl.c | 12 ++++++++++-- 4 files changed, 19 insertions(+), 6 deletions(-) diff --git a/modules/demux/json/grammar.y b/modules/demux/json/grammar.y index d6b3b31c0d..3f8eb0a236 100644 --- a/modules/demux/json/grammar.y +++ b/modules/demux/json/grammar.y @@ -154,7 +154,6 @@ static void yyerror(void *log, void *scanner, struct json_object *result, } extern int yylex_init_extra(void *, void **); -extern void yyset_in(FILE *, void *); extern int yylex(YYSTYPE *value, void *scanner); extern int yylex_destroy(void *); @@ -214,7 +213,7 @@ value: %% -int json_parse(void *opaque, FILE *in, struct json_object *result) +int json_parse(void *opaque, struct json_object *result) { void *scanner; int ret = yylex_init_extra(opaque, &scanner); @@ -222,7 +221,6 @@ int json_parse(void *opaque, FILE *in, struct json_object *result) if (ret) return ret; - yyset_in(in, scanner); ret = yyparse(opaque, scanner, result); yylex_destroy(scanner); return ret; diff --git a/modules/demux/json/json.h b/modules/demux/json/json.h index e468ec871f..8274ceb652 100644 --- a/modules/demux/json/json.h +++ b/modules/demux/json/json.h @@ -59,10 +59,11 @@ struct json_member { struct json_value value; }; +size_t json_read(void *data, void *buf, size_t max); void json_parse_error(void *log, const char *msg); char *json_unescape(const char *, size_t); -int json_parse(void *log, FILE *in, struct json_object *result); +int json_parse(void *log, struct json_object *result); void json_free(struct json_object *); const struct json_value *json_get(const struct json_object *obj, diff --git a/modules/demux/json/lexicon.l b/modules/demux/json/lexicon.l index 8b8a8b8ab5..51780dad49 100644 --- a/modules/demux/json/lexicon.l +++ b/modules/demux/json/lexicon.l @@ -38,6 +38,12 @@ #include "json.h" #include "grammar.h" +#define YY_INPUT(buf,result,size) \ +{ \ + size_t len = json_read(yyextra, buf, size); \ + result = (len > 0) ? len : YY_NULL; \ +} + %} %% diff --git a/modules/demux/ytdl.c b/modules/demux/ytdl.c index 243d9dc143..97f4443072 100644 --- a/modules/demux/ytdl.c +++ b/modules/demux/ytdl.c @@ -39,6 +39,7 @@ struct ytdl_json { struct vlc_logger *logger; + FILE *input; }; void json_parse_error(void *data, const char *msg) @@ -48,6 +49,13 @@ void json_parse_error(void *data, const char *msg) vlc_error(sys->logger, "%s", msg); } +size_t json_read(void *data, void *buf, size_t size) +{ + struct ytdl_json *sys = data; + + return fread(buf, 1, size, sys->input); +} + static FILE *vlc_popen(pid_t *restrict pid, const char *argv[]) { @@ -355,8 +363,8 @@ static int OpenCommon(vlc_object_t *obj) free(path); - struct ytdl_json jsdata = { s->obj.logger }; - int val = json_parse(&jsdata, input, &sys->json); + struct ytdl_json jsdata = { s->obj.logger, input }; + int val = json_parse(&jsdata, &sys->json); kill(pid, SIGTERM); fclose(input); _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
