[Libguestfs] [PATCH] daemon: xattr: move the listxattrs code in an own function
Richard W.M. Jones
rjones at redhat.com
Fri Jan 10 14:29:18 UTC 2014
On Fri, Jan 10, 2014 at 03:15:04PM +0100, Pino Toscano wrote:
> Move in an own function the code that does the (l)listxattrs allocating
> the buffer of the right legth, as it will be useful later.
>
> No functional changes, just code motion.
> ---
> daemon/xattr.c | 64 ++++++++++++++++++++++++++++++++++++++++------------------
> 1 file changed, 44 insertions(+), 20 deletions(-)
>
> diff --git a/daemon/xattr.c b/daemon/xattr.c
> index b84cf3d..e01e9e2 100644
> --- a/daemon/xattr.c
> +++ b/daemon/xattr.c
> @@ -54,6 +54,7 @@ optgroup_linuxxattrs_available (void)
> 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));
> +static char *_listxattrs (const char *path, ssize_t (*listxattr) (const char *path, char *list, size_t size), ssize_t *size);
>
> guestfs_int_xattr_list *
> do_getxattrs (const char *path)
> @@ -111,27 +112,10 @@ getxattrs (const char *path,
> size_t i, j;
> guestfs_int_xattr_list *r = NULL;
>
> - CHROOT_IN;
> - len = listxattr (path, NULL, 0);
> - CHROOT_OUT;
> - if (len == -1) {
> - reply_with_perror ("listxattr: %s", path);
> + buf = _listxattrs (path, listxattr, &len);
> + if (buf == NULL)
> + /* _listxattrs issues reply_with_perror already. */
> goto error;
> - }
> -
> - buf = malloc (len);
> - if (buf == NULL) {
> - reply_with_perror ("malloc");
> - goto error;
> - }
> -
> - CHROOT_IN;
> - len = listxattr (path, buf, len);
> - CHROOT_OUT;
> - if (len == -1) {
> - reply_with_perror ("listxattr: %s", path);
> - goto error;
> - }
>
> r = calloc (1, sizeof (*r));
> if (r == NULL) {
> @@ -252,6 +236,46 @@ _removexattr (const char *xattr, const char *path,
> return 0;
> }
>
> +static char *
> +_listxattrs (const char *path,
> + ssize_t (*listxattr) (const char *path, char *list, size_t size),
> + ssize_t *size)
> +{
> + int r;
> + char *buf = NULL;
> + ssize_t len;
> +
> + CHROOT_IN;
> + len = listxattr (path, NULL, 0);
> + CHROOT_OUT;
> + if (len == -1) {
> + reply_with_perror ("listxattr: %s", path);
> + goto error;
> + }
> +
> + buf = malloc (len);
> + if (buf == NULL) {
> + reply_with_perror ("malloc");
> + goto error;
> + }
> +
> + CHROOT_IN;
> + len = listxattr (path, buf, len);
> + CHROOT_OUT;
> + if (len == -1) {
> + reply_with_perror ("listxattr: %s", path);
> + goto error;
> + }
> +
> + if (size)
> + *size = len;
> + return buf;
> +
> + error:
> + free (buf);
> + return NULL;
> +}
> +
> guestfs_int_xattr_list *
> do_internal_lxattrlist (const char *path, char *const *names)
> {
> --
> 1.8.3.1
Looks like just code motion, so ACK.
Rich.
--
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
libguestfs lets you edit virtual machines. Supports shell scripting,
bindings from many languages. http://libguestfs.org
More information about the Libguestfs
mailing list