vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Wed Sep 30 21:41:04 2020 +0300| [e763b313b4be2f24e27c4358675565985937ef4a] | committer: Rémi Denis-Courmont
ytdl: use FD directly instead of FILE > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=e763b313b4be2f24e27c4358675565985937ef4a --- modules/demux/ytdl.c | 34 +++++++++++++--------------------- 1 file changed, 13 insertions(+), 21 deletions(-) diff --git a/modules/demux/ytdl.c b/modules/demux/ytdl.c index 97f4443072..63b082b4b9 100644 --- a/modules/demux/ytdl.c +++ b/modules/demux/ytdl.c @@ -39,7 +39,7 @@ struct ytdl_json { struct vlc_logger *logger; - FILE *input; + int fd; }; void json_parse_error(void *data, const char *msg) @@ -53,24 +53,15 @@ size_t json_read(void *data, void *buf, size_t size) { struct ytdl_json *sys = data; - return fread(buf, 1, size, sys->input); + return read(sys->fd, buf, size); } -static -FILE *vlc_popen(pid_t *restrict pid, const char *argv[]) +static int ytdl_popen(pid_t *restrict pid, const char *argv[]) { int fds[2]; if (vlc_pipe(fds)) - return NULL; - - FILE *input = fdopen(fds[0], "rt"); - - if (input == NULL) { - vlc_close(fds[1]); - vlc_close(fds[0]); - return NULL; - } + return -1; int fdv[] = { -1, fds[1], 2, -1 }; int val = vlc_spawn(pid, argv[0], fdv, argv); @@ -78,12 +69,12 @@ FILE *vlc_popen(pid_t *restrict pid, const char *argv[]) vlc_close(fds[1]); if (val) { - fclose(input); - input = NULL; + vlc_close(fds[0]); errno = val; + return -1; } - return input; + return fds[0]; } struct ytdl_playlist { @@ -91,7 +82,6 @@ struct ytdl_playlist { stream_t *source; }; - static int CompareFormats(const struct json_object *f_a, const struct json_object *f_b, double pref_height) { @@ -351,11 +341,14 @@ static int OpenCommon(vlc_object_t *obj) if (unlikely(path == NULL)) return VLC_EGENERIC; + struct ytdl_json jsdata; pid_t pid; const char *argv[] = { path, s->psz_url, NULL }; - FILE *input = vlc_popen(&pid, argv); - if (input == NULL) { + jsdata.logger = s->obj.logger; + jsdata.fd = ytdl_popen(&pid, argv); + + if (jsdata.fd == -1) { msg_Dbg(obj, "cannot start %s: %s", path, vlc_strerror_c(errno)); free(path); return VLC_EGENERIC; @@ -363,11 +356,10 @@ static int OpenCommon(vlc_object_t *obj) free(path); - struct ytdl_json jsdata = { s->obj.logger, input }; int val = json_parse(&jsdata, &sys->json); kill(pid, SIGTERM); - fclose(input); + vlc_close(jsdata.fd); vlc_waitpid(pid); if (val) { _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
