]> gitweb.hhaalo.de Git - discspan.git/commitdiff
change: split better realloc without empty mem
authorBastian Dehn <hhaalo@arcor.de>
Sun, 8 Aug 2021 19:13:42 +0000 (21:13 +0200)
committerBastian Dehn <hhaalo@arcor.de>
Sun, 8 Aug 2021 19:13:42 +0000 (21:13 +0200)
splitter.c

index a049834b87aed90d6c998ec7dd47b095c5c80fc4..d057ea9a0115fa590e94bc00268cdd77805f3f76 100644 (file)
@@ -11,9 +11,9 @@ medium_t init_empty_medium(medium_t srcdata)
        medium_t empty;
        empty.nr = srcdata.nr;
        empty.freespace = srcdata.freespace;
-       empty.length = srcdata.length;
+       empty.length = 0;
        empty.filearray = (file_size_t *)
-               malloc(empty.length * sizeof(file_size_t));
+               malloc(1 * sizeof(file_size_t));
        return empty;
 }
 
@@ -46,30 +46,32 @@ 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)
+{
+       medium->filearray = (file_size_t *)realloc(medium->filearray,
+                       (medium->length + 1) *
+                       sizeof(file_size_t));
+       medium->filearray[medium->length] = item;
+       medium->length++;
+}
+
 medium_t splitter_to_disc(medium_t *srcdata,
                int (*check)(medium_t*, file_size_t))
 {
        medium_t rest = init_empty_medium(*srcdata);
        medium_t disc = init_empty_medium(*srcdata);
 
-       int restcount = 0;
-       int disccount = 0;
-
        for (int i = 0; i < srcdata->length; i++) {
                if (check(&disc, srcdata->filearray[i]))
-                       disc.filearray[disccount++] = srcdata->filearray[i];
+                       add_item_medium(&disc, srcdata->filearray[i]);
                else
-                       rest.filearray[restcount++] = srcdata->filearray[i];
+                       add_item_medium(&rest, srcdata->filearray[i]);
        }
 
-       disc.length = disccount;
-       disc.filearray = (file_size_t *)
-               realloc(disc.filearray, disc.length * sizeof(file_size_t));
-
        memcpy(srcdata->filearray, rest.filearray,
-                       restcount * sizeof(file_size_t));
+                       rest.length * sizeof(file_size_t));
 
-       srcdata->length = restcount;
+       srcdata->length = rest.length;
        srcdata->filearray = (file_size_t *) realloc(srcdata->filearray,
                                        srcdata->length * sizeof(file_size_t));