aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2009-06-19 09:02:14 +0200
committerMax Kellermann <max@duempel.org>2009-06-25 08:40:02 +0200
commit5d583c9b2d21cf449c4b65f2306adf69d6739437 (patch)
treed3c650260c3ebf87a368915a8c2d091a711aecfa
parent093e900d4453a9f28d442c1c24a9ba59c36b349c (diff)
downloadmpd-5d583c9b2d21cf449c4b65f2306adf69d6739437.tar.gz
mpd-5d583c9b2d21cf449c4b65f2306adf69d6739437.tar.xz
mpd-5d583c9b2d21cf449c4b65f2306adf69d6739437.zip
conf: make get_bool() return a bool
Instead of returning an artificial three-state integer, return a "success" value and put the boolean value into a "bool" pointer. That's a little bit more overhead, but an API which looks more natural.
-rw-r--r--src/conf.c37
-rw-r--r--src/conf.h3
2 files changed, 18 insertions, 22 deletions
diff --git a/src/conf.c b/src/conf.c
index df6a8c546..0c50d4c8a 100644
--- a/src/conf.c
+++ b/src/conf.c
@@ -106,18 +106,23 @@ string_array_contains(const char *const* array, const char *value)
return false;
}
-static int get_bool(const char *value)
+static bool
+get_bool(const char *value, bool *value_r)
{
static const char *t[] = { "yes", "true", "1", NULL };
static const char *f[] = { "no", "false", "0", NULL };
- if (string_array_contains(t, value))
+ if (string_array_contains(t, value)) {
+ *value_r = true;
return true;
+ }
- if (string_array_contains(f, value))
- return false;
+ if (string_array_contains(f, value)) {
+ *value_r = false;
+ return true;
+ }
- return CONF_BOOL_INVALID;
+ return false;
}
struct config_param *
@@ -423,21 +428,18 @@ config_get_block_param(const struct config_param * param, const char *name)
bool config_get_bool(const char *name, bool default_value)
{
const struct config_param *param = config_get_param(name);
- int value;
+ bool success, value;
if (param == NULL)
return default_value;
- value = get_bool(param->value);
- if (value == CONF_BOOL_INVALID)
+ success = get_bool(param->value, &value);
+ if (!success)
g_error("%s is not a boolean value (yes, true, 1) or "
"(no, false, 0) on line %i\n",
name, param->line);
- if (value == CONF_BOOL_UNSET)
- return default_value;
-
- return !!value;
+ return value;
}
const char *
@@ -478,19 +480,16 @@ config_get_block_bool(const struct config_param *param, const char *name,
bool default_value)
{
struct block_param *bp = config_get_block_param(param, name);
- int value;
+ bool success, value;
if (bp == NULL)
return default_value;
- value = get_bool(bp->value);
- if (value == CONF_BOOL_INVALID)
+ success = get_bool(param->value, &value);
+ if (!success)
g_error("%s is not a boolean value (yes, true, 1) or "
"(no, false, 0) on line %i\n",
name, bp->line);
- if (value == CONF_BOOL_UNSET)
- return default_value;
-
- return !!value;
+ return value;
}
diff --git a/src/conf.h b/src/conf.h
index 381159122..017a8c310 100644
--- a/src/conf.h
+++ b/src/conf.h
@@ -68,9 +68,6 @@
#define CONF_INPUT "input"
#define CONF_GAPLESS_MP3_PLAYBACK "gapless_mp3_playback"
-#define CONF_BOOL_UNSET -1
-#define CONF_BOOL_INVALID -2
-
#define DEFAULT_PLAYLIST_MAX_LENGTH (1024*16)
#define DEFAULT_PLAYLIST_SAVE_ABSOLUTE_PATHS false