From: Luca Boccassi Date: Wed, 7 Apr 2021 09:45:33 +0000 (+0100) Subject: basic: add path_equal_filename helper X-Git-Tag: v249-rc1~463^2~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=727e63e33e6291ff64b5f0a2aefdc9a37e2776d6;p=thirdparty%2Fsystemd.git basic: add path_equal_filename helper --- diff --git a/src/basic/path-util.c b/src/basic/path-util.c index f40f3f27e96..f98859939cd 100644 --- a/src/basic/path-util.c +++ b/src/basic/path-util.c @@ -527,6 +527,27 @@ bool path_equal_or_files_same(const char *a, const char *b, int flags) { return path_equal(a, b) || files_same(a, b, flags) > 0; } +bool path_equal_filename(const char *a, const char *b) { + _cleanup_free_ char *a_basename = NULL, *b_basename = NULL; + int r; + + assert(a); + assert(b); + + r = path_extract_filename(a, &a_basename); + if (r < 0) { + log_debug_errno(r, "Failed to parse basename of %s: %m", a); + return false; + } + r = path_extract_filename(b, &b_basename); + if (r < 0) { + log_debug_errno(r, "Failed to parse basename of %s: %m", b); + return false; + } + + return path_equal(a_basename, b_basename); +} + char* path_join_internal(const char *first, ...) { char *joined, *q; const char *p; diff --git a/src/basic/path-util.h b/src/basic/path-util.h index c0746f68d7a..f82d935dc5c 100644 --- a/src/basic/path-util.h +++ b/src/basic/path-util.h @@ -61,6 +61,8 @@ char* path_startswith(const char *path, const char *prefix) _pure_; int path_compare(const char *a, const char *b) _pure_; bool path_equal(const char *a, const char *b) _pure_; bool path_equal_or_files_same(const char *a, const char *b, int flags); +/* Compares only the last portion of the input paths, ie: the filenames */ +bool path_equal_filename(const char *a, const char *b); char* path_join_internal(const char *first, ...); #define path_join(x, ...) path_join_internal(x, __VA_ARGS__, POINTER_MAX) diff --git a/src/test/test-path-util.c b/src/test/test-path-util.c index b49b0ae9081..1572483602c 100644 --- a/src/test/test-path-util.c +++ b/src/test/test-path-util.c @@ -113,6 +113,11 @@ static void test_path(void) { assert_se(!path_equal_ptr("/a", "/b")); assert_se(!path_equal_ptr("/a", NULL)); assert_se(!path_equal_ptr(NULL, "/a")); + + assert_se(path_equal_filename("/a/c", "/b/c")); + assert_se(path_equal_filename("/a", "/a")); + assert_se(!path_equal_filename("/a/b", "/a/c")); + assert_se(!path_equal_filename("/b", "/c")); } static void test_path_equal_root(void) {