From 008723c62fe9686812758dfffb06d59f998f6204 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@duempel.org>
Date: Wed, 19 Feb 2014 23:57:55 +0100
Subject: ConfigGlobal: eliminate function config_get_next_param()

---
 src/Listen.cxx                 |  7 ++-----
 src/Permission.cxx             |  4 ++--
 src/config/ConfigGlobal.cxx    | 12 +++++-------
 src/config/ConfigGlobal.hxx    | 15 +++------------
 src/neighbor/Glue.cxx          |  4 ++--
 src/output/MultipleOutputs.cxx |  5 ++---
 6 files changed, 16 insertions(+), 31 deletions(-)

diff --git a/src/Listen.cxx b/src/Listen.cxx
index e8efc79ce..d48d795d1 100644
--- a/src/Listen.cxx
+++ b/src/Listen.cxx
@@ -105,7 +105,7 @@ listen_global_init(EventLoop &loop, Partition &partition, Error &error)
 {
 	int port = config_get_positive(CONF_PORT, DEFAULT_PORT);
 	const struct config_param *param =
-		config_get_next_param(CONF_BIND_TO_ADDRESS, nullptr);
+		config_get_param(CONF_BIND_TO_ADDRESS);
 
 	listen_socket = new ClientListener(loop, partition);
 
@@ -129,10 +129,7 @@ listen_global_init(EventLoop &loop, Partition &partition, Error &error)
 						   param->line);
 				return false;
 			}
-
-			param = config_get_next_param(CONF_BIND_TO_ADDRESS,
-						      param);
-		} while (param != nullptr);
+		} while ((param = param->next) != nullptr);
 	} else {
 		/* no "bind_to_address" configured, bind the
 		   configured port on all interfaces */
diff --git a/src/Permission.cxx b/src/Permission.cxx
index d2d9d4297..d6c267ab7 100644
--- a/src/Permission.cxx
+++ b/src/Permission.cxx
@@ -92,7 +92,7 @@ void initPermissions(void)
 	permission_default = PERMISSION_READ | PERMISSION_ADD |
 	    PERMISSION_CONTROL | PERMISSION_ADMIN;
 
-	param = config_get_next_param(CONF_PASSWORD, NULL);
+	param = config_get_param(CONF_PASSWORD);
 
 	if (param) {
 		permission_default = 0;
@@ -115,7 +115,7 @@ void initPermissions(void)
 
 			permission_passwords.insert(std::make_pair(std::move(password),
 								   permission));
-		} while ((param = config_get_next_param(CONF_PASSWORD, param)));
+		} while ((param = param->next) != nullptr);
 	}
 
 	param = config_get_param(CONF_DEFAULT_PERMS);
diff --git a/src/config/ConfigGlobal.cxx b/src/config/ConfigGlobal.cxx
index dd76e3ca3..9bc83398c 100644
--- a/src/config/ConfigGlobal.cxx
+++ b/src/config/ConfigGlobal.cxx
@@ -74,12 +74,10 @@ void config_global_check(void)
 			Check(p);
 }
 
-const struct config_param *
-config_get_next_param(ConfigOption option, const struct config_param * last)
+const config_param *
+config_get_param(ConfigOption option)
 {
-	config_param *param = last != nullptr
-		? last->next
-		: config_data.params[unsigned(option)];
+	config_param *param = config_data.params[unsigned(option)];
 	if (param != nullptr)
 		param->used = true;
 	return param;
@@ -88,8 +86,8 @@ config_get_next_param(ConfigOption option, const struct config_param * last)
 const config_param *
 config_find_block(ConfigOption option, const char *key, const char *value)
 {
-	const config_param *param = nullptr;
-	while ((param = config_get_next_param(option, param)) != nullptr) {
+	for (const config_param *param = config_get_param(option);
+	     param != nullptr; param = param->next) {
 		const char *value2 = param->GetBlockValue(key);
 		if (value2 == nullptr)
 			FormatFatalError("block without '%s' name in line %d",
diff --git a/src/config/ConfigGlobal.hxx b/src/config/ConfigGlobal.hxx
index 84ef7dd5f..831418d03 100644
--- a/src/config/ConfigGlobal.hxx
+++ b/src/config/ConfigGlobal.hxx
@@ -26,6 +26,7 @@
 class Error;
 class Path;
 class AllocatedPath;
+struct config_param;
 
 void config_global_init(void);
 void config_global_finish(void);
@@ -39,19 +40,9 @@ void config_global_check(void);
 bool
 ReadConfigFile(Path path, Error &error);
 
-/* don't free the returned value
-   set _last_ to nullptr to get first entry */
 gcc_pure
-const struct config_param *
-config_get_next_param(enum ConfigOption option,
-		      const struct config_param *last);
-
-gcc_pure
-static inline const struct config_param *
-config_get_param(enum ConfigOption option)
-{
-	return config_get_next_param(option, nullptr);
-}
+const config_param *
+config_get_param(enum ConfigOption option);
 
 /**
  * Find a block with a matching attribute.
diff --git a/src/neighbor/Glue.cxx b/src/neighbor/Glue.cxx
index 7e29b8410..fbf25cc8d 100644
--- a/src/neighbor/Glue.cxx
+++ b/src/neighbor/Glue.cxx
@@ -59,8 +59,8 @@ CreateNeighborExplorer(EventLoop &loop, NeighborListener &listener,
 bool
 NeighborGlue::Init(EventLoop &loop, NeighborListener &listener, Error &error)
 {
-	const config_param *param = nullptr;
-	while ((param = config_get_next_param(CONF_NEIGHBORS, param))) {
+	for (const config_param *param = config_get_param(CONF_NEIGHBORS);
+	     param != nullptr; param = param->next) {
 		NeighborExplorer *explorer =
 			CreateNeighborExplorer(loop, listener, *param, error);
 		if (explorer == nullptr) {
diff --git a/src/output/MultipleOutputs.cxx b/src/output/MultipleOutputs.cxx
index 10e3e3bd5..2791e7045 100644
--- a/src/output/MultipleOutputs.cxx
+++ b/src/output/MultipleOutputs.cxx
@@ -73,9 +73,8 @@ LoadOutput(EventLoop &event_loop, MixerListener &mixer_listener,
 void
 MultipleOutputs::Configure(EventLoop &event_loop, PlayerControl &pc)
 {
-	const config_param *param = nullptr;
-	while ((param = config_get_next_param(CONF_AUDIO_OUTPUT,
-					      param)) != nullptr) {
+	for (const config_param *param = config_get_param(CONF_AUDIO_OUTPUT);
+	     param != nullptr; param = param->next) {
 		auto output = LoadOutput(event_loop, mixer_listener,
 					 pc, *param);
 		if (FindByName(output->name) != nullptr)
-- 
cgit v1.2.3