[pulseaudio-discuss] [PATCH RFC 08/17] packet: Introduce pa_packet_new_data() to copy data into a newly created packet
Alexander E. Patrakov
patrakov at gmail.com
Mon Oct 27 02:22:28 PDT 2014
25.10.2014 03:21, Peter Meerwald wrote:
> From: Peter Meerwald <p.meerwald at bct-electronic.com>
>
> Signed-off-by: Peter Meerwald <pmeerw at pmeerw.net>
> ---
> src/pulsecore/packet.c | 9 +++++++++
> src/pulsecore/packet.h | 4 ++++
> src/pulsecore/pstream-util.c | 2 +-
> 3 files changed, 14 insertions(+), 1 deletion(-)
>
> diff --git a/src/pulsecore/packet.c b/src/pulsecore/packet.c
> index 091cfb3..2f8eacf 100644
> --- a/src/pulsecore/packet.c
> +++ b/src/pulsecore/packet.c
> @@ -62,6 +62,15 @@ 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);
> +
> + if (p && data)
> + memcpy(p->data, data, length);
p cannot be NULL here, so part of the check is pointless.
The only caller is also known to pass non-null data. So please either
delete the if or turn it into pa_assert(data).
> +
> + 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 b029482..8312cc5 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(pa_pstream *p, pa_tagstruct *t,
> 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);
>
--
Alexander E. Patrakov
More information about the pulseaudio-discuss
mailing list