Introduced -check_media event= for mismatch events

This commit is contained in:
2009-08-15 17:34:00 +00:00
parent 0b8a049e34
commit 45d28a5169
5 changed files with 106 additions and 57 deletions

View File

@ -4597,6 +4597,7 @@ int Checkmediajob_new(struct CheckmediajoB **o, int flag)
m->map_with_volid= 0;
m->retry= 0;
m->report_mode= 0;
m->event_severity[0]= 0;
return(1);
}
@ -4636,6 +4637,7 @@ int Checkmediajob_copy(struct CheckmediajoB *from, struct CheckmediajoB *to,
to->map_with_volid= from->map_with_volid;
to->retry= from->retry;
to->report_mode= from->report_mode;
strcpy(to->event_severity, from->event_severity);
return(1);
}
@ -6291,9 +6293,10 @@ int Xorriso_check_media_setup_job(struct XorrisO *xorriso,
struct CheckmediajoB *job,
char **argv, int old_idx, int end_idx, int flag)
{
int ret, i;
int ret, i, sev;
double num;
struct CheckmediajoB *default_job;
char sev_text[20];
if(xorriso->check_media_default != NULL)
Checkmediajob_copy(xorriso->check_media_default, job, 0);
@ -6306,6 +6309,18 @@ int Xorriso_check_media_setup_job(struct XorrisO *xorriso,
ret= Sfile_str(job->data_to_path, argv[i] + 8, 0);
if(ret <= 0)
goto ex;
} else if(strncmp(argv[i], "event=", 6) == 0) {
strncpy(sev_text, argv[i] + 6, 19);
sev_text[19]= 0;
ret= Xorriso__text_to_sev(sev_text, &sev, 0);
if(ret <= 0) {
strcpy(xorriso->info_text, "-check_media event=");
Text_shellsafe(sev_text, xorriso->info_text, 1);
strcat(xorriso->info_text, " : Not a known severity name");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
goto ex;
}
strcpy(job->event_severity, sev_text);
} else if(strncmp(argv[i], "map_with_volid=", 15) == 0) {
if(strcmp(argv[i] + 15, "on") == 0)
job->map_with_volid= 1;
@ -6487,10 +6502,13 @@ int Xorriso_check_media_list_job(struct XorrisO *xorriso,
sprintf(report + strlen(report), " report=%s",
job->report_mode == 0 ? "blocks" :
job->report_mode == 1 ? "files" : "blocks_files");
if(all || strcmp(job->event_severity, "ALL") != 0)
sprintf(report + strlen(report), " event=%s", job->event_severity);
if(strlen(report) > 4 * SfileadrL)
{ret= 0; goto ex;}
ret= 1;
ex:;
strcat(report, " ");
strcat(report, xorriso->list_delimiter);
Checkmediajob_destroy(&dflt, 0);
sprintf(default_report, "-check_media_defaults reset=now %s",
@ -13365,10 +13383,12 @@ int Xorriso_option_check_md5(struct XorrisO *xorriso,
{
int ret, i, mem_pci, end_idx, fret, sev, do_report= 0;
int optc= 0;
char **optv= NULL, *cpt, *severity;
char **optv= NULL, *cpt, *severity= "ALL";
struct FindjoB *job= NULL;
double mem_lut= 0.0;
mem_pci= xorriso->pacifier_interval;
ret= Xorriso_opt_args(xorriso, "-check_md5", argc, argv, *idx + 1,
&end_idx, &optc, &optv, 128);
if(ret<=0)
@ -13403,7 +13423,6 @@ int Xorriso_option_check_md5(struct XorrisO *xorriso,
Xorriso_pacifier_reset(xorriso, 0);
mem_lut= xorriso->last_update_time;
}
mem_pci= xorriso->pacifier_interval;
xorriso->pacifier_interval= 5.0;
xorriso->find_check_md5_result= 0;
@ -13494,7 +13513,7 @@ ex:;
int Xorriso_option_check_media(struct XorrisO *xorriso,
int argc, char **argv, int *idx, int flag)
{
int ret, i, count, lba, blocks, quality, pass, was_md5= 0;
int ret, i, count, lba, blocks, quality, pass, was_md5= 0, was_event= 0;
int end_idx, old_idx, os_errno;
char quality_name[80], head_buffer[64*1024];
struct SpotlisT *spotlist= NULL;
@ -13585,10 +13604,16 @@ int Xorriso_option_check_media(struct XorrisO *xorriso,
ret= Spotlist_get_item(spotlist, i, &lba, &blocks, &quality, 0);
if(ret <= 0)
continue;
if(pass == 0 && (quality == Xorriso_read_quality_md5_matcH ||
quality == Xorriso_read_quality_md5_mismatcH)) {
was_md5= 1;
if(pass == 0) {
if(quality == Xorriso_read_quality_md5_mismatcH ||
quality == Xorriso_read_quality_unreadablE) {
was_event= 1;
}
if(quality == Xorriso_read_quality_md5_matcH ||
quality == Xorriso_read_quality_md5_mismatcH) {
was_md5= 1;
continue;
}
}
else if(pass == 1 && !(quality == Xorriso_read_quality_md5_matcH ||
quality == Xorriso_read_quality_md5_mismatcH))
@ -13616,6 +13641,12 @@ int Xorriso_option_check_media(struct XorrisO *xorriso,
}
ret= 1;
ex:;
if(was_event && strcmp(job->event_severity, "ALL") != 0) {
sprintf(xorriso->info_text,
"Event triggered by media read error or MD5 comparison mismatch");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, job->event_severity,
0);
}
Spotlist_destroy(&spotlist, 0);
Checkmediajob_destroy(&job, 0);
return(ret);
@ -15807,7 +15838,7 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag)
" retry=on|off|default , data_to=filepath ,",
" sector_map=filepath , map_with_volid=on|off ,",
" patch_lba0=on|off|force|blockadr[:force] ,",
" report=blocks|files|blocks_files",
" report=blocks|files|blocks_files event=severity",
" -check_media_defaults [options] --",
" Preset options for runs of -check_media and -extract_cut.",
"",