From nobody Sun Feb 8 22:50:42 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1527817523878305.53005993508725; Thu, 31 May 2018 18:45:23 -0700 (PDT) Received: from localhost ([::1]:46992 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fOZ87-0007ly-5b for importer@patchew.org; Thu, 31 May 2018 21:45:23 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33454) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fOYrE-0003FE-DF for qemu-devel@nongnu.org; Thu, 31 May 2018 21:27:57 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fOYr9-0003F4-T9 for qemu-devel@nongnu.org; Thu, 31 May 2018 21:27:56 -0400 Received: from mail-qt0-x243.google.com ([2607:f8b0:400d:c0d::243]:46056) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fOYr9-0003Ec-Nj for qemu-devel@nongnu.org; Thu, 31 May 2018 21:27:51 -0400 Received: by mail-qt0-x243.google.com with SMTP id i18-v6so19638014qtp.12 for ; Thu, 31 May 2018 18:27:51 -0700 (PDT) Received: from localhost.localdomain (96-86-104-61-static.hfc.comcastbusiness.net. [96.86.104.61]) by smtp.gmail.com with ESMTPSA id o68-v6sm2003842qkc.19.2018.05.31.18.27.49 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 31 May 2018 18:27:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=juliacomputing-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=HgDNU/Me434L8Npz9IS7yDR0zIwXQJWgxumsb/AGB5Y=; b=nrqfVc1olH3mHhmQOH5BUsSPeSX4DCkf+qYpsaxn35iG88QW5TcK1zquf1JviF+c/c 2NnPXsaL8HUOJSWtuKuai7o7bpqiVqBzDTVeyMrFxtagNVLWsVYAi4xm/w90s9gy3afJ +hfkASi9hJjnw2R17bPjVu0AZM4IhhroU7CVRu/RewDxJ4yEPoN6MOKElIcWie6t3acG k9/fpxCBrqiAWuD86EEo/4PZPvxuMfxIqDTqQ2bzk+U8LMsfhO+4lqshUILSiAqsggU+ 5DvmVNdAzEWm0r6WBwdR8YWigvu+WcpnuHc9NoOmC4ZwArTmwwwpDZ1sbxsEz93M/ZUm BWYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:in-reply-to:references; bh=HgDNU/Me434L8Npz9IS7yDR0zIwXQJWgxumsb/AGB5Y=; b=AbTrk60cV3Xia2Uyu5yvLExYzstBEZdUfWvjSAGv0XnSQMVmOL2ZD4sN2Bg9wV07WW 1nyejStDlz0J9cjczRiFkoucku2smqH25U8TMSaJtIETu1gjH6bFslbc5W9HnuQctv4R Q2l6RmdEw69w0S/8YY6K0Fg4hNn3RYX8dkEeI/aftLz3DUjaxjEBHPSEPByxcppUMzNo 3F3m+MttW2R/98u4zpHbof8TezGAWzl8P0zV3aporrqt8GqdhWLeXc4wHjlrg3LXqay9 GnLP+B+SDvYSz/XKuKxcnlle/fD5omOJE5P3WCuEnOyoWb1MyZoFAnEkuDUNmPc6Pme9 5tZA== X-Gm-Message-State: APt69E01OY38Wh3BiOHarkaiHscxynJO9NXjs+E+8m/yWcyCmqbsX9r0 xkYDuQEs/0CxEMcC0LEpD8tfE7yDVGI= X-Google-Smtp-Source: ADUXVKIU03bGLtRYvizH/yqiDKjs2xlBOzutG5bbZvOasQNlQjjeum0BKyEvwoFBIiUK1AVhrZvcvw== X-Received: by 2002:aed:3e87:: with SMTP id n7-v6mr9310012qtf.189.1527816470771; Thu, 31 May 2018 18:27:50 -0700 (PDT) From: Keno Fischer To: qemu-devel@nongnu.org Date: Thu, 31 May 2018 21:26:11 -0400 Message-Id: <66d4d3eb6fe9c098b77a6790f015912cd35d86b0.1527814874.git.keno@juliacomputing.com> X-Mailer: git-send-email 2.8.1 In-Reply-To: References: In-Reply-To: References: X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c0d::243 Subject: [Qemu-devel] [PATCH v2 16/20] 9p: darwin: Compatibility for f/l*xattr X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Keno Fischer , groug@kaod.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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 --- Changes from v1: New patch, qemu_fgetxattr had previously been moved to 9p-util as fgetxattr_follow. The remaining functions are required by the proxy-helper. 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 6d588d1..dac6efd 100644 --- a/Makefile +++ b/Makefile @@ -544,7 +544,13 @@ qemu-bridge-helper$(EXESUF): qemu-bridge-helper.o $(CO= MMON_LDADDS) qemu-keymap$(EXESUF): qemu-keymap.o ui/input-keymap.o $(COMMON_LDADDS) =20 fsdev/virtfs-proxy-helper$(EXESUF): fsdev/virtfs-proxy-helper.o fsdev/9p-m= arshal.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 +=3D -lcap +endif =20 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" =20 #define PROGNAME "virtfs-proxy-helper" @@ -459,7 +460,7 @@ static int do_getxattr(int type, struct iovec *iovec, s= truct iovec *out_iovec) v9fs_string_init(&name); retval =3D proxy_unmarshal(iovec, offset, "s", &name); if (retval > 0) { - retval =3D lgetxattr(path.data, name.data, xattr.data, size); + retval =3D qemu_lgetxattr(path.data, name.data, xattr.data, si= ze); if (retval < 0) { retval =3D -errno; } else { @@ -469,7 +470,7 @@ static int do_getxattr(int type, struct iovec *iovec, s= truct iovec *out_iovec) v9fs_string_free(&name); break; case T_LLISTXATTR: - retval =3D llistxattr(path.data, xattr.data, size); + retval =3D qemu_llistxattr(path.data, xattr.data, size); if (retval < 0) { retval =3D -errno; } else { @@ -1000,7 +1001,7 @@ static int process_requests(int sock) retval =3D proxy_unmarshal(&in_iovec, PROXY_HDR_SZ, "sssdd", &= path, &name, &value, &size, &flags); if (retval > 0) { - retval =3D lsetxattr(path.data, + retval =3D qemu_lsetxattr(path.data, name.data, value.data, size, flags); if (retval < 0) { retval =3D -errno; @@ -1016,7 +1017,7 @@ static int process_requests(int sock) retval =3D proxy_unmarshal(&in_iovec, PROXY_HDR_SZ, "ss", &path, &name); if (retval > 0) { - retval =3D lremovexattr(path.data, name.data); + retval =3D qemu_lremovexattr(path.data, name.data); if (retval < 0) { retval =3D -errno; } diff --git a/hw/9pfs/9p-local.c b/hw/9pfs/9p-local.c index 1f0b1b0..7830526 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_typ= e, mode_t tmp_mode; dev_t tmp_dev; =20 - 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 =3D 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 =3D 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 =3D 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 =3D 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 =20 +#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 =3D errno; --=20 2.8.1