]> gitweb.hhaalo.de Git - discspan.git/commitdiff
change: calc collection in mem
authorBastian Dehn <hhaalo@arcor.de>
Sat, 7 Aug 2021 17:42:22 +0000 (19:42 +0200)
committerBastian Dehn <hhaalo@arcor.de>
Sat, 7 Aug 2021 17:42:22 +0000 (19:42 +0200)
discspan.h
logic.c
splitter.c
splitter.h

index 4e3a537fe032018eeb0b8b8e0c31ecc5eb2d45c7..fb8d10f75f02e33bb4a46f2c47639686632d6bf4 100644 (file)
@@ -13,4 +13,9 @@ typedef struct {
        file_size_t *filearray;
 } medium_t;
 
+typedef struct {
+       int length;
+       medium_t *disc;
+} collection_t;
+
 #endif
diff --git a/logic.c b/logic.c
index 76fe95ed0c5c9bdd91dfac70e74d0622bed39808..ac9b85bfd111d781c385179094645cfc650604cd 100644 (file)
--- a/logic.c
+++ b/logic.c
@@ -40,21 +40,15 @@ void run(const char *input, const char *output, unsigned long long split)
 
        qsort(srcdata.filearray, srcdata.length, sizeof(file_size_t), cmpfunc);
 
-       medium_t disc;
-       disc = ignore(&srcdata);
-       if (disc.length > 0)
-               write_output_file("ignore", disc);
-       free(disc.filearray);
+       collection_t col = split_all(&srcdata);
 
        char outname[strlen(output) + 3];
-       while (srcdata.length > 0) {
-               srcdata.nr++;
-               sprintf(outname, "%s%03d", output, srcdata.nr);
-               disc = splitter(&srcdata);
-               on_status_print(outname, disc);
-               write_output_file(outname, disc);
-               free(disc.filearray);
+       for (int i = 0; i < col.length; i++) {
+               sprintf(outname, "%s%03d", output, col.disc[i].nr);
+               on_status_print(outname, col.disc[i]);
+               write_output_file(outname, col.disc[i]);
+               free(col.disc[i].filearray);
        }
 
-       free(srcdata.filearray);
+       free(col.disc);
 }
index cef826ffe9f17cf31a0394a5d2a2ec568a367794..5b9aedf9623c645814f123f5dc1732c86a5b78ba 100644 (file)
@@ -72,6 +72,33 @@ medium_t splitter_to_disc(medium_t *srcdata,
        return disc;
 }
 
+collection_t split_all(medium_t *srcdata)
+{
+       collection_t col;
+       col.length = 0;
+       col.disc = NULL;
+
+       medium_t ignoredisc;
+       ignoredisc = ignore(srcdata);
+       if (ignoredisc.length > 0) {
+               col.disc = (medium_t *)malloc(sizeof(medium_t));
+               col.disc[col.length] = ignoredisc;
+               col.length++;
+       }
+
+       while (srcdata->length > 0) {
+               srcdata->nr++;
+               medium_t disc = splitter(srcdata);
+               col.disc = (medium_t *)
+                       realloc(col.disc, (col.length + 1) * sizeof(medium_t));
+               col.disc[col.length] = disc;
+               col.length++;
+       }
+
+       free(srcdata->filearray);
+       return col;
+}
+
 medium_t splitter(medium_t *srcdata)
 {
        medium_t disc = splitter_to_disc(srcdata, can_add_file_to_medium);
index 7557b389b64e22b1a177a426066106b02981cd57..efd1a80ebd04cbd8bb6f9e8225689cae729d2a4e 100644 (file)
@@ -1,6 +1,8 @@
 #ifndef _SPLITTER_H
 #define _SPLITTER_H
 
+collection_t split_all(medium_t *srcdata);
+
 medium_t splitter(medium_t *srcdata);
 
 medium_t ignore(medium_t *srcdata);