From 41979f59d38cda73c61edd5cc25ee543921032f3 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Fri, 15 Jan 2021 14:54:11 +0100 Subject: [PATCH] fs-util: make laccess() macro follow our usual error propagation Functions defined by us are supposed to return negative errno-style errors on errors. laccess() is for access() what lstat() is for stat(), but defined by us as a macro. This led to some confusion regarding error handling. Let's return a negative errno code just in case. This means callers can it use either way: like access(), i.e. checking for a negative return value + looking at errno, or like our own code, i.e. using the negative errno code it returns. --- src/basic/fs-util.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/basic/fs-util.h b/src/basic/fs-util.h index 9a39473567f..13b68729422 100644 --- a/src/basic/fs-util.h +++ b/src/basic/fs-util.h @@ -43,7 +43,8 @@ int futimens_opath(int fd, const struct timespec ts[2]); int fd_warn_permissions(const char *path, int fd); int stat_warn_permissions(const char *path, const struct stat *st); -#define laccess(path, mode) faccessat(AT_FDCWD, (path), (mode), AT_SYMLINK_NOFOLLOW) +#define laccess(path, mode) \ + (faccessat(AT_FDCWD, (path), (mode), AT_SYMLINK_NOFOLLOW) < 0 ? -errno : 0) int touch_file(const char *path, bool parents, usec_t stamp, uid_t uid, gid_t gid, mode_t mode); int touch(const char *path); -- 2.47.3