X-Git-Url: https://git.xinqibao.xyz/slstatus.git/blobdiff_plain/96f3a8a54eeb3b2294ed953dad8b15349f3e2703..951ea4e304cf23f8464a4b6896cfcf4035920249:/components/volume.c diff --git a/components/volume.c b/components/volume.c index ec653a2..0bfbe08 100644 --- a/components/volume.c +++ b/components/volume.c @@ -1,10 +1,14 @@ /* See LICENSE file for copyright and license details. */ -#if defined(__linux__) +#include #include -#include -#include #include #include +#if defined(__OpenBSD__) + #include +#else + #include +#endif +#include #include #include "../util.h" @@ -12,25 +16,24 @@ const char * vol_perc(const char *card) { - unsigned int i; + size_t i; int v, afd, devmask; char *vnames[] = SOUND_DEVICE_NAMES; - afd = open(card, O_RDONLY | O_NONBLOCK); - if (afd == -1) { - fprintf(stderr, "Cannot open %s", card); + if ((afd = open(card, O_RDONLY | O_NONBLOCK)) < 0) { + warn("open '%s':", card); return NULL; } - if (ioctl(afd, SOUND_MIXER_READ_DEVMASK, &devmask) == -1) { - fprintf(stderr, "Cannot get volume for %s", card); + if (ioctl(afd, (int)SOUND_MIXER_READ_DEVMASK, &devmask) < 0) { + warn("ioctl 'SOUND_MIXER_READ_DEVMASK':"); close(afd); return NULL; } for (i = 0; i < LEN(vnames); i++) { if (devmask & (1 << i) && !strcmp("vol", vnames[i])) { - if (ioctl(afd, MIXER_READ(i), &v) == -1) { - fprintf(stderr, "vol_perc: ioctl"); + if (ioctl(afd, MIXER_READ(i), &v) < 0) { + warn("ioctl 'MIXER_READ(%ld)':", i); close(afd); return NULL; } @@ -39,6 +42,5 @@ vol_perc(const char *card) close(afd); - return bprintf("%d", v & 0xff); + return bprintf("%d%%", v & 0xff); } -#endif