]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
fd-util: make fd_get_path() support AT_FDCWD 27060/head
authorYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 30 Mar 2023 02:42:21 +0000 (11:42 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 30 Mar 2023 03:03:33 +0000 (12:03 +0900)
src/basic/fd-util.c
src/test/test-fd-util.c

index b968bf948c4644c0d1da600123425dca01944eee..b58a080d90b44e115e9b7368472bbcf35cda4387 100644 (file)
@@ -534,6 +534,11 @@ bool fdname_is_valid(const char *s) {
 int fd_get_path(int fd, char **ret) {
         int r;
 
+        assert(fd >= 0 || fd == AT_FDCWD);
+
+        if (fd == AT_FDCWD)
+                return safe_getcwd(ret);
+
         r = readlink_malloc(FORMAT_PROC_FD_PATH(fd), ret);
         if (r == -ENOENT) {
                 /* ENOENT can mean two things: that the fd does not exist or that /proc is not mounted. Let's make
index 797b774998d45704e41d51148296c09f71d714a9..adcd851d7f54b3a1889651bf74228320eb2110c2 100644 (file)
@@ -649,6 +649,11 @@ TEST(fd_get_path) {
         assert_se(safe_getcwd(&saved_cwd) >= 0);
         assert_se(chdir(t) >= 0);
 
+        assert_se(fd_get_path(AT_FDCWD, &p) >= 0);
+        assert_se(streq(p, t));
+
+        p = mfree(p);
+
         assert_se(q = path_join(t, "regular"));
         assert_se(touch(q) >= 0);
         assert_se(mkdirat_parents(tfd, "subdir/symlink", 0755) >= 0);