More accurate determination of size with check_media what=image
This commit is contained in:
parent
7f794c5035
commit
9a668d1e77
@ -171,7 +171,7 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, char *show_adr,
|
|||||||
int flag)
|
int flag)
|
||||||
{
|
{
|
||||||
int ret, hret, not_writeable= 0, has_what, aquire_flag, load_lba, ext;
|
int ret, hret, not_writeable= 0, has_what, aquire_flag, load_lba, ext;
|
||||||
int lba, track, session, params_flag, adr_mode, read_ret;
|
int lba, track, session, params_flag, adr_mode, read_ret, start_lba;
|
||||||
uint32_t size, offst;
|
uint32_t size, offst;
|
||||||
struct burn_drive_info *dinfo= NULL, *out_dinfo= NULL, *in_dinfo= NULL;
|
struct burn_drive_info *dinfo= NULL, *out_dinfo= NULL, *in_dinfo= NULL;
|
||||||
struct burn_drive *drive= NULL, *out_drive= NULL, *in_drive= NULL;
|
struct burn_drive *drive= NULL, *out_drive= NULL, *in_drive= NULL;
|
||||||
@ -384,6 +384,11 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, char *show_adr,
|
|||||||
goto ex;
|
goto ex;
|
||||||
} else {
|
} else {
|
||||||
iso_image_ref((IsoImage *) xorriso->in_volset_handle);
|
iso_image_ref((IsoImage *) xorriso->in_volset_handle);
|
||||||
|
start_lba= -1;
|
||||||
|
ret= Xorriso_get_drive_handles(xorriso, &in_dinfo, &in_drive,
|
||||||
|
"on attempt to attach ISO image object to outdev", 0);
|
||||||
|
if(ret > 0)
|
||||||
|
start_lba= isoburn_get_attached_start_lba(in_drive);
|
||||||
ret= isoburn_attach_image(drive, (IsoImage *) xorriso->in_volset_handle);
|
ret= isoburn_attach_image(drive, (IsoImage *) xorriso->in_volset_handle);
|
||||||
if(ret<=0) {
|
if(ret<=0) {
|
||||||
sprintf(xorriso->info_text,
|
sprintf(xorriso->info_text,
|
||||||
@ -391,6 +396,8 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, char *show_adr,
|
|||||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FATAL", 0);
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FATAL", 0);
|
||||||
{ret= -1; goto ex;}
|
{ret= -1; goto ex;}
|
||||||
}
|
}
|
||||||
|
if(start_lba >= 0)
|
||||||
|
isoburn_attach_start_lba(drive, lba, 0);
|
||||||
}
|
}
|
||||||
if(!(flag&32))
|
if(!(flag&32))
|
||||||
Xorriso_toc(xorriso, 1 | 2 | 8);
|
Xorriso_toc(xorriso, 1 | 2 | 8);
|
||||||
@ -525,12 +532,19 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, char *show_adr,
|
|||||||
|
|
||||||
if(xorriso->out_drive_handle != NULL &&
|
if(xorriso->out_drive_handle != NULL &&
|
||||||
xorriso->out_drive_handle != xorriso->in_drive_handle) {
|
xorriso->out_drive_handle != xorriso->in_drive_handle) {
|
||||||
|
start_lba= -1;
|
||||||
|
ret= Xorriso_get_drive_handles(xorriso, &in_dinfo, &in_drive,
|
||||||
|
"on attempt to attach ISO image volset to outdev", 0);
|
||||||
|
if(ret > 0)
|
||||||
|
start_lba= isoburn_get_attached_start_lba(in_drive);
|
||||||
ret= Xorriso_get_drive_handles(xorriso, &out_dinfo, &out_drive,
|
ret= Xorriso_get_drive_handles(xorriso, &out_dinfo, &out_drive,
|
||||||
"on attempt to attach ISO image volset to outdev", 2);
|
"on attempt to attach ISO image volset to outdev", 2);
|
||||||
if(ret<=0)
|
if(ret<=0)
|
||||||
goto ex;
|
goto ex;
|
||||||
iso_image_ref((IsoImage *) xorriso->in_volset_handle);
|
iso_image_ref((IsoImage *) xorriso->in_volset_handle);
|
||||||
isoburn_attach_image(out_drive, xorriso->in_volset_handle);
|
isoburn_attach_image(out_drive, xorriso->in_volset_handle);
|
||||||
|
if(start_lba >= 0)
|
||||||
|
isoburn_attach_start_lba(out_drive, ret, 0);
|
||||||
}
|
}
|
||||||
Xorriso_process_msg_queues(xorriso,0);
|
Xorriso_process_msg_queues(xorriso,0);
|
||||||
isoburn_ropt_get_size_what(ropts, &size, &has_what);
|
isoburn_ropt_get_size_what(ropts, &size, &has_what);
|
||||||
@ -2632,18 +2646,31 @@ int Xorriso_check_media(struct XorrisO *xorriso, struct SpotlisT **spotlist,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if(mode == 1) { /* isoburn disc capacity */
|
} else if(mode == 1) { /* Image range */
|
||||||
|
/* Default is the emulated disc capacity.
|
||||||
|
*/
|
||||||
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;
|
||||||
blocks= media_blocks= isoburn_toc_disc_get_sectors(isoburn_disc);
|
blocks= media_blocks= isoburn_toc_disc_get_sectors(isoburn_disc);
|
||||||
|
|
||||||
|
/* If possible, determine the end address of the loaded ISO image.
|
||||||
|
*/
|
||||||
|
track_lba= isoburn_get_attached_start_lba(drive);
|
||||||
|
if(track_lba >= 0) {
|
||||||
|
ret= isoburn_read_iso_head(drive, track_lba, &track_blocks, NULL, 0);
|
||||||
|
if(ret > 0) {
|
||||||
|
blocks= media_blocks= track_lba + track_blocks;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(start_lba >= 0)
|
if(start_lba >= 0)
|
||||||
blocks-= start_lba;
|
blocks-= start_lba;
|
||||||
if(media_blocks <= 0)
|
if(media_blocks <= 0)
|
||||||
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, 0);
|
read_chunk, 0, (4 * (xorriso->do_md5 & 1)));
|
||||||
if(ret <= 0)
|
if(ret <= 0)
|
||||||
goto ex;
|
goto ex;
|
||||||
} else if(mode == 2) {
|
} else if(mode == 2) {
|
||||||
@ -2659,7 +2686,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, 0);
|
read_chunk, 0, (4 * (xorriso->do_md5 & 1)));
|
||||||
if(ret <= 0)
|
if(ret <= 0)
|
||||||
goto ex;
|
goto ex;
|
||||||
}
|
}
|
||||||
|
@ -1 +1 @@
|
|||||||
#define Xorriso_timestamP "2012.02.14.103107"
|
#define Xorriso_timestamP "2012.02.14.103256"
|
||||||
|
Loading…
Reference in New Issue
Block a user