From 02581f1aab1af52f997d50f9bd5648366f582b17 Mon Sep 17 00:00:00 2001 From: ejurgensen Date: Thu, 19 Feb 2015 10:30:34 +0100 Subject: [PATCH] Align OSS with ALSA so that forked-daapd will start even when there is no sound device --- src/laudio_oss4.c | 40 +++++++++------------------------------- 1 file changed, 9 insertions(+), 31 deletions(-) diff --git a/src/laudio_oss4.c b/src/laudio_oss4.c index 93557ad8..1c21249b 100644 --- a/src/laudio_oss4.c +++ b/src/laudio_oss4.c @@ -280,6 +280,7 @@ int laudio_open(void) { audio_buf_info bi; + oss_sysinfo si; int scratch; int ret; @@ -291,6 +292,14 @@ laudio_open(void) return -1; } + ret = ioctl(oss_fd, SNDCTL_SYSINFO, &si); + if ((ret < 0) || (si.versionnum < 0x040000)) + { + DPRINTF(E_LOG, L_LAUDIO, "Your OSS version (%s) is unavailable or too old; version 4.0.0+ is required\n", si.version); + + goto out_fail; + } + scratch = 0; ret = ioctl(oss_fd, SNDCTL_DSP_SETTRIGGER, &scratch); if (ret < 0) @@ -390,41 +399,10 @@ laudio_close(void) int laudio_init(laudio_status_cb cb) { - oss_sysinfo si; - int ret; - status_cb = cb; - pcm_status = LAUDIO_CLOSED; card_name = cfg_getstr(cfg_getsec(cfg, "audio"), "card"); - oss_fd = open(card_name, O_RDWR); - if (oss_fd < 0) - { - DPRINTF(E_FATAL, L_LAUDIO, "Could not open sound device: %s\n", strerror(errno)); - - return -1; - } - - ret = ioctl(oss_fd, SNDCTL_SYSINFO, &si); - - close(oss_fd); - oss_fd = -1; - - if (ret < 0) - { - DPRINTF(E_FATAL, L_LAUDIO, "Could not check OSS version: %s\n", strerror(errno)); - - return -1; - } - - if (si.versionnum < 0x040000) - { - DPRINTF(E_FATAL, L_LAUDIO, "Your OSS version (%s) is too old; version 4.0.0+ is required\n", si.version); - - return -1; - } - return 0; }