diff options
Diffstat (limited to 'profiles/audio/media.c')
-rw-r--r-- | profiles/audio/media.c | 27 |
1 files changed, 11 insertions, 16 deletions
diff --git a/profiles/audio/media.c b/profiles/audio/media.c index 6947cf963..fbb350889 100644 --- a/profiles/audio/media.c +++ b/profiles/audio/media.c @@ -725,24 +725,21 @@ struct pac_select_data { void *user_data; }; -static int parse_array(DBusMessageIter *iter, struct iovec **iov) +static int parse_array(DBusMessageIter *iter, struct iovec *iov) { DBusMessageIter array; if (!iov) return 0; - if (!(*iov)) - *iov = new0(struct iovec, 1); - dbus_message_iter_recurse(iter, &array); - dbus_message_iter_get_fixed_array(&array, &(*iov)->iov_base, - (int *)&(*iov)->iov_len); + dbus_message_iter_get_fixed_array(&array, &iov->iov_base, + (int *)&iov->iov_len); return 0; } -static int parse_select_properties(DBusMessageIter *props, struct iovec **caps, - struct iovec **metadata, +static int parse_select_properties(DBusMessageIter *props, struct iovec *caps, + struct iovec *metadata, struct bt_bap_qos *qos) { const char *key; @@ -845,11 +842,6 @@ static int parse_select_properties(DBusMessageIter *props, struct iovec **caps, fail: DBG("Failed parsing %s", key); - if (*caps) { - free(*caps); - *caps = NULL; - } - return -EINVAL; } @@ -859,7 +851,7 @@ static void pac_select_cb(struct media_endpoint *endpoint, void *ret, int size, struct pac_select_data *data = user_data; DBusMessageIter *iter = ret; int err; - struct iovec *caps = NULL, *metadata = NULL; + struct iovec caps, meta; struct bt_bap_qos qos; if (!ret) { @@ -881,12 +873,15 @@ static void pac_select_cb(struct media_endpoint *endpoint, void *ret, int size, qos.cig_id = BT_ISO_QOS_CIG_UNSET; qos.cis_id = BT_ISO_QOS_CIS_UNSET; - err = parse_select_properties(iter, &caps, &metadata, &qos); + memset(&caps, 0, sizeof(caps)); + memset(&meta, 0, sizeof(meta)); + + err = parse_select_properties(iter, &caps, &meta, &qos); if (err < 0) DBG("Unable to parse properties"); done: - data->cb(data->pac, err, caps, metadata, &qos, data->user_data); + data->cb(data->pac, err, &caps, &meta, &qos, data->user_data); } static int pac_select(struct bt_bap_pac *lpac, struct bt_bap_pac *rpac, |