From b9f01ef5128eb8ca3084a6f1b01d8e52170ea2dd Mon Sep 17 00:00:00 2001
From: Thomas Schmitt
Date: Tue, 27 May 2008 20:14:51 +0000
Subject: [PATCH] New option -stream_recording
---
xorriso/xorriso.1 | 9 ++++++++-
xorriso/xorriso.c | 27 ++++++++++++++++++++++++++-
xorriso/xorriso.h | 8 ++++++++
xorriso/xorriso_eng.html | 20 ++++++++++++--------
xorriso/xorriso_private.h | 1 +
xorriso/xorriso_timestamp.h | 2 +-
xorriso/xorrisoburn.c | 30 +++++++++++++++++-------------
7 files changed, 73 insertions(+), 24 deletions(-)
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:
-
-ISO 9660 formatter and burner for CD or DVD are fixely integrated.
+ISO 9660 formatter and burner for CD, DVD, BD-RE are fixely integrated.
-
Operates on an existing ISO image or creates a new one.
@@ -287,7 +287,8 @@ output will be redirected to stderr in this case.
-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:
+- -indev -outdev modifying to overwriteable target yielded unmountable results
- - none yet -
+ -->
Enhancements towards stable version 0.1.6.pl00:
+- New options -osirrox and -cpx
+- New option -stream_recording
- - none yet -
+ -->
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);
}