Rectified usage of original xorriso options underneath growisofs

This commit is contained in:
Thomas Schmitt 2008-07-17 11:13:32 +00:00
parent 58ba5aeff6
commit 31809252e8
5 changed files with 50 additions and 32 deletions

View File

@ -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 "Jul, 16, 2008" .TH XORRISO 1 "Jul, 17, 2008"
.\" 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:
@ -1762,11 +1762,11 @@ Personality "\fBmkisofs\fR" accepts the options listed with:
.br .br
-as mkisofs -help -- -as mkisofs -help --
.br .br
Among them: -R (always on), -J, -o, -M, -C, -path-list, -m, -exclude-list, -f, Among them: -R (always on), -J, -o, -M, -C, -path-list, -m, -exclude-list,
-print-size, -pad, -no-pad, -V, -v, -version, -graft-points, -f, -print-size, -pad, -no-pad, -V, -v, -version, -graft-points,
pathspecs as with xorriso -add. A lot of options are not supported and lead pathspecs as with xorriso -add.
to failure of the mkisofs emulation. Some are ignored, A lot of options are not supported and lead to failure of the mkisofs
but better do not rely on this tolerance. emulation. Some are ignored, but better do not rely on this tolerance.
.br .br
-graft-points is equivalent to -pathspecs on. Note that pathspecs without "=" -graft-points is equivalent to -pathspecs on. Note that pathspecs without "="
are interpreted differently than with xorriso option -add. Directories get are interpreted differently than with xorriso option -add. Directories get
@ -1779,9 +1779,9 @@ the end of a "mkisofs" option list. Verbosity settings -v (= "UPDATE") and
persists until things happen like -commit, -rollback, -dev, or end of xorriso. persists until things happen like -commit, -rollback, -dev, or end of xorriso.
-pacifier gets set to "mkisofs" if files are added to the image. -pacifier gets set to "mkisofs" if files are added to the image.
.br .br
If no output file was chosen before or during a "mkisofs" option list, then If pathspecs are given and if no output file was chosen before or during the
standard output (-outdev "-") will get into effect before pathspecs get "mkisofs" option list, then standard output (-outdev "-") will get into effect.
added. If -o points to a regular file, then it will be truncated to 0 bytes If -o points to a regular file, then it will be truncated to 0 bytes
when finally writing begins. This truncation does not happen if the drive when finally writing begins. This truncation does not happen if the drive
is chosen by xorriso options before or after -as mkisofs. is chosen by xorriso options before or after -as mkisofs.
Directories and symbolic links are no valid -o targets. Directories and symbolic links are no valid -o targets.
@ -2180,7 +2180,7 @@ Add cdrskin option --grow_overwriteable_iso to all -as cdrecord runs
in order to enable multi-session emulation on overwriteable media. in order to enable multi-session emulation on overwriteable media.
.SS .SS
.B Let xorriso work underneath growisofs .B Let xorriso work underneath growisofs
growisofs expects an ISO formatter program which understands options -o, -C, growisofs expects an ISO formatter program which understands options -C and
-M. If xorriso gets started by name "xorrisofs" then it is suitable for that. -M. If xorriso gets started by name "xorrisofs" then it is suitable for that.
.br .br
\fB$\fR export MKISOFS="xorrisofs" \fB$\fR export MKISOFS="xorrisofs"
@ -2196,6 +2196,15 @@ a link pointing to the xorriso binary and tell growisofs to use it. E.g. by:
.br .br
\fB$\fR export MKISOFS="$HOME/xorrisofs" \fB$\fR export MKISOFS="$HOME/xorrisofs"
.br .br
One may quit mkisofs emulation by argument "--" and make
use of all xorriso commands. growisofs dislikes options which
start with "-o" but -outdev must be set to "-".
So use "outdev" instead:
.br
\fB$\fR growisofs -Z /dev/dvd -- outdev - -update_r /my/files /files
.br
\fB$\fR growisofs -M /dev/dvd -- outdev - -update_r /my/files /files
.br
growisofs has excellent burn capabilities with DVD and BD. growisofs has excellent burn capabilities with DVD and BD.
It does not emulate session history on overwriteable media, though. It does not emulate session history on overwriteable media, though.
.SS .SS

