summaryrefslogtreecommitdiffstats
path: root/libmpdemux/demuxer.c
diff options
context:
space:
mode:
authorAnton Khirnov <wyskas@gmail.com>2010-05-19 12:32:32 +0200
committerUoti Urpala <uau@glyph.nonexistent.invalid>2010-05-21 00:06:26 +0300
commit9f508dab976b0e4cf43da8b9ef31de357ef76d2f (patch)
tree570e4306de5e8a0b21155ca514dfc0a6245b1fe8 /libmpdemux/demuxer.c
parentd72541b75cb66afa2135d7753bd799af976f9aea (diff)
downloadmpv-9f508dab976b0e4cf43da8b9ef31de357ef76d2f.tar.bz2
mpv-9f508dab976b0e4cf43da8b9ef31de357ef76d2f.tar.xz
demuxer.c: add demux_info_add_bstr(), use talloc for info field
demux_info_add() is now a wrapper around demux_info_add_bstr().
Diffstat (limited to 'libmpdemux/demuxer.c')
-rw-r--r--libmpdemux/demuxer.c31
1 files changed, 16 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;