diff -r 4b55f05f4e00 -r a297c2e28fa1 libidav/session.c --- 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; }