diff --git a/src/pulsecore/packet.c b/src/pulsecore/packet.c index eacff9dd6..9dc886817 100644 --- a/src/pulsecore/packet.c +++ b/src/pulsecore/packet.c @@ -60,6 +60,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 6d61e02e4..20609871c 100644 --- a/src/pulsecore/packet.h +++ b/src/pulsecore/packet.h @@ -29,6 +29,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 d8b9808bb..e87450337 100644 --- a/src/pulsecore/pstream-util.c +++ b/src/pulsecore/pstream-util.c @@ -36,7 +36,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);