mirror of https://github.com/xemu-project/xemu.git
9p: darwin: Compatibility for f/l*xattr
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 <keno@juliacomputing.com> [Michael Roitzsch: - Rebase for NixOS] Signed-off-by: Michael Roitzsch <reactorcontrol@icloud.com> Signed-off-by: Will Cohen <wwcohen@gmail.com> Message-Id: <20220227223522.91937-9-wwcohen@gmail.com> Signed-off-by: Christian Schoenebeck <qemu_oss@crudebyte.com> Acked-by: Christian Schoenebeck <qemu_oss@crudebyte.com>
This commit is contained in:
parent
57b3910bc3
commit
b5989326f5
|
@ -790,16 +790,20 @@ static int local_fstat(FsContext *fs_ctx, int fid_type,
|
||||||
mode_t tmp_mode;
|
mode_t tmp_mode;
|
||||||
dev_t tmp_dev;
|
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);
|
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);
|
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);
|
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);
|
stbuf->st_rdev = le64_to_cpu(tmp_dev);
|
||||||
}
|
}
|
||||||
} else if (fs_ctx->export_flags & V9FS_SM_MAPPED_FILE) {
|
} else if (fs_ctx->export_flags & V9FS_SM_MAPPED_FILE) {
|
||||||
|
|
|
@ -19,6 +19,23 @@
|
||||||
#define O_PATH_9P_UTIL 0
|
#define O_PATH_9P_UTIL 0
|
||||||
#endif
|
#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)
|
static inline void close_preserve_errno(int fd)
|
||||||
{
|
{
|
||||||
int serrno = errno;
|
int serrno = errno;
|
||||||
|
|
Loading…
Reference in New Issue