From 9f508dab976b0e4cf43da8b9ef31de357ef76d2f Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Wed, 19 May 2010 12:32:32 +0200 Subject: [PATCH] demuxer.c: add demux_info_add_bstr(), use talloc for info field demux_info_add() is now a wrapper around demux_info_add_bstr(). --- libmpdemux/demuxer.c | 31 ++++++++++++++++--------------- libmpdemux/demuxer.h | 2 ++ 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/libmpdemux/demuxer.c b/libmpdemux/demuxer.c index 551fd330c4..93565e62d2 100644 --- a/libmpdemux/demuxer.c +++ b/libmpdemux/demuxer.c @@ -383,11 +383,6 @@ void free_demuxer(demuxer_t *demuxer) free_demuxer_stream(demuxer->video); free_demuxer_stream(demuxer->sub); skip_streamfree: - if (demuxer->info) { - for (i = 0; demuxer->info[i] != NULL; i++) - free(demuxer->info[i]); - free(demuxer->info); - } free(demuxer->filename); if (demuxer->teletext) teletext_control(demuxer->teletext, TV_VBI_CONTROL_STOP, NULL); @@ -1271,27 +1266,33 @@ int demux_seek(demuxer_t *demuxer, float rel_seek_secs, float audio_delay, int demux_info_add(demuxer_t *demuxer, const char *opt, const char *param) { + return demux_info_add_bstr(demuxer, BSTR(opt), BSTR(param)); +} + +int demux_info_add_bstr(demuxer_t *demuxer, struct bstr opt, struct bstr param) +{ char **info = demuxer->info; int n = 0; for (n = 0; info && info[2 * n] != NULL; n++) { - if (!strcasecmp(opt, info[2 * n])) { - if (!strcmp(param, info[2 * n + 1])) { - mp_msg(MSGT_DEMUX, MSGL_V, "Demuxer info %s set to unchanged value %s\n", opt, param); + if (!bstrcasecmp(opt, BSTR(info[2*n]))) { + if (!bstrcmp(param, BSTR(info[2*n + 1]))) { + mp_msg(MSGT_DEMUX, MSGL_V, "Demuxer info %.*s set to unchanged value %.*s\n", + BSTR_P(opt), BSTR_P(param)); return 0; } - mp_tmsg(MSGT_DEMUX, MSGL_INFO, "Demuxer info %s changed to %s\n", opt, - param); - free(info[2 * n + 1]); - info[2 * n + 1] = strdup(param); + mp_tmsg(MSGT_DEMUX, MSGL_INFO, "Demuxer info %.*s changed to %.*s\n", + BSTR_P(opt), BSTR_P(param)); + talloc_free(info[2*n + 1]); + info[2*n + 1] = talloc_strndup(demuxer->info, param.start, param.len); return 0; } } - info = demuxer->info = realloc(info, (2 * (n + 2)) * sizeof(char *)); - info[2 * n] = strdup(opt); - info[2 * n + 1] = strdup(param); + info = demuxer->info = talloc_realloc(demuxer, info, char *, 2 * (n + 2)); + info[2*n] = talloc_strndup(demuxer->info, opt.start, opt.len); + info[2*n + 1] = talloc_strndup(demuxer->info, param.start, param.len); memset(&info[2 * (n + 1)], 0, 2 * sizeof(char *)); return 1; diff --git a/libmpdemux/demuxer.h b/libmpdemux/demuxer.h index 1f16ea4eda..7a702a3139 100644 --- a/libmpdemux/demuxer.h +++ b/libmpdemux/demuxer.h @@ -26,6 +26,7 @@ #include #include "stream/stream.h" +#include "bstr.h" struct MPOpts; @@ -428,6 +429,7 @@ extern int pts_from_bps; extern int extension_parsing; int demux_info_add(demuxer_t *demuxer, const char *opt, const char *param); +int demux_info_add_bstr(demuxer_t *demuxer, struct bstr opt, struct bstr param); char* demux_info_get(demuxer_t *demuxer, const char *opt); int demux_info_print(demuxer_t *demuxer); int demux_control(demuxer_t *demuxer, int cmd, void *arg); -- 2.11.4.GIT