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; }