From 407cfbe3a6b5a200c290bb3d471145e60ef306ac Mon Sep 17 00:00:00 2001 From: Thierry Bultel Date: Fri, 22 Jun 2018 11:11:59 +0200 Subject: zones: fixed index mismatch when multiple sound cards are declared Signed-off-by: Thierry Bultel --- plugins/alsa/alsa-api-zones.c | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) (limited to 'plugins') diff --git a/plugins/alsa/alsa-api-zones.c b/plugins/alsa/alsa-api-zones.c index cf5e995..4ae3402 100644 --- a/plugins/alsa/alsa-api-zones.c +++ b/plugins/alsa/alsa-api-zones.c @@ -130,6 +130,7 @@ OnErrorExit: PUBLIC int ApiZoneAttach(SoftMixerT *mixer, AFB_ReqT request, const char *uid, json_object * argsJ) { int index; + for (index = 0; index < mixer->max.zones; index++) { if (!mixer->zones[index]) break; } @@ -142,42 +143,48 @@ PUBLIC int ApiZoneAttach(SoftMixerT *mixer, AFB_ReqT request, const char *uid, j switch (json_object_get_type(argsJ)) { long count; - case json_type_object: - mixer->zones[index] = AttacheOneZone(mixer, uid, argsJ); - if (!mixer->zones[index]) { + case json_type_object: { + AlsaSndZoneT * zone = AttacheOneZone(mixer, uid, argsJ); + if (!zone) { AFB_ReqFailF(request, "invalid-syntax", "mixer=%s invalid zone= %s", mixer->uid, json_object_get_string(argsJ)); goto OnErrorExit; } - AlsaPcmCtlT *routeConfig = AlsaCreateRoute(mixer, mixer->zones[index], 0); + // must be set now; AlsaCreateRoute needs it ! + mixer->zones[index] = zone; + AlsaPcmCtlT *routeConfig = AlsaCreateRoute(mixer, zone, 0); if (!routeConfig) { - AFB_ApiError(mixer->api, "AttacheOneZone: Mixer=%s Hal=%s zone=%s Fail to attach PCM Route", mixer->uid, uid, mixer->zones[index]->uid); + AFB_ApiError(mixer->api, + "%s: Mixer=%s Hal=%s zone=%s Fail to attach PCM Route", + __func__, mixer->uid, uid, zone->uid); goto OnErrorExit; } - break; - + } case json_type_array: count = json_object_array_length(argsJ); if (count > (mixer->max.zones - index)) { AFB_ReqFailF(request, "too-small", "mixer=%s max zone=%d", mixer->uid, mixer->max.zones); goto OnErrorExit; - } for (int idx = 0; idx < count; idx++) { json_object *zoneJ = json_object_array_get_idx(argsJ, idx); - mixer->zones[index + idx] = AttacheOneZone(mixer, uid, zoneJ); - if (!mixer->zones[index + idx]) { + AlsaSndZoneT * zone = AttacheOneZone(mixer, uid, zoneJ); + if (!zone) { AFB_ReqFailF(request, "invalid-syntax", "mixer=%s invalid zone= %s", mixer->uid, json_object_get_string(zoneJ)); goto OnErrorExit; } - AlsaPcmCtlT *routeConfig = AlsaCreateRoute(mixer, mixer->zones[idx], 0); + mixer->zones[index + idx] = zone; + AlsaPcmCtlT *routeConfig = AlsaCreateRoute(mixer, zone, 0); if (!routeConfig) { - AFB_ApiError(mixer->api, "AttacheOneZone: Mixer=%s Hal=%s zone=%s Fail to attach PCM Route", mixer->uid, uid, mixer->zones[idx]->uid); + AFB_ApiError(mixer->api, + "%s: Mixer=%s Hal=%s zone=%s Fail to attach PCM Route", + __func__, mixer->uid, uid, zone->uid); goto OnErrorExit; } + } break; default: -- cgit 1.2.3-korg