From 2efa3f00ac26583ca41a7b76216312ccf649ab73 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Sun, 3 May 2020 10:13:50 +0200 Subject: [PATCH] return -ENOENT when param doesn't exist --- src/pipewire/filter.c | 12 ++++++++---- src/pipewire/stream.c | 12 ++++++++---- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/pipewire/filter.c b/src/pipewire/filter.c index 27bf75c95..d4fd82cb8 100644 --- a/src/pipewire/filter.c +++ b/src/pipewire/filter.c @@ -472,6 +472,7 @@ static int impl_port_enum_params(void *object, int seq, struct spa_pod_builder b = { 0 }; uint32_t idx = 0, count = 0; struct param *p; + bool found = false; spa_return_val_if_fail(num != 0, -EINVAL); @@ -488,15 +489,18 @@ static int impl_port_enum_params(void *object, int seq, spa_list_for_each(p, &port->param_list, link) { struct spa_pod *param; - if (idx++ < start) - continue; - + idx++; result.index = result.next++; param = p->param; if (param == NULL || p->id != id) continue; + found = true; + + if (idx < start) + continue; + spa_pod_builder_init(&b, buffer, sizeof(buffer)); if (spa_pod_filter(&b, &result.param, param, filter) != 0) continue; @@ -506,7 +510,7 @@ static int impl_port_enum_params(void *object, int seq, if (++count == num) break; } - return 0; + return found ? 0 : -ENOENT; } static int update_params(struct filter *impl, struct port *port, uint32_t id, diff --git a/src/pipewire/stream.c b/src/pipewire/stream.c index 0032a1595..a827f2d08 100644 --- a/src/pipewire/stream.c +++ b/src/pipewire/stream.c @@ -498,6 +498,7 @@ static int impl_port_enum_params(void *object, int seq, struct spa_pod_builder b = { 0 }; uint32_t idx = 0, count = 0; struct param *p; + bool found = false; spa_return_val_if_fail(num != 0, -EINVAL); @@ -511,15 +512,18 @@ static int impl_port_enum_params(void *object, int seq, spa_list_for_each(p, &d->param_list, link) { struct spa_pod *param; - if (idx++ < start) - continue; - + idx++; result.index = result.next++; param = p->param; if (param == NULL || p->id != id) continue; + found = true; + + if (idx < start) + continue; + spa_pod_builder_init(&b, buffer, sizeof(buffer)); if (spa_pod_filter(&b, &result.param, param, filter) != 0) continue; @@ -529,7 +533,7 @@ static int impl_port_enum_params(void *object, int seq, if (++count == num) break; } - return 0; + return found ? 0 : -ENOENT; } static int map_data(struct stream *impl, struct spa_data *data, int prot)