[pulseaudio-discuss] [PATCH RFCv3 08/51] packet: Introduce pa_packet_new_data() to copy data into a newly created packet

Peter Meerwald pmeerw at pmeerw.net
Tue Nov 4 15:26:03 PST 2014


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

v2: (thanks Alexander Patrakov)
* turn check in pa_packet_new() into assert()

Signed-off-by: Peter Meerwald <pmeerw at pmeerw.net>
---
 src/pulsecore/packet.c       | 11 +++++++++++
 src/pulsecore/packet.h       |  4 ++++
 src/pulsecore/pstream-util.c |  2 +-
 3 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/src/pulsecore/packet.c b/src/pulsecore/packet.c
index 091cfb3..0a23aa9 100644
--- a/src/pulsecore/packet.c
+++ b/src/pulsecore/packet.c
@@ -62,6 +62,17 @@ pa_packet* pa_packet_new(size_t length) {
     return p;
 }
 
+pa_packet* pa_packet_new_data(const void* data, size_t length) {
+    pa_packet *p = pa_packet_new(length);
+
+    pa_assert(data);
+    pa_assert(length > 0);
+
+    memcpy(p->data, data, length);
+
+    return p;
+}
+
 pa_packet* pa_packet_new_dynamic(void* data, size_t length) {
     pa_packet *p;
 
diff --git a/src/pulsecore/packet.h b/src/pulsecore/packet.h
index 33c66f2..f36eb11 100644
--- a/src/pulsecore/packet.h
+++ b/src/pulsecore/packet.h
@@ -31,6 +31,10 @@ typedef struct pa_packet pa_packet;
  * on length) */
 pa_packet* pa_packet_new(size_t length);
 
+/* create packet (either of type appended or dynamic depending on length)
+ * and copy data */
+pa_packet* pa_packet_new_data(const void* data, size_t length);
+
 /* data must have been malloc()ed; the packet takes ownership of the memory,
  * i.e. memory is free()d with the packet */
 pa_packet* pa_packet_new_dynamic(void* data, size_t length);
diff --git a/src/pulsecore/pstream-util.c b/src/pulsecore/pstream-util.c
index 4b93b86..6c710eb 100644
--- a/src/pulsecore/pstream-util.c
+++ b/src/pulsecore/pstream-util.c
@@ -38,7 +38,7 @@ static void pa_pstream_send_tagstruct_with_ancil_data(pa_pstream *p, pa_tagstruc
     pa_assert(t);
 
     pa_assert_se(data = pa_tagstruct_data(t, &length));
-    pa_assert_se(packet = pa_packet_new_dynamic(pa_xmemdup(data, length), length));
+    pa_assert_se(packet = pa_packet_new_data(data, length));
     pa_tagstruct_free(t);
 
     pa_pstream_send_packet(p, packet, ancil_data);
-- 
1.9.1



More information about the pulseaudio-discuss mailing list