New -osirrox sub-options o_excl_on/off. Program osirrox starts with o_excl_off.
This commit is contained in:
@ -1001,16 +1001,20 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, int flag)
|
||||
if(ret<=0)
|
||||
goto ex;
|
||||
ret= burn_drive_equals_adr(out_drive, libburn_adr, 1);
|
||||
if(ret==1)
|
||||
if(ret==1) {
|
||||
dinfo= out_dinfo;
|
||||
xorriso->indev_is_exclusive= xorriso->outdev_is_exclusive;
|
||||
}
|
||||
} else if((flag&3)==2 && xorriso->in_drive_handle!=NULL) {
|
||||
ret= Xorriso_get_drive_handles(xorriso, &in_dinfo, &in_drive,
|
||||
"on attempt to compare new outdev with indev", 0);
|
||||
if(ret<=0)
|
||||
goto ex;
|
||||
ret= burn_drive_equals_adr(in_drive, libburn_adr, 1);
|
||||
if(ret==1)
|
||||
if(ret==1) {
|
||||
dinfo= in_dinfo;
|
||||
xorriso->outdev_is_exclusive= xorriso->indev_is_exclusive;
|
||||
}
|
||||
}
|
||||
|
||||
if(dinfo==NULL) {
|
||||
@ -1019,7 +1023,9 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, int flag)
|
||||
aquire_flag|= 32;
|
||||
if((xorriso->ino_behavior & (1 | 2)) && !(xorriso->do_aaip & (4 | 32)))
|
||||
aquire_flag|= 64;
|
||||
burn_preset_device_open(xorriso->drives_exclusive, 0, 0);
|
||||
ret= isoburn_drive_aquire(&dinfo, libburn_adr, aquire_flag);
|
||||
burn_preset_device_open(1, 0, 0);
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
if(ret<=0) {
|
||||
sprintf(xorriso->info_text,"Cannot aquire drive '%s'", adr);
|
||||
@ -1029,6 +1035,10 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, int flag)
|
||||
if(flag&1)
|
||||
if(xorriso->image_start_mode&(1<<31)) /* used up setting */
|
||||
xorriso->image_start_mode= 0; /* no need to perform auto setting */
|
||||
if(flag & 1)
|
||||
xorriso->indev_is_exclusive= xorriso->drives_exclusive;
|
||||
if(flag & 2)
|
||||
xorriso->outdev_is_exclusive= xorriso->drives_exclusive;
|
||||
}
|
||||
drive= dinfo[0].drive;
|
||||
if(flag&1) {
|
||||
@ -1289,7 +1299,7 @@ ex:
|
||||
*/
|
||||
int Xorriso_give_up_drive(struct XorrisO *xorriso, int flag)
|
||||
{
|
||||
int in_is_out_too, ret;
|
||||
int in_is_out_too, ret, do_eject;
|
||||
struct burn_drive_info *dinfo;
|
||||
struct burn_drive *drive;
|
||||
char sfe[5*SfileadrL];
|
||||
@ -1309,8 +1319,15 @@ int Xorriso_give_up_drive(struct XorrisO *xorriso, int flag)
|
||||
"on attempt to give up drive", 0);
|
||||
|
||||
if(!in_is_out_too) {
|
||||
do_eject= !!(flag&4);
|
||||
if((flag & 4) && !xorriso->indev_is_exclusive) {
|
||||
sprintf(xorriso->info_text,
|
||||
"Will not eject media in non-exclusively aquired input drive.");
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING", 0);
|
||||
do_eject= 0;
|
||||
}
|
||||
if(drive!=NULL)
|
||||
isoburn_drive_release(drive,!!(flag&4));
|
||||
isoburn_drive_release(drive, do_eject);
|
||||
if(dinfo!=NULL)
|
||||
burn_drive_info_free(dinfo);
|
||||
}
|
||||
@ -1333,11 +1350,18 @@ int Xorriso_give_up_drive(struct XorrisO *xorriso, int flag)
|
||||
in_is_out_too= 0;
|
||||
}
|
||||
if((flag&2) && xorriso->out_drive_handle!=NULL) {
|
||||
do_eject= !!(flag&4);
|
||||
if((flag & 4) && !xorriso->outdev_is_exclusive) {
|
||||
sprintf(xorriso->info_text,
|
||||
"Will not eject media in non-exclusively aquired output drive.");
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING", 0);
|
||||
do_eject= 0;
|
||||
}
|
||||
Xorriso_get_drive_handles(xorriso, &dinfo, &drive,
|
||||
"on attempt to give up drive", 2);
|
||||
if(!in_is_out_too) {
|
||||
if(drive!=NULL)
|
||||
isoburn_drive_release(drive,!!(flag&4));
|
||||
isoburn_drive_release(drive, do_eject);
|
||||
if(dinfo!=NULL)
|
||||
burn_drive_info_free(dinfo);
|
||||
}
|
||||
@ -1543,6 +1567,10 @@ int Xorriso_auto_format(struct XorrisO *xorriso, int flag)
|
||||
off_t size;
|
||||
unsigned dummy;
|
||||
|
||||
ret= Xorriso_may_burn(xorriso, 0);
|
||||
if(ret <= 0)
|
||||
return(0);
|
||||
|
||||
ret= Xorriso_get_drive_handles(xorriso, &dinfo, &drive,
|
||||
"on attempt to autoformat", 2);
|
||||
if(ret<=0)
|
||||
@ -1949,6 +1977,10 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
|
||||
goto ex;
|
||||
}
|
||||
|
||||
ret= Xorriso_may_burn(xorriso, 0);
|
||||
if(ret <= 0)
|
||||
goto ex;
|
||||
|
||||
xorriso->run_state= 1; /* Indicate that burning has started */
|
||||
isoburn_disc_write(burn_options, disc);
|
||||
burn_write_opts_free(burn_options);
|
||||
@ -5608,6 +5640,9 @@ int Xorriso_blank_media(struct XorrisO *xorriso, int flag)
|
||||
time_t start_time;
|
||||
char mode_names[4][80]= {"all", "fast", "deformat", "deformat_quickest"};
|
||||
|
||||
ret= Xorriso_may_burn(xorriso, 0);
|
||||
if(ret <= 0)
|
||||
return(0);
|
||||
ret= Xorriso_get_drive_handles(xorriso, &dinfo, &drive,
|
||||
"on attempt to -blank", 2);
|
||||
if(ret<=0)
|
||||
@ -5712,6 +5747,9 @@ int Xorriso_format_media(struct XorrisO *xorriso, off_t in_size, int flag)
|
||||
time_t start_time;
|
||||
enum burn_disc_status disc_state;
|
||||
|
||||
ret= Xorriso_may_burn(xorriso, 0);
|
||||
if(ret <= 0)
|
||||
return(0);
|
||||
ret= Xorriso_get_drive_handles(xorriso, &dinfo, &drive,
|
||||
"on attempt to -format", 2);
|
||||
if(ret<=0)
|
||||
@ -5864,6 +5902,9 @@ int Xorriso_blank_as_needed(struct XorrisO *xorriso, int flag)
|
||||
char current_profile_name[80];
|
||||
off_t size;
|
||||
|
||||
ret= Xorriso_may_burn(xorriso, 0);
|
||||
if(ret <= 0)
|
||||
return(0);
|
||||
ret= Xorriso_get_drive_handles(xorriso, &dinfo, &drive,
|
||||
"on attempt to blank or format", 2);
|
||||
if(ret<=0)
|
||||
@ -8717,6 +8758,9 @@ int Xorriso_update_iso_lba0(struct XorrisO *xorriso, int iso_lba, int isosize,
|
||||
struct burn_drive *drive;
|
||||
off_t seek_ret;
|
||||
|
||||
ret= Xorriso_may_burn(xorriso, 0);
|
||||
if(ret <= 0)
|
||||
return(0);
|
||||
if(flag & 1) {
|
||||
ret= Xorriso_get_drive_handles(xorriso, &dinfo, &drive,
|
||||
"on attempt to learn current session lba", 1);
|
||||
@ -8838,6 +8882,9 @@ int Xorriso_burn_track(struct XorrisO *xorriso, off_t write_start_address,
|
||||
char reasons[BURN_REASONS_LEN], sfe[5*SfileadrL], profile_name[80];
|
||||
char head_buffer[64*1024];
|
||||
|
||||
ret= Xorriso_may_burn(xorriso, 0);
|
||||
if(ret <= 0)
|
||||
return(0);
|
||||
ret= Xorriso_auto_format(xorriso, 0);
|
||||
if(ret <=0 )
|
||||
return(0);
|
||||
@ -10447,7 +10494,9 @@ int Xorriso_mount(struct XorrisO *xorriso, char *dev, int adr_mode,
|
||||
{ret= -1; goto ex;}
|
||||
if(ret == 0 && strncmp(dev, "stdio:", 6) != 0)
|
||||
sprintf(libburn_adr, "stdio:%s", dev);
|
||||
burn_preset_device_open(xorriso->drives_exclusive, 0, 0);
|
||||
ret= isoburn_drive_aquire(&dinfo, libburn_adr, 1);
|
||||
burn_preset_device_open(1, 0, 0);
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
if(ret <= 0)
|
||||
{ret= 0; goto ex;}
|
||||
|
Reference in New Issue
Block a user