diff options
author | Daan De Meyer <daan.j.demeyer@gmail.com> | 2023-03-14 14:03:28 +0100 |
---|---|---|
committer | Daan De Meyer <daan.j.demeyer@gmail.com> | 2023-03-21 16:08:35 +0100 |
commit | 12ef261794714c5db45e7bbb539e4cc3e1110143 (patch) | |
tree | 5508231f41bd27522de94613033a4b0f51ba567c /src/test/test-fs-util.c | |
parent | chase-symlinks: Return zero from access() and stat() helpers (diff) | |
download | systemd-12ef261794714c5db45e7bbb539e4cc3e1110143.tar.xz systemd-12ef261794714c5db45e7bbb539e4cc3e1110143.zip |
chase-symlinks: Add more chase_symlinks_at() helpers
Copies of the corresponding chase_symlinks() helpers.
Diffstat (limited to '')
-rw-r--r-- | src/test/test-fs-util.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/test/test-fs-util.c b/src/test/test-fs-util.c index 69c43485f1..ce61f28017 100644 --- a/src/test/test-fs-util.c +++ b/src/test/test-fs-util.c @@ -5,6 +5,7 @@ #include "alloc-util.h" #include "chase-symlinks.h" #include "copy.h" +#include "dirent-util.h" #include "fd-util.h" #include "fileio.h" #include "fs-util.h" @@ -434,6 +435,9 @@ TEST(chase_symlinks_at) { _cleanup_(rm_rf_physical_and_freep) char *t = NULL; _cleanup_close_ int tfd = -EBADF, fd = -EBADF; _cleanup_free_ char *result = NULL; + _cleanup_closedir_ DIR *dir = NULL; + _cleanup_fclose_ FILE *f = NULL; + struct stat st; const char *p; assert_se((tfd = mkdtemp_open(NULL, 0, &t)) >= 0); @@ -550,6 +554,42 @@ TEST(chase_symlinks_at) { assert_se(fd >= 0); assert_se(fd_verify_directory(fd) >= 0); fd = safe_close(fd); + + /* Test chase_symlinks_at_and_opendir() */ + + assert_se(chase_symlinks_at_and_opendir(tfd, "o/p/e/n/d/i", 0, &result, &dir) >= 0); + FOREACH_DIRENT(de, dir, assert_not_reached()) + assert_se(streq(de->d_name, "r")); + assert_se(streq(result, "o/p/e/n/d/i")); + result = mfree(result); + + /* Test chase_symlinks_at_and_stat() */ + + assert_se(chase_symlinks_at_and_stat(tfd, "o/p", 0, &result, &st) >= 0); + assert_se(stat_verify_directory(&st) >= 0); + assert_se(streq(result, "o/p")); + result = mfree(result); + + /* Test chase_symlinks_at_and_access() */ + + assert_se(chase_symlinks_at_and_access(tfd, "o/p/e", 0, F_OK, &result) >= 0); + assert_se(streq(result, "o/p/e")); + result = mfree(result); + + /* Test chase_symlinks_at_and_fopen_unlocked() */ + + assert_se(chase_symlinks_at_and_fopen_unlocked(tfd, "o/p/e/n/f/i/l/e", 0, "re", &result, &f) >= 0); + assert_se(fread(&(char[1]) {}, 1, 1, f) == 0); + assert_se(feof(f)); + f = safe_fclose(f); + assert_se(streq(result, "o/p/e/n/f/i/l/e")); + result = mfree(result); + + /* Test chase_symlinks_at_and_unlink() */ + + assert_se(chase_symlinks_at_and_unlink(tfd, "o/p/e/n/f/i/l/e", 0, 0, &result) >= 0); + assert_se(streq(result, "o/p/e/n/f/i/l/e")); + result = mfree(result); } TEST(readlink_and_make_absolute) { |