4 * Created on: 25 juil. 2011
15 typedef struct test_cmp_parameters
21 } test_cmp_parameters;
23 /*******************************************************************************
24 * Command line help function
25 *******************************************************************************/
26 void compare_dump_files_help_display() {
27 fprintf(stdout,"\nList of parameters for the compare_dump_files function \n");
29 fprintf(stdout," -b \t REQUIRED \t filename to the reference/baseline dump file \n");
30 fprintf(stdout," -t \t REQUIRED \t filename to the test dump file image\n");
33 /*******************************************************************************
35 *******************************************************************************/
36 int parse_cmdline_cmp(int argc, char **argv, test_cmp_parameters* param)
38 int sizemembasefile, sizememtestfile;
40 const char optlist[] = "b:t:";
44 param->base_filename = NULL;
45 param->test_filename = NULL;
49 while ((c = getopt(argc, argv, optlist)) != -1)
53 sizemembasefile = (int)strlen(optarg)+1;
54 param->base_filename = (char*) malloc(sizemembasefile);
55 param->base_filename[0] = '\0';
56 strncpy(param->base_filename, optarg, strlen(optarg));
57 param->base_filename[strlen(optarg)] = '\0';
58 //printf("param->base_filename = %s [%d / %d]\n", param->base_filename, strlen(param->base_filename), sizemembasefile );
61 sizememtestfile = (int) strlen(optarg) + 1;
62 param->test_filename = (char*) malloc(sizememtestfile);
63 param->test_filename[0] = '\0';
64 strncpy(param->test_filename, optarg, strlen(optarg));
65 param->test_filename[strlen(optarg)] = '\0';
66 //printf("param->test_filename = %s [%d / %d]\n", param->test_filename, strlen(param->test_filename), sizememtestfile);
69 if ( (optopt == 'b') || (optopt == 't') )
70 fprintf(stderr, "Option -%c requires an argument.\n", optopt);
72 if (isprint(optopt)) fprintf(stderr, "Unknown option `-%c'.\n", optopt);
73 else fprintf(stderr, "Unknown option character `\\x%x'.\n", optopt);
76 fprintf(stderr, "WARNING -> this option is not valid \"-%c %s\"\n", c, optarg);
82 for (index = optind; index < argc; index++)
83 fprintf(stderr,"Non-option argument %s\n", argv[index]);
89 /*******************************************************************************
91 *******************************************************************************/
92 int main(int argc, char **argv)
94 test_cmp_parameters inParam;
95 FILE *fbase=NULL, *ftest=NULL;
98 unsigned long l=1, pos;
100 if( parse_cmdline_cmp(argc, argv, &inParam) == EXIT_FAILURE )
102 compare_dump_files_help_display();
103 if (!inParam.base_filename) free(inParam.base_filename);
104 if (!inParam.test_filename) free(inParam.test_filename);
108 // Display Parameters
109 printf("******Parameters********* \n");
110 printf(" base_filename = %s\n"
111 " test_filename = %s\n",
112 inParam.base_filename, inParam.test_filename);
113 printf("************************* \n");
116 printf("Try to open: %s for reading ... ", inParam.base_filename);
117 if((fbase = fopen(inParam.base_filename, "rb"))==NULL)
120 free(inParam.base_filename);
121 free(inParam.test_filename);
127 printf("Try to open: %s for reading ... ", inParam.test_filename);
128 if((ftest = fopen(inParam.test_filename, "rb"))==NULL)
132 free(inParam.base_filename);
133 free(inParam.test_filename);
142 chbase = fgetc(fbase);
145 printf("Error reading base file.\n");
149 chtest = fgetc(ftest);
152 printf("Error reading test file.\n");
158 size_t nbytes = 2048;
159 char *strbase, *strtest, *strbase_d, *strtest_d;
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 fgets(strbase, nbytes, fbase);
168 fgets(strtest, nbytes, ftest);
169 strbase_d = (char *) malloc(strlen(strbase));
170 strtest_d = (char *) malloc(strlen(strtest));
171 strncpy(strbase_d, strbase, strlen(strbase)-1);
172 strncpy(strtest_d, strtest, strlen(strtest)-1);
173 strbase_d[strlen(strbase)] = '\0';
174 strtest_d[strlen(strtest)] = '\0';
175 printf("<%s> vs. <%s>\n", strbase_d, strtest_d);
177 free(strbase);free(strtest);
178 free(strbase_d);free(strtest_d);
197 free(inParam.base_filename);
198 free(inParam.test_filename);
202 printf("\n***** TEST SUCCEED: Files are the same. *****\n");
205 else return EXIT_FAILURE;