diff options
Diffstat (limited to 'plugins/alsa/alsa-core-ctl.c')
-rw-r--r-- | plugins/alsa/alsa-core-ctl.c | 99 |
1 files changed, 60 insertions, 39 deletions
diff --git a/plugins/alsa/alsa-core-ctl.c b/plugins/alsa/alsa-core-ctl.c index dcfd860..020c13c 100644 --- a/plugins/alsa/alsa-core-ctl.c +++ b/plugins/alsa/alsa-core-ctl.c @@ -42,7 +42,7 @@ PUBLIC snd_ctl_elem_id_t *AlsaCtlGetNumidElemId(SoftMixerT *mixer, AlsaSndCtlT * int error; int index; snd_ctl_elem_list_t *ctlList = NULL; - snd_ctl_elem_id_t *elemId; + snd_ctl_elem_id_t *elemId = NULL; snd_ctl_elem_list_alloca(&ctlList); @@ -50,14 +50,14 @@ PUBLIC snd_ctl_elem_id_t *AlsaCtlGetNumidElemId(SoftMixerT *mixer, AlsaSndCtlT * AFB_ApiError(mixer->api, "%s [%s] fail retrieve controls", __func__, ALSA_CTL_UID(sndcard->ctl, string)); - goto OnErrorExit; + goto fail; } if ((error = snd_ctl_elem_list_alloc_space(ctlList, snd_ctl_elem_list_get_count(ctlList))) < 0) { AFB_ApiError(mixer->api, "%s [%s] fail retrieve count", __func__, ALSA_CTL_UID(sndcard->ctl, string)); - goto OnErrorExit; + goto fail; } // Fulup: do not understand why snd_ctl_elem_list should be call twice to get a valid ctlCount @@ -65,7 +65,7 @@ PUBLIC snd_ctl_elem_id_t *AlsaCtlGetNumidElemId(SoftMixerT *mixer, AlsaSndCtlT * AFB_ApiError(mixer->api, "%s [%s] fail retrieve controls", __func__, ALSA_CTL_UID(sndcard->ctl, string)); - goto OnErrorExit; + goto fail_space; } // loop on control to find the right one @@ -83,23 +83,25 @@ PUBLIC snd_ctl_elem_id_t *AlsaCtlGetNumidElemId(SoftMixerT *mixer, AlsaSndCtlT * AFB_ApiNotice(mixer->api, "%s [%s] fail get numid=%i count", __func__, ALSA_CTL_UID(sndcard->ctl, string), numid); - goto OnErrorExit; + goto fail_space; } - // clear ctl list and return elemid - snd_ctl_elem_list_clear(ctlList); - return elemId; + snd_ctl_elem_list_free_space(ctlList); + return elemId; -OnErrorExit: - if (ctlList) snd_ctl_elem_list_clear(ctlList); +fail_space: + snd_ctl_elem_list_free_space(ctlList); +fail: return NULL; + + } PUBLIC snd_ctl_elem_id_t *AlsaCtlGetNameElemId(SoftMixerT *mixer, AlsaSndCtlT *sndcard, const char *ctlName) { int error; int index; snd_ctl_elem_list_t *ctlList = NULL; - snd_ctl_elem_id_t *elemId; + snd_ctl_elem_id_t *elemId = NULL; snd_ctl_elem_list_alloca(&ctlList); @@ -107,14 +109,14 @@ PUBLIC snd_ctl_elem_id_t *AlsaCtlGetNameElemId(SoftMixerT *mixer, AlsaSndCtlT *s AFB_ApiError(mixer->api, "%s cardid='%s' cardname='%s' fail retrieve controls", __func__, sndcard->cid.cardid, sndcard->cid.name); - goto OnErrorExit; + goto fail; } if ((error = snd_ctl_elem_list_alloc_space(ctlList, snd_ctl_elem_list_get_count(ctlList))) < 0) { AFB_ApiError(mixer->api, "%s cardid='%s' cardname='%s' fail retrieve count", __func__, sndcard->cid.cardid, sndcard->cid.name); - goto OnErrorExit; + goto fail; } // Fulup: do not understand why snd_ctl_elem_list should be call twice to get a valid ctlCount @@ -122,7 +124,7 @@ PUBLIC snd_ctl_elem_id_t *AlsaCtlGetNameElemId(SoftMixerT *mixer, AlsaSndCtlT *s AFB_ApiError(mixer->api, "%s cardid='%s' cardname='%s' fail retrieve controls", __func__, sndcard->cid.cardid, sndcard->cid.name); - goto OnErrorExit; + goto fail_space; } // loop on control to find the right one @@ -138,16 +140,17 @@ PUBLIC snd_ctl_elem_id_t *AlsaCtlGetNameElemId(SoftMixerT *mixer, AlsaSndCtlT *s if (index == ctlCount) { AFB_ApiNotice(mixer->api, "AlsaCtlGetNameElemId cardid='%s' cardname='%s' ctl not found name=%s", sndcard->cid.cardid, sndcard->cid.name, ctlName); - goto OnErrorExit; + goto fail_space; } - // clear ctl list and return elemid - snd_ctl_elem_list_clear(ctlList); - return elemId; + snd_ctl_elem_list_free_space(ctlList); + return elemId; + +fail_space: + snd_ctl_elem_list_free_space(ctlList); +fail: + return NULL; -OnErrorExit: - if (ctlList) snd_ctl_elem_list_clear(ctlList); - return NULL; } @@ -317,7 +320,7 @@ PUBLIC int AlsaCtlNumidSetLong(SoftMixerT *mixer, AlsaSndCtlT *sndcard, int numi AFB_ApiError(mixer->api, "%s cardid=%s cardname=%s fail to find numid=%d", __func__, sndcard->cid.cardid, sndcard->cid.longname, numid); - goto OnErrorExit; + goto fail; } int error = CtlElemIdSetLong(mixer, sndcard, elemId, value); @@ -325,11 +328,15 @@ PUBLIC int AlsaCtlNumidSetLong(SoftMixerT *mixer, AlsaSndCtlT *sndcard, int numi AFB_ApiError(mixer->api, "%s cardid=%s cardname=%s fail to set numid=%d value=%ld", __func__, sndcard->cid.cardid, sndcard->cid.longname, numid, value); - goto OnErrorExit; + goto fail_elemId; } + free(elemId); return 0; -OnErrorExit: + +fail_elemId: + free(elemId); +fail: return -1; } @@ -340,7 +347,7 @@ PUBLIC int AlsaCtlNumidGetLong(SoftMixerT *mixer, AlsaSndCtlT *sndcard, int numi AFB_ApiError(mixer->api, "%s cardid=%s cardname=%s fail to find numid=%d", __func__, sndcard->cid.cardid, sndcard->cid.longname, numid); - goto OnErrorExit; + goto fail; } int error = CtlElemIdGetLong(mixer, sndcard, elemId, value); @@ -348,12 +355,16 @@ PUBLIC int AlsaCtlNumidGetLong(SoftMixerT *mixer, AlsaSndCtlT *sndcard, int numi AFB_ApiError(mixer->api, "%s cardid=%s cardname=%s fail to get numid=%d value", __func__, sndcard->cid.cardid, sndcard->cid.longname, numid); - goto OnErrorExit; + goto fail_elemId; } + free(elemId); return 0; -OnErrorExit: - return -1; + +fail_elemId: + free(elemId); +fail: + return -1; } PUBLIC int AlsaCtlNameSetLong(SoftMixerT *mixer, AlsaSndCtlT *sndcard, const char *ctlName, long value) { @@ -363,7 +374,7 @@ PUBLIC int AlsaCtlNameSetLong(SoftMixerT *mixer, AlsaSndCtlT *sndcard, const cha AFB_ApiError(mixer->api, "%s cardid=%s cardname=%s fail to find crlName=%s", __func__, sndcard->cid.cardid, sndcard->cid.longname, ctlName); - goto OnErrorExit; + goto fail; } int error = CtlElemIdSetLong(mixer, sndcard, elemId, value); @@ -371,11 +382,15 @@ PUBLIC int AlsaCtlNameSetLong(SoftMixerT *mixer, AlsaSndCtlT *sndcard, const cha AFB_ApiError(mixer->api, "%s cardid=%s cardname=%s fail to set crlName=%s value=%ld", __func__, sndcard->cid.cardid, sndcard->cid.longname, ctlName, value); - goto OnErrorExit; + goto fail_elemId; } + free(elemId); return 0; -OnErrorExit: + +fail_elemId: + free(elemId); +fail: return -1; } @@ -386,7 +401,7 @@ PUBLIC int AlsaCtlNameGetLong(SoftMixerT *mixer, AlsaSndCtlT *sndcard, const cha AFB_ApiError(mixer->api, "%s cardid=%s cardname=%s fail to find crlName=%s", __func__, sndcard->cid.cardid, sndcard->cid.longname, ctlName); - goto OnErrorExit; + goto fail; } int error = CtlElemIdGetLong(mixer, sndcard, elemId, value); @@ -394,11 +409,15 @@ PUBLIC int AlsaCtlNameGetLong(SoftMixerT *mixer, AlsaSndCtlT *sndcard, const cha AFB_ApiError(mixer->api, "%s cardid=%s cardname=%s fail to get crlName=%s value", __func__, sndcard->cid.cardid, sndcard->cid.longname, ctlName); - goto OnErrorExit; + goto fail_elemId; } + free(elemId); return 0; -OnErrorExit: + +fail_elemId: + free(elemId); +fail: return -1; } @@ -462,7 +481,7 @@ PUBLIC int AlsaCtlCreateControl(SoftMixerT *mixer, AlsaSndCtlT *sndcard, char* c AFB_ApiError(mixer->api, "%s cardid=%s cardname=%s fail to create ctlName=%s", __func__, sndcard->cid.cardid, sndcard->cid.longname, ctlName); - goto OnErrorExit; + goto fail; } elemId = AlsaCtlGetNumidElemId(mixer, sndcard, numid); @@ -473,15 +492,17 @@ PUBLIC int AlsaCtlCreateControl(SoftMixerT *mixer, AlsaSndCtlT *sndcard, char* c AFB_ApiError(mixer->api, "%s cardid=%s cardname=%s fail to set ctlName=%s Numid=%d", __func__, sndcard->cid.cardid, sndcard->cid.longname, ctlName, numid); - goto OnErrorExit; + goto fail; } AFB_ApiNotice(mixer->api, "%s cardid=%s cardname=%s ctl create name=%s numid=%d value=%ld", - __func__, sndcard->cid.cardid, sndcard->cid.longname, ctlName, numid, value); + + __func__, sndcard->cid.cardid, sndcard->cid.longname, ctlName, numid, value); +fail: + free(elemId); return numid; -OnErrorExit: - return -1; + } STATIC int CtlSubscribeEventCB(sd_event_source* src, int fd, uint32_t revents, void* userData) { |