44 |
44 |
45 uint32_t parse_finfo_settings(const char *str, char **error) { |
45 uint32_t parse_finfo_settings(const char *str, char **error) { |
46 scstr_t s = scstr(str); |
46 scstr_t s = scstr(str); |
47 |
47 |
48 if(!sstrcmp(s, SC("*")) || !sstrcmp(s, SC("a")) || !sstrcmp(s, SC("all"))) { |
48 if(!sstrcmp(s, SC("*")) || !sstrcmp(s, SC("a")) || !sstrcmp(s, SC("all"))) { |
49 return FINFO_DATE|FINFO_OWNER|FINFO_MODE|FINFO_XATTR; |
49 return FINFO_MTIME|FINFO_OWNER|FINFO_MODE|FINFO_XATTR; |
50 } |
50 } |
51 |
51 |
52 ssize_t count = 0; |
52 ssize_t count = 0; |
53 sstr_t *fs = sstrsplit(s, SC(","), &count); |
53 sstr_t *fs = sstrsplit(s, SC(","), &count); |
54 |
54 |
55 char *err = NULL; |
55 char *err = NULL; |
56 |
56 |
57 uint32_t finfo = 0; |
57 uint32_t finfo = 0; |
58 for(int i=0;i<count;i++) { |
58 for(int i=0;i<count;i++) { |
59 sstr_t f = fs[i]; |
59 sstr_t f = fs[i]; |
60 if(!sstrcasecmp(f, SC("date"))) { |
60 if(!sstrcasecmp(f, SC("mtime"))) { |
61 finfo |= FINFO_DATE; |
61 finfo |= FINFO_MTIME; |
62 } else if(!sstrcasecmp(f, SC("owner"))) { |
62 } else if(!sstrcasecmp(f, SC("owner"))) { |
63 finfo |= FINFO_OWNER; |
63 finfo |= FINFO_OWNER; |
64 } else if(!sstrcasecmp(f, SC("mode"))) { |
64 } else if(!sstrcasecmp(f, SC("mode"))) { |
65 finfo |= FINFO_MODE; |
65 finfo |= FINFO_MODE; |
66 } else if(!sstrcasecmp(f, SC("xattr"))) { |
66 } else if(!sstrcasecmp(f, SC("xattr"))) { |
95 } |
95 } |
96 |
96 |
97 DavXmlNode *content = NULL; |
97 DavXmlNode *content = NULL; |
98 DavXmlNode *last = NULL; |
98 DavXmlNode *last = NULL; |
99 |
99 |
100 if((finfo & FINFO_DATE) == FINFO_DATE) { |
100 if((finfo & FINFO_MTIME) == FINFO_MTIME) { |
101 char str[32]; |
101 char str[32]; |
102 struct tm *date = gmtime(&s->st_mtime); |
102 struct tm *date = gmtime(&s->st_mtime); |
103 strftime(str, 32, "%a, %d %b %Y %H:%M:%S GMT", date); |
103 strftime(str, 32, "%a, %d %b %Y %H:%M:%S GMT", date); |
104 DavXmlNode *mtime = dav_xml_createnode_with_text(DAV_PROPS_NS, "mtime", str); |
104 DavXmlNode *mtime = dav_xml_createnode_with_text(DAV_PROPS_NS, "mtime", str); |
105 content = mtime; |
105 content = mtime; |