View File

@ -2947,10 +2947,12 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
else if(strcmp(leafname, "xorrisofs")==0 || strcmp(leafname, "genisofs")==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;
Xorriso_protect_stdout(*xorriso, 0); Xorriso_protect_stdout(*xorriso, 0);
} else if(strcmp(leafname, "xorrecord")==0 || strcmp(leafname, "wodim")==0 || } else if(strcmp(leafname, "xorrecord")==0 || strcmp(leafname, "wodim")==0 ||
strcmp(leafname, "cdrecord")==0 || strcmp(leafname, "cdrskin")==0) { strcmp(leafname, "cdrecord")==0 || strcmp(leafname, "cdrskin")==0) {
m->argument_emulation= 2; m->argument_emulation= 2;
m->pacifier_style= 2;
} }
ret= Exclusions_new(&(m->disk_exclusions), 0); ret= Exclusions_new(&(m->disk_exclusions), 0);
if(ret<=0) if(ret<=0)
@ -4202,8 +4204,8 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag)
is_default= (xorriso->pacifier_style==0); is_default= (xorriso->pacifier_style==0);
sprintf(line,"-pacifier '%s'\n", sprintf(line,"-pacifier '%s'\n",
xorriso->pacifier_style==2 ? "mkisofs" : xorriso->pacifier_style==1 ? "mkisofs" :
xorriso->pacifier_style==1 ? "cdrecord" : "xorriso"); xorriso->pacifier_style==2 ? "cdrecord" : "xorriso");
if(!(is_default && no_defaults)) if(!(is_default && no_defaults))
Xorriso_status_result(xorriso,filter,fp,flag&2); Xorriso_status_result(xorriso,filter,fp,flag&2);
@ -7667,14 +7669,14 @@ int Xorriso_genisofs(struct XorrisO *xorriso, char *whom,
if(ret<=0) if(ret<=0)
goto ex; goto ex;
} }
if(!was_other_option) if(was_other_option && xorriso->out_drive_handle==NULL) {
{ret= 1; goto ex;}
if(xorriso->out_drive_handle==NULL) {
ret= Xorriso_option_dev(xorriso, "-", 2|4); /* set outdev to stdout */ ret= Xorriso_option_dev(xorriso, "-", 2|4); /* set outdev to stdout */
if(ret<=0) if(ret<=0)
return(ret); return(ret);
} }
/* MULTI : */
if(msc[0]) { if(msc[0]) {
cpt= strchr(msc, ','); cpt= strchr(msc, ',');
if(cpt==NULL) { if(cpt==NULL) {
@ -7688,15 +7690,16 @@ illegal_c:;
goto illegal_c; goto illegal_c;
strncpy(sfe, msc, cpt-msc); strncpy(sfe, msc, cpt-msc);
sfe[cpt-msc]= 0; sfe[cpt-msc]= 0;
if(strcmp(sfe, "16")==0) /* growisofs uses 16 to avoid a bug in mkisofs */
strcpy(sfe, "0");
if(xorriso->in_drive_handle!=NULL && indev[0]) { if(xorriso->in_drive_handle!=NULL && indev[0]) {
/* give up indev before setting the load address */ /* give up indev before setting the load address */
ret= Xorriso_option_dev(xorriso, "", 1); ret= Xorriso_option_dev(xorriso, "", 1);
if(ret<=0) if(ret<=0)
return(ret); return(ret);
} }
ret= Xorriso_option_load(xorriso, "sbsector", sfe, 0); /* growisofs submits msc1+16 to avoid a theoretical bug in mkisofs.
Therefore this bug has to be emulated here. Sigh.
*/
ret= Xorriso_option_load(xorriso, "sbsector", sfe, 1);
if(ret<=0) if(ret<=0)
return(ret); return(ret);
ret= Xorriso_option_grow_blindly(xorriso, cpt+1, 0); ret= Xorriso_option_grow_blindly(xorriso, cpt+1, 0);
@ -7709,6 +7712,9 @@ illegal_c:;
goto ex; goto ex;
} }
if(!was_other_option)
{ret= 1; goto ex;}
xorriso->padding= 300*1024; xorriso->padding= 300*1024;
for(i= 0; i<argc; i++) { for(i= 0; i<argc; i++) {
@ -7853,7 +7859,7 @@ not_enough_args:;
if(ret<=0) if(ret<=0)
goto ex; goto ex;
was_path= 1; was_path= 1;
xorriso->pacifier_style= 2; xorriso->pacifier_style= 1;
} }
} }
if(do_print_size) { if(do_print_size) {
@ -10380,7 +10386,8 @@ int Xorriso_option_list_formats(struct XorrisO *xorriso, int flag)
/* Option -load session|track|sbsector value */ /* Option -load session|track|sbsector value */
/* @return <=0 error , 1 success, 2 revoked by -reassure /* @param flag bit0= with adr_mode sbsector: adr_value is possibly 16 too high
@return <=0 error , 1 success, 2 revoked by -reassure
*/ */
int Xorriso_option_load(struct XorrisO *xorriso, char *adr_mode, int Xorriso_option_load(struct XorrisO *xorriso, char *adr_mode,
char *adr_value, int flag) char *adr_value, int flag)
@ -10404,7 +10411,7 @@ int Xorriso_option_load(struct XorrisO *xorriso, char *adr_mode,
else if(strcmp(adr_mode, "track")==0) else if(strcmp(adr_mode, "track")==0)
xorriso->image_start_mode= 2; xorriso->image_start_mode= 2;
else if(strcmp(adr_mode, "lba")==0 || strcmp(adr_mode, "sbsector")==0) else if(strcmp(adr_mode, "lba")==0 || strcmp(adr_mode, "sbsector")==0)
xorriso->image_start_mode= 3; xorriso->image_start_mode= 3 | ((flag&1) << 16);
else if(strcmp(adr_mode, "volid")==0) else if(strcmp(adr_mode, "volid")==0)
xorriso->image_start_mode= 4; xorriso->image_start_mode= 4;
else { else {
@ -11264,11 +11271,11 @@ int Xorriso_option_pacifier(struct XorrisO *xorriso, char *style, int flag)
{ {
if(strcmp(style, "xorriso")==0 || strcmp(style, "default")==0) if(strcmp(style, "xorriso")==0 || strcmp(style, "default")==0)
xorriso->pacifier_style= 0; xorriso->pacifier_style= 0;
else if(strcmp(style, "cdrecord")==0 || strcmp(style, "cdrskin")==0 ||
strcmp(style, "wodim")==0 || strcmp(style, "xorrecord")==0)
xorriso->pacifier_style= 1;
else if(strcmp(style, "mkisofs")==0 || strcmp(style, "genisofs")==0 || else if(strcmp(style, "mkisofs")==0 || strcmp(style, "genisofs")==0 ||
strcmp(style, "genisoimage")==0 || strcmp(style, "xorrisofs")==0) strcmp(style, "genisoimage")==0 || strcmp(style, "xorrisofs")==0)
xorriso->pacifier_style= 1;
else if(strcmp(style, "cdrecord")==0 || strcmp(style, "cdrskin")==0 ||
strcmp(style, "wodim")==0 || strcmp(style, "xorrecord")==0)
xorriso->pacifier_style= 2; xorriso->pacifier_style= 2;
else { else {
sprintf(xorriso->info_text, "-pacifier: unknown behavior code '%s'", style); sprintf(xorriso->info_text, "-pacifier: unknown behavior code '%s'", style);

View File

@ -345,7 +345,8 @@ int Xorriso_option_joliet(struct XorrisO *xorriso, char *mode, int flag);
int Xorriso_option_list_formats(struct XorrisO *xorriso, int flag); int Xorriso_option_list_formats(struct XorrisO *xorriso, int flag);
/* Option -load session|track|sbsector value */ /* Option -load session|track|sbsector value */
/* @return <=0 error , 1 success, 2 revoked by -reassure /* @param flag bit0= with adr_mode sbsector: adr_value is possibly 16 too high
@return <=0 error , 1 success, 2 revoked by -reassure
*/ */
int Xorriso_option_load(struct XorrisO *xorriso, char *adr_mode, int Xorriso_option_load(struct XorrisO *xorriso, char *adr_mode,
char *adr_value, int flag); char *adr_value, int flag);

View File

@ -1 +1 @@
#define Xorriso_timestamP "2008.07.17.110812" #define Xorriso_timestamP "2008.07.17.111411"

View File

@ -487,7 +487,8 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, int flag)
xorriso->image_start_mode&= ~0xffff; /* perform auto setting */ xorriso->image_start_mode&= ~0xffff; /* perform auto setting */
if((xorriso->image_start_mode&(1<<30))) { /* if enabled at all */ if((xorriso->image_start_mode&(1<<30))) { /* if enabled at all */
ret= isoburn_set_msc1(drive, xorriso->image_start_mode & 0xffff, ret= isoburn_set_msc1(drive, xorriso->image_start_mode & 0xffff,
xorriso->image_start_value, 0); xorriso->image_start_value,
!!(xorriso->image_start_mode & (1<<16)));
if(ret<=0) if(ret<=0)
goto ex; goto ex;
if(xorriso->image_start_mode&(1<<31)) if(xorriso->image_start_mode&(1<<31))
@ -1096,8 +1097,8 @@ int Xorriso_check_burn_abort(struct XorrisO *xorriso, int flag)
It issues pacifying update messages to the user. It issues pacifying update messages to the user.
@param flag bit0-3 = emulation mode @param flag bit0-3 = emulation mode
0= xorriso 0= xorriso
1= cdrecord 1= mkisofs
2= mkisofs 2= cdrecord
bit4= report speed in CD units bit4= report speed in CD units
*/ */
int Xorriso_pacifier_loop(struct XorrisO *xorriso, struct burn_drive *drive, int Xorriso_pacifier_loop(struct XorrisO *xorriso, struct burn_drive *drive,
@ -1130,7 +1131,7 @@ int Xorriso_pacifier_loop(struct XorrisO *xorriso, struct burn_drive *drive,
break; break;
current_time= Sfile_microtime(0); current_time= Sfile_microtime(0);
if(drive_status == BURN_DRIVE_WRITING && progress.sectors > 0) { if(drive_status == BURN_DRIVE_WRITING && progress.sectors > 0) {
if(emul==1) { if(emul==2) {
if(progress.sector<=progress.sectors) if(progress.sector<=progress.sectors)
sprintf(xorriso->info_text, "%4d of %4d MB written", sprintf(xorriso->info_text, "%4d of %4d MB written",
progress.sector / 512, progress.sectors / 512); progress.sector / 512, progress.sectors / 512);
@ -1163,7 +1164,7 @@ int Xorriso_pacifier_loop(struct XorrisO *xorriso, struct burn_drive *drive,
measured_speed/speed_factor); measured_speed/speed_factor);
} }
} else if(emul == 2 && } else if(emul == 1 &&
progress.sectors > 0 && progress.sector <= progress.sectors) { progress.sectors > 0 && progress.sector <= progress.sectors) {
/* "37.87% done, estimate finish Tue Jul 15 18:55:07 2008" */ /* "37.87% done, estimate finish Tue Jul 15 18:55:07 2008" */
@ -6170,7 +6171,7 @@ int Xorriso_burn_track(struct XorrisO *xorriso, off_t write_start_address,
xorriso->run_state= 1; /* Indicate that burning has started */ xorriso->run_state= 1; /* Indicate that burning has started */
burn_disc_write(burn_options, disc); burn_disc_write(burn_options, disc);
ret= Xorriso_pacifier_loop(xorriso, drive, 1|(is_cd<<4)); ret= Xorriso_pacifier_loop(xorriso, drive, 2|(is_cd<<4));
if(ret<=0) if(ret<=0)
goto ex; goto ex;
if(!burn_drive_wrote_well(drive)) { if(!burn_drive_wrote_well(drive)) {