libidav/session.c

changeset 497
411bd1098175
parent 496
5979ea04175e
child 505
481802342fdf
--- a/libidav/session.c	Tue Nov 13 23:33:59 2018 +0100
+++ b/libidav/session.c	Fri Nov 16 12:46:31 2018 +0100
@@ -54,16 +54,9 @@
     sn->errorstr = NULL;
     sn->error = DAV_OK;
     sn->flags = 0;
-    if(url.ptr[url.length - 1] == '/') {
-        sstr_t url = sstrdup_a(sn->mp->allocator, sstr(base_url));
-        sn->base_url = url.ptr;
-    } else {
-        char *url_str = ucx_mempool_malloc(sn->mp, url.length + 2);
-        memcpy(url_str, base_url, url.length);
-        url_str[url.length]     = '/';
-        url_str[url.length + 1] = '\0';
-        sn->base_url = url_str;
-    }
+    
+    dav_session_set_baseurl(sn, base_url);
+    
     sn->handle = curl_easy_init();
     curl_easy_setopt(sn->handle, CURLOPT_FOLLOWLOCATION, 1L);
     
@@ -134,6 +127,24 @@
     }
 }
 
+void dav_session_set_baseurl(DavSession *sn, char *base_url) {
+    if(sn->base_url) {
+        ucx_mempool_free(sn->mp, sn->base_url);
+    }
+    
+    sstr_t url = sstr(base_url);
+    if(url.ptr[url.length - 1] == '/') {
+        sstr_t url = sstrdup_a(sn->mp->allocator, sstr(base_url));
+        sn->base_url = url.ptr;
+    } else {
+        char *url_str = ucx_mempool_malloc(sn->mp, url.length + 2);
+        memcpy(url_str, base_url, url.length);
+        url_str[url.length]     = '/';
+        url_str[url.length + 1] = '\0';
+        sn->base_url = url_str;
+    }
+}
+
 void dav_session_enable_encryption(DavSession *sn, DavKey *key, int flags) {
     sn->key = key;
     // TODO: review sanity

mercurial