From 4f2ac7ec2c789f290a9563f79ddbea1faeed24c9 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@duempel.org>
Date: Thu, 26 Feb 2009 19:18:16 +0100
Subject: oss: moved code from oss_open() to oss_setup()

Eliminate one label and a bunch of gotos.
---
 src/output/oss_plugin.c | 39 ++++++++++++++++++++++++++-------------
 1 file changed, 26 insertions(+), 13 deletions(-)

(limited to 'src')

diff --git a/src/output/oss_plugin.c b/src/output/oss_plugin.c
index 2e5580239..b070b9a9d 100644
--- a/src/output/oss_plugin.c
+++ b/src/output/oss_plugin.c
@@ -469,23 +469,20 @@ oss_close(struct oss_data *od)
 	od->fd = -1;
 }
 
+/**
+ * Sets up the OSS device which was opened before.
+ */
 static bool
-oss_open(struct oss_data *od)
+oss_setup(struct oss_data *od)
 {
 	int tmp;
 
-	if ((od->fd = open(od->device, O_WRONLY)) < 0) {
-		g_warning("Error opening OSS device \"%s\": %s\n", od->device,
-			  strerror(errno));
-		goto fail;
-	}
-
 	tmp = od->audio_format.channels;
 	if (oss_set_param(od, SNDCTL_DSP_CHANNELS, &tmp)) {
 		g_warning("OSS device \"%s\" does not support %u channels: %s\n",
 			  od->device, od->audio_format.channels,
 			  strerror(errno));
-		goto fail;
+		return false;
 	}
 	od->audio_format.channels = tmp;
 
@@ -494,7 +491,7 @@ oss_open(struct oss_data *od)
 		g_warning("OSS device \"%s\" does not support %u Hz audio: %s\n",
 			  od->device, od->audio_format.sample_rate,
 			  strerror(errno));
-		goto fail;
+		return false;
 	}
 	od->audio_format.sample_rate = tmp;
 
@@ -516,14 +513,30 @@ oss_open(struct oss_data *od)
 	if (oss_set_param(od, SNDCTL_DSP_SAMPLESIZE, &tmp)) {
 		g_warning("OSS device \"%s\" does not support %u bit audio: %s\n",
 			  od->device, tmp, strerror(errno));
-		goto fail;
+		return false;
 	}
 
 	return true;
+}
 
-fail:
-	oss_close(od);
-	return false;
+static bool
+oss_open(struct oss_data *od)
+{
+	bool success;
+
+	if ((od->fd = open(od->device, O_WRONLY)) < 0) {
+		g_warning("Error opening OSS device \"%s\": %s\n", od->device,
+			  strerror(errno));
+		return false;
+	}
+
+	success = oss_setup(od);
+	if (!success) {
+		oss_close(od);
+		return false;
+	}
+
+	return true;
 }
 
 static bool
-- 
cgit v1.2.3