]> git.ipfire.org Git - pakfire.git/commitdiff
libpakfire: Have pakfire_basename/dirname return a dynamically allocated pointer
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 10 Jun 2019 15:45:31 +0000 (16:45 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 10 Jun 2019 15:45:31 +0000 (16:45 +0100)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/archive.c
src/libpakfire/include/pakfire/util.h
src/libpakfire/package.c
src/libpakfire/pakfire.c
src/libpakfire/util.c

index cff1d140eb6f447c10450d135f9f6bb13eb4409b..5d770998252a86569b67f84866c00a19b112e4f8 100644 (file)
@@ -1124,9 +1124,10 @@ PAKFIRE_EXPORT PakfirePackage pakfire_archive_make_package(PakfireArchive archiv
 #endif
 
        // Set filename
-       const char* filename = pakfire_basename(archive->path);
+       char* filename = pakfire_basename(archive->path);
        if (filename) {
                pakfire_package_set_filename(pkg, filename);
+               pakfire_free(filename);
        }
 
        // Set UUID
index 11fc4107969d9c29c3ce4317261b543ee44dc9d7..3447d5e5f48db06a8b209ca01c28bdea9b66b2ca 100644 (file)
@@ -44,8 +44,8 @@ char* pakfire_format_date(time_t t);
 
 char* pakfire_path_join(const char* first, const char* second);
 
-const char* pakfire_basename(const char* path);
-const char* pakfire_dirname(const char* path);
+char* pakfire_basename(const char* path);
+char* pakfire_dirname(const char* path);
 int pakfire_access(Pakfire pakfire, const char* dir, const char* file, int mode);
 int pakfire_mkdir(Pakfire pakfire, const char* path, mode_t mode);
 
index 9195244fcbae0a19e5beb8593ae936ead501f5ed..ca0c7f50bf7d23085b0fa641fb5a8052f63ef20c 100644 (file)
@@ -1000,8 +1000,8 @@ PAKFIRE_EXPORT PakfireFile pakfire_package_filelist_append(PakfirePackage pkg, c
 
        Id handle = pakfire_package_get_handle(pkg);
 
-       const char* dirname  = pakfire_dirname(filename);
-       const char* basename = pakfire_basename(filename);
+       char* dirname  = pakfire_dirname(filename);
+       char* basename = pakfire_basename(filename);
 
        Id did = repodata_str2dir(repodata, dirname, 1);
        if (!did)
@@ -1011,6 +1011,8 @@ PAKFIRE_EXPORT PakfireFile pakfire_package_filelist_append(PakfirePackage pkg, c
                SOLVABLE_FILELIST, did, basename);
 
        pakfire_repo_unref(repo);
+       pakfire_free(dirname);
+       pakfire_free(basename);
 
        return NULL;
 }
index 99548c508a5e65684772d34e58ea2590f29da841..3a14029b87fbf1f6148e995b5aa3d501b2d69708 100644 (file)
@@ -410,7 +410,7 @@ PAKFIRE_EXPORT FILE* pakfire_cache_open(Pakfire pakfire, const char* path, const
        char* cache_path = pakfire_get_cache_path(pakfire, path);
 
        // Ensure that the parent directory exists
-       const char* cache_dirname = pakfire_dirname(cache_path);
+       char* cache_dirname = pakfire_dirname(cache_path);
 
        int r = pakfire_mkdir(pakfire, cache_dirname, S_IRUSR|S_IWUSR|S_IXUSR);
        if (r)
@@ -421,6 +421,7 @@ PAKFIRE_EXPORT FILE* pakfire_cache_open(Pakfire pakfire, const char* path, const
 
 FAIL:
        pakfire_free(cache_path);
+       pakfire_free(cache_dirname);
 
        return f;
 }
index 65de4eec65f4be5c2e97304a86754904559ca872..0c97d422da724b9ba37592a3ec30dfc4e5428a79 100644 (file)
@@ -144,19 +144,25 @@ PAKFIRE_EXPORT char* pakfire_path_join(const char* first, const char* second) {
        return buffer;
 }
 
-const char* pakfire_basename(const char* path) {
+PAKFIRE_EXPORT char* pakfire_basename(const char* path) {
        char* name = pakfire_strdup(path);
 
        const char* r = basename(name);
+       if (r)
+               r = pakfire_strdup(r);
+
        pakfire_free(name);
 
        return r;
 }
 
-const char* pakfire_dirname(const char* path) {
+PAKFIRE_EXPORT char* pakfire_dirname(const char* path) {
        char* parent = pakfire_strdup(path);
 
        const char* r = dirname(parent);
+       if (r)
+               r = pakfire_strdup(r);
+
        pakfire_free(parent);
 
        return r;
@@ -193,14 +199,19 @@ int pakfire_mkdir(Pakfire pakfire, const char* path, mode_t mode) {
                return 0;
 
        // If parent does not exists, we try to create it.
-       const char* parent = pakfire_dirname(path);
+       char* parent = pakfire_dirname(path);
        r = pakfire_access(pakfire, parent, NULL, F_OK);
        if (r)
                r = pakfire_mkdir(pakfire, parent, 0);
 
+       pakfire_free(parent);
+
+       // Exit if parent directory could not be created
        if (r)
                return r;
 
+       DEBUG(pakfire, "Creating directory %s\n", path);
+
        // Finally, create the directory we want.
        r = mkdir(path, mode);
        if (r) {