diff -r 27c7511c0e34 -r 280250e45ba6 src/server/webdav/webdav.c --- a/src/server/webdav/webdav.c Thu May 24 12:51:52 2012 +0200 +++ b/src/server/webdav/webdav.c Fri May 25 18:16:24 2012 +0200 @@ -227,6 +227,13 @@ if(stat(ppath, &st) != 0) { perror("webdav_propfind: stat"); fprintf(stderr, " file: %s\n", ppath); + + /* TODO: check errno only set status */ + protocol_status(sn, rq, 404, NULL); + pblock_removekey(pb_key_content_type, rq->srvhdrs); + pblock_nninsert("content-length", 0, rq->srvhdrs); + http_start_response(sn, rq); + return REQ_ABORTED; } @@ -667,34 +674,28 @@ sbuf_puts(out, "\n"); } - for(int i=0;imap->size;i++) { - UcxMapElement *elm = &propstat->map->map[i]; - while(elm) { - UcxDlist *proplist = (UcxDlist*)elm->data; + UcxMapIterator iter = ucx_map_iterator(propstat->map); + UCX_MAP_FOREACH(UcxDlist*, proplist, propstat->map, iter) { + if(proplist) { + sbuf_puts(out, "\n\n"); - if(proplist) { - sbuf_puts(out, "\n\n"); - - DAV_FOREACH(prop, proplist) { - xmlelm_write((XmlElement*)prop->data, out, wv); - } + DAV_FOREACH(prop, proplist) { + xmlelm_write((XmlElement*)prop->data, out, wv); + } - sbuf_puts(out, "\n\n"); + sbuf_puts(out, "\n\n"); - int status = *(int*)elm->key.data; - if(status < 1000 && status > 0) { - char buf[5]; - buf[4] = 0; - sprintf(buf, "%d ", status); - sbuf_puts(out, "HTTP/1.1 "); - sbuf_puts(out, buf); - sbuf_puts(out, (char*)protocol_status_message(status)); - } - - sbuf_puts(out, "\n\n"); + int status = *(int*)iter.cur->key.data; + if(status < 1000 && status > 0) { + char buf[5]; + buf[4] = 0; + sprintf(buf, "%d ", status); + sbuf_puts(out, "HTTP/1.1 "); + sbuf_puts(out, buf); + sbuf_puts(out, (char*)protocol_status_message(status)); } - elm = elm->next; + sbuf_puts(out, "\n\n"); } } }