]> git.ipfire.org Git - pakfire.git/commitdiff
path: Make pakfire_dirname into the path library
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 17 Oct 2023 08:59:23 +0000 (08:59 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 17 Oct 2023 08:59:23 +0000 (08:59 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/cgroup.c
src/libpakfire/dist.c
src/libpakfire/include/pakfire/path.h
src/libpakfire/include/pakfire/util.h
src/libpakfire/package.c
src/libpakfire/path.c
src/libpakfire/util.c
tests/libpakfire/path.c
tests/libpakfire/util.c

index 3559559a1b070fe8a029d500292ca9943a596c2a..6b41baf0f4a3ffa9f1ef1fd09c15b7d423b94824 100644 (file)
@@ -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;
index 1b28e9f25d134e776bb6d3eefad6889be313f310..ccc18452ea82573b90e93a070ed414a4b108239d 100644 (file)
@@ -37,6 +37,7 @@
 #include <pakfire/packager.h>
 #include <pakfire/pakfire.h>
 #include <pakfire/parser.h>
+#include <pakfire/path.h>
 #include <pakfire/private.h>
 #include <pakfire/repo.h>
 #include <pakfire/string.h>
@@ -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,
index 979bfa12968f298c3f7cf775695081e6fefb5895..3de754313975c9f2c0a8ba5d9318692635b8ee7b 100644 (file)
@@ -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 */
index 2bad16130aa3ce529d5c823b0f7fba6bcf406325..f247367ff28c87ed30f3f99ad355fc0a88275b4f 100644 (file)
@@ -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);
index c94f3f9ffaa401c670a322f0537e0f8ab4c4350d..9bf75b796dda6107b5d2d90c9cc632102a63dd10 100644 (file)
@@ -42,6 +42,7 @@
 #include <pakfire/logging.h>
 #include <pakfire/package.h>
 #include <pakfire/pakfire.h>
+#include <pakfire/path.h>
 #include <pakfire/private.h>
 #include <pakfire/repo.h>
 #include <pakfire/string.h>
@@ -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;
 
index dfe8c791677e14f8dc8ddade7eb6ab0b39c0cc87..e48d3ade1165a8932b9d1f10fb6f4772478a27fb 100644 (file)
@@ -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;
+}
index decef2c4772d0b2dbde172e8a3c982e7ae8d1be4..9197f992cbc87db474d4d65ad221856ee3faa472 100644 (file)
@@ -50,6 +50,7 @@
 #include <pakfire/constants.h>
 #include <pakfire/logging.h>
 #include <pakfire/package.h>
+#include <pakfire/path.h>
 #include <pakfire/string.h>
 #include <pakfire/util.h>
 
@@ -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;
 
index e5c04b62fb19a8fcf18e440afa3e71d0f48d2170..7603b0e92ef0e7847b9c1eaf03188b29b6695227 100644 (file)
@@ -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);
 }
index 05662aeceb417e3dda26a44d33ca0ee111a9f19d..45c950c0d36dca9703752ab1e9a71355c072a869 100644 (file)
@@ -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);