From 11086f23ea7e9785cad71bc439f2681bce7c8f0d Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Wed, 19 Feb 2020 11:02:00 +0100 Subject: [PATCH] pod: add and use reserve_bytes helper --- spa/include/spa/pod/builder.h | 8 ++++++++ src/tools/pw-cat.c | 11 +++++------ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/spa/include/spa/pod/builder.h b/spa/include/spa/pod/builder.h index 69adbe46c..644f7b83b 100644 --- a/spa/include/spa/pod/builder.h +++ b/spa/include/spa/pod/builder.h @@ -298,6 +298,14 @@ spa_pod_builder_bytes(struct spa_pod_builder *builder, const void *bytes, uint32 res = r; return res; } +static inline void * +spa_pod_builder_reserve_bytes(struct spa_pod_builder *builder, uint32_t len) +{ + uint32_t offset = builder->state.offset; + if (spa_pod_builder_bytes(builder, NULL, len) < 0) + return NULL; + return SPA_POD_BODY(spa_pod_builder_deref(builder, offset)); +} #define SPA_POD_INIT_Pointer(type,value) (struct spa_pod_pointer){ { sizeof(struct spa_pod_pointer_body), SPA_TYPE_Pointer }, { type, 0, value } } diff --git a/src/tools/pw-cat.c b/src/tools/pw-cat.c index 5a75eff37..d054ad7a0 100644 --- a/src/tools/pw-cat.c +++ b/src/tools/pw-cat.c @@ -973,7 +973,7 @@ static int midi_play(struct data *d, void *src, unsigned int n_frames) d->clock_time = last_frame; while (1) { - uint32_t frame, offset; + uint32_t frame; uint8_t *buf; res = midi_file_peek_event(&d->midi.mf, &ev); @@ -993,11 +993,10 @@ static int midi_play(struct data *d, void *src, unsigned int n_frames) break; spa_pod_builder_control(&b, frame, SPA_CONTROL_Midi); - offset = b.state.offset; - spa_pod_builder_bytes(&b, NULL, ev.size + 1); - buf = SPA_POD_BODY(spa_pod_builder_deref(&b, offset)); - buf[0] = ev.status; - memcpy(&buf[1], ev.data, ev.size); + if ((buf = spa_pod_builder_reserve_bytes(&b, ev.size + 1)) != NULL) { + buf[0] = ev.status; + memcpy(&buf[1], ev.data, ev.size); + } next: midi_file_consume_event(&d->midi.mf, &ev); }