From: Lennart Poettering Date: Wed, 25 Oct 2023 20:59:53 +0000 (+0200) Subject: xattr-util: add new getxattr_at_bool() helper X-Git-Tag: v255-rc1~129^2~3 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=70554f7ebcc253c5c7a8f66a4fd63632202525b4;p=thirdparty%2Fsystemd.git xattr-util: add new getxattr_at_bool() helper This carefully combines getxattr_at_malloc() and parse_bool(), which is something we use at multiple places. --- diff --git a/src/basic/xattr-util.c b/src/basic/xattr-util.c index 700fdf44b6e..d2daf87ec91 100644 --- a/src/basic/xattr-util.c +++ b/src/basic/xattr-util.c @@ -12,6 +12,7 @@ #include "fd-util.h" #include "macro.h" #include "missing_syscall.h" +#include "parse-util.h" #include "sparse-endian.h" #include "stat-util.h" #include "stdio-util.h" @@ -118,6 +119,20 @@ int getxattr_at_malloc( } } +int getxattr_at_bool(int fd, const char *path, const char *name, int flags) { + _cleanup_free_ char *v = NULL; + int r; + + r = getxattr_at_malloc(fd, path, name, flags, &v); + if (r < 0) + return r; + + if (memchr(v, 0, r)) /* Refuse embedded NUL byte */ + return -EINVAL; + + return parse_boolean(v); +} + static int parse_crtime(le64_t le, usec_t *usec) { uint64_t u; diff --git a/src/basic/xattr-util.h b/src/basic/xattr-util.h index 649a842fe26..19ee3e1c452 100644 --- a/src/basic/xattr-util.h +++ b/src/basic/xattr-util.h @@ -18,6 +18,8 @@ static inline int fgetxattr_malloc(int fd, const char *name, char **ret) { return getxattr_at_malloc(fd, NULL, name, AT_EMPTY_PATH, ret); } +int getxattr_at_bool(int fd, const char *path, const char *name, int flags); + int fd_setcrtime(int fd, usec_t usec); int fd_getcrtime_at(int fd, const char *name, int flags, usec_t *ret);