All pastes #1854553 Raw Edit

Untitled

public c v1 · immutable
#1854553 ·published 2010-03-28 12:30 UTC
rendered paste body
From d5902ad6a1c81d27cf2612b347eba82fa9ad34c3 Mon Sep 17 00:00:00 2001From: Anton Khirnov <wyskas@gmail.com>Date: Sun, 28 Mar 2010 14:03:15 +0200Subject: [PATCH 1/2] Add demux_info_add_len() function for non-terminated strings.Also change demuxer info to use talloc.demux_info_add is now a wrapper around demux_info_add_len.--- libmpdemux/demuxer.c |   30 ++++++++++++++++-------------- libmpdemux/demuxer.h |    6 ++++++ libmpdemux/ebml.h    |    6 +----- 3 files changed, 23 insertions(+), 19 deletions(-)diff --git a/libmpdemux/demuxer.c b/libmpdemux/demuxer.cindex df1dea6..e637a96 100644--- a/libmpdemux/demuxer.c+++ b/libmpdemux/demuxer.c@@ -387,11 +387,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);@@ -1282,27 +1277,34 @@ 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_len(demuxer, (struct bstr){opt, strlen(opt)},+                              (struct bstr){param, strlen(param)});+}++int demux_info_add_len(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 (!strncasecmp(opt.start, info[2 * n], opt.len)) {+            if (!strncmp(param.start, info[2 * n + 1], param.len)) {+                mp_msg(MSGT_DEMUX, MSGL_V, "Demuxer info %.*s set to unchanged value %.*s\n",+                       opt.len, opt.start, param.len, param.start);                 return 0;             }-            mp_tmsg(MSGT_DEMUX, MSGL_INFO, "Demuxer info %s changed to %s\n", opt,-                   param);+            mp_tmsg(MSGT_DEMUX, MSGL_INFO, "Demuxer info %.*s changed to %.*s\n",+                    opt.len, opt.start, param.len, param.start);             free(info[2 * n + 1]);-            info[2 * n + 1] = strdup(param);+            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.hindex 1f16ea4..683caaf 100644--- a/libmpdemux/demuxer.h+++ b/libmpdemux/demuxer.h@@ -278,6 +278,11 @@ typedef struct {   int aid, vid, sid; //audio, video and subtitle id } demux_program_t; +struct bstr {+    const uint8_t *start;+    int len;+};+ static inline demux_packet_t* new_demux_packet(int len){   demux_packet_t* dp=(demux_packet_t*)malloc(sizeof(demux_packet_t));   dp->len=len;@@ -428,6 +433,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_len(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);diff --git a/libmpdemux/ebml.h b/libmpdemux/ebml.hindex b2fed46..ecdba75 100644--- a/libmpdemux/ebml.h+++ b/libmpdemux/ebml.h@@ -24,6 +24,7 @@ #include <stdbool.h>  #include "stream/stream.h"+#include "demuxer.h"   /* EBML version supported */@@ -62,11 +63,6 @@ struct ebml_parse_ctx {     bool no_error_messages; }; -struct bstr {-    uint8_t *start;-    int len;-};- #include "ebml_types.h"  #define EBML_ID_INVALID 0xffffffff-- 1.7.0