[pulseaudio-discuss] [PATCH 1/5] tagstruct: add copy method
Peter Meerwald
pmeerw at pmeerw.net
Tue Apr 7 08:50:53 PDT 2015
Hi,
> Add a method to copy a tagstruct. This will also reset the read pointer
> back to the beginning.
_copy() could be smarter about the tagstruct type:
if _FIXED, no data copy is necessary, just set the pointer;
if _APPENDED, data could be copied to the tagstruct ifself, without the
need to allocate using xmemdup()
regards, p.
> ---
> src/pulsecore/tagstruct.c | 13 +++++++++++++
> src/pulsecore/tagstruct.h | 2 ++
> 2 files changed, 15 insertions(+)
>
> diff --git a/src/pulsecore/tagstruct.c b/src/pulsecore/tagstruct.c
> index 8a29957..c29e49b 100644
> --- a/src/pulsecore/tagstruct.c
> +++ b/src/pulsecore/tagstruct.c
> @@ -97,6 +97,19 @@ void pa_tagstruct_free(pa_tagstruct*t) {
> pa_xfree(t);
> }
>
> +pa_tagstruct *pa_tagstruct_copy(pa_tagstruct*t) {
> + pa_tagstruct*tc;
> +
> + if (!(tc = pa_flist_pop(PA_STATIC_FLIST_GET(tagstructs))))
> + tc = pa_xnew(pa_tagstruct, 1);
> + tc->data = pa_xmemdup(t->data, t->length);
> + tc->allocated = t->length;
> + tc->rindex = 0;
> + tc->type = PA_TAGSTRUCT_DYNAMIC;
> +
> + return tc;
> +}
> +
> static inline 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 348c65d..e648d75 100644
> --- a/src/pulsecore/tagstruct.h
> +++ b/src/pulsecore/tagstruct.h
> @@ -64,6 +64,8 @@ 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);
>
> +pa_tagstruct *pa_tagstruct_copy(pa_tagstruct*t);
> +
> int pa_tagstruct_eof(pa_tagstruct*t);
> const uint8_t* pa_tagstruct_data(pa_tagstruct*t, size_t *l);
>
> --
> 2.1.0
>
> _______________________________________________
> pulseaudio-discuss mailing list
> pulseaudio-discuss at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss
>
--
Peter Meerwald
+43-664-2444418 (mobile)
More information about the pulseaudio-discuss
mailing list