summaryrefslogtreecommitdiffstats
path: root/audio
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2015-01-20 14:32:01 +0100
committerwm4 <wm4@nowhere>2015-01-20 14:32:01 +0100
commit1e6b4d31aa1b57bc03e1d0d2c022fb6d1028f9fa (patch)
treed5e81b3b6a37c34d69407f127b2faf8aba3b7b0f /audio
parentd44b4ccba1bfbcfb04316016b8f61441b3ef451e (diff)
downloadmpv-1e6b4d31aa1b57bc03e1d0d2c022fb6d1028f9fa.tar.bz2
mpv-1e6b4d31aa1b57bc03e1d0d2c022fb6d1028f9fa.tar.xz
ao_coreaudio: reset possibly random errno value
In general, you need to check errno when using strtol(), but as far as I know, strtol() won't reset errno on success. This has to be done manually. The code could have failed sporadically if strtol() succeeded, and errno was already set to one of the checked values. (This strtol() still isn't fully error checked, but I don't know if it's intentional, e.g. for parsing a numeric prefix only.)
Diffstat (limited to 'audio')
-rw-r--r--audio/out/ao_coreaudio_utils.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/audio/out/ao_coreaudio_utils.c b/audio/out/ao_coreaudio_utils.c
index 8d85842dfd..fe8354939a 100644
--- a/audio/out/ao_coreaudio_utils.c
+++ b/audio/out/ao_coreaudio_utils.c
@@ -65,7 +65,8 @@ coreaudio_error:
OSStatus ca_select_device(struct ao *ao, char* name, AudioDeviceID *device)
{
OSStatus err = noErr;
- int selection = name ? strtol(name, (char **)NULL, 10) : -1;
+ errno = 0;
+ int selection = name && name[0] ? strtol(name, (char **)NULL, 10) : -1;
if (errno == EINVAL || errno == ERANGE) {
selection = -1;
MP_WARN(ao, "device identifier '%s' is invalid\n", name);