libidav/utils.c

changeset 834
6a466635eace
parent 816
839fefbdedc7
equal deleted inserted replaced
833:8aa2dc02d9b7 834:6a466635eace
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) {

mercurial