729 curl_easy_setopt(sn->handle, CURLOPT_URL, url); |
729 curl_easy_setopt(sn->handle, CURLOPT_URL, url); |
730 free(url); |
730 free(url); |
731 } |
731 } |
732 |
732 |
733 char* util_path_to_url(DavSession *sn, const char *path) { |
733 char* util_path_to_url(DavSession *sn, const char *path) { |
|
734 size_t pathlen = path ? strlen(path) : 0; |
|
735 if(pathlen == 0) { |
|
736 return strdup(sn->base_url); |
|
737 } |
|
738 |
734 CxBuffer url; |
739 CxBuffer url; |
735 cxBufferInit(&url, NULL, 256, cxDefaultAllocator, CX_BUFFER_FREE_CONTENTS|CX_BUFFER_AUTO_EXTEND); |
740 cxBufferInit(&url, NULL, 256, cxDefaultAllocator, CX_BUFFER_FREE_CONTENTS|CX_BUFFER_AUTO_EXTEND); |
736 |
741 |
737 // add base url |
742 // add base url |
738 cxBufferWrite(sn->base_url, 1, strlen(sn->base_url), &url); |
743 cxBufferWrite(sn->base_url, 1, strlen(sn->base_url), &url); |
739 // remove trailing slash |
744 // remove trailing slash |
740 cxBufferSeek(&url, -1, SEEK_CUR); |
745 cxBufferSeek(&url, -1, SEEK_CUR); |
741 |
746 |
742 cxstring p = cx_str(path); |
747 cxstring p = cx_strn(path, pathlen); |
743 |
748 |
744 CxStrtokCtx tkctx = cx_strtok(p, CX_STR("/"), INT_MAX); |
749 CxStrtokCtx tkctx = cx_strtok(p, CX_STR("/"), INT_MAX); |
745 cxstring node; |
750 cxstring node; |
746 while(cx_strtok_next(&tkctx, &node)) { |
751 while(cx_strtok_next(&tkctx, &node)) { |
747 if(node.length > 0) { |
752 if(node.length > 0) { |