From 301901b56c75e4e2ec65ed7598cd69b9d5fb4fe3 Mon Sep 17 00:00:00 2001 From: malc Date: Fri, 2 Oct 2009 02:37:40 +0400 Subject: oss/alsa: Do not invoke UB described in 7.15.1.1 Additional argument (whether to try poll mode) is only passed with VOICE_ENABLE command. Thanks to Markus Armbruster for noticing the potential breakage. --- audio/alsaaudio.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) (limited to 'audio/alsaaudio.c') diff --git a/audio/alsaaudio.c b/audio/alsaaudio.c index a4baebcb40..b8de3a708d 100644 --- a/audio/alsaaudio.c +++ b/audio/alsaaudio.c @@ -861,22 +861,25 @@ static int alsa_voice_ctl (snd_pcm_t *handle, const char *typ, int pause) static int alsa_ctl_out (HWVoiceOut *hw, int cmd, ...) { - va_list ap; - int poll_mode; ALSAVoiceOut *alsa = (ALSAVoiceOut *) hw; - va_start (ap, cmd); - poll_mode = va_arg (ap, int); - va_end (ap); - switch (cmd) { case VOICE_ENABLE: - ldebug ("enabling voice\n"); - if (poll_mode && alsa_poll_out (hw)) { - poll_mode = 0; + { + va_list ap; + int poll_mode; + + va_start (ap, cmd); + poll_mode = va_arg (ap, int); + va_end (ap); + + ldebug ("enabling voice\n"); + if (poll_mode && alsa_poll_out (hw)) { + poll_mode = 0; + } + hw->poll_mode = poll_mode; + return alsa_voice_ctl (alsa->handle, "playback", 0); } - hw->poll_mode = poll_mode; - return alsa_voice_ctl (alsa->handle, "playback", 0); case VOICE_DISABLE: ldebug ("disabling voice\n"); -- cgit v1.2.1