add util_url_encode function, make sn parameter optional for util_url_decode

Sun, 20 Apr 2025 13:09:03 +0200

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Sun, 20 Apr 2025 13:09:03 +0200
changeset 861
879d4bf93ef4
parent 860
f6a274beeb95
child 862
e58dd7fb1a97

add util_url_encode function, make sn parameter optional for util_url_decode

libidav/utils.c file | annotate | diff | comparison | revisions
libidav/utils.h file | annotate | diff | comparison | revisions
--- a/libidav/utils.c	Mon Apr 14 22:53:43 2025 +0200
+++ b/libidav/utils.c	Sun Apr 20 13:09:03 2025 +0200
@@ -348,10 +348,49 @@
     return path;
 }
 
+char* util_url_encode(DavSession *sn, const char *url) {
+    CURL *handle = sn ? sn->handle : NULL;
+#if LIBCURL_VERSION_NUM < 0x075200
+    int cleanup_handle = 0;
+    if(!handle) {
+        handle = curl_easy_init();
+        cleanup_handle = 1;
+    }
+#endif
+    
+    char *esc = curl_easy_escape(handle, url, strlen(url));
+    char *ret = esc ? strdup(esc) : NULL;
+    curl_free(esc);
+
+#if LIBCURL_VERSION_NUM < 0x075200
+    if(cleanup_handle) {
+        curl_easy_cleanup(handle);
+    }
+#endif
+    
+    return ret;
+}
+
 char* util_url_decode(DavSession *sn, const char *url) {
-    char *unesc = curl_easy_unescape(sn->handle, url, strlen(url), NULL);
-    char *ret = strdup(unesc);
+    CURL *handle = sn ? sn->handle : NULL;
+#if LIBCURL_VERSION_NUM < 0x075200
+    int cleanup_handle = 0;
+    if(!handle) {
+        handle = curl_easy_init();
+        cleanup_handle = 1;
+    }
+#endif
+    
+    char *unesc = curl_easy_unescape(handle, url, strlen(url), NULL);
+    char *ret = unesc ? strdup(unesc) : NULL;
     curl_free(unesc);
+
+#if LIBCURL_VERSION_NUM < 0x075200
+    if(cleanup_handle) {
+        curl_easy_cleanup(handle);
+    }
+#endif
+    
     return ret;
 }
 
--- a/libidav/utils.h	Mon Apr 14 22:53:43 2025 +0200
+++ b/libidav/utils.h	Sun Apr 20 13:09:03 2025 +0200
@@ -76,6 +76,7 @@
 cxstring util_url_base_s(cxstring url);
 const char* util_url_path(const char *url);
 cxstring util_url_path_s(cxstring url);
+char* util_url_encode(DavSession *sn, const char *url);
 char* util_url_decode(DavSession *sn, const char *url);
 const char* util_resource_name(const char *url);
 const char* util_resource_name_c(const char *url, char pathseparator);

mercurial