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;
}
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));