From: Michael Tremer Date: Mon, 10 Jun 2019 15:45:31 +0000 (+0100) Subject: libpakfire: Have pakfire_basename/dirname return a dynamically allocated pointer X-Git-Tag: 0.9.28~1285^2~957 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b196ec9d849dc63585af1745785308b246357888;p=pakfire.git libpakfire: Have pakfire_basename/dirname return a dynamically allocated pointer Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/archive.c b/src/libpakfire/archive.c index cff1d140e..5d7709982 100644 --- a/src/libpakfire/archive.c +++ b/src/libpakfire/archive.c @@ -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 diff --git a/src/libpakfire/include/pakfire/util.h b/src/libpakfire/include/pakfire/util.h index 11fc41079..3447d5e5f 100644 --- a/src/libpakfire/include/pakfire/util.h +++ b/src/libpakfire/include/pakfire/util.h @@ -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); diff --git a/src/libpakfire/package.c b/src/libpakfire/package.c index 9195244fc..ca0c7f50b 100644 --- a/src/libpakfire/package.c +++ b/src/libpakfire/package.c @@ -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; } diff --git a/src/libpakfire/pakfire.c b/src/libpakfire/pakfire.c index 99548c508..3a14029b8 100644 --- a/src/libpakfire/pakfire.c +++ b/src/libpakfire/pakfire.c @@ -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; } diff --git a/src/libpakfire/util.c b/src/libpakfire/util.c index 65de4eec6..0c97d422d 100644 --- a/src/libpakfire/util.c +++ b/src/libpakfire/util.c @@ -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) {