diff --git a/xorriso/xorriso.1 b/xorriso/xorriso.1 index 4ff8ddf3..fb5a041f 100644 --- a/xorriso/xorriso.1 +++ b/xorriso/xorriso.1 @@ -1202,8 +1202,15 @@ MMC drives usually activate their own idea of speed and take the speed value given by the burn program only as upper limit for their own decision. .TP +\fB\-stream_recording\fR "on"|"off" +Setting "on" tries to circumvent the management of defects on DVD-RAM and +DVD+RW. Defect management keeps partly damaged media usable. But it reduces +write speed to half nominal speed even if the media is in perfect shape. +For the case of flawless media, one may use -stream_recording "on" to get +full speed. +.TP \fB\-dummy\fR "on"|"off" -If "on" simulate burning or refuse with FAILURE event if +If "on" then simulate burning or refuse with FAILURE event if no simulation is possible, do neither blank nor format. .TP \fB-fs\fR number["k"|"m"] diff --git a/xorriso/xorriso.c b/xorriso/xorriso.c index 72763480..7bd37323 100644 --- a/xorriso/xorriso.c +++ b/xorriso/xorriso.c @@ -2790,6 +2790,7 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag) m->speed= 0; m->fs= 4*512; /* 4 MiB */ m->padding= 300*1024; + m->do_stream_recording= 0; m->keep_boot_image= 0; m->patch_isolinux_image= 0; m->allow_graft_points= 0; @@ -4066,6 +4067,12 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag) if(!(is_default && no_defaults)) Xorriso_status_result(xorriso,filter,fp,flag&2); + is_default= (xorriso->do_stream_recording==0); + sprintf(line,"-stream_recording %s\n", + xorriso->do_stream_recording ? "on" : "off"); + if(!(is_default && no_defaults)) + Xorriso_status_result(xorriso,filter,fp,flag&2); + is_default= (xorriso->fs==4*512); if((xorriso->fs/512)*512==xorriso->fs) sprintf(line,"-fs %dm\n", xorriso->fs/512); @@ -9612,6 +9619,8 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag) " If \"on\" simulate burning. Refuse if media cannot simulate.", " -speed number[\"k\"|\"m\"|\"[x]CD\"|\"[x]DVD\"]", " Set the burn speed. Default is 0 = maximum speed.", +" -stream_recording \"on\"|\"off\"", +" Try to circumvent slow checkread on DVD-RAM and BD-RE.", " -fs number[\"k\"|\"m\"]", " Set the size of the fifo buffer. (Default is 4m)", " -eject \"in\"|\"out\"|\"all\"", @@ -11137,6 +11146,18 @@ int Xorriso_option_status_history_max(struct XorrisO *xorriso, int num, } +/* Option -stream_recording */ +int Xorriso_option_stream_recording(struct XorrisO *xorriso, char *mode, + int flag) +{ + if(strcmp(mode,"on")==0 || mode[0]==0) + xorriso->do_stream_recording= 1; + else + xorriso->do_stream_recording= 0; + return(1); +} + + /* Option -tell_media_space */ int Xorriso_option_tell_media_space(struct XorrisO *xorriso, int flag) { @@ -11501,7 +11522,7 @@ int Xorriso_count_args(struct XorrisO *xorriso, int argc, char **argv, "padding","path_list","pathspecs","pkt_output","print","prompt", "prog","publisher","reassure","report_about","rom_toc_scan", "session_log","speed","split_size","status","status_history_max", - "temp_mem_limit","uid","volid","use_readline", + "stream_recording","temp_mem_limit","uid","volid","use_readline", "" }; static char arg2_commands[][40]= { @@ -12028,6 +12049,10 @@ next_command:; sscanf(arg1,"%d",&num1); ret= Xorriso_option_status_history_max(xorriso, num1, 0); + } else if(strcmp(cmd,"stream_recording")==0) { + (*idx)++; + ret= Xorriso_option_stream_recording(xorriso, arg1, 0); + } else if(strcmp(cmd,"tell_media_space")==0) { Xorriso_option_tell_media_space(xorriso, 0); diff --git a/xorriso/xorriso.h b/xorriso/xorriso.h index feaa5463..cc9f7331 100644 --- a/xorriso/xorriso.h +++ b/xorriso/xorriso.h @@ -233,6 +233,10 @@ int Xorriso_option_compare(struct XorrisO *xorriso, char *disk_path, int Xorriso_option_cpri( struct XorrisO *xorriso, int argc, char **argv, int *idx, int flag); +/* Option -cpx */ +int Xorriso_option_cpx(struct XorrisO *xorriso, int argc, char **argv, + int *idx, int flag); + /* Option -cut_out */ int Xorriso_option_cut_out(struct XorrisO *xorriso, char *disk_path, char *start, char *count, char *iso_rr_path, int flag); @@ -461,6 +465,10 @@ int Xorriso_option_status(struct XorrisO *xorriso, char *mode, int flag); int Xorriso_option_status_history_max(struct XorrisO *xorriso, int num1, int flag); +/* Option -stream_recording */ +int Xorriso_option_stream_recording(struct XorrisO *xorriso, char *mode, + int flag); + /* Option -tell_media_space */ int Xorriso_option_tell_media_space(struct XorrisO *xorriso, int flag); diff --git a/xorriso/xorriso_eng.html b/xorriso/xorriso_eng.html index 5bf1d9f9..f3219477 100644 --- a/xorriso/xorriso_eng.html +++ b/xorriso/xorriso_eng.html @@ -2,7 +2,7 @@ - + xorriso homepage english @@ -33,10 +33,10 @@ optical media or to filesystem objects.

Hardware requirements:

-A CD/DVD recorder suitable for +A CD/DVD/BD recorder suitable for http://libburnia-project.org
(SCSI , ATA , USB , or SATA writers compliant to standard MMC-3 for CD -and to MMC-5 for DVD). +and to MMC-5 for DVD or BD).

@@ -59,7 +59,7 @@ GPL software included:
libburn-0.4.9
-
reads and writes data from and to CD and DVD.
+
reads and writes data from and to CD, DVD, BD-RE.
(founded by Derek Foreman and Ben Jansens, furthered since August 2006 by team of libburnia-project.org)
libisofs-0.6.4
@@ -86,7 +86,7 @@ For ports to other usable systems contact us.

Special features:

-Testers wanted who are willing to risk some double layer DVD media. +Testers wanted who are willing to risk some double layer DVD media or +are interested in using BD-R media.

@@ -347,16 +348,19 @@ Enhancements towards previous stable version xorriso-0.1.4.pl00:

Development snapshot, version 0.1.7 :

Bug fixes towards xorriso-0.1.6.pl00:
Enhancements towards stable version 0.1.6.pl00:
 
diff --git a/xorriso/xorriso_private.h b/xorriso/xorriso_private.h index da6ed5bb..83046357 100644 --- a/xorriso/xorriso_private.h +++ b/xorriso/xorriso_private.h @@ -151,6 +151,7 @@ struct XorrisO { /* the global context of xorriso */ int speed; /* in libburn units : 1000 bytes/second , 0 = Max, -1 = Min */ int fs; /* fifo size in 2048 byte chunks : at most 1 GB */ int padding; /* number of bytes to add after ISO 9660 image */ + int do_stream_recording; int keep_boot_image; int patch_isolinux_image; diff --git a/xorriso/xorriso_timestamp.h b/xorriso/xorriso_timestamp.h index ff86dde0..99afa862 100644 --- a/xorriso/xorriso_timestamp.h +++ b/xorriso/xorriso_timestamp.h @@ -1 +1 @@ -#define Xorriso_timestamP "2008.05.26.181210" +#define Xorriso_timestamP "2008.05.27.201513" diff --git a/xorriso/xorrisoburn.c b/xorriso/xorrisoburn.c index 24d568f5..0937d684 100644 --- a/xorriso/xorrisoburn.c +++ b/xorriso/xorrisoburn.c @@ -814,6 +814,8 @@ int Xorriso_make_write_options( burn_write_opts_set_multi(*burn_options, !(xorriso->do_close || drive_role==0 || drive_role==3)); burn_drive_set_speed(drive, xorriso->speed, xorriso->speed); + burn_write_opts_set_stream_recording(*burn_options, + !! xorriso->do_stream_recording); burn_write_opts_set_underrun_proof(*burn_options, 1); return(1); } @@ -2718,7 +2720,6 @@ int Xorriso_restore(struct XorrisO *xorriso, char *img_path_pt; IsoNode *node= NULL; int done= 0, is_dir= 0, ret, target_is_dir, source_is_dir, stbuf_ret; - int target_is_split; struct stat stbuf, target_stbuf; struct PermiteM *perm_stack_mem; @@ -2766,8 +2767,16 @@ int Xorriso_restore(struct XorrisO *xorriso, Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, errno, "FAILURE", 0); return(0); } - } +#ifdef Osirrox_not_yeT + /* >>> */ + int source_is_split= 0; + + if(is_dir) + source_is_split= Xorriso_is_split(xorriso, node, 0); +#endif + + } for(npt= apt; !done; apt= npt+1) { npt= strchr(apt, '/'); if(npt==NULL) { @@ -2783,24 +2792,20 @@ int Xorriso_restore(struct XorrisO *xorriso, continue; } source_is_dir= (is_dir || (flag&1) || !done); - stbuf_ret= stat(path, &target_stbuf); if(stbuf_ret!=-1) { target_is_dir= S_ISDIR(target_stbuf.st_mode); - target_is_split= 0; #ifdef Osirrox_not_yeT - /* >>> */ - if(target_is_dir) - target_is_split= Xorriso_is_split(xorriso, node, 0); + /* >>> Take into respect source_is_split */ #endif + if((!target_is_dir) && source_is_dir) { - if(!((target_is_dir && !target_is_split) && source_is_dir)) { Xorriso_process_msg_queues(xorriso,0); - /* handle overwrite situation */; + /* handle overwrite situation */ if(xorriso->do_overwrite==1 || - (xorriso->do_overwrite==2 && !(target_is_dir && !target_is_split))) { + (xorriso->do_overwrite==2 && !target_is_dir)) { ret= Xorriso_rmx(xorriso, (off_t) 0, path, 1|8); if(ret<=0) return(ret); @@ -2813,11 +2818,10 @@ int Xorriso_restore(struct XorrisO *xorriso, stbuf_ret= -1; goto handle_path_node; } - Xorriso_msgs_submit(xorriso, 0, disk_path, 0, "ERRFILE", 0); sprintf(xorriso->info_text, - "While restoring '%s' : '%s' exists and may not be overwritten", - disk_path, path); + "While restoring '%s' : '%s' exists and may not be overwritten", + disk_path, path); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0); return(0); }