aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaarten de Vries <maarten@de-vri.es>2013-08-25 15:51:41 +0200
committerMax Kellermann <max@duempel.org>2013-09-12 08:55:45 +0200
commit08e6d222a2dea2509baea0a19b754743374756d3 (patch)
tree428ca5c503a3bc4088052d3ed2233b4315869081
parentcf98b0e261ab40e199ff505a27510a56762c8091 (diff)
downloadmpd-08e6d222a2dea2509baea0a19b754743374756d3.tar.gz
mpd-08e6d222a2dea2509baea0a19b754743374756d3.tar.xz
mpd-08e6d222a2dea2509baea0a19b754743374756d3.zip
Listen: Allow tilde paths for socket.
-rw-r--r--NEWS2
-rw-r--r--doc/mpd.conf.55
-rw-r--r--src/ConfigGlobal.cxx6
-rw-r--r--src/ConfigGlobal.hxx8
-rw-r--r--src/Listen.cxx6
5 files changed, 23 insertions, 4 deletions
diff --git a/NEWS b/NEWS
index 06e2ab724..dc6b16472 100644
--- a/NEWS
+++ b/NEWS
@@ -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);
}