-check_media recognizes relocated 64kB superblock tag and hops over session gaps
This commit is contained in:
parent
1b8f2cc0ee
commit
f0c12594c1
@ -1 +1 @@
|
|||||||
#define Xorriso_timestamP "2009.08.17.162456"
|
#define Xorriso_timestamP "2009.08.17.162834"
|
||||||
|
@ -9217,9 +9217,9 @@ int Xorriso_check_interval(struct XorrisO *xorriso, struct SpotlisT *spotlist,
|
|||||||
struct stat stbuf;
|
struct stat stbuf;
|
||||||
void *ctx= NULL, *cloned_ctx= NULL;
|
void *ctx= NULL, *cloned_ctx= NULL;
|
||||||
char md5[16], tag_md5[16];
|
char md5[16], tag_md5[16];
|
||||||
uint32_t pos, range_start, range_size, next_tag= 0, lba, md5_spot_lba;
|
uint32_t pos, range_start, range_size, next_tag= 0, lba, md5_spot_lba= 0;
|
||||||
int md5_spot_value= Xorriso_read_quality_untesteD, chain_broken= 0;
|
int md5_spot_value= Xorriso_read_quality_untesteD, chain_broken= 0;
|
||||||
int tag_type= 0, valid, was_sb_tag= 0;
|
int tag_type= 0, valid, was_sb_tag= 0, in_track_gap= 0;
|
||||||
char *comparison= "", *sev_text= "DEBUG", *tag_type_name= "";
|
char *comparison= "", *sev_text= "DEBUG", *tag_type_name= "";
|
||||||
|
|
||||||
ret= Xorriso_get_drive_handles(xorriso, &dinfo, &drive,
|
ret= Xorriso_get_drive_handles(xorriso, &dinfo, &drive,
|
||||||
@ -9392,13 +9392,32 @@ abort_check:;
|
|||||||
&pos, &range_start, &range_size,
|
&pos, &range_start, &range_size,
|
||||||
&next_tag, tag_md5, !!chain_broken);
|
&next_tag, tag_md5, !!chain_broken);
|
||||||
}
|
}
|
||||||
valid= (ret == 1 || ret == ISO_MD5_AREA_CORRUPTED);
|
valid= (ret == 1 || ret == ISO_MD5_AREA_CORRUPTED) && pos == lba;
|
||||||
if(valid && tag_type == 2 && pos == lba && lba < md5_start + 32) {
|
if(valid && tag_type == 2 && (lba < md5_start + 32 || in_track_gap)) {
|
||||||
tag_type_name= "superblock";
|
tag_type_name= "superblock";
|
||||||
was_sb_tag= 1;
|
was_sb_tag= 1;
|
||||||
}else if(valid && tag_type == 3 && pos == lba && was_sb_tag) {
|
if(in_track_gap && range_start != md5_start && range_start < lba &&
|
||||||
|
lba - range_start <= j) {
|
||||||
|
/* Looking for next session : start computing in hindsight.
|
||||||
|
Session start and superblock tag are supposed to be in the
|
||||||
|
same 64 kB chunk.
|
||||||
|
*/
|
||||||
|
iso_md5_end(&ctx, md5);
|
||||||
|
ret= iso_md5_start(&ctx);
|
||||||
|
if(ret < 0) {
|
||||||
|
Xorriso_no_malloc_memory(xorriso, NULL, 0);
|
||||||
|
ret= -1; goto ex;
|
||||||
|
}
|
||||||
|
iso_md5_compute(&ctx, data + (j - (lba - range_start)) * 2048,
|
||||||
|
(lba - range_start) * 2048);
|
||||||
|
md5_start= range_start;
|
||||||
|
in_track_gap= 0;
|
||||||
|
}
|
||||||
|
} else if(valid && tag_type == 4 && lba < 32) {
|
||||||
|
tag_type_name= "relocated 64kB superblock";
|
||||||
|
}else if(valid && tag_type == 3 && was_sb_tag) {
|
||||||
tag_type_name= "tree";
|
tag_type_name= "tree";
|
||||||
}else if(valid && tag_type == 1 && pos == lba) {
|
}else if(valid && tag_type == 1) {
|
||||||
|
|
||||||
/* >>> ??? allow this without superblock and tree tag ? */
|
/* >>> ??? allow this without superblock and tree tag ? */
|
||||||
|
|
||||||
@ -9417,6 +9436,7 @@ abort_check:;
|
|||||||
(unsigned int) md5_start, range_start);
|
(unsigned int) md5_start, range_start);
|
||||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE",0);
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE",0);
|
||||||
chain_broken= 1;
|
chain_broken= 1;
|
||||||
|
valid= 0;
|
||||||
} else {
|
} else {
|
||||||
ret= iso_md5_clone(ctx, &cloned_ctx);
|
ret= iso_md5_clone(ctx, &cloned_ctx);
|
||||||
if(ret <= 0) {
|
if(ret <= 0) {
|
||||||
@ -9450,6 +9470,30 @@ abort_check:;
|
|||||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0,
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0,
|
||||||
sev_text, 0);
|
sev_text, 0);
|
||||||
}
|
}
|
||||||
|
if(valid && (tag_type == 1 ||
|
||||||
|
(tag_type == 4 && pos == lba && lba < 32))) {
|
||||||
|
if(md5_spot_value != Xorriso_read_quality_untesteD) {
|
||||||
|
ret= Spotlist_add_item(spotlist, md5_start,
|
||||||
|
md5_spot_lba - md5_start, md5_spot_value, 0);
|
||||||
|
if(ret <= 0)
|
||||||
|
goto ex;
|
||||||
|
}
|
||||||
|
md5_spot_value= Xorriso_read_quality_untesteD;
|
||||||
|
md5_start = lba + 1;
|
||||||
|
if (md5_start % 32)
|
||||||
|
md5_start= md5_start + (32 - (md5_start % 32));
|
||||||
|
next_tag= 0;
|
||||||
|
|
||||||
|
iso_md5_end(&ctx, md5);
|
||||||
|
ret= iso_md5_start(&ctx);
|
||||||
|
if(ret < 0) {
|
||||||
|
Xorriso_no_malloc_memory(xorriso, NULL, 0);
|
||||||
|
ret= -1; goto ex;
|
||||||
|
}
|
||||||
|
if(tag_type == 1)
|
||||||
|
in_track_gap= 1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
iso_md5_compute(ctx, data + j * 2048, 2048);
|
iso_md5_compute(ctx, data + j * 2048, 2048);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user