[pulseaudio-discuss] [PATCH RFCv3 03/51] tagstruct: Get rid of pa_tagstruct_free_data()

Peter Meerwald pmeerw at pmeerw.net
Tue Nov 4 15:25:58 PST 2014


From: Peter Meerwald <p.meerwald at bct-electronic.com>

pa_tagstruct_free_data() is used in only one place
to pass data from a tagstruct to a packet

this patch is a temporary solution which introduces an extra
malloc(); will be resolved shortly...

Signed-off-by: Peter Meerwald <pmeerw at pmeerw.net>
---
 src/pulsecore/pstream-util.c |  9 ++++++---
 src/pulsecore/tagstruct.c    | 13 -------------
 src/pulsecore/tagstruct.h    |  1 -
 3 files changed, 6 insertions(+), 17 deletions(-)

diff --git a/src/pulsecore/pstream-util.c b/src/pulsecore/pstream-util.c
index 19d7e49..4b93b86 100644
--- a/src/pulsecore/pstream-util.c
+++ b/src/pulsecore/pstream-util.c
@@ -25,19 +25,22 @@
 
 #include <pulsecore/native-common.h>
 #include <pulsecore/macro.h>
+#include <pulse/xmalloc.h>
 
 #include "pstream-util.h"
 
 static void pa_pstream_send_tagstruct_with_ancil_data(pa_pstream *p, pa_tagstruct *t, const pa_cmsg_ancil_data *ancil_data) {
     size_t length;
-    uint8_t *data;
+    const uint8_t *data;
     pa_packet *packet;
 
     pa_assert(p);
     pa_assert(t);
 
-    pa_assert_se(data = pa_tagstruct_free_data(t, &length));
-    pa_assert_se(packet = pa_packet_new_dynamic(data, length));
+    pa_assert_se(data = pa_tagstruct_data(t, &length));
+    pa_assert_se(packet = pa_packet_new_dynamic(pa_xmemdup(data, length), length));
+    pa_tagstruct_free(t);
+
     pa_pstream_send_packet(p, packet, ancil_data);
     pa_packet_unref(packet);
 }
diff --git a/src/pulsecore/tagstruct.c b/src/pulsecore/tagstruct.c
index f737291..834a972 100644
--- a/src/pulsecore/tagstruct.c
+++ b/src/pulsecore/tagstruct.c
@@ -87,19 +87,6 @@ void pa_tagstruct_free(pa_tagstruct*t) {
     pa_xfree(t);
 }
 
-uint8_t* pa_tagstruct_free_data(pa_tagstruct*t, size_t *l) {
-    uint8_t *p;
-
-    pa_assert(t);
-    pa_assert(t->type == PA_TAGSTRUCT_DYNAMIC);
-    pa_assert(l);
-
-    p = t->data;
-    *l = t->length;
-    pa_xfree(t);
-    return p;
-}
-
 static void extend(pa_tagstruct*t, size_t l) {
     pa_assert(t);
     pa_assert(t->type != PA_TAGSTRUCT_FIXED);
diff --git a/src/pulsecore/tagstruct.h b/src/pulsecore/tagstruct.h
index 860332d..6a4a0cd 100644
--- a/src/pulsecore/tagstruct.h
+++ b/src/pulsecore/tagstruct.h
@@ -65,7 +65,6 @@ enum {
 pa_tagstruct *pa_tagstruct_new(void);
 pa_tagstruct *pa_tagstruct_new_fixed(const uint8_t* data, size_t length);
 void pa_tagstruct_free(pa_tagstruct*t);
-uint8_t* pa_tagstruct_free_data(pa_tagstruct*t, size_t *l);
 
 int pa_tagstruct_eof(pa_tagstruct*t);
 const uint8_t* pa_tagstruct_data(pa_tagstruct*t, size_t *l);
-- 
1.9.1



More information about the pulseaudio-discuss mailing list