From: Zbigniew Jędrzejewski-Szmek Date: Thu, 30 Nov 2017 19:54:31 +0000 (+0100) Subject: util-lib: handle empty string in last_path_component X-Git-Tag: v236~81^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F7237%2Fhead;p=thirdparty%2Fsystemd.git util-lib: handle empty string in last_path_component Now the function returns an empty string when given an empty string. Not sure if this is the best option (maybe this should be an error?), but at least the behaviour is well defined. --- diff --git a/src/basic/path-util.c b/src/basic/path-util.c index 059e4fcf6a5..3bde1d1e01b 100644 --- a/src/basic/path-util.c +++ b/src/basic/path-util.c @@ -719,6 +719,9 @@ const char *last_path_component(const char *path) { unsigned l, k; l = k = strlen(path); + if (l == 0) /* special case — an empty string */ + return path; + while (k > 0 && path[k-1] == '/') k--; diff --git a/src/test/test-path-util.c b/src/test/test-path-util.c index 21d52f5d6e6..0db835608ad 100644 --- a/src/test/test-path-util.c +++ b/src/test/test-path-util.c @@ -411,6 +411,7 @@ static void test_last_path_component(void) { assert_se(streq(last_path_component("././/"), ".//")); assert_se(streq(last_path_component("/foo/a"), "a")); assert_se(streq(last_path_component("/foo/a/"), "a/")); + assert_se(streq(last_path_component(""), "")); } static void test_filename_is_valid(void) {