static int copy_xattr(int dest_fd, int src_fd)
{
int ret = 0;
- ssize_t name_len = 0, value_len = 0;
- char *name_buf = NULL, *name = NULL, *value = NULL, *value_save = NULL;
+ ssize_t name_len, value_len;
+ _cleanup_free_ char *name_buf = NULL, *value = NULL;
+ char *name, *value_save;
name_len = flistxattr(src_fd, NULL, 0);
if (name_len < 0)
name_len = flistxattr(src_fd, name_buf, name_len);
if (name_len < 0)
- goto out;
+ return -1;
for (name = name_buf; name != name_buf + name_len; name = strchr(name, '\0') + 1) {
value_len = fgetxattr(src_fd, name, NULL, 0);
value = realloc(value, value_len);
if (value == NULL) {
value = value_save;
- ret = -1;
- goto out;
+ return -1;
}
value_len = fgetxattr(src_fd, name, value, value_len);
ret = -1;
}
-out:
- free(name_buf);
- free(value);
return ret;
}