summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorMax Kellermann <max@musicpd.org>2019-10-15 13:24:06 +0200
committerMax Kellermann <max@musicpd.org>2019-10-15 13:24:06 +0200
commita8f4d2b6fc3f7a616ee8f4e0a920a9cc6475f3bd (patch)
tree67cf05f6f26e5074910ab9368c0a8fc842943981 /src/lib
parent0eb113e7c6c5177178377051f61c3419a68f43e5 (diff)
storage/curl: move code to EscapeUriPath()
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/curl/Escape.cxx55
-rw-r--r--src/lib/curl/Escape.hxx45
-rw-r--r--src/lib/curl/meson.build1
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: [