From 53d308daec6f452ad496972c66a5ecac4517bae2 Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Sat, 31 Jul 2021 18:50:31 +0200 Subject: [PATCH] change: splitt with split if else method --- splitter.c | 57 +++++++++++++++++++++++++++++++++--------------------- 1 file changed, 35 insertions(+), 22 deletions(-) diff --git a/splitter.c b/splitter.c index a3817b9..e487e22 100644 --- a/splitter.c +++ b/splitter.c @@ -6,36 +6,43 @@ #include "discspan.h" #include "splitter.h" -medium_t splitter(medium_t *srcdata) +medium_t init_empty_medium(medium_t srcdata) { - medium_t rest; - rest.nr = srcdata->nr; - rest.freespace = srcdata->freespace; - rest.length = srcdata->length; - rest.filearray = (file_size_t *) - malloc(rest.length * sizeof(file_size_t)); - - medium_t disc; - disc.nr = srcdata->nr; - disc.freespace = srcdata->freespace; - disc.length = srcdata->length; - disc.filearray = (file_size_t *) - malloc(disc.length * sizeof(file_size_t)); + medium_t empty; + empty.nr = srcdata.nr; + empty.freespace = srcdata.freespace; + empty.length = srcdata.length; + empty.filearray = (file_size_t *) + malloc(empty.length * sizeof(file_size_t)); + return empty; +} + +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; + if (disc->freespace >= filesize) { + disc->freespace -= filesize; + retvalue = 1; + } + return retvalue; +} + +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); - unsigned long long filesize = 0; int restcount = 0; int disccount = 0; for (int i = 0; i < srcdata->length; i++) { - // ISO9660 filesystem overhead - filesize = ceil(srcdata->filearray[i].fsize / 2048.0) * 2048; - - if (disc.freespace >= filesize) { - disc.freespace -= filesize; + if (check(&disc, srcdata->filearray[i])) disc.filearray[disccount++] = srcdata->filearray[i]; - } else { + else rest.filearray[restcount++] = srcdata->filearray[i]; - } } disc.length = disccount; @@ -52,3 +59,9 @@ medium_t splitter(medium_t *srcdata) free(rest.filearray); return disc; } + +medium_t splitter(medium_t *srcdata) +{ + medium_t disc = splitter_to_disc(srcdata, can_add_file_to_medium); + return disc; +} -- 2.39.5