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;
#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>
}
// Set BASEDIR
- r = pakfire_dirname(dirname, path);
+ r = pakfire_path_dirname(dirname, path);
if (r)
return r;
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,
__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 */
__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);
#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>
if (r)
return r;
- r = pakfire_dirname(dirname, value);
+ r = pakfire_path_dirname(dirname, value);
if (r)
return r;
}
return r;
// Get directory part
- r = pakfire_dirname(dirname, path);
+ r = pakfire_path_dirname(dirname, path);
if (r)
return r;
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;
+}
#include <pakfire/constants.h>
#include <pakfire/logging.h>
#include <pakfire/package.h>
+#include <pakfire/path.h>
#include <pakfire/string.h>
#include <pakfire/util.h>
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;
char dirname[PATH_MAX];
int r;
- r = pakfire_dirname(dirname, path);
+ r = pakfire_path_dirname(dirname, path);
if (r)
return r;
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);
}
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];
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);