diff options
author | Max Kellermann <max@duempel.org> | 2014-11-02 14:06:05 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2014-11-02 14:06:05 +0100 |
commit | 303d67aed2da79d4ddaa3a52093ed42ae9da064d (patch) | |
tree | 060580f4c17b5d30d1e78e584df03c795ce4e1d7 /src/util | |
parent | 575fbad254a1ce67530bf2aedc9852c89c072c3f (diff) | |
parent | 6a7f6cdacd81877276563c42fdeacad3a8deface (diff) | |
download | mpd-303d67aed2da79d4ddaa3a52093ed42ae9da064d.tar.gz mpd-303d67aed2da79d4ddaa3a52093ed42ae9da064d.tar.xz mpd-303d67aed2da79d4ddaa3a52093ed42ae9da064d.zip |
Merge tag 'v0.19.2'
Diffstat (limited to 'src/util')
-rw-r--r-- | src/util/UriUtil.cxx | 17 | ||||
-rw-r--r-- | src/util/UriUtil.hxx | 11 |
2 files changed, 28 insertions, 0 deletions
diff --git a/src/util/UriUtil.cxx b/src/util/UriUtil.cxx index fdca47c00..62977e91b 100644 --- a/src/util/UriUtil.cxx +++ b/src/util/UriUtil.cxx @@ -54,6 +54,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 c2cc97a63..d478d5b92 100644 --- a/src/util/UriUtil.hxx +++ b/src/util/UriUtil.hxx @@ -42,6 +42,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: * |