Completed find action check_md5

This commit is contained in:
2009-08-12 13:03:07 +00:00
parent 797a16be81
commit 447aaea8fd
5 changed files with 105 additions and 32 deletions

View File

@ -4829,7 +4829,7 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
m->start_time= 0.0;
m->last_update_time= 0.0;
m->find_compare_result= 1;
m->find_check_md5_result= 1;
m->find_check_md5_result= 0;
m->node_counter= 0;
m->node_array_size= 0;
@ -12470,6 +12470,35 @@ ex:;
}
int Xorriso_report_m5_outcome(struct XorrisO *xorriso, char *severity,
int flag)
{
if((xorriso->find_check_md5_result & 3) == 0) {
sprintf(xorriso->result_line,
"File contents and their MD5 checksums match.\n");
} else if(xorriso->find_check_md5_result & 1) {
sprintf(xorriso->result_line,
"Mismatch detected between file contents and MD5 checksums.\n");
}
Xorriso_result(xorriso,0);
if(xorriso->find_check_md5_result & 2) {
sprintf(xorriso->result_line,
"Encountered other errors during MD5 checking.\n");
Xorriso_result(xorriso,0);
}
if(xorriso->find_check_md5_result & 4) {
sprintf(xorriso->result_line,
"There were data files which had no MD5 and thus could not be checked.\n");
Xorriso_result(xorriso,0);
}
if((xorriso->find_check_md5_result & 3) && strcmp(severity, "ALL") != 0) {
sprintf(xorriso->info_text, "Event triggered by MD5 comparison mismatch");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, severity, 0);
}
return(1);
}
/* ---------------------------- Options API ------------------------ */
@ -13352,7 +13381,7 @@ int Xorriso_option_check_md5(struct XorrisO *xorriso,
return(ret);
}
xorriso->find_check_md5_result= 1;
xorriso->find_check_md5_result= 0;
for(i= 0; i < optc; i++) {
if(flag & 8) {
ret= Findjob_new(&job, optv[i], 0);
@ -13360,7 +13389,7 @@ int Xorriso_option_check_md5(struct XorrisO *xorriso,
Xorriso_no_findjob(xorriso, "-check_md5_r", 0);
{ret= -1; goto ex;}
}
Findjob_set_action_target(job, 35, NULL, 0);
Findjob_set_action_target(job, 35, severity, 0);
cpt= optv[i];
ret= Xorriso_findi_sorted(xorriso, job, (off_t) 0, 1, &cpt, 0);
Findjob_destroy(&job, 0);
@ -13368,12 +13397,16 @@ int Xorriso_option_check_md5(struct XorrisO *xorriso,
ret= xorriso->find_compare_result;
else {
ret= -1;
xorriso->find_check_md5_result= -1;
xorriso->find_check_md5_result|= 2;
}
} else {
ret= Xorriso_check_md5(xorriso, NULL, optv[i], 4);
if(ret < xorriso->find_check_md5_result)
xorriso->find_check_md5_result= ret;
if(ret < 0)
xorriso->find_check_md5_result|= 2;
else if(ret == 0)
xorriso->find_check_md5_result|= 1;
else if(ret == 2)
xorriso->find_check_md5_result|= 4;
}
if(ret>0 && !xorriso->request_to_abort)
continue; /* regular bottom of loop */
@ -13389,20 +13422,8 @@ int Xorriso_option_check_md5(struct XorrisO *xorriso,
Xorriso_pacifier_callback(xorriso, "content bytes read",
xorriso->pacifier_count, 0, "", 1);
report_outcome:;
if(xorriso->find_check_md5_result > 0) {
sprintf(xorriso->result_line,
"File contents and their MD5 checksums match.\n");
} else if(xorriso->find_check_md5_result == 0) {
sprintf(xorriso->result_line,
"Differences detected between file contents and MD5 checksums.\n");
} else {
sprintf(xorriso->result_line, "MD5 checking failed due to error.\n");
}
Xorriso_result(xorriso,0);
if(xorriso->find_check_md5_result <= 0 && strcmp(severity, "ALL") != 0) {
sprintf(xorriso->info_text, "Event triggered by MD5 comparison mismatch");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, severity, 0);
}
Xorriso_report_m5_outcome(xorriso, severity, 0);
ex:;
(*idx)= end_idx;
Xorriso_opt_args(xorriso, "-getfacl", argc, argv, *idx, &end_idx,
@ -13410,7 +13431,7 @@ ex:;
Findjob_destroy(&job, 0);
if(ret <= 0)
return(ret);
return(xorriso->find_check_md5_result > 0);
return((xorriso->find_check_md5_result & 3) == 0);
}
@ -14993,6 +15014,12 @@ not_enough_exec_arguments:;
Findjob_set_action_target(job, 33, NULL, 0);
} else if(strcmp(cpt, "get_md5")==0) {
Findjob_set_action_target(job, 34, NULL, 0);
} else if(strcmp(cpt, "check_md5")==0) {
if(i + 1 >= end_idx)
goto not_enough_exec_arguments;
i+= 1;
Findjob_set_action_target(job, 35, argv[i], 0);
flag|= 8;
} else {
sprintf(xorriso->info_text, "-find -exec: unknown action %s",
Text_shellsafe(argv[i], sfe, 0));
@ -15011,7 +15038,7 @@ sorry_ex:;
0);
else if(flag & 8) {
cpt= start_path;
ret= Xorriso_findi_sorted(xorriso, first_job, (off_t) 0, 1, &cpt, 0);
ret= Xorriso_findi_sorted(xorriso, first_job, (off_t) 0, 1, &cpt, 8);
} else
ret= Xorriso_findi(xorriso, first_job, NULL, (off_t) 0, NULL,
start_path, &dir_stbuf, 0, (flag&4)>>1);