diff options
Diffstat (limited to 'src/basic/fs-util.c')
-rw-r--r-- | src/basic/fs-util.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/basic/fs-util.c b/src/basic/fs-util.c index cddd4232fc..2b6189ad90 100644 --- a/src/basic/fs-util.c +++ b/src/basic/fs-util.c @@ -233,6 +233,26 @@ int readlink_and_canonicalize(const char *p, char **r) { return 0; } +int readlink_and_make_absolute_root(const char *root, const char *path, char **ret) { + _cleanup_free_ char *target = NULL, *t = NULL; + const char *full; + int r; + + full = prefix_roota(root, path); + r = readlink_malloc(full, &target); + if (r < 0) + return r; + + t = file_in_same_dir(path, target); + if (!t) + return -ENOMEM; + + *ret = t; + t = NULL; + + return 0; +} + int chmod_and_chown(const char *path, mode_t mode, uid_t uid, gid_t gid) { assert(path); |