--- 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