From: Lennart Poettering Date: Fri, 15 Jan 2021 13:54:11 +0000 (+0100) Subject: fs-util: make laccess() macro follow our usual error propagation X-Git-Tag: v248-rc1~337 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=41979f59d38cda73c61edd5cc25ee543921032f3;p=thirdparty%2Fsystemd.git 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. --- 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);