From 1ceb298f27a5c5ff7cf786f88716f2ca682082c4 Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Sun, 31 Aug 2025 11:59:17 +0200 Subject: [PATCH] change file array double ptr --- libs/spandisc/src/filehandler.c | 15 ++++++++------- libs/spandisc/src/spandisc.c | 5 ++++- libs/spandisc/src/spandisc.h | 2 +- libs/spandisc/src/splitter.c | 22 +++++++++++----------- 4 files changed, 24 insertions(+), 20 deletions(-) diff --git a/libs/spandisc/src/filehandler.c b/libs/spandisc/src/filehandler.c index 9947832..0d91436 100644 --- a/libs/spandisc/src/filehandler.c +++ b/libs/spandisc/src/filehandler.c @@ -17,13 +17,14 @@ void fill_array_from_file(FILE *in, medium_t *srcdata) while (fscanf(in, "%[^\n]\n", path) == 1) { // Lese Dateieigenschaften in st struct stat(path, st); - srcdata->filearray = (file_size_t *) + srcdata->filearray = (file_size_t **) realloc(srcdata->filearray, - (srcdata->length + 1) * sizeof(file_size_t)); - srcdata->filearray[srcdata->length].name = malloc(sizeof(char) * strlen(path) + 1); - strcpy(srcdata->filearray[srcdata->length].name, path); - srcdata->filearray[srcdata->length].type = st->st_mode; - srcdata->filearray[srcdata->length].fsize = st->st_size; + (srcdata->length + 1) * sizeof(file_size_t*)); + srcdata->filearray[srcdata->length] = malloc(sizeof(file_size_t)); + srcdata->filearray[srcdata->length]->name = malloc(sizeof(char) * strlen(path) + 1); + strcpy(srcdata->filearray[srcdata->length]->name, path); + srcdata->filearray[srcdata->length]->type = st->st_mode; + srcdata->filearray[srcdata->length]->fsize = st->st_size; srcdata->length++; } @@ -47,7 +48,7 @@ void write_output_file(const char *output, medium_t* disc) FILE *out = fopen(output, "w"); for (int i = 0; i < disc->length; i++) { - fprintf(out, "%s\n", disc->filearray[i].name); + fprintf(out, "%s\n", disc->filearray[i]->name); } fclose(out); diff --git a/libs/spandisc/src/spandisc.c b/libs/spandisc/src/spandisc.c index 5efb042..9413903 100644 --- a/libs/spandisc/src/spandisc.c +++ b/libs/spandisc/src/spandisc.c @@ -27,6 +27,8 @@ void free_file_size(file_size_t* file_size) { free(file_size->name); file_size->name = NULL; + free(file_size); + file_size = NULL; } void free_medium(medium_t *medium) @@ -41,7 +43,8 @@ void free_collection(collection_t *col) { for (int i = 0; i < col->length; i++) { for (int j = 0; j < col->disc[i]->length; j++) { - free_file_size(&col->disc[i]->filearray[j]); + free_file_size(col->disc[i]->filearray[j]); + col->disc[i]->filearray[j] = NULL; } free_medium(col->disc[i]); diff --git a/libs/spandisc/src/spandisc.h b/libs/spandisc/src/spandisc.h index 54a8489..a93be5d 100644 --- a/libs/spandisc/src/spandisc.h +++ b/libs/spandisc/src/spandisc.h @@ -15,7 +15,7 @@ typedef struct { int nr; unsigned long long freespace; int length; - file_size_t *filearray; + file_size_t **filearray; } medium_t; typedef struct { diff --git a/libs/spandisc/src/splitter.c b/libs/spandisc/src/splitter.c index 8880249..866588d 100644 --- a/libs/spandisc/src/splitter.c +++ b/libs/spandisc/src/splitter.c @@ -9,8 +9,8 @@ int cmpfunc(const void *filea, const void *fileb) { - unsigned long long a = ((const file_size_t*)filea)->fsize; - unsigned long long b = ((const file_size_t*)fileb)->fsize; + unsigned long long a = (*(const file_size_t**)filea)->fsize; + unsigned long long b = (*(const file_size_t**)fileb)->fsize; if (a < b) return 1; @@ -30,12 +30,12 @@ int strcmpfunc(const void *filea, const void *fileb) return strcasecmp(filename1, filename2); } -int can_add_file_to_medium(medium_t *disc, file_size_t file) +int can_add_file_to_medium(medium_t *disc, file_size_t *file) { int retvalue = 0; // ISO9660 filesystem overhead - unsigned long long filesize = ceil(file.fsize / 2048.0) * 2048; + unsigned long long filesize = ceil(file->fsize / 2048.0) * 2048; if (disc->freespace >= filesize) { disc->freespace -= filesize; @@ -45,12 +45,12 @@ int can_add_file_to_medium(medium_t *disc, file_size_t file) return retvalue; } -int bigger_file_ignore_medium(medium_t *disc, file_size_t file) +int bigger_file_ignore_medium(medium_t *disc, file_size_t *file) { int retvalue = 0; - unsigned long long filesize = ceil(file.fsize /2048.0) * 2048; + unsigned long long filesize = ceil(file->fsize /2048.0) * 2048; - if ((file.type & S_IFREG) != S_IFREG) + if ((file->type & S_IFREG) != S_IFREG) retvalue = 1; if (disc->freespace < filesize) @@ -59,7 +59,7 @@ int bigger_file_ignore_medium(medium_t *disc, file_size_t file) return retvalue; } -void add_item_medium(medium_t *medium, file_size_t item) +void add_item_medium(medium_t *medium, file_size_t *item) { medium->filearray = realloc(medium->filearray, (medium->length + 1) * sizeof(file_size_t)); @@ -83,9 +83,9 @@ void move_rest_to_srcdata(medium_t* rest, medium_t* srcdata) } medium_t* splitter_to_disc(medium_t *srcdata, - int (*check)(medium_t*, file_size_t)) + int (*check)(medium_t*, file_size_t*)) { - qsort(srcdata->filearray, srcdata->length, sizeof(file_size_t), cmpfunc); + qsort(srcdata->filearray, srcdata->length, sizeof(file_size_t*), cmpfunc); medium_t* rest = init_medium(); rest->nr = srcdata->nr; @@ -103,7 +103,7 @@ medium_t* splitter_to_disc(medium_t *srcdata, move_rest_to_srcdata(rest, srcdata); - qsort(disc->filearray, disc->length, sizeof(file_size_t), strcmpfunc); + qsort(disc->filearray, disc->length, sizeof(file_size_t*), strcmpfunc); free_medium(rest); rest = NULL; -- 2.47.3