diff options
author | Max Kellermann <max@musicpd.org> | 2019-10-15 13:24:06 +0200 |
---|---|---|
committer | Max Kellermann <max@musicpd.org> | 2019-10-15 13:24:06 +0200 |
commit | a8f4d2b6fc3f7a616ee8f4e0a920a9cc6475f3bd (patch) | |
tree | 67cf05f6f26e5074910ab9368c0a8fc842943981 /src/lib | |
parent | 0eb113e7c6c5177178377051f61c3419a68f43e5 (diff) |
storage/curl: move code to EscapeUriPath()
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/curl/Escape.cxx | 55 | ||||
-rw-r--r-- | src/lib/curl/Escape.hxx | 45 | ||||
-rw-r--r-- | src/lib/curl/meson.build | 1 |
3 files changed, 101 insertions, 0 deletions
diff --git a/src/lib/curl/Escape.cxx b/src/lib/curl/Escape.cxx new file mode 100644 index 000000000..765de3b94 --- /dev/null +++ b/src/lib/curl/Escape.cxx @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2018 Max Kellermann <max.kellermann@gmail.com> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "Escape.hxx" +#include "Easy.hxx" +#include "String.hxx" +#include "util/IterableSplitString.hxx" + +std::string +CurlEscapeUriPath(CURL *curl, StringView src) noexcept +{ + std::string dest; + + for (const auto i : IterableSplitString(src, '/')) { + CurlString escaped(curl_easy_escape(curl, i.data, i.size)); + if (!dest.empty()) + dest.push_back('/'); + dest += escaped.c_str(); + } + + return dest; +} + +std::string +CurlEscapeUriPath(StringView src) noexcept +{ + CurlEasy easy; + return CurlEscapeUriPath(easy.Get(), src); +} diff --git a/src/lib/curl/Escape.hxx b/src/lib/curl/Escape.hxx new file mode 100644 index 000000000..e09ed8fed --- /dev/null +++ b/src/lib/curl/Escape.hxx @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2018 Max Kellermann <max.kellermann@gmail.com> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef CURL_ESCAPE_HXX +#define CURL_ESCAPE_HXX + +#include <curl/curl.h> + +#include <string> + +struct StringView; + +std::string +CurlEscapeUriPath(CURL *curl, StringView src) noexcept; + +std::string +CurlEscapeUriPath(StringView src) noexcept; + +#endif diff --git a/src/lib/curl/meson.build b/src/lib/curl/meson.build index f66663a01..4d9f534e9 100644 --- a/src/lib/curl/meson.build +++ b/src/lib/curl/meson.build @@ -11,6 +11,7 @@ curl = static_library( 'Init.cxx', 'Global.cxx', 'Request.cxx', + 'Escape.cxx', 'Form.cxx', include_directories: inc, dependencies: [ |