Made isoburn_welcome_media() ready for large block adresses

This commit is contained in:
Thomas Schmitt 2024-03-10 11:57:58 +01:00
parent fbeec724d7
commit aebd2b92ca
2 changed files with 20 additions and 19 deletions

View File

@ -362,7 +362,7 @@ static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,
enum burn_disc_status s;
#ifndef Hardcoded_cd_rW
int lba, nwa;
off_t lba, nwa;
#endif
s= burn_disc_get_status(d);
@ -505,7 +505,7 @@ static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,
#ifdef Hardcoded_cd_rW
(*o)->nwa= Hardcoded_cd_rw_nwA;
#else
ret= burn_disc_track_lba_nwa(d, NULL, 0, &lba, &nwa);
ret= burn_disc_track_lba_nwa_v2(d, NULL, 0, &lba, &nwa);
if(ret>0)
(*o)->nwa= nwa;
if((*o)->nwa < (*o)->zero_nwa)
@ -1433,8 +1433,8 @@ int isoburn_read_iso_head(struct burn_drive *d, int lba,
}
int isoburn_make_toc_entry(struct isoburn *o, int *session_count, int lba,
int track_blocks, char *volid, int flag)
int isoburn_make_toc_entry(struct isoburn *o, int *session_count, off_t lba,
off_t track_blocks, char *volid, int flag)
{
int ret;
struct isoburn_toc_entry *item;
@ -1471,9 +1471,10 @@ no_memory:;
*/
int isoburn_emulate_toc(struct burn_drive *d, int flag)
{
int ret, image_size= 0, lba, track_blocks, session_count= 0, read_flag= 0;
int scan_start= 0, scan_count= 0, probe_minus_16= 0, growisofs_nwa, role;
int with_enclosure= 0, readable_blocks= -1;
int ret, session_count= 0, read_flag= 0;
int probe_minus_16= 0, role, with_enclosure= 0;
off_t image_size= 0, lba, track_blocks, scan_start= 0, scan_count= 0;
off_t growisofs_nwa, readable_blocks= -1;
struct isoburn *o;
char *msg= NULL, *size_text= NULL, *sev, volid[33], *volid_pt= NULL;
time_t start_time, last_pacifier, now;
@ -1492,13 +1493,13 @@ int isoburn_emulate_toc(struct burn_drive *d, int flag)
if(o->emulation_mode<=0 && !(flag&1))
{ret= 0; goto ex;}
ret= burn_get_read_capacity(d, &readable_blocks, 0);
ret= burn_get_read_capacity_v2(d, &readable_blocks, 0);
if(ret <= 0) {
role = burn_drive_get_drive_role(d);
if (role == 2 || role == 4)
/* Might be a block device on a system where libburn cannot determine its
size. Try to read anyway. */
readable_blocks= 0x7ffffff0; /* try to read anyway */
readable_blocks= 0x7fffffffffffffff; /* try to read anyway */
else
readable_blocks= -1;
}
@ -1509,11 +1510,11 @@ int isoburn_emulate_toc(struct burn_drive *d, int flag)
lba= 0;
if(flag & 2) {
/* If there is a PVD at LBA 32 then this is an image with emulated TOC */
ret= isoburn_read_iso_head(d, 32, &image_size, NULL, 0);
ret= isoburn_read_iso_head_v2(d, 32, &image_size, NULL, 0);
if(ret > 0)
lba= 32;
} else {
ret= isoburn_read_iso_head(d, lba, &image_size, NULL, 0);
ret= isoburn_read_iso_head_v2(d, lba, &image_size, NULL, 0);
if(ret<=0)
{ret= 0; goto failure;}
lba= o->target_iso_head_size / 2048;
@ -1553,7 +1554,7 @@ int isoburn_emulate_toc(struct burn_drive *d, int flag)
probe_minus_16= 0;
}
ret= isoburn_read_iso_head(d, lba, &track_blocks, volid, read_flag);
ret= isoburn_read_iso_head_v2(d, lba, &track_blocks, volid, read_flag);
if(ret > 0) {
volid_pt= volid;
} else {
@ -1570,8 +1571,8 @@ int isoburn_emulate_toc(struct burn_drive *d, int flag)
break;
}
sprintf(msg,
"Chain of ISO session headers broken at #%d, LBA %ds",
session_count+1, lba);
"Chain of ISO session headers broken at #%d, LBA %.fs",
session_count+1, (double) lba);
isoburn_msgs_submit(o, 0x00060000, msg, 0, "WARNING", 0);
if(with_enclosure) {
@ -1588,8 +1589,8 @@ int isoburn_emulate_toc(struct burn_drive *d, int flag)
lba-= 16;
if(readable_blocks >= 0 && lba + track_blocks > readable_blocks) {
sprintf(msg, "ISO image size %ds larger than readable size %ds",
lba + track_blocks, readable_blocks);
sprintf(msg, "ISO image size %.fs larger than readable size %.fs",
(double) (lba + track_blocks), (double) readable_blocks);
isoburn_msgs_submit(o, 0x00060000, msg, 0, "WARNING", 0);
track_blocks= readable_blocks - lba;
}
@ -1627,8 +1628,8 @@ failure:;
isoburn_toc_entry_destroy(&(o->toc), 1);
if(with_enclosure && o->emulation_mode == 1) {
if(readable_blocks >= 0 && image_size > readable_blocks) {
sprintf(msg, "ISO image size %ds larger than readable size %ds",
image_size, readable_blocks);
sprintf(msg, "ISO image size %.fs larger than readable size %.fs",
(double) image_size, (double) readable_blocks);
isoburn_msgs_submit(o, 0x00060000, msg, 0, "WARNING", 0);
image_size= readable_blocks;
}

View File

@ -1 +1 @@
#define Xorriso_timestamP "2024.03.10.101203"
#define Xorriso_timestamP "2024.03.10.105732"