]> git.ipfire.org Git - pakfire.git/commitdiff
path: Move pakfire_basename into the path library
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 17 Oct 2023 09:05:17 +0000 (09:05 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 17 Oct 2023 09:05:17 +0000 (09:05 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/downloader.c
src/libpakfire/include/pakfire/path.h
src/libpakfire/include/pakfire/util.h
src/libpakfire/linter.c
src/libpakfire/package.c
src/libpakfire/path.c
src/libpakfire/util.c
tests/libpakfire/path.c
tests/libpakfire/util.c

index 2fb6de8f9a76357b37b1ea025902927d5df3626f..be14917dbdb610da25fa9656f33591d45e398a1e 100644 (file)
@@ -35,6 +35,7 @@
 #include <pakfire/i18n.h>
 #include <pakfire/logging.h>
 #include <pakfire/pakfire.h>
+#include <pakfire/path.h>
 #include <pakfire/progress.h>
 #include <pakfire/string.h>
 #include <pakfire/util.h>
@@ -427,7 +428,7 @@ const char* pakfire_downloader_transfer_get_title(struct pakfire_transfer* trans
 
        // Default to the filename if no title is set
        if (!*transfer->title) {
-               r = pakfire_basename(path, transfer->url);
+               r = pakfire_path_basename(path, transfer->url);
                if (r)
                        return NULL;
 
index 3de754313975c9f2c0a8ba5d9318692635b8ee7b..b619bf0738a357ba1d564ea655d061315e5446c6 100644 (file)
@@ -35,6 +35,10 @@ 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_basename(path, s) \
+       __pakfire_path_basename(path, sizeof(path), s)
+int __pakfire_path_basename(char* buffer, const size_t length, const char* s);
+
 #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);
index f247367ff28c87ed30f3f99ad355fc0a88275b4f..a7a2a849ec1a58d50f7b902a797074d3c4076f40 100644 (file)
@@ -47,10 +47,6 @@ int pakfire_path_strip_extension(char* path);
        __pakfire_path_replace_extension(path, sizeof(path), extension)
 int __pakfire_path_replace_extension(char* path, const size_t length, const char* extension);
 
-#define pakfire_basename(basename, path) \
-       __pakfire_basename(basename, sizeof(basename), path)
-int __pakfire_basename(char* basename, 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 2c0df5ac3c40b55c7cb03abc3f53d920cd671940..9cbcc7f96b325f9f337f90d797ef5c75df687990 100644 (file)
@@ -23,6 +23,7 @@
 #include <pakfire/package.h>
 #include <pakfire/pakfire.h>
 #include <pakfire/parser.h>
+#include <pakfire/path.h>
 #include <pakfire/string.h>
 #include <pakfire/util.h>
 
@@ -41,7 +42,7 @@ static int pakfire_lint_makefile_name(struct pakfire* pakfire,
        }
 
        // Determine the basename of the file
-       r = pakfire_basename(basename, path);
+       r = pakfire_path_basename(basename, path);
        if (r)
                return r;
 
index 9bf75b796dda6107b5d2d90c9cc632102a63dd10..0c12e253e156ec776d348b6c29344bdc7941e6e2 100644 (file)
@@ -924,7 +924,7 @@ PAKFIRE_EXPORT int pakfire_package_set_string(
 
                case PAKFIRE_PKG_PATH:
                        if (value) {
-                               r = pakfire_basename(basename, value);
+                               r = pakfire_path_basename(basename, value);
                                if (r)
                                        return r;
 
@@ -1936,7 +1936,7 @@ int pakfire_package_append_file(struct pakfire_package* pkg, const char* path) {
        Repodata* repodata = pakfire_repo_get_repodata(repo);
 
        // Get filename part
-       r = pakfire_basename(basename, path);
+       r = pakfire_path_basename(basename, path);
        if (r)
                return r;
 
index e48d3ade1165a8932b9d1f10fb6f4772478a27fb..ee2fdee6e5ef69fa01f46b3c36b20575a785dcda 100644 (file)
@@ -347,6 +347,41 @@ ERROR:
        return r;
 }
 
+int __pakfire_path_basename(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 everything but the last segment
+       while (path->num_segments > 1) {
+               r = pakfire_path_remove_segment(path, 0);
+               if (r)
+                       goto ERROR;
+       }
+
+       // The result is never absolute
+       path->is_absolute = 0;
+
+       // 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;
+}
+
 int __pakfire_path_dirname(char* buffer, const size_t length, const char* s) {
        struct pakfire_path* path = NULL;
        int r;
index 9197f992cbc87db474d4d65ad221856ee3faa472..b67de4ae4a346fd0219e09730f31e3781389a921 100644 (file)
@@ -297,23 +297,6 @@ ERROR:
        return r;
 }
 
-int __pakfire_basename(char* __basename, 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 basename()
-       char* p = basename(buffer);
-       if (!p)
-               return -errno;
-
-       return __pakfire_string_set(__basename, length, p);
-}
-
 char* pakfire_remove_trailing_newline(char* str) {
        ssize_t pos = strlen(str) - 1;
 
index 7603b0e92ef0e7847b9c1eaf03188b29b6695227..6014fd0ccb823569f13ea18c8f5b2dabc5f89743 100644 (file)
@@ -94,6 +94,18 @@ FAIL:
        return EXIT_FAILURE;
 }
 
+static int test_path_basename(const struct test* t) {
+       char path[PATH_MAX];
+
+       ASSERT_SUCCESS(pakfire_path_basename(path, "/usr/bin/bash"));
+       ASSERT_STRING_EQUALS(path, "bash");
+
+       return EXIT_SUCCESS;
+
+FAIL:
+       return EXIT_FAILURE;
+}
+
 static int test_path_dirname(const struct test* t) {
        char path[PATH_MAX];
 
@@ -110,6 +122,7 @@ 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_basename);
        testsuite_add_test(test_path_dirname);
 
        return testsuite_run(argc, argv);
index 45c950c0d36dca9703752ab1e9a71355c072a869..63fd49640d0a4486c9fac1d248190440a191dfea 100644 (file)
 
 #include "../testsuite.h"
 
-static int test_basename(const struct test* t) {
-       char basename[PATH_MAX];
-       const char* dir = "/a/b/c";
-
-       ASSERT_SUCCESS(pakfire_basename(basename, dir));
-       ASSERT_STRING_EQUALS(basename, "c");
-
-       return EXIT_SUCCESS;
-
-FAIL:
-       return EXIT_FAILURE;
-}
-
 static int test_mkdir(const struct test* t) {
        char path[PATH_MAX];
 
@@ -136,7 +123,6 @@ FAIL:
 }
 
 int main(int argc, const char* argv[]) {
-       testsuite_add_test(test_basename);
        testsuite_add_test(test_mkdir);
        testsuite_add_test(test_path_match);
        testsuite_add_test(test_base64);