X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=tests%2Fcompare_dump_files.c;h=7d2227080623fd4a9b5bc719057fc82ba21a6885;hb=3835f37084c762dc7a14b3e995bc005cf584de7c;hp=a8f573ae0be99dbe9db7539c2ef28d911d1f2b75;hpb=f4601aff8bc00cdd379814bbae9cbc8a3bbab3c1;p=openjpeg.git diff --git a/tests/compare_dump_files.c b/tests/compare_dump_files.c index a8f573ae..7d222708 100644 --- a/tests/compare_dump_files.c +++ b/tests/compare_dump_files.c @@ -1,3 +1,29 @@ +/* + * Copyright (c) 2011-2012, Centre National d'Etudes Spatiales (CNES), France + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + /* * compare_dump_files.c * @@ -9,8 +35,9 @@ #include #include #include +#include -#include "getopt.h" +#include "opj_getopt.h" typedef struct test_cmp_parameters { @@ -23,7 +50,7 @@ typedef struct test_cmp_parameters /******************************************************************************* * Command line help function *******************************************************************************/ -void compare_dump_files_help_display() { +static void compare_dump_files_help_display(void) { fprintf(stdout,"\nList of parameters for the compare_dump_files function \n"); fprintf(stdout,"\n"); fprintf(stdout," -b \t REQUIRED \t filename to the reference/baseline dump file \n"); @@ -33,59 +60,56 @@ void compare_dump_files_help_display() { /******************************************************************************* * Parse command line *******************************************************************************/ -int parse_cmdline_cmp(int argc, char **argv, test_cmp_parameters* param) +static int parse_cmdline_cmp(int argc, char **argv, test_cmp_parameters* param) { - int sizemembasefile, sizememtestfile; + size_t sizemembasefile, sizememtestfile; int index; const char optlist[] = "b:t:"; int c; - // Init parameters + /* Init parameters */ param->base_filename = NULL; param->test_filename = NULL; - opterr = 0; + opj_opterr = 0; - while ((c = getopt(argc, argv, optlist)) != -1) + while ((c = opj_getopt(argc, argv, optlist)) != -1) switch (c) { - case 'b': - sizemembasefile = (int)strlen(optarg)+1; - param->base_filename = (char*) malloc(sizemembasefile); - param->base_filename[0] = '\0'; - strncpy(param->base_filename, optarg, strlen(optarg)); - param->base_filename[strlen(optarg)] = '\0'; - //printf("param->base_filename = %s [%d / %d]\n", param->base_filename, strlen(param->base_filename), sizemembasefile ); - break; - case 't': - sizememtestfile = (int) strlen(optarg) + 1; - param->test_filename = (char*) malloc(sizememtestfile); - param->test_filename[0] = '\0'; - strncpy(param->test_filename, optarg, strlen(optarg)); - param->test_filename[strlen(optarg)] = '\0'; - //printf("param->test_filename = %s [%d / %d]\n", param->test_filename, strlen(param->test_filename), sizememtestfile); - break; - case '?': - if ( (optopt == 'b') || (optopt == 't') ) - fprintf(stderr, "Option -%c requires an argument.\n", optopt); - else - if (isprint(optopt)) fprintf(stderr, "Unknown option `-%c'.\n", optopt); - else fprintf(stderr, "Unknown option character `\\x%x'.\n", optopt); - return 1; - default: - fprintf(stderr, "WARNING -> this option is not valid \"-%c %s\"\n", c, optarg); - break; + case 'b': + sizemembasefile = strlen(opj_optarg) + 1; + param->base_filename = (char*) malloc(sizemembasefile); + strcpy(param->base_filename, opj_optarg); + /*printf("param->base_filename = %s [%d / %d]\n", param->base_filename, strlen(param->base_filename), sizemembasefile );*/ + break; + case 't': + sizememtestfile = strlen(opj_optarg) + 1; + param->test_filename = (char*) malloc(sizememtestfile); + strcpy(param->test_filename, opj_optarg); + /*printf("param->test_filename = %s [%d / %d]\n", param->test_filename, strlen(param->test_filename), sizememtestfile);*/ + break; + case '?': + if ( (opj_optopt == 'b') || (opj_optopt == 't') ) + fprintf(stderr, "Option -%c requires an argument.\n", opj_optopt); + else + if (isprint(opj_optopt)) fprintf(stderr, "Unknown option `-%c'.\n", opj_optopt); + else fprintf(stderr, "Unknown option character `\\x%x'.\n", opj_optopt); + return 1; + default: + fprintf(stderr, "WARNING -> this option is not valid \"-%c %s\"\n", c, opj_optarg); + break; } - if (optind != argc) + if (opj_optind != argc) { - for (index = optind; index < argc; index++) + for (index = opj_optind; index < argc; index++) fprintf(stderr,"Non-option argument %s\n", argv[index]); - return EXIT_FAILURE; + return 1; } - return EXIT_SUCCESS; + return 0; } + /******************************************************************************* * MAIN *******************************************************************************/ @@ -93,33 +117,30 @@ int main(int argc, char **argv) { test_cmp_parameters inParam; FILE *fbase=NULL, *ftest=NULL; - char chbase, chtest; - int same = 1; - unsigned long l=1, pos; + int same = 0; + char lbase[512]; + char strbase[512]; + char ltest[512]; + char strtest[512]; - if( parse_cmdline_cmp(argc, argv, &inParam) == EXIT_FAILURE ) + if( parse_cmdline_cmp(argc, argv, &inParam) == 1 ) { compare_dump_files_help_display(); - if (!inParam.base_filename) free(inParam.base_filename); - if (!inParam.test_filename) free(inParam.test_filename); - return EXIT_FAILURE; + goto cleanup; } - // Display Parameters + /* Display Parameters*/ printf("******Parameters********* \n"); printf(" base_filename = %s\n" - " test_filename = %s\n", - inParam.base_filename, inParam.test_filename); + " test_filename = %s\n", + inParam.base_filename, inParam.test_filename); printf("************************* \n"); /* open base file */ printf("Try to open: %s for reading ... ", inParam.base_filename); if((fbase = fopen(inParam.base_filename, "rb"))==NULL) { - printf("Failed.\n"); - free(inParam.base_filename); - free(inParam.test_filename); - return EXIT_FAILURE; + goto cleanup; } printf("Ok.\n"); @@ -127,80 +148,37 @@ int main(int argc, char **argv) printf("Try to open: %s for reading ... ", inParam.test_filename); if((ftest = fopen(inParam.test_filename, "rb"))==NULL) { - printf("Failed.\n"); - fclose(fbase); - free(inParam.base_filename); - free(inParam.test_filename); - return EXIT_FAILURE; + goto cleanup; } printf("Ok.\n"); - pos=ftell(fbase); - - while(!feof(fbase)) + while (fgets(lbase, sizeof(lbase), fbase) && fgets(ltest,sizeof(ltest),ftest)) { - chbase = fgetc(fbase); - if(ferror(fbase)) + int nbase = sscanf(lbase, "%511[^\r\n]", strbase); + int ntest = sscanf(ltest, "%511[^\r\n]", strtest); + assert( nbase != 511 && ntest != 511 ); + if( nbase != 1 || ntest != 1 ) { - printf("Error reading base file.\n"); - return EXIT_FAILURE; + fprintf(stderr, "could not parse line from files\n" ); + goto cleanup; } - - chtest = fgetc(ftest); - if(ferror(ftest)) + if( strcmp( strbase, strtest ) != 0 ) { - printf("Error reading test file.\n"); - return EXIT_FAILURE; - } - - if(chbase != chtest) - { - size_t nbytes = 2048; - char *strbase, *strtest, *strbase_d, *strtest_d; - - printf("Files differ at line %lu:\n", l); - fseek(fbase,pos,SEEK_SET); - fseek(ftest,pos,SEEK_SET); - - strbase = (char *) malloc(nbytes + 1); - strtest = (char *) malloc(nbytes + 1); - fgets(strbase, nbytes, fbase); - fgets(strtest, nbytes, ftest); - strbase_d = (char *) malloc(strlen(strbase)); - strtest_d = (char *) malloc(strlen(strtest)); - strncpy(strbase_d, strbase, strlen(strbase)-1); - strncpy(strtest_d, strtest, strlen(strtest)-1); - strbase_d[strlen(strbase)] = '\0'; - strtest_d[strlen(strtest)] = '\0'; - printf("<%s> vs. <%s>\n", strbase_d, strtest_d); - - free(strbase);free(strtest); - free(strbase_d);free(strtest_d); - same = 0; - break; - } - else - { - if (chbase == '\n') - { - l++; - pos = ftell(fbase); - } + fprintf(stderr,"<%s> vs. <%s>\n", strbase, strtest); + goto cleanup; } } - //Close File - fclose(fbase); - fclose(ftest); + same = 1; + printf("\n***** TEST SUCCEED: Files are the same. *****\n"); +cleanup: + /*Close File*/ + if(fbase) fclose(fbase); + if(ftest) fclose(ftest); - // Free memory + /* Free memory*/ free(inParam.base_filename); free(inParam.test_filename); - if(same) - { - printf("\n***** TEST SUCCEED: Files are the same. *****\n"); - return EXIT_SUCCESS; - } - else return EXIT_FAILURE; + return same ? EXIT_SUCCESS : EXIT_FAILURE; }