X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=daemon%2Fxattr.c;h=1531070dc1be2ff32fde955946bcb2411626a1b8;hb=9dd53bcb10283295d7fb5f0a3469be2984d99926;hp=23b00d828fc10362d8d252c3bd15cd14a585632e;hpb=72c6cc02e2c66cccf3c092a232f107cca5896fe1;p=libguestfs.git diff --git a/daemon/xattr.c b/daemon/xattr.c index 23b00d8..1531070 100644 --- a/daemon/xattr.c +++ b/daemon/xattr.c @@ -35,12 +35,12 @@ #endif #endif -static guestfs_int_xattr_list *getxattrs (char *path, ssize_t (*listxattr) (const char *path, char *list, size_t size), ssize_t (*getxattr) (const char *path, const char *name, void *value, size_t size)); -static int _setxattr (char *xattr, char *val, int vallen, char *path, int (*setxattr) (const char *path, const char *name, const void *value, size_t size, int flags)); -static int _removexattr (char *xattr, char *path, int (*removexattr) (const char *path, const char *name)); +static guestfs_int_xattr_list *getxattrs (const char *path, ssize_t (*listxattr) (const char *path, char *list, size_t size), ssize_t (*getxattr) (const char *path, const char *name, void *value, size_t size)); +static int _setxattr (const char *xattr, const char *val, int vallen, const char *path, int (*setxattr) (const char *path, const char *name, const void *value, size_t size, int flags)); +static int _removexattr (const char *xattr, const char *path, int (*removexattr) (const char *path, const char *name)); guestfs_int_xattr_list * -do_getxattrs (char *path) +do_getxattrs (const char *path) { #if defined(HAVE_LISTXATTR) && defined(HAVE_GETXATTR) return getxattrs (path, listxattr, getxattr); @@ -51,7 +51,7 @@ do_getxattrs (char *path) } guestfs_int_xattr_list * -do_lgetxattrs (char *path) +do_lgetxattrs (const char *path) { #if defined(HAVE_LLISTXATTR) && defined(HAVE_LGETXATTR) return getxattrs (path, llistxattr, lgetxattr); @@ -62,7 +62,7 @@ do_lgetxattrs (char *path) } int -do_setxattr (char *xattr, char *val, int vallen, char *path) +do_setxattr (const char *xattr, const char *val, int vallen, const char *path) { #if defined(HAVE_SETXATTR) return _setxattr (xattr, val, vallen, path, setxattr); @@ -73,7 +73,7 @@ do_setxattr (char *xattr, char *val, int vallen, char *path) } int -do_lsetxattr (char *xattr, char *val, int vallen, char *path) +do_lsetxattr (const char *xattr, const char *val, int vallen, const char *path) { #if defined(HAVE_LSETXATTR) return _setxattr (xattr, val, vallen, path, lsetxattr); @@ -84,7 +84,7 @@ do_lsetxattr (char *xattr, char *val, int vallen, char *path) } int -do_removexattr (char *xattr, char *path) +do_removexattr (const char *xattr, const char *path) { #if defined(HAVE_REMOVEXATTR) return _removexattr (xattr, path, removexattr); @@ -95,7 +95,7 @@ do_removexattr (char *xattr, char *path) } int -do_lremovexattr (char *xattr, char *path) +do_lremovexattr (const char *xattr, const char *path) { #if defined(HAVE_LREMOVEXATTR) return _removexattr (xattr, path, lremovexattr); @@ -106,19 +106,16 @@ do_lremovexattr (char *xattr, char *path) } static guestfs_int_xattr_list * -getxattrs (char *path, - ssize_t (*listxattr) (const char *path, char *list, size_t size), - ssize_t (*getxattr) (const char *path, const char *name, - void *value, size_t size)) +getxattrs (const char *path, + ssize_t (*listxattr) (const char *path, char *list, size_t size), + ssize_t (*getxattr) (const char *path, const char *name, + void *value, size_t size)) { ssize_t len, vlen; char *buf = NULL; int i, j; guestfs_int_xattr_list *r = NULL; - NEED_ROOT (NULL); - ABS_PATH (path, NULL); - CHROOT_IN; len = listxattr (path, NULL, 0); CHROOT_OUT; @@ -175,15 +172,15 @@ getxattrs (char *path, r->guestfs_int_xattr_list_val[j].attrval.attrval_len = vlen; if (r->guestfs_int_xattr_list_val[j].attrname == NULL || - r->guestfs_int_xattr_list_val[j].attrval.attrval_val == NULL) { + r->guestfs_int_xattr_list_val[j].attrval.attrval_val == NULL) { reply_with_perror ("malloc"); goto error; } CHROOT_IN; vlen = getxattr (path, &buf[i], - r->guestfs_int_xattr_list_val[j].attrval.attrval_val, - vlen); + r->guestfs_int_xattr_list_val[j].attrval.attrval_val, + vlen); CHROOT_OUT; if (vlen == -1) { reply_with_perror ("getxattr"); @@ -198,11 +195,13 @@ getxattrs (char *path, error: free (buf); if (r) { - if (r->guestfs_int_xattr_list_val) - for (i = 0; i < r->guestfs_int_xattr_list_len; ++i) { - free (r->guestfs_int_xattr_list_val[i].attrname); - free (r->guestfs_int_xattr_list_val[i].attrval.attrval_val); + if (r->guestfs_int_xattr_list_val) { + unsigned int k; + for (k = 0; k < r->guestfs_int_xattr_list_len; ++k) { + free (r->guestfs_int_xattr_list_val[k].attrname); + free (r->guestfs_int_xattr_list_val[k].attrval.attrval_val); } + } free (r->guestfs_int_xattr_list_val); } free (r); @@ -210,9 +209,9 @@ getxattrs (char *path, } static int -_setxattr (char *xattr, char *val, int vallen, char *path, - int (*setxattr) (const char *path, const char *name, - const void *value, size_t size, int flags)) +_setxattr (const char *xattr, const char *val, int vallen, const char *path, + int (*setxattr) (const char *path, const char *name, + const void *value, size_t size, int flags)) { int r; @@ -228,8 +227,8 @@ _setxattr (char *xattr, char *val, int vallen, char *path, } static int -_removexattr (char *xattr, char *path, - int (*removexattr) (const char *path, const char *name)) +_removexattr (const char *xattr, const char *path, + int (*removexattr) (const char *path, const char *name)) { int r; @@ -247,42 +246,42 @@ _removexattr (char *xattr, char *path, #else /* no xattr.h */ guestfs_int_xattr_list * -do_getxattrs (char *path) +do_getxattrs (const char *path) { reply_with_error ("getxattrs: no support for xattrs"); return NULL; } guestfs_int_xattr_list * -do_lgetxattrs (char *path) +do_lgetxattrs (const char *path) { reply_with_error ("lgetxattrs: no support for xattrs"); return NULL; } int -do_setxattr (char *xattr, char *val, int vallen, char *path) +do_setxattr (const char *xattr, const char *val, int vallen, const char *path) { reply_with_error ("setxattr: no support for xattrs"); return -1; } int -do_lsetxattr (char *xattr, char *val, int vallen, char *path) +do_lsetxattr (const char *xattr, const char *val, int vallen, const char *path) { reply_with_error ("lsetxattr: no support for xattrs"); return -1; } int -do_removexattr (char *xattr, char *path) +do_removexattr (const char *xattr, const char *path) { reply_with_error ("removexattr: no support for xattrs"); return -1; } int -do_lremovexattr (char *xattr, char *path) +do_lremovexattr (const char *xattr, const char *path) { reply_with_error ("lremovexattr: no support for xattrs"); return -1;