From 8da3f8c6a7cc448747e7fe19d9623b64ca860180 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@musicpd.org>
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;
-- 
2.24.1