dav/utils.c

changeset 5
88625853ae74
parent 4
ae5a98f0545c
child 7
d9bdd5a22c1d
--- 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 <stdlib.h>
 #include <string.h>
 #include <ucx/string.h>
+#include <libxml/tree.h>
+#include <curl/curl.h>
 
 #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;
+}
+

mercurial