On 2015-04-07 17:13, Wim Taymans wrote: > Add a method to copy a tagstruct. This will also reset the read pointer > back to the beginning. > --- > 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; We're missing this line: tc->length = 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); > > -- David Henningsson, Canonical Ltd. https://launchpad.net/~diwic