]> gitweb.hhaalo.de Git - discspan.git/commitdiff
change file array double ptr
authorBastian Dehn <hhaalo@arcor.de>
Sun, 31 Aug 2025 09:59:17 +0000 (11:59 +0200)
committerBastian Dehn <hhaalo@arcor.de>
Sun, 31 Aug 2025 09:59:17 +0000 (11:59 +0200)
libs/spandisc/src/filehandler.c
libs/spandisc/src/spandisc.c
libs/spandisc/src/spandisc.h
libs/spandisc/src/splitter.c

index 99478329aa5cba8f314a718546ea95557262a810..0d91436460e9a42968f4cd478e61cca6e9b2608a 100644 (file)
@@ -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);
index 5efb042d250371d1292a2facf51d315179426980..9413903cd1c00fcce8eee952eb27ee1b5e755909 100644 (file)
@@ -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]);
index 54a8489e68223d622deb2a8fbeae257eee9a4698..a93be5d5f721a2b9509c176b6568932126fd4a04 100644 (file)
@@ -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 {
index 8880249a8d79aee0edfe3e3742e655dc8220f97e..866588d3c935a0ff08193148c8bb1aadac1d7d13 100644 (file)
@@ -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;