dav/finfo.c

changeset 522
46f96dcd6eab
parent 520
da2b0cc44e4f
child 524
d53fd1006485
--- a/dav/finfo.c	Wed Mar 13 15:05:40 2019 +0100
+++ b/dav/finfo.c	Wed Mar 13 18:43:30 2019 +0100
@@ -40,7 +40,7 @@
 
 #include "libxattr.h"
 
-uint32_t parse_finfo(const char *str) {
+uint32_t parse_finfo(const char *str, char **error) {
     scstr_t s = scstr(str);
     
     if(!sstrcmp(s, SC("*")) || !sstrcmp(s, SC("a")) || !sstrcmp(s, SC("all"))) {
@@ -50,6 +50,8 @@
     size_t count = 0;
     sstr_t *fs = sstrsplit(s, SC(","), &count);
     
+    char *err = NULL;
+    
     uint32_t finfo = 0;
     for(int i=0;i<count;i++) {
         sstr_t f = fs[i];
@@ -61,12 +63,15 @@
             finfo |= FINFO_MODE;
         } else if(!sstrcasecmp(f, SC("xattr"))) {
             finfo |= FINFO_XATTR;
+        } else if(error && !err) {
+            err = fs[i].ptr;
+            continue;
         }
         free(f.ptr);
     }
     
     free(fs);
-    return finfo;
+    return err ? 0 : finfo;
 }
 
 int resource_set_finfo(const char *path, DavResource *res, uint32_t finfo) {

mercurial