New option -check_media

This commit is contained in:
2008-08-14 22:15:35 +00:00
parent de05b59854
commit 7aa52d2cc9
7 changed files with 204 additions and 80 deletions

View File

@ -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",
"",