diff options
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | doc/mpd.conf.5 | 5 | ||||
-rw-r--r-- | src/ConfigGlobal.cxx | 6 | ||||
-rw-r--r-- | src/ConfigGlobal.hxx | 8 | ||||
-rw-r--r-- | src/Listen.cxx | 6 |
5 files changed, 23 insertions, 4 deletions
@@ -1,4 +1,6 @@ ver 0.18 (2012/??/??) +* configuration: + - allow tilde paths for socket * protocol: - new command "toggleoutput" * innput: diff --git a/doc/mpd.conf.5 b/doc/mpd.conf.5 index d441c0d1b..b3a46e157 100644 --- a/doc/mpd.conf.5 +++ b/doc/mpd.conf.5 @@ -77,8 +77,9 @@ You can set a port that is different from the global port setting, e.g. "localhost:6602". IPv6 addresses must be enclosed in square brackets if you want to configure a port, e.g. "[::1]:6602". -To bind to a Unix domain socket, specify an absolute path. For a -system-wide MPD, we suggest the path "\fB/var/run/mpd/socket\fP". +To bind to a Unix domain socket, specify an absolute path or a path starting +with a tilde (~). For a system-wide MPD, we suggest the path +"\fB/var/run/mpd/socket\fP". .TP .B port <port> This specifies the port that mpd listens on. The default is 6600. diff --git a/src/ConfigGlobal.cxx b/src/ConfigGlobal.cxx index 11e53fc3c..bd1440a5e 100644 --- a/src/ConfigGlobal.cxx +++ b/src/ConfigGlobal.cxx @@ -105,6 +105,12 @@ config_get_path(ConfigOption option, Error &error) if (param == nullptr) return Path::Null(); + return config_parse_path(param, error); +} + +Path +config_parse_path(const struct config_param *param, Error & error) +{ Path path = ParsePath(param->value, error); if (gcc_unlikely(path.IsNull())) error.FormatPrefix("Invalid path at line %i: ", diff --git a/src/ConfigGlobal.hxx b/src/ConfigGlobal.hxx index c49679942..76b237153 100644 --- a/src/ConfigGlobal.hxx +++ b/src/ConfigGlobal.hxx @@ -72,6 +72,14 @@ config_get_string(enum ConfigOption option, const char *default_value); Path config_get_path(enum ConfigOption option, Error &error); +/** + * Parse a configuration parameter as a path. + * If there is a tilde prefix, it is expanded. If the path could + * not be parsed, returns Path::Null() and sets the error. + */ +Path +config_parse_path(const struct config_param *param, Error & error_r); + gcc_pure unsigned config_get_unsigned(enum ConfigOption option, unsigned default_value); diff --git a/src/Listen.cxx b/src/Listen.cxx index 2813c6bfb..0dcd6fddf 100644 --- a/src/Listen.cxx +++ b/src/Listen.cxx @@ -27,6 +27,7 @@ #include "ConfigOption.hxx" #include "event/ServerSocket.hxx" #include "util/Error.hxx" +#include "fs/Path.hxx" #include <string.h> #include <assert.h> @@ -64,8 +65,9 @@ listen_add_config_param(unsigned int port, if (0 == strcmp(param->value, "any")) { return listen_socket->AddPort(port, error_r); - } else if (param->value[0] == '/') { - return listen_socket->AddPath(param->value, error_r); + } else if (param->value[0] == '/' || param->value[0] == '~') { + Path path = config_parse_path(param, error_r); + return !path.IsNull() && listen_socket->AddPath(path.c_str(), error_r); } else { return listen_socket->AddHost(param->value, port, error_r); } |