From: Michael Tremer Date: Tue, 17 Oct 2023 08:59:23 +0000 (+0000) Subject: path: Make pakfire_dirname into the path library X-Git-Tag: 0.9.30~1474 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b4ae14b2eadcbfd8c8f6563437ad4059db260e39;p=pakfire.git path: Make pakfire_dirname into the path library Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/cgroup.c b/src/libpakfire/cgroup.c index 3559559a1..6b41baf0f 100644 --- a/src/libpakfire/cgroup.c +++ b/src/libpakfire/cgroup.c @@ -179,7 +179,7 @@ static struct pakfire_cgroup* pakfire_cgroup_parent(struct pakfire_cgroup* cgrou return NULL; // Determine the path of the parent - r = pakfire_dirname(path, cgroup->path); + r = pakfire_path_dirname(path, cgroup->path); if (r) { ERROR(cgroup->pakfire, "Could not determine path for parent cgroup: %m\n"); return NULL; diff --git a/src/libpakfire/dist.c b/src/libpakfire/dist.c index 1b28e9f25..ccc18452e 100644 --- a/src/libpakfire/dist.c +++ b/src/libpakfire/dist.c @@ -37,6 +37,7 @@ #include #include #include +#include #include #include #include @@ -128,7 +129,7 @@ static int pakfire_makefile_set_defaults(struct pakfire* pakfire, } // Set BASEDIR - r = pakfire_dirname(dirname, path); + r = pakfire_path_dirname(dirname, path); if (r) return r; @@ -408,7 +409,7 @@ static int __pakfire_dist_find_root(char* root, const size_t length, const char* return -errno; // Return the parent directory - return __pakfire_dirname(root, length, p); + return __pakfire_path_dirname(root, length, p); } static int pakfire_dist_add_files(struct pakfire* pakfire, diff --git a/src/libpakfire/include/pakfire/path.h b/src/libpakfire/include/pakfire/path.h index 979bfa129..3de754313 100644 --- a/src/libpakfire/include/pakfire/path.h +++ b/src/libpakfire/include/pakfire/path.h @@ -35,4 +35,8 @@ int __pakfire_path_append(char* buffer, const size_t length, const char* s1, con __pakfire_path_merge(path, sizeof(path), s1, s2) int __pakfire_path_merge(char* buffer, const size_t length, const char* s1, const char* s2); +#define pakfire_path_dirname(path, s) \ + __pakfire_path_dirname(path, sizeof(path), s) +int __pakfire_path_dirname(char* buffer, const size_t length, const char* s); + #endif /* PAKFIRE_PATH_H */ diff --git a/src/libpakfire/include/pakfire/util.h b/src/libpakfire/include/pakfire/util.h index 2bad16130..f247367ff 100644 --- a/src/libpakfire/include/pakfire/util.h +++ b/src/libpakfire/include/pakfire/util.h @@ -51,10 +51,6 @@ int __pakfire_path_replace_extension(char* path, const size_t length, const char __pakfire_basename(basename, sizeof(basename), path) int __pakfire_basename(char* basename, const size_t length, const char* path); -#define pakfire_dirname(dirname, path) \ - __pakfire_dirname(dirname, sizeof(dirname), path) -int __pakfire_dirname(char* dirname, const size_t length, const char* path); - char* pakfire_remove_trailing_newline(char* str); int pakfire_read_file_into_buffer(FILE* f, char** buffer, size_t* len); diff --git a/src/libpakfire/package.c b/src/libpakfire/package.c index c94f3f9ff..9bf75b796 100644 --- a/src/libpakfire/package.c +++ b/src/libpakfire/package.c @@ -42,6 +42,7 @@ #include #include #include +#include #include #include #include @@ -927,7 +928,7 @@ PAKFIRE_EXPORT int pakfire_package_set_string( if (r) return r; - r = pakfire_dirname(dirname, value); + r = pakfire_path_dirname(dirname, value); if (r) return r; } @@ -1940,7 +1941,7 @@ int pakfire_package_append_file(struct pakfire_package* pkg, const char* path) { return r; // Get directory part - r = pakfire_dirname(dirname, path); + r = pakfire_path_dirname(dirname, path); if (r) return r; diff --git a/src/libpakfire/path.c b/src/libpakfire/path.c index dfe8c7916..e48d3ade1 100644 --- a/src/libpakfire/path.c +++ b/src/libpakfire/path.c @@ -346,3 +346,33 @@ ERROR: return r; } + +int __pakfire_path_dirname(char* buffer, const size_t length, const char* s) { + struct pakfire_path* path = NULL; + int r; + + // Check inputs + if (!buffer || !length) + return -EINVAL; + + // Parse the path + r = pakfire_path_parse(&path, s); + if (r) + goto ERROR; + + // Drop the last segment + r = pakfire_path_remove_segment(path, path->num_segments - 1); + if (r) + goto ERROR; + + // Write back the path + r = pakfire_path_to_string(path, buffer, length); + if (r) + goto ERROR; + +ERROR: + if (path) + pakfire_path_free(path); + + return r; +} diff --git a/src/libpakfire/util.c b/src/libpakfire/util.c index decef2c47..9197f992c 100644 --- a/src/libpakfire/util.c +++ b/src/libpakfire/util.c @@ -50,6 +50,7 @@ #include #include #include +#include #include #include @@ -313,23 +314,6 @@ int __pakfire_basename(char* __basename, const size_t length, const char* path) return __pakfire_string_set(__basename, length, p); } -int __pakfire_dirname(char* __dirname, const size_t length, const char* path) { - char buffer[PATH_MAX]; - int r; - - // Copy the path into the buffer - r = pakfire_string_set(buffer, path); - if (r) - return r; - - // Run dirname() - char* p = dirname(buffer); - if (!p) - return -errno; - - return __pakfire_string_set(__dirname, length, p); -} - char* pakfire_remove_trailing_newline(char* str) { ssize_t pos = strlen(str) - 1; @@ -509,7 +493,7 @@ int pakfire_mkparentdir(const char* path, mode_t mode) { char dirname[PATH_MAX]; int r; - r = pakfire_dirname(dirname, path); + r = pakfire_path_dirname(dirname, path); if (r) return r; diff --git a/tests/libpakfire/path.c b/tests/libpakfire/path.c index e5c04b62f..7603b0e92 100644 --- a/tests/libpakfire/path.c +++ b/tests/libpakfire/path.c @@ -94,10 +94,23 @@ FAIL: return EXIT_FAILURE; } +static int test_path_dirname(const struct test* t) { + char path[PATH_MAX]; + + ASSERT_SUCCESS(pakfire_path_dirname(path, "/usr/bin/bash")); + ASSERT_STRING_EQUALS(path, "/usr/bin"); + + return EXIT_SUCCESS; + +FAIL: + return EXIT_FAILURE; +} + int main(int argc, const char* argv[]) { testsuite_add_test(test_path_normalize); testsuite_add_test(test_path_append); testsuite_add_test(test_path_merge); + testsuite_add_test(test_path_dirname); return testsuite_run(argc, argv); } diff --git a/tests/libpakfire/util.c b/tests/libpakfire/util.c index 05662aece..45c950c0d 100644 --- a/tests/libpakfire/util.c +++ b/tests/libpakfire/util.c @@ -35,19 +35,6 @@ FAIL: return EXIT_FAILURE; } -static int test_dirname(const struct test* t) { - char dirname[PATH_MAX]; - const char* dir = "/a/b/c"; - - ASSERT_SUCCESS(pakfire_dirname(dirname, dir)); - ASSERT_STRING_EQUALS(dirname, "/a/b"); - - return EXIT_SUCCESS; - -FAIL: - return EXIT_FAILURE; -} - static int test_mkdir(const struct test* t) { char path[PATH_MAX]; @@ -150,7 +137,6 @@ FAIL: int main(int argc, const char* argv[]) { testsuite_add_test(test_basename); - testsuite_add_test(test_dirname); testsuite_add_test(test_mkdir); testsuite_add_test(test_path_match); testsuite_add_test(test_base64);