From 8da3f8c6a7cc448747e7fe19d9623b64ca860180 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Thu, 5 Aug 2021 15:43:43 +0200 Subject: [PATCH] output/oss: oss_try_ioctl() throws on EINVAL Eliminate some duplicate code. --- src/output/plugins/OssOutputPlugin.cxx | 30 +++++++++++--------------- 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/src/output/plugins/OssOutputPlugin.cxx b/src/output/plugins/OssOutputPlugin.cxx index 43905b9f6..9228cd954 100644 --- a/src/output/plugins/OssOutputPlugin.cxx +++ b/src/output/plugins/OssOutputPlugin.cxx @@ -255,14 +255,16 @@ oss_try_ioctl_r(FileDescriptor fd, unsigned long request, int *value_r, * Invoke an ioctl on the OSS file descriptor. * * Throws on error. - * - * @return true success, false if the parameter is not supported */ -static bool +static void oss_try_ioctl(FileDescriptor fd, unsigned long request, int value, const char *msg) { - return oss_try_ioctl_r(fd, request, &value, msg); + assert(fd.IsDefined()); + assert(msg != nullptr); + + if (ioctl(fd.Get(), request, &value) < 0) + throw MakeErrno(msg); } /** @@ -527,20 +529,12 @@ try { if (!fd.Open(device, O_WRONLY)) throw FormatErrno("Error opening OSS device \"%s\"", device); - const char *const msg1 = "Failed to set channel count"; - if (!oss_try_ioctl(fd, SNDCTL_DSP_CHANNELS, - audio_format.channels, msg1)) - throw std::runtime_error(msg1); - - const char *const msg2 = "Failed to set sample rate"; - if (!oss_try_ioctl(fd, SNDCTL_DSP_SPEED, - audio_format.sample_rate, msg2)) - throw std::runtime_error(msg2); - - const char *const msg3 = "Failed to set sample format"; - if (!oss_try_ioctl(fd, SNDCTL_DSP_SAMPLESIZE, - oss_format, msg3)) - throw std::runtime_error(msg3); + oss_try_ioctl(fd, SNDCTL_DSP_CHANNELS, audio_format.channels, + "Failed to set channel count"); + oss_try_ioctl(fd, SNDCTL_DSP_SPEED, audio_format.sample_rate, + "Failed to set sample rate"); + oss_try_ioctl(fd, SNDCTL_DSP_SAMPLESIZE, oss_format, + "Failed to set sample format"); } catch (...) { DoClose(); throw;