[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v3 09/13] 9p: darwin: Compatibility for f/l*xatt
From: |
Greg Kurz |
Subject: |
Re: [Qemu-devel] [PATCH v3 09/13] 9p: darwin: Compatibility for f/l*xattr |
Date: |
Tue, 26 Jun 2018 15:57:43 +0200 |
On Sat, 16 Jun 2018 20:56:53 -0400
Keno Fischer <address@hidden> wrote:
> On darwin `fgetxattr` takes two extra optional arguments,
> and the l* variants are not defined (in favor of an extra
> flag to the regular variants.
>
> Signed-off-by: Keno Fischer <address@hidden>
> ---
Reviewed-by: Greg Kurz <address@hidden>
> Makefile | 6 ++++++
> fsdev/virtfs-proxy-helper.c | 9 +++++----
> hw/9pfs/9p-local.c | 12 ++++++++----
> hw/9pfs/9p-util.h | 17 +++++++++++++++++
> 4 files changed, 36 insertions(+), 8 deletions(-)
>
> diff --git a/Makefile b/Makefile
> index e46f2b6..046e553 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -545,7 +545,13 @@ qemu-bridge-helper$(EXESUF): qemu-bridge-helper.o
> $(COMMON_LDADDS)
> qemu-keymap$(EXESUF): qemu-keymap.o ui/input-keymap.o $(COMMON_LDADDS)
>
> fsdev/virtfs-proxy-helper$(EXESUF): fsdev/virtfs-proxy-helper.o
> fsdev/9p-marshal.o fsdev/9p-iov-marshal.o $(COMMON_LDADDS)
> +ifdef CONFIG_DARWIN
> +fsdev/virtfs-proxy-helper$(EXESUF): hw/9pfs/9p-util-darwin.o
> +endif
> +ifdef CONFIG_LINUX
> +fsdev/virtfs-proxy-helper$(EXESUF): hw/9pfs/9p-util-linux.o
> fsdev/virtfs-proxy-helper$(EXESUF): LIBS += -lcap
> +endif
>
> scsi/qemu-pr-helper$(EXESUF): scsi/qemu-pr-helper.o scsi/utils.o
> $(crypto-obj-y) $(io-obj-y) $(qom-obj-y) $(COMMON_LDADDS)
> ifdef CONFIG_MPATH
> diff --git a/fsdev/virtfs-proxy-helper.c b/fsdev/virtfs-proxy-helper.c
> index 3bc1269..a26f8b8 100644
> --- a/fsdev/virtfs-proxy-helper.c
> +++ b/fsdev/virtfs-proxy-helper.c
> @@ -28,6 +28,7 @@
> #include "qemu/statfs.h"
> #include "9p-iov-marshal.h"
> #include "hw/9pfs/9p-proxy.h"
> +#include "hw/9pfs/9p-util.h"
> #include "fsdev/9p-iov-marshal.h"
>
> #define PROGNAME "virtfs-proxy-helper"
> @@ -459,7 +460,7 @@ static int do_getxattr(int type, struct iovec *iovec,
> struct iovec *out_iovec)
> v9fs_string_init(&name);
> retval = proxy_unmarshal(iovec, offset, "s", &name);
> if (retval > 0) {
> - retval = lgetxattr(path.data, name.data, xattr.data, size);
> + retval = qemu_lgetxattr(path.data, name.data, xattr.data, size);
> if (retval < 0) {
> retval = -errno;
> } else {
> @@ -469,7 +470,7 @@ static int do_getxattr(int type, struct iovec *iovec,
> struct iovec *out_iovec)
> v9fs_string_free(&name);
> break;
> case T_LLISTXATTR:
> - retval = llistxattr(path.data, xattr.data, size);
> + retval = qemu_llistxattr(path.data, xattr.data, size);
> if (retval < 0) {
> retval = -errno;
> } else {
> @@ -1000,7 +1001,7 @@ static int process_requests(int sock)
> retval = proxy_unmarshal(&in_iovec, PROXY_HDR_SZ, "sssdd", &path,
> &name, &value, &size, &flags);
> if (retval > 0) {
> - retval = lsetxattr(path.data,
> + retval = qemu_lsetxattr(path.data,
> name.data, value.data, size, flags);
> if (retval < 0) {
> retval = -errno;
> @@ -1016,7 +1017,7 @@ static int process_requests(int sock)
> retval = proxy_unmarshal(&in_iovec,
> PROXY_HDR_SZ, "ss", &path, &name);
> if (retval > 0) {
> - retval = lremovexattr(path.data, name.data);
> + retval = qemu_lremovexattr(path.data, name.data);
> if (retval < 0) {
> retval = -errno;
> }
> diff --git a/hw/9pfs/9p-local.c b/hw/9pfs/9p-local.c
> index 98d4073..768ef6f 100644
> --- a/hw/9pfs/9p-local.c
> +++ b/hw/9pfs/9p-local.c
> @@ -776,16 +776,20 @@ static int local_fstat(FsContext *fs_ctx, int fid_type,
> mode_t tmp_mode;
> dev_t tmp_dev;
>
> - if (fgetxattr(fd, "user.virtfs.uid", &tmp_uid, sizeof(uid_t)) > 0) {
> + if (qemu_fgetxattr(fd, "user.virtfs.uid",
> + &tmp_uid, sizeof(uid_t)) > 0) {
> stbuf->st_uid = le32_to_cpu(tmp_uid);
> }
> - if (fgetxattr(fd, "user.virtfs.gid", &tmp_gid, sizeof(gid_t)) > 0) {
> + if (qemu_fgetxattr(fd, "user.virtfs.gid",
> + &tmp_gid, sizeof(gid_t)) > 0) {
> stbuf->st_gid = le32_to_cpu(tmp_gid);
> }
> - if (fgetxattr(fd, "user.virtfs.mode", &tmp_mode, sizeof(mode_t)) >
> 0) {
> + if (qemu_fgetxattr(fd, "user.virtfs.mode",
> + &tmp_mode, sizeof(mode_t)) > 0) {
> stbuf->st_mode = le32_to_cpu(tmp_mode);
> }
> - if (fgetxattr(fd, "user.virtfs.rdev", &tmp_dev, sizeof(dev_t)) > 0) {
> + if (qemu_fgetxattr(fd, "user.virtfs.rdev",
> + &tmp_dev, sizeof(dev_t)) > 0) {
> stbuf->st_rdev = le64_to_cpu(tmp_dev);
> }
> } else if (fs_ctx->export_flags & V9FS_SM_MAPPED_FILE) {
> diff --git a/hw/9pfs/9p-util.h b/hw/9pfs/9p-util.h
> index 79ed6b2..50a03c7 100644
> --- a/hw/9pfs/9p-util.h
> +++ b/hw/9pfs/9p-util.h
> @@ -19,6 +19,23 @@
> #define O_PATH_9P_UTIL 0
> #endif
>
> +#ifdef CONFIG_DARWIN
> +#define qemu_fgetxattr(...) fgetxattr(__VA_ARGS__, 0, 0)
> +#define qemu_lgetxattr(...) getxattr(__VA_ARGS__, 0, XATTR_NOFOLLOW)
> +#define qemu_llistxattr(...) listxattr(__VA_ARGS__, XATTR_NOFOLLOW)
> +#define qemu_lremovexattr(...) removexattr(__VA_ARGS__, XATTR_NOFOLLOW)
> +static inline int qemu_lsetxattr(const char *path, const char *name,
> + const void *value, size_t size, int flags) {
> + return setxattr(path, name, value, size, 0, flags | XATTR_NOFOLLOW);
> +}
> +#else
> +#define qemu_fgetxattr fgetxattr
> +#define qemu_lgetxattr lgetxattr
> +#define qemu_llistxattr llistxattr
> +#define qemu_lremovexattr lremovexattr
> +#define qemu_lsetxattr lsetxattr
> +#endif
> +
> static inline void close_preserve_errno(int fd)
> {
> int serrno = errno;
- [Qemu-devel] [PATCH v3 00/13] 9p: Add support for Darwin, Keno Fischer, 2018/06/16
- [Qemu-devel] [PATCH v3 05/13] 9p: darwin: Explicitly cast comparisons of mode_t with -1, Keno Fischer, 2018/06/16
- [Qemu-devel] [PATCH v3 07/13] 9p: darwin: Provide a compatibility definition for XATTR_SIZE_MAX, Keno Fischer, 2018/06/16
- [Qemu-devel] [PATCH v3 03/13] 9p: darwin: Handle struct stat(fs) differences, Keno Fischer, 2018/06/16
- [Qemu-devel] [PATCH v3 08/13] 9p: darwin: *xattr_nofollow implementations, Keno Fischer, 2018/06/16
- [Qemu-devel] [PATCH v3 09/13] 9p: darwin: Compatibility for f/l*xattr, Keno Fischer, 2018/06/16
- Re: [Qemu-devel] [PATCH v3 09/13] 9p: darwin: Compatibility for f/l*xattr,
Greg Kurz <=
- [Qemu-devel] [PATCH v3 02/13] 9p: Rename 9p-util -> 9p-util-linux, Keno Fischer, 2018/06/16
- [Qemu-devel] [PATCH v3 01/13] 9p: linux: Fix a couple Linux assumptions, Keno Fischer, 2018/06/16
- [Qemu-devel] [PATCH v3 06/13] 9p: darwin: Ignore O_{NOATIME, DIRECT}, Keno Fischer, 2018/06/16
- [Qemu-devel] [PATCH v3 11/13] 9p: darwin: Implement compatibility for mknodat, Keno Fischer, 2018/06/16
- [Qemu-devel] [PATCH v3 04/13] 9p: darwin: Handle struct dirent differences, Keno Fischer, 2018/06/16
- [Qemu-devel] [PATCH v3 10/13] 9p: darwin: Provide a fallback implementation for utimensat, Keno Fischer, 2018/06/16