builder: make _rewind part of _reset()

_reset() should also rewind the work that has been done. We don't
need _rewind() anymore then.
This commit is contained in:
Wim Taymans 2019-06-26 12:45:36 +02:00
parent 350e8051a7
commit 891c5fd79d
2 changed files with 9 additions and 13 deletions

View file

@ -78,7 +78,11 @@ spa_pod_builder_set_callbacks(struct spa_pod_builder *builder,
static inline void
spa_pod_builder_reset(struct spa_pod_builder *builder, struct spa_pod_builder_state *state)
{
struct spa_pod_frame *f;
uint32_t size = builder->state.offset - state->offset;
builder->state = *state;
for (f = builder->state.frame; f ; f = f->parent)
f->pod.size -= size;
}
static inline void spa_pod_builder_init(struct spa_pod_builder *builder, void *data, uint32_t size)
@ -173,15 +177,6 @@ static inline void *spa_pod_builder_pop(struct spa_pod_builder *builder, struct
return pod;
}
static inline void spa_pod_builder_rewind(struct spa_pod_builder *builder, uint32_t offset)
{
struct spa_pod_frame *f;
uint32_t size = builder->state.offset - offset;
builder->state.offset -= size;
for (f = builder->state.frame; f ; f = f->parent)
f->pod.size -= size;
}
static inline int
spa_pod_builder_primitive(struct spa_pod_builder *builder, const struct spa_pod *p)
{

View file

@ -1458,6 +1458,7 @@ static void test_overflow(void)
{
uint8_t buffer[1024];
struct spa_pod_builder b = { 0 };
struct spa_pod_builder_state state;
struct spa_pod_frame f[2];
uint32_t idx;
const char *labels[] = {
@ -1489,12 +1490,14 @@ static void test_overflow(void)
spa_pod_builder_init(&b, buffer, sizeof(buffer));
spa_pod_builder_push_object(&b, &f[0], SPA_TYPE_OBJECT_PropInfo, SPA_PARAM_PropInfo);
spa_pod_builder_add(&b,
spa_pod_builder_add(&b,
SPA_PROP_INFO_id, SPA_POD_Id(32567359),
SPA_PROP_INFO_type, SPA_POD_CHOICE_ENUM_Int(1, 0),
SPA_PROP_INFO_name, SPA_POD_String("DV Timings"),
0);
spa_pod_builder_get_state(&b, &state),
spa_pod_builder_prop(&b, SPA_PROP_INFO_labels, 0);
spa_pod_builder_push_struct(&b, &f[1]);
@ -1505,9 +1508,7 @@ static void test_overflow(void)
spa_assert(b.state.offset > sizeof(buffer));
pod = spa_pod_builder_pop(&b, &f[1]);
spa_assert(pod == NULL);
spa_pod_builder_rewind(&b, f[1].offset);
spa_pod_builder_none(&b);
spa_pod_builder_reset(&b, &state);
spa_pod_builder_prop(&b, SPA_PROP_INFO_labels, 0);
spa_pod_builder_push_struct(&b, &f[1]);