diff --git a/src/examples/media-session/metadata.c b/src/examples/media-session/metadata.c index c60843b1f..eff8b4f97 100644 --- a/src/examples/media-session/metadata.c +++ b/src/examples/media-session/metadata.c @@ -145,14 +145,8 @@ static int clear_subjects(struct metadata *this, uint32_t subject) static void clear_items(struct metadata *this) { struct item *item; - - while (true) { - item = pw_array_first(&this->metadata); - if (!pw_array_check(&this->metadata, item)) - break; - + pw_array_consume(item, &this->metadata) clear_subjects(this, item->subject); - } pw_array_reset(&this->metadata); } diff --git a/src/pipewire/array.h b/src/pipewire/array.h index a5fa362c1..e009c834f 100644 --- a/src/pipewire/array.h +++ b/src/pipewire/array.h @@ -69,6 +69,11 @@ struct pw_array { pw_array_check(array, pos); \ (pos)++) +#define pw_array_consume(pos, array) \ + for (pos = (__typeof__(pos)) pw_array_first(array); \ + pw_array_check(array, pos); \ + pos = (__typeof__(pos)) pw_array_first(array)) + #define pw_array_remove(a,p) \ ({ \ (a)->size -= sizeof(*(p)); \