From: Lennart Poettering Date: Thu, 21 Aug 2025 20:38:30 +0000 (+0200) Subject: chattr-util: add inode_type_can_chattr() helper X-Git-Tag: v259-rc1~504^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=134749c1d0742170e370578de0aa402f78813ef5;p=thirdparty%2Fsystemd.git chattr-util: add inode_type_can_chattr() helper --- diff --git a/src/basic/chattr-util.c b/src/basic/chattr-util.c index 8e15b56ea39..9a4e97327e0 100644 --- a/src/basic/chattr-util.c +++ b/src/basic/chattr-util.c @@ -41,7 +41,7 @@ int chattr_full( * drivers, where the ioctl might have different effects. Notably, DRM is using the same * ioctl() number. */ - if (!S_ISDIR(st.st_mode) && !S_ISREG(st.st_mode)) + if (!inode_type_can_chattr(st.st_mode)) return -ENOTTY; if (mask == 0 && !ret_previous && !ret_final) @@ -140,7 +140,7 @@ int read_attr_fd(int fd, unsigned *ret) { if (fstat(fd, &st) < 0) return -errno; - if (!S_ISDIR(st.st_mode) && !S_ISREG(st.st_mode)) + if (!inode_type_can_chattr(st.st_mode)) return -ENOTTY; _cleanup_close_ int fd_close = -EBADF; @@ -248,3 +248,7 @@ int set_proj_id_recursive(int fd, uint32_t proj_id) { set_proj_id_cb, UINT32_TO_PTR(proj_id)); } + +bool inode_type_can_chattr(mode_t mode) { + return IN_SET(mode & S_IFMT, S_IFREG, S_IFDIR); +} diff --git a/src/basic/chattr-util.h b/src/basic/chattr-util.h index 50f97971f9c..543843db2c2 100644 --- a/src/basic/chattr-util.h +++ b/src/basic/chattr-util.h @@ -63,3 +63,5 @@ int set_proj_id_recursive(int fd, uint32_t proj_id); static inline int chattr_secret(int fd, ChattrApplyFlags flags) { return chattr_full(fd, NULL, CHATTR_SECRET_FLAGS, CHATTR_SECRET_FLAGS, NULL, NULL, flags|CHATTR_FALLBACK_BITWISE); } + +bool inode_type_can_chattr(mode_t mode);