From: Michael Tremer Date: Mon, 8 Mar 2021 11:58:13 +0000 (+0000) Subject: files: Statically allocate name, user and group X-Git-Tag: 0.9.28~1285^2~605 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c98132d181d6b5ce84499be4cdba62dcd73b7566;p=pakfire.git files: Statically allocate name, user and group This avoids many malloc() and free() calls. Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/file.c b/src/libpakfire/file.c index 8ebd2eb82..100300129 100644 --- a/src/libpakfire/file.c +++ b/src/libpakfire/file.c @@ -20,6 +20,7 @@ #include #include +#include #include #include #include @@ -38,12 +39,12 @@ 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) {