tmix: try to open only once mixer (TinyALSA interface) + style fixes - spoon - dwm status utility (2f30 fork) (HTM) git clone git://src.adamsgaard.dk/spoon (DIR) Log (DIR) Files (DIR) Refs (DIR) LICENSE --- (DIR) commit 52af17850b3f3cc9b0a6b837acd3f6be2411beeb (DIR) parent 45e33c28830e3caf4850d7629db438adc1f28f7a (HTM) Author: Svyatoslav Mishyn <juef@openmailbox.org> Date: Tue, 24 Oct 2017 17:34:29 +0300 mix: try to open only once mixer (TinyALSA interface) + style fixes Diffstat: M mix.c | 35 +++++++++++++------------------ 1 file changed, 15 insertions(+), 20 deletions(-) --- (DIR) diff --git a/mix.c b/mix.c t@@ -172,44 +172,39 @@ out: int mixread(void *arg, char *buf, size_t len) { - struct mixer *mixer; + static struct mixer *mixer; struct mixer_ctl *ctl; - int vol, max; - int rc = 0; - (void)arg; + int cur, max; - if ((mixer = mixer_open(0)) == NULL) { - fprintf(stderr, "mixer_open() failed\n"); + if (mixer == NULL && (mixer = mixer_open(0)) == NULL) { + warnx("mixer_open() failed"); return -1; } if ((ctl = mixer_get_ctl_by_name(mixer, "Master Playback Switch")) == NULL) { - fprintf(stderr, "mixer_get_ctl_by_name() failed\n"); - rc = -1; - goto exit; + warnx("mixer_get_ctl_by_name() failed"); + goto out; } if (!mixer_ctl_get_value(ctl, 0)) { snprintf(buf, len, "mute"); - goto exit; + return 0; } if ((ctl = mixer_get_ctl_by_name(mixer, "Master Playback Volume")) == NULL) { - fprintf(stderr, "mixer_get_ctl_by_name() failed\n"); - rc = -1; - goto exit; - } - if (!(vol = mixer_ctl_get_value(ctl, 0))) { - snprintf(buf, len, "0%%"); - goto exit; + warnx("mixer_get_ctl_by_name() failed"); + goto out; } + cur = mixer_ctl_get_value(ctl, 0); max = mixer_ctl_get_range_max(ctl); - snprintf(buf, len, "%d%%", vol * 100 / max); + snprintf(buf, len, "%d%%", cur * 100 / max); + return 0; -exit: +out: mixer_close(mixer); - return rc; + mixer = NULL; + return -1; } #endif