Improve <sys/xattr.h> coverage.
Also fix a comment copy & paste mistake and some formatting. Test: treehugger Change-Id: I0af3ab2eb4f180f86b0ab7d2af260f0f30692fdd
This commit is contained in:
parent
1ef8d418be
commit
b82f5cfeb2
3 changed files with 13 additions and 6 deletions
|
@ -37,7 +37,7 @@
|
||||||
|
|
||||||
extern "C" ssize_t __fgetxattr(int, const char*, void*, size_t);
|
extern "C" ssize_t __fgetxattr(int, const char*, void*, size_t);
|
||||||
|
|
||||||
ssize_t fgetxattr(int fd, const char *name, void *value, size_t size) {
|
ssize_t fgetxattr(int fd, const char* name, void* value, size_t size) {
|
||||||
int saved_errno = errno;
|
int saved_errno = errno;
|
||||||
ssize_t result = __fgetxattr(fd, name, value, size);
|
ssize_t result = __fgetxattr(fd, name, value, size);
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,7 @@
|
||||||
|
|
||||||
extern "C" ssize_t __flistxattr(int, char*, size_t);
|
extern "C" ssize_t __flistxattr(int, char*, size_t);
|
||||||
|
|
||||||
ssize_t flistxattr(int fd, char *list, size_t size) {
|
ssize_t flistxattr(int fd, char* list, size_t size) {
|
||||||
int saved_errno = errno;
|
int saved_errno = errno;
|
||||||
ssize_t result = __flistxattr(fd, list, size);
|
ssize_t result = __flistxattr(fd, list, size);
|
||||||
if (result != -1 || errno != EBADF) {
|
if (result != -1 || errno != EBADF) {
|
||||||
|
@ -45,7 +45,7 @@ ssize_t flistxattr(int fd, char *list, size_t size) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// fd could be an O_PATH file descriptor, and the kernel
|
// fd could be an O_PATH file descriptor, and the kernel
|
||||||
// may not directly support fgetxattr() on such a file descriptor.
|
// may not directly support flistxattr() on such a file descriptor.
|
||||||
// Use /proc/self/fd instead to emulate this support.
|
// Use /proc/self/fd instead to emulate this support.
|
||||||
int fd_flag = fcntl(fd, F_GETFL);
|
int fd_flag = fcntl(fd, F_GETFL);
|
||||||
if (fd_flag == -1 || (fd_flag & O_PATH) == 0) {
|
if (fd_flag == -1 || (fd_flag & O_PATH) == 0) {
|
||||||
|
|
|
@ -55,13 +55,13 @@ TEST(sys_xattr, fsetxattr_toosmallbuf) {
|
||||||
ASSERT_EQ(ERANGE, errno);
|
ASSERT_EQ(ERANGE, errno);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(sys_xattr, fsetxattr_invalidfd) {
|
TEST(sys_xattr, fsetxattr_invalid_fd) {
|
||||||
char buf[10];
|
char buf[10];
|
||||||
errno = 0;
|
errno = 0;
|
||||||
ASSERT_EQ(-1, fsetxattr(65535, "user.foo", "0123", 5, 0));
|
ASSERT_EQ(-1, fsetxattr(-1, "user.foo", "0123", 5, 0));
|
||||||
ASSERT_EQ(EBADF, errno);
|
ASSERT_EQ(EBADF, errno);
|
||||||
errno = 0;
|
errno = 0;
|
||||||
ASSERT_EQ(-1, fgetxattr(65535, "user.foo", buf, sizeof(buf)));
|
ASSERT_EQ(-1, fgetxattr(-1, "user.foo", buf, sizeof(buf)));
|
||||||
ASSERT_EQ(EBADF, errno);
|
ASSERT_EQ(EBADF, errno);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -127,3 +127,10 @@ TEST(sys_xattr, flistattr_opath) {
|
||||||
#endif
|
#endif
|
||||||
close(fd);
|
close(fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(sys_xattr, flistattr_invalid_fd) {
|
||||||
|
char buf[65536]; // 64kB is max possible xattr list size. See "man 7 xattr".
|
||||||
|
errno = 0;
|
||||||
|
ASSERT_EQ(-1, flistxattr(-1, buf, sizeof(buf)));
|
||||||
|
ASSERT_EQ(EBADF, errno);
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue