Corrected image size computation for comparison with partition table
This commit is contained in:
parent
5b369d3c52
commit
83216597c2
@ -1 +1 @@
|
|||||||
#define Xorriso_timestamP "2010.04.18.100814"
|
#define Xorriso_timestamP "2010.04.18.141143"
|
||||||
|
@ -1695,8 +1695,7 @@ int Xorriso_set_system_area(struct XorrisO *xorriso, struct burn_drive *drive,
|
|||||||
IsoImage *img, struct isoburn_imgen_opts *sopts,
|
IsoImage *img, struct isoburn_imgen_opts *sopts,
|
||||||
int flag)
|
int flag)
|
||||||
{
|
{
|
||||||
int ret, options, system_area_options, iso_lba= 0;
|
int ret, options, system_area_options, iso_lba= -1, start_lba, image_blocks;
|
||||||
int num_sessions= 0, num_tracks= 0, start_lba, end_lba, image_blocks;
|
|
||||||
char volid[33];
|
char volid[33];
|
||||||
FILE *fp= NULL;
|
FILE *fp= NULL;
|
||||||
char buf[32768], *bufpt= NULL;
|
char buf[32768], *bufpt= NULL;
|
||||||
@ -1704,10 +1703,6 @@ int Xorriso_set_system_area(struct XorrisO *xorriso, struct burn_drive *drive,
|
|||||||
unsigned char *ub;
|
unsigned char *ub;
|
||||||
ElToritoBootImage *bootimg;
|
ElToritoBootImage *bootimg;
|
||||||
IsoFile *bootimg_node;
|
IsoFile *bootimg_node;
|
||||||
struct isoburn_toc_disc *disc= NULL;
|
|
||||||
struct isoburn_toc_session **sessions;
|
|
||||||
struct isoburn_toc_track **tracks;
|
|
||||||
struct burn_toc_entry toc_entry;
|
|
||||||
|
|
||||||
system_area_options= xorriso->system_area_options;
|
system_area_options= xorriso->system_area_options;
|
||||||
memset(buf, 0, 32768);
|
memset(buf, 0, 32768);
|
||||||
@ -1728,42 +1723,15 @@ int Xorriso_set_system_area(struct XorrisO *xorriso, struct burn_drive *drive,
|
|||||||
ub= (unsigned char *) buf;
|
ub= (unsigned char *) buf;
|
||||||
hd_lba= (ub[454] | (ub[455] << 8) | (ub[456] << 16) | (ub[457] << 24)) +
|
hd_lba= (ub[454] | (ub[455] << 8) | (ub[456] << 16) | (ub[457] << 24)) +
|
||||||
(ub[458] | (ub[459] << 8) | (ub[460] << 16) | (ub[461] << 24));
|
(ub[458] | (ub[459] << 8) | (ub[460] << 16) | (ub[461] << 24));
|
||||||
disc= isoburn_toc_drive_get_disc(drive);
|
|
||||||
if(disc == NULL)
|
|
||||||
iso_lba= -1;
|
|
||||||
else {
|
|
||||||
/* With sequential media this is the track end, not the ISO size */
|
|
||||||
end_lba= isoburn_toc_disc_get_sectors(disc);
|
|
||||||
|
|
||||||
/* So inquire start and ISO size of the last track */
|
iso_lba= -1;
|
||||||
iso_lba= -1;
|
ret= isoburn_disc_get_msc1(drive, &start_lba);
|
||||||
sessions= isoburn_toc_disc_get_sessions(disc, &num_sessions);
|
if(ret > 0) {
|
||||||
if(num_sessions > 0)
|
ret= isoburn_read_iso_head(drive, start_lba, &image_blocks,
|
||||||
tracks= isoburn_toc_session_get_tracks(sessions[num_sessions - 1],
|
volid, 1);
|
||||||
&num_tracks);
|
if(ret > 0)
|
||||||
if(tracks != NULL && num_tracks > 0)
|
iso_lba= start_lba + image_blocks;
|
||||||
isoburn_toc_track_get_entry(tracks[num_tracks - 1], &toc_entry);
|
|
||||||
if (toc_entry.extensions_valid & 1) {
|
|
||||||
ret= isoburn_toc_track_get_emul(tracks[num_tracks - 1], &start_lba,
|
|
||||||
&image_blocks, volid, 0);
|
|
||||||
if(ret > 0) {
|
|
||||||
iso_lba= start_lba + image_blocks;
|
|
||||||
} else {
|
|
||||||
start_lba= toc_entry.start_lba;
|
|
||||||
ret= isoburn_read_iso_head(drive, start_lba, &image_blocks,
|
|
||||||
volid, 1);
|
|
||||||
if(ret > 0)
|
|
||||||
iso_lba= start_lba + image_blocks;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* <<< provisorily revoke the new size */
|
|
||||||
iso_lba = end_lba;
|
|
||||||
|
|
||||||
if(iso_lba > end_lba)
|
|
||||||
iso_lba= -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(((off_t) iso_lba) * (off_t) 4 > hd_lba) {
|
if(((off_t) iso_lba) * (off_t) 4 > hd_lba) {
|
||||||
system_area_options= 0;
|
system_area_options= 0;
|
||||||
} else if((xorriso->patch_system_area & 1) &&
|
} else if((xorriso->patch_system_area & 1) &&
|
||||||
@ -1834,8 +1802,6 @@ do_set:;
|
|||||||
ex:;
|
ex:;
|
||||||
if(fp != NULL && fp != stdin)
|
if(fp != NULL && fp != stdin)
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
if(disc != NULL)
|
|
||||||
isoburn_toc_disc_free(disc);
|
|
||||||
return(ret);
|
return(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user