4 * Created on: 25 juil. 2011
14 typedef struct test_cmp_parameters
20 } test_cmp_parameters;
22 /*******************************************************************************
23 * Command line help function
24 *******************************************************************************/
25 void compare_dump_files_help_display() {
26 fprintf(stdout,"\nList of parameters for the compare_dump_files function \n");
28 fprintf(stdout," -b \t REQUIRED \t filename to the reference/baseline dump file \n");
29 fprintf(stdout," -t \t REQUIRED \t filename to the test dump file image\n");
32 /*******************************************************************************
34 *******************************************************************************/
35 int parse_cmdline_cmp(int argc, char **argv, test_cmp_parameters* param)
37 int sizemembasefile, sizememtestfile;
39 const char optlist[] = "b:t:";
43 param->base_filename = NULL;
44 param->test_filename = NULL;
48 while ((c = getopt(argc, argv, optlist)) != -1)
52 sizemembasefile = (int)strlen(optarg)+1;
53 param->base_filename = (char*) malloc(sizemembasefile);
54 param->base_filename[0] = '\0';
55 strncpy(param->base_filename, optarg, strlen(optarg));
56 param->base_filename[strlen(optarg)] = '\0';
57 //printf("param->base_filename = %s [%d / %d]\n", param->base_filename, strlen(param->base_filename), sizemembasefile );
60 sizememtestfile = (int) strlen(optarg) + 1;
61 param->test_filename = (char*) malloc(sizememtestfile);
62 param->test_filename[0] = '\0';
63 strncpy(param->test_filename, optarg, strlen(optarg));
64 param->test_filename[strlen(optarg)] = '\0';
65 //printf("param->test_filename = %s [%d / %d]\n", param->test_filename, strlen(param->test_filename), sizememtestfile);
68 if ( (optopt == 'b') || (optopt == 't') )
69 fprintf(stderr, "Option -%c requires an argument.\n", optopt);
71 if (isprint(optopt)) fprintf(stderr, "Unknown option `-%c'.\n", optopt);
72 else fprintf(stderr, "Unknown option character `\\x%x'.\n", optopt);
75 fprintf(stderr, "WARNING -> this option is not valid \"-%c %s\"\n", c, optarg);
81 for (index = optind; index < argc; index++)
82 fprintf(stderr,"Non-option argument %s\n", argv[index]);
88 /*******************************************************************************
90 *******************************************************************************/
91 int main(int argc, char **argv)
93 test_cmp_parameters inParam;
94 FILE *fbase=NULL, *ftest=NULL;
97 unsigned long l=1, pos;
99 if( parse_cmdline_cmp(argc, argv, &inParam) == EXIT_FAILURE )
101 compare_dump_files_help_display();
102 if (!inParam.base_filename) free(inParam.base_filename);
103 if (!inParam.test_filename) free(inParam.test_filename);
107 // Display Parameters
108 printf("******Parameters********* \n");
109 printf(" base_filename = %s\n"
110 " test_filename = %s\n",
111 inParam.base_filename, inParam.test_filename);
112 printf("************************* \n");
115 printf("Try to open: %s for reading ... ", inParam.base_filename);
116 if((fbase = fopen(inParam.base_filename, "rb"))==NULL)
119 free(inParam.base_filename);
120 free(inParam.test_filename);
126 printf("Try to open: %s for reading ... ", inParam.test_filename);
127 if((ftest = fopen(inParam.test_filename, "rb"))==NULL)
131 free(inParam.base_filename);
132 free(inParam.test_filename);
141 chbase = fgetc(fbase);
144 printf("Error reading base file.\n");
148 chtest = fgetc(ftest);
151 printf("Error reading test file.\n");
157 size_t nbytes = 2048;
158 char* strbase, *strtest;
159 int nbytes_read_base, nbytes_read_test;
161 printf("Files differ at line %lu:\n", l);
162 fseek(fbase,pos,SEEK_SET);
163 fseek(ftest,pos,SEEK_SET);
165 strbase = (char *) malloc(nbytes + 1);
166 strtest = (char *) malloc(nbytes + 1);
167 nbytes_read_base = getline(&strbase, &nbytes, fbase);
168 nbytes_read_test = getline(&strtest, &nbytes, ftest);
169 strbase[nbytes_read_base-1] = '\0';
170 strtest[nbytes_read_test-1] = '\0';
171 printf("<%s> vs. <%s>\n", strbase, strtest);
193 free(inParam.base_filename);
194 free(inParam.test_filename);
198 printf("\n***** TEST SUCCEED: Files are the same. *****\n");
201 else return EXIT_FAILURE;