]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
path-util: Add path_make_relative_cwd()
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Mon, 26 Sep 2022 11:06:47 +0000 (13:06 +0200)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Wed, 9 Nov 2022 10:14:10 +0000 (11:14 +0100)
src/basic/path-util.c
src/basic/path-util.h

index bf93990fde1db8422f37ca8bfdf46b3a0083bff1..f6c2d662b277f4734d2b25b3c19aa900647016c8 100644 (file)
@@ -221,6 +221,33 @@ int path_make_relative_parent(const char *from_child, const char *to, char **ret
         return path_make_relative(from, to, ret);
 }
 
+int path_make_relative_cwd(const char *p, char **ret) {
+        char *c;
+        int r;
+
+        assert(p);
+        assert(ret);
+
+        if (path_is_absolute(p)) {
+                _cleanup_free_ char *cwd = NULL;
+
+                r = safe_getcwd(&cwd);
+                if (r < 0)
+                        return r;
+
+                r = path_make_relative(cwd, p, &c);
+                if (r < 0)
+                        return r;
+        } else {
+                c = strdup(p);
+                if (!c)
+                        return -ENOMEM;
+        }
+
+        *ret = TAKE_PTR(c);
+        return 0;
+}
+
 char* path_startswith_strv(const char *p, char **set) {
         STRV_FOREACH(s, set) {
                 char *t;
index 22d3632e6ef2c4f24959bd6ab0bd1e23f6e5a87c..f93455df3b1347c809d4f73ba5918ecc216ccec5 100644 (file)
@@ -62,6 +62,7 @@ int safe_getcwd(char **ret);
 int path_make_absolute_cwd(const char *p, char **ret);
 int path_make_relative(const char *from, const char *to, char **ret);
 int path_make_relative_parent(const char *from_child, const char *to, char **ret);
+int path_make_relative_cwd(const char *from, char **ret);
 char *path_startswith_full(const char *path, const char *prefix, bool accept_dot_dot) _pure_;
 static inline char* path_startswith(const char *path, const char *prefix) {
         return path_startswith_full(path, prefix, true);