From: Bastian Dehn Date: Sun, 8 Aug 2021 19:13:42 +0000 (+0200) Subject: change: split better realloc without empty mem X-Git-Url: https://gitweb.hhaalo.de/?a=commitdiff_plain;h=1323117dae9347431a5caefd9bd2b51b1f7984db;p=discspan.git change: split better realloc without empty mem --- diff --git a/splitter.c b/splitter.c index a049834..d057ea9 100644 --- a/splitter.c +++ b/splitter.c @@ -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));