New -check_media sub options bad_limit=, slow_limit=, chunk_size=
This commit is contained in:
@ -4193,8 +4193,9 @@ int Spotlist_add_item(struct SpotlisT *o, int start_lba, int blocks,
|
||||
(o->list_count)++;
|
||||
|
||||
if(debug_verbous) {char quality_name[80];
|
||||
fprintf(stderr, "debug: lba %10d , size %10d , quality %s\n",
|
||||
start_lba, blocks, Spotlist__quality_name(quality, quality_name, 0));
|
||||
fprintf(stderr, "debug: lba %10d , size %10d , quality '%s'\n",
|
||||
start_lba, blocks, Spotlist__quality_name(quality, quality_name,
|
||||
Xorriso_read_quality_invaliD, 0) + 2);
|
||||
}
|
||||
|
||||
return(1);
|
||||
@ -4262,32 +4263,41 @@ int Spotlist_get_item(struct SpotlisT *o, int idx,
|
||||
}
|
||||
|
||||
|
||||
char *Spotlist__quality_name(int quality, char name[80], int flag)
|
||||
char *Spotlist__quality_name(int quality, char name[80], int bad_limit,
|
||||
int flag)
|
||||
{
|
||||
if(quality == Xorriso_read_quality_gooD)
|
||||
strcpy(name, "+ good");
|
||||
else if(quality == Xorriso_read_quality_md5_matcH)
|
||||
strcpy(name, "+ md5_match");
|
||||
else if(quality == Xorriso_read_quality_sloW)
|
||||
strcpy(name, "+ slow");
|
||||
else if(quality == Xorriso_read_quality_partiaL)
|
||||
strcpy(name, "+ partial");
|
||||
else if(quality == Xorriso_read_quality_valiD)
|
||||
strcpy(name, "+ valid");
|
||||
else if(quality == Xorriso_read_quality_untesteD)
|
||||
strcpy(name, "0 untested");
|
||||
else if(quality == Xorriso_read_quality_invaliD)
|
||||
strcpy(name, "- invalid");
|
||||
else if(quality == Xorriso_read_quality_tao_enD)
|
||||
strcpy(name, "0 tao end");
|
||||
else if(quality == Xorriso_read_quality_off_tracK)
|
||||
strcpy(name, "0 off track");
|
||||
else if(quality == Xorriso_read_quality_md5_mismatcH)
|
||||
strcpy(name, "- md5_mismatch");
|
||||
else if(quality == Xorriso_read_quality_unreadablE)
|
||||
strcpy(name, "- unreadable");
|
||||
if(quality == Xorriso_read_quality_untesteD ||
|
||||
quality == Xorriso_read_quality_tao_enD ||
|
||||
quality == Xorriso_read_quality_off_tracK)
|
||||
strcpy(name, "0 ");
|
||||
else if(quality <= bad_limit)
|
||||
strcpy(name, "- ");
|
||||
else
|
||||
sprintf(name, "0x%8.8X", (unsigned) quality);
|
||||
strcpy(name, "+ ");
|
||||
if(quality == Xorriso_read_quality_gooD)
|
||||
strcat(name, "good");
|
||||
else if(quality == Xorriso_read_quality_md5_matcH)
|
||||
strcat(name, "md5_match");
|
||||
else if(quality == Xorriso_read_quality_sloW)
|
||||
strcat(name, "slow");
|
||||
else if(quality == Xorriso_read_quality_partiaL)
|
||||
strcat(name, "partial");
|
||||
else if(quality == Xorriso_read_quality_valiD)
|
||||
strcat(name, "valid");
|
||||
else if(quality == Xorriso_read_quality_untesteD)
|
||||
strcat(name, "untested");
|
||||
else if(quality == Xorriso_read_quality_invaliD)
|
||||
strcat(name, "invalid");
|
||||
else if(quality == Xorriso_read_quality_tao_enD)
|
||||
strcat(name, "tao_end");
|
||||
else if(quality == Xorriso_read_quality_off_tracK)
|
||||
strcat(name, "off_track");
|
||||
else if(quality == Xorriso_read_quality_md5_mismatcH)
|
||||
strcat(name, "md5_mismatch");
|
||||
else if(quality == Xorriso_read_quality_unreadablE)
|
||||
strcat(name, "unreadable");
|
||||
else
|
||||
sprintf(name, "0 0x%8.8X", (unsigned int) quality);
|
||||
return(name);
|
||||
}
|
||||
|
||||
@ -4625,7 +4635,7 @@ int Checkmediajob_new(struct CheckmediajoB **o, int flag)
|
||||
m->use_dev= 0;
|
||||
m->min_lba= -1;
|
||||
m->max_lba= -1;
|
||||
m->min_block_size= 16;
|
||||
m->min_block_size= 0;
|
||||
m->mode= 0;
|
||||
m->start_time= time(NULL);
|
||||
m->time_limit= 28800;
|
||||
@ -4643,6 +4653,8 @@ int Checkmediajob_new(struct CheckmediajoB **o, int flag)
|
||||
m->retry= 0;
|
||||
m->report_mode= 0;
|
||||
strcpy(m->event_severity, "ALL");
|
||||
m->slow_threshold_seq= 1.0;
|
||||
m->untested_valid= 0;
|
||||
return(1);
|
||||
}
|
||||
|
||||
@ -4683,6 +4695,8 @@ int Checkmediajob_copy(struct CheckmediajoB *from, struct CheckmediajoB *to,
|
||||
to->retry= from->retry;
|
||||
to->report_mode= from->report_mode;
|
||||
strcpy(to->event_severity, from->event_severity);
|
||||
to->slow_threshold_seq= from->slow_threshold_seq;
|
||||
to->untested_valid= from->untested_valid;
|
||||
return(1);
|
||||
}
|
||||
|
||||
@ -4788,6 +4802,7 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
|
||||
m->no_volset_present= 0;
|
||||
m->in_sector_map= NULL;
|
||||
m->check_media_default= NULL;
|
||||
m->check_media_bad_limit= Xorriso_read_quality_invaliD;
|
||||
m->outdev[0]= 0;
|
||||
m->out_drive_handle= NULL;
|
||||
m->out_charset= NULL;
|
||||
@ -6360,10 +6375,41 @@ int Xorriso_check_media_setup_job(struct XorrisO *xorriso,
|
||||
ret= Sfile_str(job->abort_file_path, argv[i] + 11, 0);
|
||||
if(ret <= 0)
|
||||
goto ex;
|
||||
} else if(strncmp(argv[i], "bad_limit=", 10) == 0) {
|
||||
if(strcmp(argv[i] + 10, "good") == 0)
|
||||
xorriso->check_media_bad_limit= Xorriso_read_quality_gooD;
|
||||
else if(strcmp(argv[i] + 10, "md5_match") == 0)
|
||||
xorriso->check_media_bad_limit= Xorriso_read_quality_md5_matcH;
|
||||
else if(strcmp(argv[i] + 10, "slow") == 0)
|
||||
xorriso->check_media_bad_limit= Xorriso_read_quality_sloW;
|
||||
else if(strcmp(argv[i] + 10, "partial") == 0)
|
||||
xorriso->check_media_bad_limit= Xorriso_read_quality_partiaL;
|
||||
else if(strcmp(argv[i] + 10, "valid") == 0)
|
||||
xorriso->check_media_bad_limit= Xorriso_read_quality_valiD;
|
||||
else if(strcmp(argv[i] + 10, "untested") == 0)
|
||||
xorriso->check_media_bad_limit= Xorriso_read_quality_untesteD;
|
||||
else if(strcmp(argv[i] + 10, "invalid") == 0)
|
||||
xorriso->check_media_bad_limit= Xorriso_read_quality_invaliD;
|
||||
else if(strcmp(argv[i] + 10, "tao_end") == 0)
|
||||
xorriso->check_media_bad_limit= Xorriso_read_quality_tao_enD;
|
||||
else if(strcmp(argv[i] + 10, "off_track") == 0)
|
||||
xorriso->check_media_bad_limit= Xorriso_read_quality_off_tracK;
|
||||
else if(strcmp(argv[i] + 10, "md5_mismatch") == 0)
|
||||
xorriso->check_media_bad_limit= Xorriso_read_quality_md5_mismatcH;
|
||||
else if(strcmp(argv[i] + 10, "unreadable") == 0)
|
||||
xorriso->check_media_bad_limit= Xorriso_read_quality_unreadablE;
|
||||
else
|
||||
goto unknown_value;
|
||||
} else if(strncmp(argv[i], "data_to=", 8) == 0) {
|
||||
ret= Sfile_str(job->data_to_path, argv[i] + 8, 0);
|
||||
if(ret <= 0)
|
||||
goto ex;
|
||||
} else if(strncmp(argv[i], "chunk_size=", 11) == 0) {
|
||||
num= Scanf_io_size(argv[i] + 11, 1);
|
||||
if(num >= 2048 || num == 0)
|
||||
job->min_block_size= num / 2048;
|
||||
else
|
||||
goto unknown_value;
|
||||
} else if(strncmp(argv[i], "event=", 6) == 0) {
|
||||
strncpy(sev_text, argv[i] + 6, 19);
|
||||
sev_text[19]= 0;
|
||||
@ -6429,6 +6475,7 @@ int Xorriso_check_media_setup_job(struct XorrisO *xorriso,
|
||||
}
|
||||
Checkmediajob_copy(default_job, job, 0);
|
||||
Checkmediajob_destroy(&default_job, 0);
|
||||
xorriso->check_media_bad_limit= Xorriso_read_quality_invaliD;
|
||||
} else if(strncmp(argv[i], "retry=", 6) == 0) {
|
||||
if(strcmp(argv[i] + 6, "on") == 0)
|
||||
job->retry= 1;
|
||||
@ -6442,6 +6489,8 @@ int Xorriso_check_media_setup_job(struct XorrisO *xorriso,
|
||||
ret= Sfile_str(job->sector_map_path, argv[i] + 11, 0);
|
||||
if(ret <= 0)
|
||||
goto ex;
|
||||
} else if(strncmp(argv[i], "slow_limit=", 11) == 0) {
|
||||
sscanf(argv[i] + 11, "%lf", &(job->slow_threshold_seq));
|
||||
} else if(strncmp(argv[i], "time_limit=", 11) == 0 ||
|
||||
strncmp(argv[i], "item_limit=", 11) == 0 ) {
|
||||
num= -1;
|
||||
@ -6452,6 +6501,18 @@ int Xorriso_check_media_setup_job(struct XorrisO *xorriso,
|
||||
job->time_limit= num;
|
||||
else
|
||||
job->item_limit= num;
|
||||
|
||||
#ifdef NIX
|
||||
} else if(strncmp(argv[i], "untested=", 9) == 0) {
|
||||
if(strcmp(argv[i] + 9, "damaged") == 0)
|
||||
job->untested_valid= 0;
|
||||
if(strcmp(argv[i] + 9, "undamaged") == 0 ||
|
||||
strcmp(argv[i] + 9, "ok") == 0)
|
||||
job->untested_valid= 1;
|
||||
else
|
||||
goto unknown_value;
|
||||
#endif
|
||||
|
||||
} else if(strncmp(argv[i], "use=", 4) == 0) {
|
||||
if(strcmp(argv[i] + 4, "outdev") == 0)
|
||||
job->use_dev= 1;
|
||||
@ -6494,7 +6555,7 @@ int Xorriso_check_media_list_job(struct XorrisO *xorriso,
|
||||
char *report, int flag)
|
||||
{
|
||||
int all, ret;
|
||||
char default_report[161];
|
||||
char default_report[161], quality_name[80];
|
||||
struct CheckmediajoB *dflt= NULL;
|
||||
|
||||
all= !(flag&1);
|
||||
@ -6557,6 +6618,14 @@ 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 || job->slow_threshold_seq != dflt->slow_threshold_seq)
|
||||
sprintf(report + strlen(report), " slow_limit=%f", job->slow_threshold_seq);
|
||||
if(all || xorriso->check_media_bad_limit != Xorriso_read_quality_invaliD)
|
||||
sprintf(report + strlen(report), " bad_limit=%s",
|
||||
Spotlist__quality_name(xorriso->check_media_bad_limit, quality_name,
|
||||
Xorriso_read_quality_invaliD, 0) + 2);
|
||||
if(all || job->min_block_size != dflt->min_block_size)
|
||||
sprintf(report + strlen(report), " chunk_size=%ds", job->min_block_size);
|
||||
if(all || strcmp(job->event_severity, "ALL") != 0)
|
||||
sprintf(report + strlen(report), " event=%s", job->event_severity);
|
||||
if(strlen(report) > 4 * SfileadrL)
|
||||
@ -11833,7 +11902,7 @@ int Xorriso_spotlist_to_sectormap(struct XorrisO *xorriso,
|
||||
int flag)
|
||||
{
|
||||
struct SectorbitmaP *m;
|
||||
int map_sectors= -1, map_sector_size= -1;
|
||||
int map_sectors= -1, map_sector_size= -1, valid;
|
||||
int list_sectors, list_blocks, sector_size, sector_blocks;
|
||||
int replace_map= 0, count, i, lba, blocks, quality, ret, pass;
|
||||
|
||||
@ -11875,20 +11944,21 @@ int Xorriso_spotlist_to_sectormap(struct XorrisO *xorriso,
|
||||
}
|
||||
|
||||
count= Spotlist_count(spotlist, 0);
|
||||
/* first set good bits, then eventueally override by bad bits */
|
||||
/* first set good bits, then eventually override by bad bits */
|
||||
for(pass= 0; pass < 2; pass++) {
|
||||
for(i= 0; i < count; i++) {
|
||||
ret= Spotlist_get_item(spotlist, i, &lba, &blocks, &quality, 0);
|
||||
if(ret <= 0)
|
||||
continue;
|
||||
if(quality == Xorriso_read_quality_untesteD && !(flag & 1))
|
||||
valid= quality > xorriso->check_media_bad_limit;
|
||||
if(quality == Xorriso_read_quality_untesteD && (flag & 1))
|
||||
valid= 1;
|
||||
else if(pass == 0 && !valid)
|
||||
continue;
|
||||
if(pass == 0 && quality < Xorriso_read_quality_untesteD)
|
||||
continue;
|
||||
else if(pass == 1 && quality >= Xorriso_read_quality_untesteD)
|
||||
else if(pass == 1 && valid)
|
||||
continue;
|
||||
Sectorbitmap_set_range(m, lba / sector_blocks, blocks / sector_blocks,
|
||||
quality >= Xorriso_read_quality_untesteD);
|
||||
valid);
|
||||
}
|
||||
}
|
||||
if(replace_map) {
|
||||
@ -13905,7 +13975,8 @@ int Xorriso_option_check_media(struct XorrisO *xorriso,
|
||||
continue;
|
||||
sprintf(xorriso->result_line, "%s: %10d , %10d , %s\n",
|
||||
pass == 0 ? "Media region " : "MD5 tag range",
|
||||
lba, blocks, Spotlist__quality_name(quality, quality_name, 0));
|
||||
lba, blocks, Spotlist__quality_name(quality, quality_name,
|
||||
xorriso->check_media_bad_limit, 0));
|
||||
Xorriso_result(xorriso,0);
|
||||
}
|
||||
}
|
||||
@ -14437,7 +14508,7 @@ int Xorriso_option_cpx(struct XorrisO *xorriso, int argc, char **argv,
|
||||
/* only allow directories if they actually represent split data files */
|
||||
ret= 0;
|
||||
if(xorriso->do_concat_split)
|
||||
ret= Xorriso_is_split(xorriso, eff_origin, NULL, 2);
|
||||
ret= Xorriso_is_split(xorriso, eff_origin, NULL, 0);
|
||||
if(ret<0)
|
||||
goto problem_handler;
|
||||
if(ret==0) {
|
||||
@ -16147,7 +16218,8 @@ 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 event=severity",
|
||||
" report=blocks|files|blocks_files event=severity ,",
|
||||
" bad_limit=quality , slow_limit=seconds , chunk_size=bytes",
|
||||
" -check_media_defaults [options] --",
|
||||
" Preset options for runs of -check_media and -extract_cut.",
|
||||
"",
|
||||
@ -19836,10 +19908,6 @@ next_command:;
|
||||
} else if(strcmp(cmd,"test")==0) { /* This option does not exist. */
|
||||
|
||||
/* install temporary test code here */;
|
||||
(*idx)++;
|
||||
fprintf(stderr, "xorriso_DEBUG: Xorriso_is_split(%s)= %d\n",
|
||||
arg1, Xorriso_is_split(xorriso, arg1, NULL, 2));
|
||||
|
||||
|
||||
} else if(strcmp(cmd,"toc")==0) {
|
||||
Xorriso_option_toc(xorriso, 0);
|
||||
|
Reference in New Issue
Block a user