From: Bastian Dehn Date: Sat, 31 Jul 2021 17:05:42 +0000 (+0200) Subject: change: ignore files form splitter not readfile X-Git-Url: https://gitweb.hhaalo.de/?a=commitdiff_plain;h=d4881306e219ada50ab5c6b4f82b4f6de23ff863;p=discspan.git change: ignore files form splitter not readfile --- diff --git a/discspan.c b/discspan.c index e900636..33bf56d 100644 --- a/discspan.c +++ b/discspan.c @@ -12,6 +12,7 @@ extern void useage(); extern void read_input_file(const char *input, medium_t *srcdata); extern void write_output_file(const char *output, medium_t disc); extern medium_t splitter(medium_t *srcdata); +extern medium_t ignore(medium_t *srdata); int cmpfunc(const void *filea, const void *fileb) { @@ -100,8 +101,12 @@ int main(int argc, char *argv[]) qsort(srcdata.filearray, srcdata.length, sizeof(file_size_t), cmpfunc); - char outname[strlen(output) + 3]; medium_t disc; + disc = ignore(&srcdata); + write_output_file("ignore", disc); + free(disc.filearray); + + char outname[strlen(output) + 3]; while (srcdata.length > 0) { srcdata.nr++; sprintf(outname, "%s%03d", output, srcdata.nr); diff --git a/filehandler.c b/filehandler.c index c2647e7..ade08ba 100644 --- a/filehandler.c +++ b/filehandler.c @@ -6,7 +6,7 @@ #include "discspan.h" #include "filehandler.h" -void malloc_array_length(FILE *in, medium_t *handler) +void malloc_array_length(FILE *in, medium_t *srcdata) { int lines = 0; char pfad[255]; @@ -16,14 +16,13 @@ void malloc_array_length(FILE *in, medium_t *handler) } rewind(in); - handler->length = lines; - handler->filearray = (file_size_t *) - malloc(handler->length * sizeof(file_size_t)); + srcdata->length = lines; + srcdata->filearray = (file_size_t *) + malloc(srcdata->length * sizeof(file_size_t)); } void fill_array_from_file(FILE *in, medium_t *srcdata) { - FILE *ignore = NULL; char pfad[255]; struct stat st; int lines = 0; @@ -31,26 +30,9 @@ void fill_array_from_file(FILE *in, medium_t *srcdata) while (fscanf(in, "%[^\n]\n", pfad) == 1) { // Lese Dateieigenschaften in st struct stat(pfad, &st); - - if (st.st_size <= srcdata->freespace) { - strcpy(srcdata->filearray[lines].name, pfad); - srcdata->filearray[lines++].fsize = st.st_size; - } else { - // irgnore List erstellen - if (ignore == NULL) - ignore = fopen("ignore", "w"); - - fprintf(ignore, "%s\n", pfad); - } + strcpy(srcdata->filearray[lines].name, pfad); + srcdata->filearray[lines++].fsize = st.st_size; } - - if (ignore != NULL) - fclose(ignore); - - srcdata->length = lines; - srcdata->filearray = (file_size_t *) - realloc(srcdata->filearray, - srcdata->length * sizeof(file_size_t)); } void read_input_file(const char *input, medium_t *srcdata) diff --git a/splitter.c b/splitter.c index e487e22..49ce7d2 100644 --- a/splitter.c +++ b/splitter.c @@ -20,12 +20,26 @@ medium_t init_empty_medium(medium_t srcdata) 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; +} + +int bigger_file_ignore_medium(medium_t *disc, file_size_t file) +{ + int retvalue = 0; + unsigned long long filesize = ceil(file.fsize /2048.0) * 2048; + + if (disc->freespace < filesize) + retvalue = 1; + return retvalue; } @@ -65,3 +79,9 @@ medium_t splitter(medium_t *srcdata) medium_t disc = splitter_to_disc(srcdata, can_add_file_to_medium); return disc; } + +medium_t ignore(medium_t *srcdata) +{ + medium_t ignore = splitter_to_disc(srcdata, bigger_file_ignore_medium); + return ignore; +} diff --git a/splitter.h b/splitter.h index a1d9dd8..7557b38 100644 --- a/splitter.h +++ b/splitter.h @@ -3,4 +3,6 @@ medium_t splitter(medium_t *srcdata); +medium_t ignore(medium_t *srcdata); + #endif