From 1dc3507474aeb82d023d4fc2949d25fc774e2ce0 Mon Sep 17 00:00:00 2001 From: wm4 Date: Thu, 6 Feb 2020 14:14:35 +0100 Subject: path: add mp_path_is_absolute() Just move it from mp_path_join_bstr() to this new function. --- options/path.c | 28 ++++++++++++++++++---------- options/path.h | 3 +++ 2 files changed, 21 insertions(+), 10 deletions(-) (limited to 'options') diff --git a/options/path.c b/options/path.c index a17d8b4325..9c996ce664 100644 --- a/options/path.c +++ b/options/path.c @@ -254,23 +254,31 @@ char *mp_splitext(const char *path, bstr *root) return (char *)split + 1; } -char *mp_path_join_bstr(void *talloc_ctx, struct bstr p1, struct bstr p2) +bool mp_path_is_absolute(struct bstr path) { - if (p1.len == 0) - return bstrdup0(talloc_ctx, p2); - if (p2.len == 0) - return bstrdup0(talloc_ctx, p1); + if (path.len && strchr(mp_path_separators, path.start[0])) + return true; - bool is_absolute = strchr(mp_path_separators, p2.start[0]); #if HAVE_DOS_PATHS // Note: "X:filename" is a path relative to the current working directory // of drive X, and thus is not an absolute path. It needs to be // followed by \ or /. - if (p2.len >= 3 && p2.start[1] == ':' && - strchr(mp_path_separators, p2.start[2])) - is_absolute = true; + if (path.len >= 3 && path.start[1] == ':' && + strchr(mp_path_separators, path.start[2])) + return true; #endif - if (is_absolute) + + return false; +} + +char *mp_path_join_bstr(void *talloc_ctx, struct bstr p1, struct bstr p2) +{ + if (p1.len == 0) + return bstrdup0(talloc_ctx, p2); + if (p2.len == 0) + return bstrdup0(talloc_ctx, p1); + + if (mp_path_is_absolute(p2)) return bstrdup0(talloc_ctx, p2); bool have_separator = strchr(mp_path_separators, p1.start[p1.len - 1]); diff --git a/options/path.h b/options/path.h index c3c3699a0b..19f4fb5909 100644 --- a/options/path.h +++ b/options/path.h @@ -77,6 +77,9 @@ void mp_path_strip_trailing_separator(char *path); char *mp_path_join(void *talloc_ctx, const char *p1, const char *p2); char *mp_path_join_bstr(void *talloc_ctx, struct bstr p1, struct bstr p2); +// Return whether the path is absolute. +bool mp_path_is_absolute(struct bstr path); + char *mp_getcwd(void *talloc_ctx); bool mp_path_exists(const char *path); -- cgit v1.2.3