aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2014-11-01 12:45:47 +0100
committerMax Kellermann <max@duempel.org>2014-11-02 11:53:31 +0100
commit674091424e715fddd8fbfe8146f351da5bf84974 (patch)
treebdbcf6f8d7276fa278baf1750e27992f679a2474 /src
parent6ad336743d861a03df3079058fdc18eee07a3014 (diff)
downloadmpd-674091424e715fddd8fbfe8146f351da5bf84974.tar.gz
mpd-674091424e715fddd8fbfe8146f351da5bf84974.tar.xz
mpd-674091424e715fddd8fbfe8146f351da5bf84974.zip
util/UriUtil: add uri_get_suffix() overload that ignores query string
Diffstat (limited to 'src')
-rw-r--r--src/util/UriUtil.cxx17
-rw-r--r--src/util/UriUtil.hxx11
2 files changed, 28 insertions, 0 deletions
diff --git a/src/util/UriUtil.cxx b/src/util/UriUtil.cxx
index 2609db2cf..1783fbca5 100644
--- a/src/util/UriUtil.cxx
+++ b/src/util/UriUtil.cxx
@@ -44,6 +44,23 @@ uri_get_suffix(const char *uri)
return suffix;
}
+const char *
+uri_get_suffix(const char *uri, UriSuffixBuffer &buffer)
+{
+ const char *suffix = uri_get_suffix(uri);
+ if (suffix == nullptr)
+ return nullptr;
+
+ const char *q = strchr(suffix, '?');
+ if (q != nullptr && size_t(q - suffix) < sizeof(buffer.data)) {
+ memcpy(buffer.data, suffix, q - suffix);
+ buffer.data[q - suffix] = 0;
+ suffix = buffer.data;
+ }
+
+ return suffix;
+}
+
static const char *
verify_uri_segment(const char *p)
{
diff --git a/src/util/UriUtil.hxx b/src/util/UriUtil.hxx
index 78d0a6bff..1c6bce3ff 100644
--- a/src/util/UriUtil.hxx
+++ b/src/util/UriUtil.hxx
@@ -35,6 +35,17 @@ gcc_pure
const char *
uri_get_suffix(const char *uri);
+struct UriSuffixBuffer {
+ char data[8];
+};
+
+/**
+ * Returns the file name suffix, ignoring the query string.
+ */
+gcc_pure
+const char *
+uri_get_suffix(const char *uri, UriSuffixBuffer &buffer);
+
/**
* Returns true if this is a safe "local" URI:
*