]> git.ipfire.org Git - pakfire.git/commitdiff
files: Statically allocate name, user and group
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 8 Mar 2021 11:58:13 +0000 (11:58 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 8 Mar 2021 11:58:13 +0000 (11:58 +0000)
This avoids many malloc() and free() calls.

Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/file.c

index 8ebd2eb829867e56d4531a1db9372a11d67fcaeb..10030012943943359934618c10118ffdf8622ab7 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <assert.h>
 #include <errno.h>
+#include <linux/limits.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 struct _PakfireFile {
        int nrefs;
 
-       char* name;
+       char name[PATH_MAX];
        char type;
        ssize_t size;
 
-       char* user;
-       char* group;
+       char user[256];
+       char group[256];
 
        mode_t mode;
        time_t time;
@@ -138,12 +139,6 @@ int pakfire_file_copy_archive_entry(PakfireFile file, struct archive_entry* entr
 }
 
 static void pakfire_file_free(PakfireFile file) {
-       if (file->name)
-               free(file->name);
-       if (file->user)
-               free(file->user);
-       if (file->group)
-               free(file->group);
        if (file->chksum)
                free(file->chksum);
 
@@ -237,14 +232,7 @@ PAKFIRE_EXPORT const char* pakfire_file_get_name(PakfireFile file) {
 }
 
 PAKFIRE_EXPORT void pakfire_file_set_name(PakfireFile file, const char* name) {
-       if (file->name)
-               free(file->name);
-
-       if (*name == '/') {
-               file->name = strdup(name);
-       } else {
-               asprintf(&file->name, "/%s", name);
-       }
+       snprintf(file->name, sizeof(file->name) - 1, "%s", name);
 }
 
 PAKFIRE_EXPORT char* pakfire_file_get_dirname(PakfireFile file) {
@@ -300,13 +288,7 @@ PAKFIRE_EXPORT const char* pakfire_file_get_user(PakfireFile file) {
 }
 
 PAKFIRE_EXPORT void pakfire_file_set_user(PakfireFile file, const char* user) {
-       if (file->user) {
-               free(file->user);
-               file->user = NULL;
-       }
-
-       if (user)
-               file->user = strdup(user);
+       snprintf(file->user, sizeof(file->user) - 1, "%s", user);
 }
 
 PAKFIRE_EXPORT const char* pakfire_file_get_group(PakfireFile file) {
@@ -314,13 +296,7 @@ PAKFIRE_EXPORT const char* pakfire_file_get_group(PakfireFile file) {
 }
 
 PAKFIRE_EXPORT void pakfire_file_set_group(PakfireFile file, const char* group) {
-       if (file->group) {
-               free(file->group);
-               file->group = NULL;
-       }
-
-       if (group)
-               file->group = strdup(group);
+       snprintf(file->group, sizeof(file->group) - 1, "%s", group);
 }
 
 PAKFIRE_EXPORT mode_t pakfire_file_get_mode(PakfireFile file) {