]> git.ipfire.org Git - pakfire.git/commitdiff
file: Store path and abspath separately
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 6 Apr 2021 13:53:15 +0000 (13:53 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 6 Apr 2021 13:53:55 +0000 (13:53 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/file.c
src/libpakfire/include/pakfire/file.h

index 5ff56b858fd646c94e00e9fe2c1638d9a72dcb9a..ca8291b97452bb1c489b163bfd49fa429260e39d 100644 (file)
@@ -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) {
index e0e8045db0001b89da707cd2546bd06a5948d195..1db53b6027eaf70b93ce8247a444261625b3cff2 100644 (file)
@@ -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