From: Michael Tremer Date: Tue, 6 Apr 2021 13:53:15 +0000 (+0000) Subject: file: Store path and abspath separately X-Git-Tag: 0.9.28~1285^2~440 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3b9e3970daba41b936907267925adca4d4a4b459;p=pakfire.git file: Store path and abspath separately Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/file.c b/src/libpakfire/file.c index 5ff56b858..ca8291b97 100644 --- a/src/libpakfire/file.c +++ b/src/libpakfire/file.c @@ -41,7 +41,7 @@ struct _PakfireFile { Pakfire pakfire; int nrefs; - const char* path; + char path[PATH_MAX]; char abspath[PATH_MAX]; char type; ssize_t size; @@ -127,6 +127,9 @@ struct archive_entry* pakfire_file_archive_entry(PakfireFile file) { } int pakfire_file_copy_archive_entry(PakfireFile file, struct archive_entry* entry) { + // Set abspath + pakfire_file_set_abspath(file, archive_entry_sourcepath(entry)); + // Set path pakfire_file_set_path(file, archive_entry_pathname(entry)); @@ -183,23 +186,16 @@ const char* pakfire_file_get_abspath(PakfireFile file) { return file->abspath; } +int pakfire_file_set_abspath(PakfireFile file, const char* path) { + return snprintf(file->abspath, sizeof(file->abspath) - 1, "%s", path); +} + PAKFIRE_EXPORT const char* pakfire_file_get_path(PakfireFile file) { return file->path; } PAKFIRE_EXPORT int pakfire_file_set_path(PakfireFile file, const char* path) { - char* p = pakfire_make_path(file->pakfire, path); - if (!p) - return 1; - - // Copy to abspath - snprintf(file->abspath, sizeof(file->abspath) - 1, "%s", p); - free(p); - - // Store relative path - file->path = file->abspath + strlen(file->abspath) - strlen(path); - - return 0; + return snprintf(file->path, sizeof(file->path) - 1, "%s", path); } PAKFIRE_EXPORT int pakfire_file_get_type(PakfireFile file) { diff --git a/src/libpakfire/include/pakfire/file.h b/src/libpakfire/include/pakfire/file.h index e0e8045db..1db53b602 100644 --- a/src/libpakfire/include/pakfire/file.h +++ b/src/libpakfire/include/pakfire/file.h @@ -74,6 +74,8 @@ struct archive_entry* pakfire_file_archive_entry(PakfireFile file); int pakfire_file_copy_archive_entry(PakfireFile file, struct archive_entry* entry); const char* pakfire_file_get_abspath(PakfireFile file); +int pakfire_file_set_abspath(PakfireFile file, const char* path); + FILE* pakfire_file_fopen(PakfireFile file, const char* mode); #endif