New option -check_media
This commit is contained in:
@ -1720,6 +1720,8 @@ int Xorriso_lst_destroy_all(struct Xorriso_lsT **lstring, int flag)
|
||||
{
|
||||
struct Xorriso_lsT *s,*next;
|
||||
|
||||
if(lstring==NULL)
|
||||
return(-1);
|
||||
if((*lstring)==NULL)
|
||||
return(0);
|
||||
for(s= *lstring; s->prev!=NULL; s= s->prev);
|
||||
@ -2734,6 +2736,7 @@ int Spotlist_add_item(struct SpotlisT *o, int start_lba, int blocks,
|
||||
{
|
||||
int ret;
|
||||
struct SpotlistiteM *li;
|
||||
static int debug_verbous= 0;
|
||||
|
||||
ret= Spotlistitem_new(&li, start_lba, blocks, quality, 0);
|
||||
if(ret <= 0)
|
||||
@ -2745,11 +2748,10 @@ int Spotlist_add_item(struct SpotlisT *o, int start_lba, int blocks,
|
||||
o->list_start= li;
|
||||
(o->list_count)++;
|
||||
|
||||
/* <<< */
|
||||
{char quality_name[80];
|
||||
fprintf(stderr, "debug: lba %10d , size %10d , quality %s\n",
|
||||
start_lba, blocks, Spotlist__quality_name(quality, quality_name, 0));
|
||||
}
|
||||
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));
|
||||
}
|
||||
|
||||
return(1);
|
||||
}
|
||||
@ -2799,6 +2801,8 @@ char *Spotlist__quality_name(int quality, char name[80], int flag)
|
||||
strcpy(name, "valid");
|
||||
else if(quality == Xorriso_read_quality_invaliD)
|
||||
strcpy(name, "invalid");
|
||||
else if(quality == Xorriso_read_quality_tao_enD)
|
||||
strcpy(name, "tao end");
|
||||
else if(quality == Xorriso_read_quality_off_tracK)
|
||||
strcpy(name, "off track");
|
||||
else if(quality == Xorriso_read_quality_untesteD)
|
||||
@ -2806,7 +2810,7 @@ char *Spotlist__quality_name(int quality, char name[80], int flag)
|
||||
else if(quality == Xorriso_read_quality_unreadablE)
|
||||
strcpy(name, "unreadable");
|
||||
else
|
||||
sprintf(name, "0x%8.8X\n", (unsigned) quality);
|
||||
sprintf(name, "0x%8.8X", (unsigned) quality);
|
||||
return(name);
|
||||
}
|
||||
|
||||
@ -3114,6 +3118,7 @@ int Checkmediajob_new(struct CheckmediajoB **o, int flag)
|
||||
if(m==NULL)
|
||||
return(-1);
|
||||
*o= m;
|
||||
m->use_outdev= 0;
|
||||
m->min_lba= -1;
|
||||
m->max_lba= -1;
|
||||
m->min_block_size= 16;
|
||||
@ -3121,6 +3126,7 @@ int Checkmediajob_new(struct CheckmediajoB **o, int flag)
|
||||
m->start_time= time(NULL);
|
||||
m->time_limit= -1;
|
||||
m->item_limit= -1;
|
||||
strcpy(m->abort_file_path, "/var/opt/xorriso/do_abort_check_media");
|
||||
m->data_to_path[0]= 0;
|
||||
m->data_to_fd= -1;
|
||||
m->sector_map_path[0]= 0;
|
||||
@ -8779,6 +8785,8 @@ int Xorriso_spotlist_to_sectormap(struct XorrisO *xorriso,
|
||||
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)
|
||||
continue;
|
||||
Sectorbitmap_set_range(m, lba / sector_blocks, blocks / sector_blocks,
|
||||
quality >= Xorriso_read_quality_valiD);
|
||||
@ -9385,7 +9393,11 @@ int Xorriso_option_check_media(struct XorrisO *xorriso,
|
||||
goto ex;
|
||||
|
||||
for(i= old_idx; i < end_idx; i++) {
|
||||
if(strncmp(argv[i], "data_to=", 8) == 0) {
|
||||
if(strncmp(argv[i], "abort_file=", 11) == 0) {
|
||||
ret= Sfile_str(job->abort_file_path, argv[i] + 11, 0);
|
||||
if(ret <= 0)
|
||||
goto ex;
|
||||
} 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;
|
||||
@ -9429,6 +9441,13 @@ int Xorriso_option_check_media(struct XorrisO *xorriso,
|
||||
job->time_limit= num;
|
||||
else
|
||||
job->item_limit= num;
|
||||
} else if(strncmp(argv[i], "use=", 4) == 0) {
|
||||
if(strcmp(argv[i] + 4, "outdev") == 0)
|
||||
job->use_outdev= 1;
|
||||
else if(strcmp(argv[i] + 4, "indev") == 0)
|
||||
job->use_outdev= 0;
|
||||
else
|
||||
goto unknown_value;
|
||||
} else if(strncmp(argv[i], "what=", 5) == 0) {
|
||||
if(strcmp(argv[i]+5, "tracks") == 0)
|
||||
job->mode= 0;
|
||||
@ -9447,7 +9466,6 @@ unknown_value:;
|
||||
ret= 0; goto ex;
|
||||
}
|
||||
}
|
||||
|
||||
ret= Xorriso_check_media(xorriso, &spotlist, job, 0);
|
||||
if(ret <= 0)
|
||||
goto ex;
|
||||
@ -10974,8 +10992,9 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag)
|
||||
" -check_media [options] --",
|
||||
" Try to read data blocks from media and report about the",
|
||||
" outcome. Several options modify the behavior:",
|
||||
" what=track|session , min_lba=blockadr , max_lba=blockadr ,",
|
||||
" time_limit=seconds , item_limit=number ,",
|
||||
" use=indev|outdev , what=track|session ,",
|
||||
" min_lba=blockadr , max_lba=blockadr ,",
|
||||
" abort_file=path , time_limit=seconds , item_limit=number ,",
|
||||
" retry=on|off|default , data_to=filepath ,",
|
||||
" sector_map=filepath , map_with_volid=on|off",
|
||||
"",
|
||||
|
Reference in New Issue
Block a user