New -osirrox sub-options o_excl_on/off. Program osirrox starts with o_excl_off.
This commit is contained in:
parent
b001fd6ed6
commit
9d1ce48f3b
@ -2,7 +2,7 @@
|
|||||||
.\" First parameter, NAME, should be all caps
|
.\" First parameter, NAME, should be all caps
|
||||||
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
|
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
|
||||||
.\" other parameters are allowed: see man(7), man(1)
|
.\" other parameters are allowed: see man(7), man(1)
|
||||||
.TH XORRISO 1 "Aug 31, 2009"
|
.TH XORRISO 1 "Sep 19, 2009"
|
||||||
.\" Please adjust this date whenever revising the manpage.
|
.\" Please adjust this date whenever revising the manpage.
|
||||||
.\"
|
.\"
|
||||||
.\" Some roff macros, for reference:
|
.\" Some roff macros, for reference:
|
||||||
@ -2752,6 +2752,14 @@ allows to restore large numbers of hard links without exhausting
|
|||||||
-temp_mem_limit. It does not preserve directory mtime and it needs
|
-temp_mem_limit. It does not preserve directory mtime and it needs
|
||||||
-osirrox option auto_chmod_on in order to extract directories which offer no
|
-osirrox option auto_chmod_on in order to extract directories which offer no
|
||||||
write permission. Default is "sort_lba_off".
|
write permission. Default is "sort_lba_off".
|
||||||
|
.br
|
||||||
|
Option "o_excl_on" is the default unless the program was started with leafname
|
||||||
|
"osirrox". On Linux it tries to avoid using drives which are mounted or in
|
||||||
|
use by other libburn programs.
|
||||||
|
Option "o_excl_off" allows on Linux to access such drives. Drives which
|
||||||
|
get aquired while "o_excl_off" will refuse to get blanked, formatted,
|
||||||
|
written, or ejected. But be aware that even harmless inquiries can spoil
|
||||||
|
ongoing burns of CD-R[W] and DVD-R[W].
|
||||||
.TP
|
.TP
|
||||||
\fB\-extract\fR iso_rr_path disk_path
|
\fB\-extract\fR iso_rr_path disk_path
|
||||||
Restore the file objects at and underneath iso_rr_path to their corresponding
|
Restore the file objects at and underneath iso_rr_path to their corresponding
|
||||||
@ -2946,13 +2954,17 @@ X of Y MB written (fifo nn%) [buf mmm%]
|
|||||||
.br
|
.br
|
||||||
nn% done, estimate finish Tue Jul 15 20:13:28 2008
|
nn% done, estimate finish Tue Jul 15 20:13:28 2008
|
||||||
.TP
|
.TP
|
||||||
\fB\-scdbackup_tag\fR name timestamp
|
\fB\-scdbackup_tag\fR list_path record_name
|
||||||
Set the parameters "name" and "timestamp" for an scdbackup checksum tag.
|
Set the parameter "name" for a scdbackup checksum record.
|
||||||
It will be appended to the -md5 session tag if the image starts at LBA 0,
|
It will be appended in an scdbackup checksum tag to the -md5 session tag if
|
||||||
which is the case if output gets written as first session onto a sequential
|
the image starts at LBA 0. This is the case if it gets written as first
|
||||||
media, or piped into a program, named pipe or character device.
|
session onto a sequential media, or piped into a program, named pipe or
|
||||||
|
character device.
|
||||||
.br
|
.br
|
||||||
Program scdbackup_verify will recognize and verify these tags.
|
If list_path is not empty then the record will also be appended to the
|
||||||
|
data file given by this path.
|
||||||
|
.br
|
||||||
|
Program scdbackup_verify will recognize and verify tag resp. record.
|
||||||
.TP
|
.TP
|
||||||
.B Scripting, dialog and program control features:
|
.B Scripting, dialog and program control features:
|
||||||
.TP
|
.TP
|
||||||
|
@ -4739,12 +4739,14 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
|
|||||||
m->toc_emulation_flag= 0;
|
m->toc_emulation_flag= 0;
|
||||||
m->image_start_mode= 0;
|
m->image_start_mode= 0;
|
||||||
m->image_start_value[0]= 0;
|
m->image_start_value[0]= 0;
|
||||||
|
m->drives_exclusive= 1;
|
||||||
m->do_calm_drive= 1;
|
m->do_calm_drive= 1;
|
||||||
m->indev[0]= 0;
|
m->indev[0]= 0;
|
||||||
m->in_drive_handle= NULL;
|
m->in_drive_handle= NULL;
|
||||||
m->in_volset_handle= NULL;
|
m->in_volset_handle= NULL;
|
||||||
m->in_charset= NULL;
|
m->in_charset= NULL;
|
||||||
m->isofs_st_out= time(0) - 1;
|
m->isofs_st_out= time(0) - 1;
|
||||||
|
m->indev_is_exclusive= 1;
|
||||||
m->isofs_st_in= 0;
|
m->isofs_st_in= 0;
|
||||||
m->volset_change_pending= 0;
|
m->volset_change_pending= 0;
|
||||||
m->no_volset_present= 0;
|
m->no_volset_present= 0;
|
||||||
@ -4754,6 +4756,7 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
|
|||||||
m->out_drive_handle= NULL;
|
m->out_drive_handle= NULL;
|
||||||
m->out_charset= NULL;
|
m->out_charset= NULL;
|
||||||
m->dev_fd_1= -1;
|
m->dev_fd_1= -1;
|
||||||
|
m->outdev_is_exclusive= 1;
|
||||||
m->grow_blindly_msc2= -1;
|
m->grow_blindly_msc2= -1;
|
||||||
m->ban_stdio_write= 0;
|
m->ban_stdio_write= 0;
|
||||||
m->do_dummy= 0;
|
m->do_dummy= 0;
|
||||||
@ -4882,9 +4885,10 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
|
|||||||
ret= Sfile_leafname(progname, leafname, 0);
|
ret= Sfile_leafname(progname, leafname, 0);
|
||||||
if(ret<=0)
|
if(ret<=0)
|
||||||
goto failure;
|
goto failure;
|
||||||
if(strcmp(leafname, "osirrox")==0)
|
if(strcmp(leafname, "osirrox")==0) {
|
||||||
m->allow_restore= 1;
|
m->allow_restore= 1;
|
||||||
else if(strcmp(leafname, "xorrisofs")==0 || strcmp(leafname, "genisofs")==0 ||
|
m->drives_exclusive= 0;
|
||||||
|
} else if(strcmp(leafname, "xorrisofs")==0 || strcmp(leafname, "genisofs")==0 ||
|
||||||
strcmp(leafname, "mkisofs")==0 || strcmp(leafname, "genisoimage")==0) {
|
strcmp(leafname, "mkisofs")==0 || strcmp(leafname, "genisoimage")==0) {
|
||||||
m->argument_emulation= 1;
|
m->argument_emulation= 1;
|
||||||
m->pacifier_style= 1;
|
m->pacifier_style= 1;
|
||||||
@ -6545,8 +6549,10 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag)
|
|||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
int is_default, no_defaults, i, ret, adr_mode, bin_path_in_use= 0, do_single;
|
int is_default, no_defaults, i, ret, adr_mode, bin_path_in_use= 0, do_single;
|
||||||
|
int show_indev= 1, show_outdev= 1, show_dev= 0;
|
||||||
char *line, sfe[5 * SfileadrL + 80], mode[80], *form, *treatment;
|
char *line, sfe[5 * SfileadrL + 80], mode[80], *form, *treatment;
|
||||||
char *in_pt, *out_pt, *nl_charset, *local_charset, *mode_pt;
|
char *in_pt, *out_pt, *nl_charset, *local_charset, *mode_pt;
|
||||||
|
char *dev_filter= NULL;
|
||||||
static char channel_prefixes[4][4]= {".","R","I","M"};
|
static char channel_prefixes[4][4]= {".","R","I","M"};
|
||||||
static char load_names[][20]= {"auto", "session", "track", "lba", "volid"};
|
static char load_names[][20]= {"auto", "session", "track", "lba", "volid"};
|
||||||
static int max_load_mode= 4;
|
static int max_load_mode= 4;
|
||||||
@ -6702,7 +6708,7 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag)
|
|||||||
}
|
}
|
||||||
|
|
||||||
is_default= (xorriso->allow_restore==0 && xorriso->do_concat_split==1 &&
|
is_default= (xorriso->allow_restore==0 && xorriso->do_concat_split==1 &&
|
||||||
xorriso->do_auto_chmod==0);
|
xorriso->do_auto_chmod==0 && xorriso->drives_exclusive == 1);
|
||||||
mode_pt= "off";
|
mode_pt= "off";
|
||||||
if(xorriso->allow_restore == -1)
|
if(xorriso->allow_restore == -1)
|
||||||
mode_pt= "banned";
|
mode_pt= "banned";
|
||||||
@ -6713,10 +6719,11 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag)
|
|||||||
if(xorriso->allow_restore == -1)
|
if(xorriso->allow_restore == -1)
|
||||||
sprintf(line,"-osirrox %s\n", mode_pt);
|
sprintf(line,"-osirrox %s\n", mode_pt);
|
||||||
else
|
else
|
||||||
sprintf(line,"-osirrox %s:%s:%s:%s\n", mode_pt,
|
sprintf(line,"-osirrox %s:%s:%s:%s:%s\n", mode_pt,
|
||||||
xorriso->do_concat_split ? "concat_split_on" : "concat_split_off",
|
xorriso->do_concat_split ? "concat_split_on" : "concat_split_off",
|
||||||
xorriso->do_auto_chmod ? "auto_chmod_on" : "auto_chmod_off",
|
xorriso->do_auto_chmod ? "auto_chmod_on" : "auto_chmod_off",
|
||||||
xorriso->do_restore_sort_lba ? "sort_lba_on" : "sort_lba_off"
|
xorriso->do_restore_sort_lba ? "sort_lba_on" : "sort_lba_off",
|
||||||
|
xorriso->drives_exclusive ? "o_excl_on" : "o_excl_off"
|
||||||
);
|
);
|
||||||
|
|
||||||
if(!(is_default && no_defaults))
|
if(!(is_default && no_defaults))
|
||||||
@ -7196,19 +7203,57 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag)
|
|||||||
}
|
}
|
||||||
|
|
||||||
do_single= 0;
|
do_single= 0;
|
||||||
ret= Xorriso_status_filter(xorriso, filter, "-indev", 0);
|
dev_filter= filter;
|
||||||
if(ret <= 0)
|
if(dev_filter != NULL) {
|
||||||
ret= Xorriso_status_filter(xorriso, filter, "-outdev", 0);
|
show_dev= Xorriso_status_filter(xorriso, filter, "-dev", 0);
|
||||||
if(ret > 0)
|
if(show_dev > 0)
|
||||||
|
dev_filter= NULL;
|
||||||
|
}
|
||||||
|
if(dev_filter != NULL) {
|
||||||
|
show_indev= Xorriso_status_filter(xorriso, filter, "-indev", 0);
|
||||||
|
show_outdev= Xorriso_status_filter(xorriso, filter, "-outdev", 0);
|
||||||
|
if(show_outdev > 0 || show_indev > 0)
|
||||||
|
do_single= 1;
|
||||||
|
}
|
||||||
|
if(xorriso->drives_exclusive != xorriso->indev_is_exclusive &&
|
||||||
|
xorriso->indev[0])
|
||||||
|
do_single= 1;
|
||||||
|
else if(xorriso->drives_exclusive != xorriso->outdev_is_exclusive &&
|
||||||
|
xorriso->outdev[0])
|
||||||
do_single= 1;
|
do_single= 1;
|
||||||
if(strcmp(xorriso->indev, xorriso->outdev) == 0 && !do_single) {
|
if(strcmp(xorriso->indev, xorriso->outdev) == 0 && !do_single) {
|
||||||
sprintf(line,"-dev %s\n", Text_shellsafe(xorriso->indev,sfe,0));
|
sprintf(line,"-dev %s\n", Text_shellsafe(xorriso->indev,sfe,0));
|
||||||
Xorriso_status_result(xorriso,filter,fp,flag&2);
|
Xorriso_status_result(xorriso, dev_filter, fp, flag & 2);
|
||||||
} else {
|
} else {
|
||||||
|
if(xorriso->drives_exclusive != xorriso->indev_is_exclusive &&
|
||||||
|
xorriso->indev[0] && show_indev) {
|
||||||
|
sprintf(line,"-osirrox o_excl_%s\n",
|
||||||
|
xorriso->indev_is_exclusive ? "on" : "off");
|
||||||
|
Xorriso_status_result(xorriso, NULL, fp, flag & 2);
|
||||||
|
}
|
||||||
sprintf(line,"-indev %s\n", Text_shellsafe(xorriso->indev,sfe,0));
|
sprintf(line,"-indev %s\n", Text_shellsafe(xorriso->indev,sfe,0));
|
||||||
Xorriso_status_result(xorriso,filter,fp,flag&2);
|
Xorriso_status_result(xorriso, dev_filter, fp, flag & 2);
|
||||||
|
if(xorriso->drives_exclusive != xorriso->indev_is_exclusive &&
|
||||||
|
xorriso->indev[0] && show_indev) {
|
||||||
|
sprintf(line,"-osirrox o_excl_%s\n",
|
||||||
|
xorriso->drives_exclusive ? "on" : "off");
|
||||||
|
Xorriso_status_result(xorriso, NULL, fp, flag & 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(xorriso->drives_exclusive != xorriso->outdev_is_exclusive &&
|
||||||
|
xorriso->outdev[0] && show_outdev) {
|
||||||
|
sprintf(line,"-osirrox o_excl_%s\n",
|
||||||
|
xorriso->outdev_is_exclusive ? "on" : "off");
|
||||||
|
Xorriso_status_result(xorriso, NULL, fp, flag & 2);
|
||||||
|
}
|
||||||
sprintf(line,"-outdev %s\n", Text_shellsafe(xorriso->outdev,sfe,0));
|
sprintf(line,"-outdev %s\n", Text_shellsafe(xorriso->outdev,sfe,0));
|
||||||
Xorriso_status_result(xorriso,filter,fp,flag&2);
|
Xorriso_status_result(xorriso, dev_filter, fp, flag & 2);
|
||||||
|
if(xorriso->drives_exclusive != xorriso->outdev_is_exclusive &&
|
||||||
|
xorriso->outdev[0] && show_outdev) {
|
||||||
|
sprintf(line,"-osirrox o_excl_%s\n",
|
||||||
|
xorriso->drives_exclusive ? "on" : "off");
|
||||||
|
Xorriso_status_result(xorriso, NULL, fp, flag & 2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return(1);
|
return(1);
|
||||||
@ -12680,6 +12725,23 @@ int Xorriso_append_scdbackup_record(struct XorrisO *xorriso, int flag)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int Xorriso_may_burn(struct XorrisO *xorriso, int flag)
|
||||||
|
{
|
||||||
|
|
||||||
|
if(xorriso->outdev_is_exclusive)
|
||||||
|
return(1);
|
||||||
|
sprintf(xorriso->info_text, "The output drive was not aquired exclusively.");
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||||
|
sprintf(xorriso->info_text, "A possible remedy is: -ossirox 'o_excl_on'");
|
||||||
|
if(xorriso->outdev[0]) {
|
||||||
|
strcat(xorriso->info_text," -outdev ");
|
||||||
|
Text_shellsafe(xorriso->outdev, xorriso->info_text, 1);
|
||||||
|
}
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "HINT", 0);
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* ---------------------------- Options API ------------------------ */
|
/* ---------------------------- Options API ------------------------ */
|
||||||
|
|
||||||
|
|
||||||
@ -17230,6 +17292,10 @@ int Xorriso_option_osirrox(struct XorrisO *xorriso, char *mode, int flag)
|
|||||||
xorriso->do_restore_sort_lba= 1;
|
xorriso->do_restore_sort_lba= 1;
|
||||||
else if(strncmp(cpt, "sort_lba_off", l)==0)
|
else if(strncmp(cpt, "sort_lba_off", l)==0)
|
||||||
xorriso->do_restore_sort_lba= 0;
|
xorriso->do_restore_sort_lba= 0;
|
||||||
|
else if(strncmp(cpt, "o_excl_off", l)==0)
|
||||||
|
xorriso->drives_exclusive= 0;
|
||||||
|
else if(strncmp(cpt, "o_excl_on", l)==0)
|
||||||
|
xorriso->drives_exclusive= 1;
|
||||||
else {
|
else {
|
||||||
unknown_mode:;
|
unknown_mode:;
|
||||||
sprintf(xorriso->info_text, "-osirrox: unknown mode '%s'", cpt);
|
sprintf(xorriso->info_text, "-osirrox: unknown mode '%s'", cpt);
|
||||||
|
@ -204,12 +204,16 @@ struct XorrisO { /* the global context of xorriso */
|
|||||||
*/
|
*/
|
||||||
char image_start_value[81]; /* value according image_start_mode */
|
char image_start_value[81]; /* value according image_start_mode */
|
||||||
|
|
||||||
|
int drives_exclusive; /* burn_preset_device_open() param exclusive */
|
||||||
|
|
||||||
int do_calm_drive; /* bit0= calm down drive after aquiring it */
|
int do_calm_drive; /* bit0= calm down drive after aquiring it */
|
||||||
|
|
||||||
char indev[SfileadrL];
|
char indev[SfileadrL];
|
||||||
void *in_drive_handle; /* interpreted only by xorrisoburn.c */
|
void *in_drive_handle; /* interpreted only by xorrisoburn.c */
|
||||||
void *in_volset_handle; /* interpreted only by xorrisoburn.c */
|
void *in_volset_handle; /* interpreted only by xorrisoburn.c */
|
||||||
char *in_charset; /* The charset to interpret the filename bytes */
|
char *in_charset; /* The charset to interpret the filename bytes */
|
||||||
|
int indev_is_exclusive;
|
||||||
|
|
||||||
time_t isofs_st_out; /* A time point at least 1 second before image
|
time_t isofs_st_out; /* A time point at least 1 second before image
|
||||||
composition began. To be stored with image as
|
composition began. To be stored with image as
|
||||||
xattr "isofs.st". */
|
xattr "isofs.st". */
|
||||||
@ -229,6 +233,7 @@ struct XorrisO { /* the global context of xorriso */
|
|||||||
int dev_fd_1; /* The fd which substitutes for /dev/fd/1 and is
|
int dev_fd_1; /* The fd which substitutes for /dev/fd/1 and is
|
||||||
connected to externaly perveived stdout.
|
connected to externaly perveived stdout.
|
||||||
*/
|
*/
|
||||||
|
int outdev_is_exclusive;
|
||||||
|
|
||||||
int grow_blindly_msc2; /* if >= 0 this causes growing from drive to drive.
|
int grow_blindly_msc2; /* if >= 0 this causes growing from drive to drive.
|
||||||
The value is used as block address offset for
|
The value is used as block address offset for
|
||||||
@ -691,6 +696,8 @@ int Xorriso_report_md5_outcome(struct XorrisO *xorriso, char *severity,
|
|||||||
|
|
||||||
int Xorriso_append_scdbackup_record(struct XorrisO *xorriso, int flag);
|
int Xorriso_append_scdbackup_record(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
|
int Xorriso_may_burn(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
|
|
||||||
int Sfile_str(char target[SfileadrL], char *source, int flag);
|
int Sfile_str(char target[SfileadrL], char *source, int flag);
|
||||||
|
|
||||||
|
@ -1 +1 @@
|
|||||||
#define Xorriso_timestamP "2009.09.17.144849"
|
#define Xorriso_timestamP "2009.09.19.161026"
|
||||||
|
@ -1001,16 +1001,20 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, int flag)
|
|||||||
if(ret<=0)
|
if(ret<=0)
|
||||||
goto ex;
|
goto ex;
|
||||||
ret= burn_drive_equals_adr(out_drive, libburn_adr, 1);
|
ret= burn_drive_equals_adr(out_drive, libburn_adr, 1);
|
||||||
if(ret==1)
|
if(ret==1) {
|
||||||
dinfo= out_dinfo;
|
dinfo= out_dinfo;
|
||||||
|
xorriso->indev_is_exclusive= xorriso->outdev_is_exclusive;
|
||||||
|
}
|
||||||
} else if((flag&3)==2 && xorriso->in_drive_handle!=NULL) {
|
} else if((flag&3)==2 && xorriso->in_drive_handle!=NULL) {
|
||||||
ret= Xorriso_get_drive_handles(xorriso, &in_dinfo, &in_drive,
|
ret= Xorriso_get_drive_handles(xorriso, &in_dinfo, &in_drive,
|
||||||
"on attempt to compare new outdev with indev", 0);
|
"on attempt to compare new outdev with indev", 0);
|
||||||
if(ret<=0)
|
if(ret<=0)
|
||||||
goto ex;
|
goto ex;
|
||||||
ret= burn_drive_equals_adr(in_drive, libburn_adr, 1);
|
ret= burn_drive_equals_adr(in_drive, libburn_adr, 1);
|
||||||
if(ret==1)
|
if(ret==1) {
|
||||||
dinfo= in_dinfo;
|
dinfo= in_dinfo;
|
||||||
|
xorriso->outdev_is_exclusive= xorriso->indev_is_exclusive;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(dinfo==NULL) {
|
if(dinfo==NULL) {
|
||||||
@ -1019,7 +1023,9 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, int flag)
|
|||||||
aquire_flag|= 32;
|
aquire_flag|= 32;
|
||||||
if((xorriso->ino_behavior & (1 | 2)) && !(xorriso->do_aaip & (4 | 32)))
|
if((xorriso->ino_behavior & (1 | 2)) && !(xorriso->do_aaip & (4 | 32)))
|
||||||
aquire_flag|= 64;
|
aquire_flag|= 64;
|
||||||
|
burn_preset_device_open(xorriso->drives_exclusive, 0, 0);
|
||||||
ret= isoburn_drive_aquire(&dinfo, libburn_adr, aquire_flag);
|
ret= isoburn_drive_aquire(&dinfo, libburn_adr, aquire_flag);
|
||||||
|
burn_preset_device_open(1, 0, 0);
|
||||||
Xorriso_process_msg_queues(xorriso,0);
|
Xorriso_process_msg_queues(xorriso,0);
|
||||||
if(ret<=0) {
|
if(ret<=0) {
|
||||||
sprintf(xorriso->info_text,"Cannot aquire drive '%s'", adr);
|
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(flag&1)
|
||||||
if(xorriso->image_start_mode&(1<<31)) /* used up setting */
|
if(xorriso->image_start_mode&(1<<31)) /* used up setting */
|
||||||
xorriso->image_start_mode= 0; /* no need to perform auto 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;
|
drive= dinfo[0].drive;
|
||||||
if(flag&1) {
|
if(flag&1) {
|
||||||
@ -1289,7 +1299,7 @@ ex:
|
|||||||
*/
|
*/
|
||||||
int Xorriso_give_up_drive(struct XorrisO *xorriso, int flag)
|
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_info *dinfo;
|
||||||
struct burn_drive *drive;
|
struct burn_drive *drive;
|
||||||
char sfe[5*SfileadrL];
|
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);
|
"on attempt to give up drive", 0);
|
||||||
|
|
||||||
if(!in_is_out_too) {
|
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)
|
if(drive!=NULL)
|
||||||
isoburn_drive_release(drive,!!(flag&4));
|
isoburn_drive_release(drive, do_eject);
|
||||||
if(dinfo!=NULL)
|
if(dinfo!=NULL)
|
||||||
burn_drive_info_free(dinfo);
|
burn_drive_info_free(dinfo);
|
||||||
}
|
}
|
||||||
@ -1333,11 +1350,18 @@ int Xorriso_give_up_drive(struct XorrisO *xorriso, int flag)
|
|||||||
in_is_out_too= 0;
|
in_is_out_too= 0;
|
||||||
}
|
}
|
||||||
if((flag&2) && xorriso->out_drive_handle!=NULL) {
|
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,
|
Xorriso_get_drive_handles(xorriso, &dinfo, &drive,
|
||||||
"on attempt to give up drive", 2);
|
"on attempt to give up drive", 2);
|
||||||
if(!in_is_out_too) {
|
if(!in_is_out_too) {
|
||||||
if(drive!=NULL)
|
if(drive!=NULL)
|
||||||
isoburn_drive_release(drive,!!(flag&4));
|
isoburn_drive_release(drive, do_eject);
|
||||||
if(dinfo!=NULL)
|
if(dinfo!=NULL)
|
||||||
burn_drive_info_free(dinfo);
|
burn_drive_info_free(dinfo);
|
||||||
}
|
}
|
||||||
@ -1543,6 +1567,10 @@ int Xorriso_auto_format(struct XorrisO *xorriso, int flag)
|
|||||||
off_t size;
|
off_t size;
|
||||||
unsigned dummy;
|
unsigned dummy;
|
||||||
|
|
||||||
|
ret= Xorriso_may_burn(xorriso, 0);
|
||||||
|
if(ret <= 0)
|
||||||
|
return(0);
|
||||||
|
|
||||||
ret= Xorriso_get_drive_handles(xorriso, &dinfo, &drive,
|
ret= Xorriso_get_drive_handles(xorriso, &dinfo, &drive,
|
||||||
"on attempt to autoformat", 2);
|
"on attempt to autoformat", 2);
|
||||||
if(ret<=0)
|
if(ret<=0)
|
||||||
@ -1949,6 +1977,10 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
|
|||||||
goto ex;
|
goto ex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ret= Xorriso_may_burn(xorriso, 0);
|
||||||
|
if(ret <= 0)
|
||||||
|
goto ex;
|
||||||
|
|
||||||
xorriso->run_state= 1; /* Indicate that burning has started */
|
xorriso->run_state= 1; /* Indicate that burning has started */
|
||||||
isoburn_disc_write(burn_options, disc);
|
isoburn_disc_write(burn_options, disc);
|
||||||
burn_write_opts_free(burn_options);
|
burn_write_opts_free(burn_options);
|
||||||
@ -5608,6 +5640,9 @@ int Xorriso_blank_media(struct XorrisO *xorriso, int flag)
|
|||||||
time_t start_time;
|
time_t start_time;
|
||||||
char mode_names[4][80]= {"all", "fast", "deformat", "deformat_quickest"};
|
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,
|
ret= Xorriso_get_drive_handles(xorriso, &dinfo, &drive,
|
||||||
"on attempt to -blank", 2);
|
"on attempt to -blank", 2);
|
||||||
if(ret<=0)
|
if(ret<=0)
|
||||||
@ -5712,6 +5747,9 @@ int Xorriso_format_media(struct XorrisO *xorriso, off_t in_size, int flag)
|
|||||||
time_t start_time;
|
time_t start_time;
|
||||||
enum burn_disc_status disc_state;
|
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,
|
ret= Xorriso_get_drive_handles(xorriso, &dinfo, &drive,
|
||||||
"on attempt to -format", 2);
|
"on attempt to -format", 2);
|
||||||
if(ret<=0)
|
if(ret<=0)
|
||||||
@ -5864,6 +5902,9 @@ int Xorriso_blank_as_needed(struct XorrisO *xorriso, int flag)
|
|||||||
char current_profile_name[80];
|
char current_profile_name[80];
|
||||||
off_t size;
|
off_t size;
|
||||||
|
|
||||||
|
ret= Xorriso_may_burn(xorriso, 0);
|
||||||
|
if(ret <= 0)
|
||||||
|
return(0);
|
||||||
ret= Xorriso_get_drive_handles(xorriso, &dinfo, &drive,
|
ret= Xorriso_get_drive_handles(xorriso, &dinfo, &drive,
|
||||||
"on attempt to blank or format", 2);
|
"on attempt to blank or format", 2);
|
||||||
if(ret<=0)
|
if(ret<=0)
|
||||||
@ -8717,6 +8758,9 @@ int Xorriso_update_iso_lba0(struct XorrisO *xorriso, int iso_lba, int isosize,
|
|||||||
struct burn_drive *drive;
|
struct burn_drive *drive;
|
||||||
off_t seek_ret;
|
off_t seek_ret;
|
||||||
|
|
||||||
|
ret= Xorriso_may_burn(xorriso, 0);
|
||||||
|
if(ret <= 0)
|
||||||
|
return(0);
|
||||||
if(flag & 1) {
|
if(flag & 1) {
|
||||||
ret= Xorriso_get_drive_handles(xorriso, &dinfo, &drive,
|
ret= Xorriso_get_drive_handles(xorriso, &dinfo, &drive,
|
||||||
"on attempt to learn current session lba", 1);
|
"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 reasons[BURN_REASONS_LEN], sfe[5*SfileadrL], profile_name[80];
|
||||||
char head_buffer[64*1024];
|
char head_buffer[64*1024];
|
||||||
|
|
||||||
|
ret= Xorriso_may_burn(xorriso, 0);
|
||||||
|
if(ret <= 0)
|
||||||
|
return(0);
|
||||||
ret= Xorriso_auto_format(xorriso, 0);
|
ret= Xorriso_auto_format(xorriso, 0);
|
||||||
if(ret <=0 )
|
if(ret <=0 )
|
||||||
return(0);
|
return(0);
|
||||||
@ -10447,7 +10494,9 @@ int Xorriso_mount(struct XorrisO *xorriso, char *dev, int adr_mode,
|
|||||||
{ret= -1; goto ex;}
|
{ret= -1; goto ex;}
|
||||||
if(ret == 0 && strncmp(dev, "stdio:", 6) != 0)
|
if(ret == 0 && strncmp(dev, "stdio:", 6) != 0)
|
||||||
sprintf(libburn_adr, "stdio:%s", dev);
|
sprintf(libburn_adr, "stdio:%s", dev);
|
||||||
|
burn_preset_device_open(xorriso->drives_exclusive, 0, 0);
|
||||||
ret= isoburn_drive_aquire(&dinfo, libburn_adr, 1);
|
ret= isoburn_drive_aquire(&dinfo, libburn_adr, 1);
|
||||||
|
burn_preset_device_open(1, 0, 0);
|
||||||
Xorriso_process_msg_queues(xorriso,0);
|
Xorriso_process_msg_queues(xorriso,0);
|
||||||
if(ret <= 0)
|
if(ret <= 0)
|
||||||
{ret= 0; goto ex;}
|
{ret= 0; goto ex;}
|
||||||
|
Loading…
Reference in New Issue
Block a user