Replace ENODATA with ENOATTR in xattrs functions for macOS builds.

The contract in macOS xattr functions is to return ENOATTR when an
extended attribute cannot be found.
This commit is contained in:
Erik Larsson 2020-08-24 16:50:18 +03:00
parent 39579a045d
commit 4ecc13c0ac
3 changed files with 20 additions and 10 deletions

View File

@ -46,6 +46,16 @@
#define ELIBACC ENOENT
#endif
/* xattr APIs in macOS differs from Linux ones in that they expect the special
* error code ENOATTR to be returned when an attribute cannot be found. So
* define NTFS_NOXATTR_ERRNO to the appropriate "no xattr found" errno value for
* the platform. */
#if defined(__APPLE__) || defined(__DARWIN__)
#define NTFS_NOXATTR_ERRNO ENOATTR
#else
#define NTFS_NOXATTR_ERRNO ENODATA
#endif
#ifndef PATH_MAX
#define PATH_MAX 4096
#endif

View File

@ -3465,7 +3465,7 @@ static void ntfs_fuse_getxattr(fuse_req_t req, fuse_ino_t ino, const char *name,
/* trusted only readable by root */
if ((namespace == XATTRNS_TRUSTED)
&& security.uid) {
res = -ENODATA;
res = -NTFS_NOXATTR_ERRNO;
goto out;
}
#endif
@ -3476,7 +3476,7 @@ static void ntfs_fuse_getxattr(fuse_req_t req, fuse_ino_t ino, const char *name,
}
/* Return with no result for symlinks, fifo, etc. */
if (!user_xattrs_allowed(ctx, ni)) {
res = -ENODATA;
res = -NTFS_NOXATTR_ERRNO;
goto exit;
}
/* otherwise file must be readable */
@ -3493,7 +3493,7 @@ static void ntfs_fuse_getxattr(fuse_req_t req, fuse_ino_t ino, const char *name,
}
na = ntfs_attr_open(ni, AT_DATA, lename, lename_len);
if (!na) {
res = -ENODATA;
res = -NTFS_NOXATTR_ERRNO;
goto exit;
}
rsize = na->data_size;
@ -3704,7 +3704,7 @@ static void ntfs_fuse_setxattr(fuse_req_t req, fuse_ino_t ino, const char *name,
}
if (!na) {
if (flags == XATTR_REPLACE) {
res = -ENODATA;
res = -NTFS_NOXATTR_ERRNO;
goto exit;
}
if (ntfs_attr_add(ni, AT_DATA, lename, lename_len, NULL, 0)) {
@ -3942,7 +3942,7 @@ static void ntfs_fuse_removexattr(fuse_req_t req, fuse_ino_t ino, const char *na
}
if (ntfs_attr_remove(ni, AT_DATA, lename, lename_len)) {
if (errno == ENOENT)
errno = ENODATA;
errno = NTFS_NOXATTR_ERRNO;
res = -errno;
}
if (!res) {

View File

@ -3236,14 +3236,14 @@ static int ntfs_fuse_getxattr(const char *path, const char *name,
/* trusted only readable by root */
if ((namespace == XATTRNS_TRUSTED)
&& security.uid)
return -ENODATA;
return -NTFS_NOXATTR_ERRNO;
#endif
ni = ntfs_pathname_to_inode(ctx->vol, NULL, path);
if (!ni)
return -errno;
/* Return with no result for symlinks, fifo, etc. */
if (!user_xattrs_allowed(ctx, ni)) {
res = -ENODATA;
res = -NTFS_NOXATTR_ERRNO;
goto exit;
}
/* otherwise file must be readable */
@ -3260,7 +3260,7 @@ static int ntfs_fuse_getxattr(const char *path, const char *name,
}
na = ntfs_attr_open(ni, AT_DATA, lename, lename_len);
if (!na) {
res = -ENODATA;
res = -NTFS_NOXATTR_ERRNO;
goto exit;
}
rsize = na->data_size;
@ -3450,7 +3450,7 @@ static int ntfs_fuse_setxattr(const char *path, const char *name,
}
if (!na) {
if (flags == XATTR_REPLACE) {
res = -ENODATA;
res = -NTFS_NOXATTR_ERRNO;
goto exit;
}
if (ntfs_attr_add(ni, AT_DATA, lename, lename_len, NULL, 0)) {
@ -3680,7 +3680,7 @@ static int ntfs_fuse_removexattr(const char *path, const char *name)
}
if (ntfs_attr_remove(ni, AT_DATA, lename, lename_len)) {
if (errno == ENOENT)
errno = ENODATA;
errno = NTFS_NOXATTR_ERRNO;
res = -errno;
}
if (!res) {