summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2020-09-01 18:24:44 +0200
committerLennart Poettering <lennart@poettering.net>2020-09-03 15:02:16 +0200
commit7cd296c28fa81b9be976757397556bdb51afaf78 (patch)
tree841f6263f1def1fee4285926a060322ccad68d62 /src
parent86e443de2fd3b0bac785015358c52130e89b66f1 (diff)
downloadsystemd-7cd296c28fa81b9be976757397556bdb51afaf78.tar.gz
stat-util: add new macros for declaring statx variable
Let's deal with the msan initialization issue once for all cases instead of over and over again.
Diffstat (limited to 'src')
-rw-r--r--src/basic/mountpoint-util.c18
-rw-r--r--src/basic/stat-util.h19
-rw-r--r--src/basic/xattr-util.c8
-rw-r--r--src/tmpfiles/tmpfiles.c15
4 files changed, 26 insertions, 34 deletions
diff --git a/src/basic/mountpoint-util.c b/src/basic/mountpoint-util.c
index 2ad27ce830..681da74024 100644
--- a/src/basic/mountpoint-util.c
+++ b/src/basic/mountpoint-util.c
@@ -13,6 +13,7 @@
#include "mountpoint-util.h"
#include "parse-util.h"
#include "path-util.h"
+#include "stat-util.h"
#include "stdio-util.h"
#include "strv.h"
@@ -135,13 +136,8 @@ int fd_is_mount_point(int fd, const char *filename, int flags) {
_cleanup_free_ struct file_handle *h = NULL, *h_parent = NULL;
int mount_id = -1, mount_id_parent = -1;
bool nosupp = false, check_st_dev = true;
+ STRUCT_STATX_DEFINE(sx);
struct stat a, b;
- struct statx sx
-#if HAS_FEATURE_MEMORY_SANITIZER
- = {}
-# warning "Explicitly initializing struct statx, to work around msan limitation. Please remove as soon as msan has been updated to not require this."
-#endif
- ;
int r;
assert(fd >= 0);
@@ -298,15 +294,7 @@ int path_is_mount_point(const char *t, const char *root, int flags) {
}
int path_get_mnt_id(const char *path, int *ret) {
- union {
- struct statx sx;
- struct new_statx nsx;
- } buf
-#if HAS_FEATURE_MEMORY_SANITIZER
- = {}
-# warning "Explicitly initializing struct statx, to work around msan limitation. Please remove as soon as msan has been updated to not require this."
-#endif
- ;
+ STRUCT_NEW_STATX_DEFINE(buf);
int r;
if (statx(AT_FDCWD, path, AT_SYMLINK_NOFOLLOW|AT_NO_AUTOMOUNT, STATX_MNT_ID, &buf.sx) < 0) {
diff --git a/src/basic/stat-util.h b/src/basic/stat-util.h
index 59aedcb7c4..b14451b4e7 100644
--- a/src/basic/stat-util.h
+++ b/src/basic/stat-util.h
@@ -91,3 +91,22 @@ int device_path_parse_major_minor(const char *path, mode_t *ret_mode, dev_t *ret
int proc_mounted(void);
bool stat_inode_unmodified(const struct stat *a, const struct stat *b);
+
+#if HAS_FEATURE_MEMORY_SANITIZER
+# warning "Explicitly initializing struct statx, to work around msan limitation. Please remove as soon as msan has been updated to not require this."
+# define STRUCT_STATX_DEFINE(var) \
+ struct statx var = {}
+# define STRUCT_NEW_STATX_DEFINE(var) \
+ union { \
+ struct statx sx; \
+ struct new_statx nsx; \
+ } var = {}
+#else
+# define STRUCT_STATX_DEFINE(var) \
+ struct statx var
+# define STRUCT_NEW_STATX_DEFINE(var) \
+ union { \
+ struct statx sx; \
+ struct new_statx nsx; \
+ } var
+#endif
diff --git a/src/basic/xattr-util.c b/src/basic/xattr-util.c
index 0125a9c2c0..fe0735ed3d 100644
--- a/src/basic/xattr-util.c
+++ b/src/basic/xattr-util.c
@@ -12,6 +12,7 @@
#include "macro.h"
#include "missing_syscall.h"
#include "sparse-endian.h"
+#include "stat-util.h"
#include "stdio-util.h"
#include "string-util.h"
#include "time-util.h"
@@ -154,12 +155,7 @@ static int parse_crtime(le64_t le, usec_t *usec) {
}
int fd_getcrtime_at(int dirfd, const char *name, usec_t *ret, int flags) {
- struct_statx sx
-#if HAS_FEATURE_MEMORY_SANITIZER
- = {}
-# warning "Explicitly initializing struct statx, to work around msan limitation. Please remove as soon as msan has been updated to not require this."
-#endif
- ;
+ STRUCT_STATX_DEFINE(sx);
usec_t a, b;
le64_t le;
size_t n;
diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c
index 7ab655cd6f..36e31d046c 100644
--- a/src/tmpfiles/tmpfiles.c
+++ b/src/tmpfiles/tmpfiles.c
@@ -544,12 +544,7 @@ static int dir_cleanup(
* file systems such as overlayfs better where each file is originating from a
* different st_dev. */
- struct statx sx
-#if HAS_FEATURE_MEMORY_SANITIZER
- = {}
-# warning "Explicitly initializing struct statx, to work around msan limitation. Please remove as soon as msan has been updated to not require this."
-#endif
- ;
+ STRUCT_STATX_DEFINE(sx);
if (statx(dirfd(d), dent->d_name,
AT_SYMLINK_NOFOLLOW|AT_NO_AUTOMOUNT,
@@ -2293,17 +2288,11 @@ static int clean_item_instance(Item *i, const char* instance) {
_cleanup_closedir_ DIR *d = NULL;
uint32_t dev_major, dev_minor;
nsec_t atime_nsec, mtime_nsec;
+ STRUCT_STATX_DEFINE(sx);
int mountpoint = -1;
usec_t cutoff, n;
uint64_t ino;
- struct statx sx
-#if HAS_FEATURE_MEMORY_SANITIZER
- = {}
-# warning "Explicitly initializing struct statx, to work around msan limitation. Please remove as soon as msan has been updated to not require this."
-#endif
- ;
-
assert(i);
if (!i->age_set)