diff -r ae5a98f0545c -r 88625853ae74 dav/utils.c --- a/dav/utils.c Sat Dec 01 20:34:55 2012 +0100 +++ b/dav/utils.c Mon Aug 12 14:40:19 2013 +0200 @@ -31,24 +31,36 @@ #include #include #include +#include +#include #include "utils.h" -time_t parse_creationdate(char *str) { +time_t util_parse_creationdate(char *str) { // example: 2012-11-29T21:35:35Z - + if(!str) { + return 0; + } // TODO - return 1234; + return 0; } -time_t parse_lastmodified(char *str) { +time_t util_parse_lastmodified(char *str) { // example: Thu, 29 Nov 2012 21:35:35 GMT - - // TODO - return 1234; + if(!str) { + return 0; + } else { + return curl_getdate(str, NULL); + } } +int util_getboolean(char *v) { + if(v[0] == 'T' || v[0] == 't') { + return 1; + } + return 0; +} char* util_url_path(char *url) { char *path = NULL; @@ -92,50 +104,49 @@ return name; } -char* util_child_url(char *base, char *path) { - char *basepath = util_url_path(base); - int baselen = basepath - base; - int pathlen = strlen(path); - - int len = baselen + pathlen + 1; - char *url = malloc(len); - url[len - 1] = 0; - url[len - 2] = 0; - - if(url == NULL) { - return NULL; +char* util_concat_path(char *url_base, char *p) { + sstr_t base = sstr(url_base); + sstr_t path; + if(p) { + path = sstr(p); + } else { + path = sstrn("", 0); } - memcpy(url, base, baselen); - memcpy(url + baselen, path, pathlen); - - return url; -} - -char* util_upload_url(char *url, char *filepath) { - int urllen = strlen(url); - int filepathlen = strlen(filepath); - - for(int i=filepathlen-1;i>=0;i--) { - if(filepath[i] == '/') { - filepath = filepath + i + 1; - break; + int add_separator = 0; + if(base.ptr[base.length-1] == '/') { + if(path.ptr[0] == '/') { + base.length--; + } + } else { + if(path.length == 0 || path.ptr[0] != '/') { + add_separator = 1; } } - int pathlen = urllen + filepathlen; - char *path = malloc(pathlen + 2); + sstr_t url; + url.length = base.length + path.length + add_separator; + url.ptr = malloc(url.length + 1); + url.ptr[url.length] = '\0'; - int j = urllen; - memcpy(path, url, urllen); - if(url[urllen - 1] != '/') { - path[j] = '/'; - j++; + if(add_separator) { + url = sstrncat(url, 3, base, sstr("/"), path); + } else { + url = sstrncat(url, 2, base, path); } - memcpy(path + j, filepath, filepathlen); - j += filepathlen; - path[j] = 0; - return path; + return url.ptr; } + +char* util_xml_get_text(xmlNode *elm) { + xmlNode *node = elm->children; + while(node) { + if(node->type == XML_TEXT_NODE) { + return (char*)node->content; + } + node = node->next; + } + return NULL; +} +