libidav/session.c

changeset 225
a297c2e28fa1
parent 222
7b73058d782e
child 238
b167226fb804
--- a/libidav/session.c	Sat Mar 19 18:49:36 2016 +0100
+++ b/libidav/session.c	Sun Mar 20 11:27:31 2016 +0100
@@ -178,12 +178,23 @@
         }
     }
     if(c != CURLE_OK) {
-        sn->errorstr = curl_easy_strerror(c);
+        dav_session_set_errstr(sn, curl_easy_strerror(c));
     } else {
-        sn->errorstr = NULL;
+        dav_session_set_errstr(sn, NULL);
     }
 }
 
+void dav_session_set_errstr(DavSession *sn, const char *str) {
+    if(sn->errorstr) {
+        dav_session_free(sn, sn->errorstr);
+    }
+    char *errstr = NULL;
+    if(str) {
+        errstr = dav_session_strdup(sn, str);
+    }
+    sn->errorstr = errstr;
+}
+
 void dav_session_destroy(DavSession *sn) { 
     // remove session from context
     UcxList *sessions = sn->context->sessions;
@@ -217,8 +228,8 @@
     ucx_mempool_free(sn->mp, ptr);
 }
 
-char* dav_session_strdup(DavSession *sn, char *str) {
-    return sstrdup_a(sn->mp->allocator, sstr(str)).ptr;
+char* dav_session_strdup(DavSession *sn, const char *str) {
+    return sstrdup_a(sn->mp->allocator, sstr((char*)str)).ptr;
 }
 
 

mercurial