From: Daan De Meyer Date: Mon, 26 Sep 2022 11:06:47 +0000 (+0200) Subject: path-util: Add path_make_relative_cwd() X-Git-Tag: v253-rc1~561^2~7 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=15b4b4ed06a79f396c35cac0adb9c2aaebf73f7a;p=thirdparty%2Fsystemd.git path-util: Add path_make_relative_cwd() --- diff --git a/src/basic/path-util.c b/src/basic/path-util.c index bf93990fde1..f6c2d662b27 100644 --- a/src/basic/path-util.c +++ b/src/basic/path-util.c @@ -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; diff --git a/src/basic/path-util.h b/src/basic/path-util.h index 22d3632e6ef..f93455df3b1 100644 --- a/src/basic/path-util.h +++ b/src/basic/path-util.h @@ -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);