diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2022-03-23 17:47:33 +0100 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2022-03-29 15:07:05 +0200 |
commit | 48542eac39999f58f6c331b4b3cdf2d78bf15979 (patch) | |
tree | ebd567061ca8d4f712c72f09742b111bc054a0bb /src/basic/stat-util.c | |
parent | 9825181143530af7003fc50567b814dbbee39046 (diff) | |
download | systemd-48542eac39999f58f6c331b4b3cdf2d78bf15979.tar.gz |
basic/stat-util: add null_or_empty_path_with_root()
Diffstat (limited to 'src/basic/stat-util.c')
-rw-r--r-- | src/basic/stat-util.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/src/basic/stat-util.c b/src/basic/stat-util.c index 96364b81ac..b25cabc6b4 100644 --- a/src/basic/stat-util.c +++ b/src/basic/stat-util.c @@ -127,17 +127,22 @@ bool null_or_empty(struct stat *st) { return false; } -int null_or_empty_path(const char *fn) { +int null_or_empty_path_with_root(const char *fn, const char *root) { struct stat st; + int r; assert(fn); - /* If we have the path, let's do an easy text comparison first. */ - if (path_equal(fn, "/dev/null")) + /* A symlink to /dev/null or an empty file? + * When looking under root_dir, we can't expect /dev/ to be mounted, + * so let's see if the path is a (possibly dangling) symlink to /dev/null. */ + + if (path_equal_ptr(path_startswith(fn, root ?: "/"), "dev/null")) return true; - if (stat(fn, &st) < 0) - return -errno; + r = chase_symlinks_and_stat(fn, root, CHASE_PREFIX_ROOT, NULL, &st, NULL); + if (r < 0) + return r; return null_or_empty(&st); } |