summaryrefslogtreecommitdiff
path: root/src/print_volume.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/print_volume.c')
-rw-r--r--src/print_volume.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/print_volume.c b/src/print_volume.c
index 58cba2a..51e84f3 100644
--- a/src/print_volume.c
+++ b/src/print_volume.c
@@ -4,6 +4,7 @@
#include <stdlib.h>
#include <stdio.h>
#include <err.h>
+#include <ctype.h>
#include <yajl/yajl_gen.h>
#include <yajl/yajl_version.h>
@@ -67,9 +68,12 @@ void print_volume(yajl_gen json_gen, char *buffer, const char *fmt, const char *
* index of the PulseAudio sink then force PulseAudio, optionally
* overriding the default sink */
if (!strncasecmp(device, "pulse", strlen("pulse"))) {
- uint32_t sink_idx = device[5] == ':' ? (uint32_t)atoi(device + 6)
- : DEFAULT_SINK_INDEX;
- int cvolume = pulse_initialize() ? volume_pulseaudio(sink_idx) : 0;
+ uint32_t sink_idx = device[strlen("pulse")] == ':' ? (uint32_t)atoi(device + strlen("pulse:")) : DEFAULT_SINK_INDEX;
+ const char *sink_name = device[strlen("pulse")] == ':' &&
+ !isdigit(device[strlen("pulse:")])
+ ? device + strlen("pulse:")
+ : NULL;
+ int cvolume = pulse_initialize() ? volume_pulseaudio(sink_idx, sink_name) : 0;
int ivolume = DECOMPOSE_VOLUME(cvolume);
bool muted = DECOMPOSE_MUTED(cvolume);
if (muted) {
@@ -85,7 +89,7 @@ void print_volume(yajl_gen json_gen, char *buffer, const char *fmt, const char *
goto out;
} else if (!strcasecmp(device, "default") && pulse_initialize()) {
/* no device specified or "default" set */
- int cvolume = volume_pulseaudio(DEFAULT_SINK_INDEX);
+ int cvolume = volume_pulseaudio(DEFAULT_SINK_INDEX, NULL);
int ivolume = DECOMPOSE_VOLUME(cvolume);
bool muted = DECOMPOSE_MUTED(cvolume);
if (ivolume >= 0) {