From 70554f7ebcc253c5c7a8f66a4fd63632202525b4 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 25 Oct 2023 22:59:53 +0200 Subject: [PATCH] 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. --- src/basic/xattr-util.c | 15 +++++++++++++++ src/basic/xattr-util.h | 2 ++ 2 files changed, 17 insertions(+) diff --git a/src/basic/xattr-util.c b/src/basic/xattr-util.c index 700fdf44b6..d2daf87ec9 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 649a842fe2..19ee3e1c45 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);