Enabled -check_media with pseudo-blank overwritable media

This commit is contained in:
Thomas Schmitt 2023-02-28 16:08:41 +01:00
parent 1844014a64
commit 72ef04a9e1
2 changed files with 40 additions and 15 deletions

View File

@ -2591,9 +2591,10 @@ int Xorriso__add_spot(struct xorriso_md5_state *state,
int Xorriso_chunk_md5(struct XorrisO *xorriso, char *data, int to_read, int Xorriso_chunk_md5(struct XorrisO *xorriso, char *data, int to_read,
uint32_t from_lba, struct xorriso_md5_state *state, int flag) uint32_t from_lba, struct xorriso_md5_state *state, int flag)
{ {
int j, ret= 0, valid, tag_type, decode_ret= 0; int j, k, ret= 0, valid, tag_type, decode_ret= 0;
uint32_t lba, pos, range_start, range_size; uint32_t lba, pos, range_start, range_size;
char md5[16], tag_md5[16], *tag_type_name= "", *comparison, *sev_text; char md5[16], tag_md5[16], *tag_type_name= "", *comparison, *sev_text;
char md5_text[33];
void *cloned_ctx= NULL; void *cloned_ctx= NULL;
for(j= 0; j < to_read; j++) { for(j= 0; j < to_read; j++) {
@ -2633,12 +2634,10 @@ int Xorriso_chunk_md5(struct XorrisO *xorriso, char *data, int to_read,
} }
} else if(valid && tag_type == 4 && lba < 32) { } else if(valid && tag_type == 4 && lba < 32) {
tag_type_name= "relocated 64kB superblock"; tag_type_name= "relocated 64kB superblock";
}else if(valid && tag_type == 3 && state->was_sb_tag) { } else if(valid && tag_type == 3 && state->was_sb_tag) {
tag_type_name= "tree"; tag_type_name= "tree";
}else if(valid && tag_type == 1) { } else if(valid && tag_type == 1) {
/* Allow this without superblock and tree tag */
/* >>> ??? allow this without superblock and tree tag ? */
tag_type_name= "session"; tag_type_name= "session";
} else { } else {
tag_type_name= ""; tag_type_name= "";
@ -2648,9 +2647,14 @@ int Xorriso_chunk_md5(struct XorrisO *xorriso, char *data, int to_read,
sprintf(xorriso->info_text, sprintf(xorriso->info_text,
"Found MD5 %s tag which covers different data range", tag_type_name); "Found MD5 %s tag which covers different data range", tag_type_name);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE",0); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE",0);
sprintf(xorriso->info_text, " Expected: %u Found: %u", sprintf(xorriso->info_text, " Expected start: %u Found: %u",
(unsigned int) state->md5_start, range_start); (unsigned int) state->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);
for(k= 0; k < 16; k++)
sprintf(md5_text + 2 * k, "%2.2x", ((unsigned char *) tag_md5)[k]);
sprintf(xorriso->info_text, " Size: %u MD5: %s",
range_size, md5_text);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE",0);
state->chain_broken= 1; state->chain_broken= 1;
valid= 0; valid= 0;
} else { } else {
@ -2691,7 +2695,7 @@ int Xorriso_chunk_md5(struct XorrisO *xorriso, char *data, int to_read,
goto ex; goto ex;
} }
state->md5_spot_value= Xorriso_read_quality_untesteD; state->md5_spot_value= Xorriso_read_quality_untesteD;
state->md5_start = lba + 1; state->md5_start= lba + 1;
if(state->md5_start % 32) if(state->md5_start % 32)
state->md5_start= state->md5_start + (32 - (state->md5_start % 32)); state->md5_start= state->md5_start + (32 - (state->md5_start % 32));
state->next_tag= 0; state->next_tag= 0;
@ -3316,24 +3320,43 @@ int Xorriso_check_media(struct XorrisO *xorriso, struct SpotlisT **spotlist,
s= isoburn_disc_get_status(drive); s= isoburn_disc_get_status(drive);
if(s != BURN_DISC_APPENDABLE && s != BURN_DISC_FULL) { if(s != BURN_DISC_APPENDABLE && s != BURN_DISC_FULL) {
Xorriso_msgs_submit(xorriso, 0, "-check_media: No readable medium found", ret= 0;
0, "SORRY", 0); if(s == BURN_DISC_BLANK) {
ret= 0; goto ex; /* check whether medium is overwritable */
ret= burn_disc_get_multi_caps(drive, BURN_WRITE_NONE, &caps, 0);
if(ret > 0)
if(caps->start_adr == 0)
ret= 0;
}
if(ret <= 0) {
no_readable_medium:;
Xorriso_msgs_submit(xorriso, 0, "-check_media: No readable medium found",
0, "SORRY", 0);
ret= 0; goto ex;
}
} }
ret= burn_get_read_capacity(drive, &read_capacity, 0); ret= burn_get_read_capacity(drive, &read_capacity, 0);
if(ret <= 0) if(ret <= 0)
read_capacity= -1; read_capacity= -1;
if(s == BURN_DISC_BLANK && read_capacity <= 0)
goto no_readable_medium;
if(job->max_lba >= 0) { if(job->max_lba >= 0) {
blocks= job->max_lba + 1 - start_lba; blocks= job->max_lba + 1 - start_lba;
xorriso->pacifier_total= blocks; xorriso->pacifier_total= blocks;
ret= Xorriso_check_interval(xorriso, *spotlist, job, start_lba, blocks, ret= Xorriso_check_interval(xorriso, *spotlist, job, start_lba, blocks,
read_chunk, 0, 0); read_chunk, start_lba, 0);
if(ret <= 0) if(ret <= 0)
goto ex; goto ex;
} else if(mode == 0) { /* track by track */ } else if(mode == 0) { /* track by track */
if(s == BURN_DISC_BLANK) {
no_tracks_found:;
Xorriso_msgs_submit(xorriso, 0, "-check_media: No tracks found on medium",
0, "SORRY", 0);
ret= 0; goto ex;
}
isoburn_disc= isoburn_toc_drive_get_disc(drive); isoburn_disc= isoburn_toc_drive_get_disc(drive);
if(isoburn_disc == NULL) if(isoburn_disc == NULL)
goto libburn_whole_disc; goto libburn_whole_disc;
@ -3444,6 +3467,8 @@ int Xorriso_check_media(struct XorrisO *xorriso, struct SpotlisT **spotlist,
} else if(mode == 1) { /* Image range */ } else if(mode == 1) { /* Image range */
/* Default is the emulated disc capacity. /* Default is the emulated disc capacity.
*/ */
if(s == BURN_DISC_BLANK)
goto no_tracks_found;
isoburn_disc= isoburn_toc_drive_get_disc(drive); isoburn_disc= isoburn_toc_drive_get_disc(drive);
if(isoburn_disc == NULL) if(isoburn_disc == NULL)
goto libburn_whole_disc; goto libburn_whole_disc;
@ -3465,7 +3490,7 @@ int Xorriso_check_media(struct XorrisO *xorriso, struct SpotlisT **spotlist,
goto libburn_whole_disc; goto libburn_whole_disc;
xorriso->pacifier_total= blocks; xorriso->pacifier_total= blocks;
ret= Xorriso_check_interval(xorriso, *spotlist, job, start_lba, blocks, ret= Xorriso_check_interval(xorriso, *spotlist, job, start_lba, blocks,
read_chunk, 0, (4 * (xorriso->do_md5 & 1))); read_chunk, start_lba, (4 * (xorriso->do_md5 & 1)));
if(ret <= 0) if(ret <= 0)
goto ex; goto ex;
} else if(mode == 2) { } else if(mode == 2) {
@ -3481,7 +3506,7 @@ libburn_whole_disc:;
blocks-= start_lba; blocks-= start_lba;
xorriso->pacifier_total= blocks; xorriso->pacifier_total= blocks;
ret= Xorriso_check_interval(xorriso, *spotlist, job, start_lba, blocks, ret= Xorriso_check_interval(xorriso, *spotlist, job, start_lba, blocks,
read_chunk, 0, (4 * (xorriso->do_md5 & 1))); read_chunk, start_lba, (4 * (xorriso->do_md5 & 1)));
if(ret <= 0) if(ret <= 0)
goto ex; goto ex;
} }

View File

@ -1 +1 @@
#define Xorriso_timestamP "2023.02.28.135556" #define Xorriso_timestamP "2023.02.28.150706"