Enabled -check_media with pseudo-blank overwritable media
This commit is contained in:
parent
1844014a64
commit
72ef04a9e1
@ -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++) {
|
||||||
@ -2636,9 +2637,7 @@ int Xorriso_chunk_md5(struct XorrisO *xorriso, char *data, int to_read,
|
|||||||
} 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 {
|
||||||
@ -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) {
|
||||||
|
ret= 0;
|
||||||
|
if(s == BURN_DISC_BLANK) {
|
||||||
|
/* 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",
|
Xorriso_msgs_submit(xorriso, 0, "-check_media: No readable medium found",
|
||||||
0, "SORRY", 0);
|
0, "SORRY", 0);
|
||||||
ret= 0; goto ex;
|
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;
|
||||||
}
|
}
|
||||||
|
@ -1 +1 @@
|
|||||||
#define Xorriso_timestamP "2023.02.28.135556"
|
#define Xorriso_timestamP "2023.02.28.150706"
|
||||||
|
Loading…
Reference in New Issue
Block a user