From 4f675685cf91bd4c8286f9818c683af54a39b2d0 Mon Sep 17 00:00:00 2001 From: Matteo Paonessa Date: Fri, 15 May 2015 15:29:07 +0200 Subject: [PATCH] Added progressive support --- .gitignore | 3 ++- bin/caesiumclt | Bin 15696 -> 19080 bytes src/lossless.c | 4 +++- src/main.c | 42 +++++++++++++++++++++++++++++++++++------- 4 files changed, 40 insertions(+), 9 deletions(-) diff --git a/.gitignore b/.gitignore index 9af7784..51267ae 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ output/* -samples/* \ No newline at end of file +samples/* +tmp/* \ No newline at end of file diff --git a/bin/caesiumclt b/bin/caesiumclt index 32298ad8556f5d8cc7d4c41efbfeb2f800f3724c..63c3de49d4f851898ab97d47640a6fef3ea347fb 100755 GIT binary patch literal 19080 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 z #include #include +#include #include "lossless.h" #include "compress.h" @@ -96,6 +97,8 @@ cclt_compress_parameters parse_arguments(int argc, char* argv[]) { int main (int argc, char *argv[]) { struct stat st_buf; errno = 0; + off_t i_t_size = 0, o_t_size = 0; + //Parse arguments cclt_compress_parameters pars = parse_arguments(argc, argv); @@ -147,7 +150,9 @@ int main (int argc, char *argv[]) { //This is the main loop. It iterates through all the input files provided. //It also extract the original filename to be saved in the new destination. //TODO Provide support for folder structure. - for (int i = 0; i < pars.input_files_count; i++) { + for (int i = 0; i < pars.input_files_count; i++) { + off_t i_size, o_size; + int status; //Pointer for stat() call char* output_filename = (char*) malloc (strlen(pars.output_folder) * sizeof(char)); char* i_tmp = (char*) malloc (strlen(pars.input_files[i]) * sizeof(char)); @@ -164,20 +169,26 @@ int main (int argc, char *argv[]) { //TODO OVERALL progress update? //print_progress(i + 1, pars.input_files_count, "Progress: "); - //If the input is a folder, skip - int status = stat (pars.input_files[i], &st_buf); + //Get input stats + status = stat(pars.input_files[i], &st_buf); if (status != 0) { - fprintf(stderr, "Failed to get file stats. Aborting.\n"); + fprintf(stderr, "Failed to get input file stats. Aborting.\n"); exit(-11); } + //If the input is a folder, skip if (S_ISDIR (st_buf.st_mode)) { //TODO If we find a folder, we need to get into it if -R is set continue; } + //Get input file size + //On 32bit system, compile with -D_FILE_OFFSET_BITS=64 + i_size = st_buf.st_size; + i_t_size += i_size; + //TODO Do we want a more verbose output? - fprintf(stdout, "%s\n", pars.input_files[i]); + fprintf(stdout, "Compressing: %s -> %s\n", pars.input_files[i], output_filename); //Lossless optmization requested if (pars.lossless != 0) { @@ -186,14 +197,31 @@ int main (int argc, char *argv[]) { //TODO Standard compression requested } + //Get output stats + status = stat(output_filename, &st_buf); + if (status != 0) { + //TODO This is not critical + fprintf(stderr, "Failed to get output file stats. Aborting.\n"); + exit(-12); + } + o_size = st_buf.st_size; + o_t_size += o_size; + + fprintf(stdout, "%d bytes -> %d bytes [%.2f%%]\n", + i_size, o_size, ((float) o_size - i_size) * 100 / i_size); + //TODO Perform the required instructions //TODO Provide complete progress support //INPUT: pars.input_files[i] | OUTPUT: output_filename //Free allocated memory - free(output_filename); - free(i_tmp); + //TODO Causing segfaults + //free(output_filename); + //free(i_tmp); } + + fprintf(stdout, "Compression completed.\n%d bytes -> %d bytes [%.2f%%]\n", + i_t_size, o_t_size, ((float) o_t_size - i_t_size) * 100 / i_t_size); exit(0); }