dav/libxattr.c

changeset 765
305ce525ad4a
parent 764
a41b18c67d95
child 813
06cf17795b86
equal deleted inserted replaced
764:a41b18c67d95 765:305ce525ad4a
133 switch(errno) { 133 switch(errno) {
134 case ERANGE: { 134 case ERANGE: {
135 ssize_t attrlen = getxattr(path, attrname, NULL, 0); 135 ssize_t attrlen = getxattr(path, attrname, NULL, 0);
136 if(attrlen > 0) { 136 if(attrlen > 0) {
137 free(buf); 137 free(buf);
138 buf = malloc(attrlen); 138 buf = malloc(attrlen + 1);
139 vlen = getxattr(path, attrname, buf, attrlen); 139 vlen = getxattr(path, attrname, buf, attrlen);
140 if(vlen > 0) { 140 if(vlen > 0) {
141 break; 141 break;
142 } 142 }
143 } 143 }
150 } 150 }
151 } 151 }
152 } 152 }
153 153
154 free(attrname); 154 free(attrname);
155 buf[vlen] = 0;
155 *len = vlen; 156 *len = vlen;
156 return buf; 157 return buf;
157 } 158 }
158 159
159 int xattr_set(const char *path, const char *name, const void *value, size_t len) { 160 int xattr_set(const char *path, const char *name, const void *value, size_t len) {
236 if(attrlen < 0) { 237 if(attrlen < 0) {
237 *len = -1; 238 *len = -1;
238 return NULL; 239 return NULL;
239 } 240 }
240 241
241 char *buf = malloc(attrlen); 242 char *buf = malloc(attrlen + 1);
242 ssize_t vlen = getxattr(path, attr, buf, attrlen, 0, 0); 243 ssize_t vlen = getxattr(path, attr, buf, attrlen, 0, 0);
243 if(vlen < 0) { 244 if(vlen < 0) {
244 *len = -1; 245 *len = -1;
245 free(buf); 246 free(buf);
246 return NULL; 247 return NULL;
247 } 248 }
248 249
250 buf[attrlen] = 0;
249 *len = vlen; 251 *len = vlen;
250 return buf; 252 return buf;
251 } 253 }
252 254
253 int xattr_set(const char *path, const char *name, const void *value, size_t len) { 255 int xattr_set(const char *path, const char *name, const void *value, size_t len) {
325 close(attrfile); 327 close(attrfile);
326 return NULL; 328 return NULL;
327 } 329 }
328 330
329 size_t bufsize = (size_t)s.st_size; 331 size_t bufsize = (size_t)s.st_size;
330 char *buf = malloc(bufsize); 332 char *buf = malloc(bufsize + 1);
333 buf[bufsize] = 0;
331 334
332 char *b = buf; 335 char *b = buf;
333 size_t cur = 0; 336 size_t cur = 0;
334 while(cur < bufsize) { 337 while(cur < bufsize) {
335 ssize_t r = read(attrfile, buf + cur, bufsize - cur); 338 ssize_t r = read(attrfile, buf + cur, bufsize - cur);
394 static char ** parse_xattrlist(char *buf, ssize_t length, ssize_t *nelm) { 397 static char ** parse_xattrlist(char *buf, ssize_t length, ssize_t *nelm) {
395 size_t arraylen = LIST_ARRAY_LEN; 398 size_t arraylen = LIST_ARRAY_LEN;
396 size_t arraypos = 0; 399 size_t arraypos = 0;
397 char **array = malloc(LIST_ARRAY_LEN * sizeof(char*)); 400 char **array = malloc(LIST_ARRAY_LEN * sizeof(char*));
398 401
399 char *name = buf;
400 for(int i=0;i<length;i++) { 402 for(int i=0;i<length;i++) {
401 char namelen = buf[i]; 403 char namelen = buf[i];
402 char *name = buf + i + 1; 404 char *name = buf + i + 1;
403 char *attrname = malloc(namelen + 1); 405 char *attrname = malloc(namelen + 1);
404 memcpy(attrname, name, namelen); 406 memcpy(attrname, name, namelen);
444 if(attrlen < 0) { 446 if(attrlen < 0) {
445 *len = -1; 447 *len = -1;
446 return NULL; 448 return NULL;
447 } 449 }
448 450
449 char *buf = malloc(attrlen); 451 char *buf = malloc(attrlen + 1);
450 ssize_t vlen = extattr_get_file(path, EXTATTR_NAMESPACE_USER, attr, buf, attrlen); 452 ssize_t vlen = extattr_get_file(path, EXTATTR_NAMESPACE_USER, attr, buf, attrlen);
451 if(vlen < 0) { 453 if(vlen < 0) {
452 *len = -1; 454 *len = -1;
453 free(buf); 455 free(buf);
454 return NULL; 456 return NULL;
455 } 457 }
456 458 buf[attrlen] = 0;
457 *len = vlen; 459 *len = vlen;
458 return buf; 460 return buf;
459 } 461 }
460 462
461 int xattr_set(const char *path, const char *name, const void *value, size_t len) { 463 int xattr_set(const char *path, const char *name, const void *value, size_t len) {

mercurial