diff --git a/libisoburn/trunk/xorriso/xorriso.1 b/libisoburn/trunk/xorriso/xorriso.1
index 5da17141..8e142675 100644
--- a/libisoburn/trunk/xorriso/xorriso.1
+++ b/libisoburn/trunk/xorriso/xorriso.1
@@ -2,7 +2,7 @@
.\" First parameter, NAME, should be all caps
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
.\" other parameters are allowed: see man(7), man(1)
-.TH XORRISO 1 "Nov 17, 2008"
+.TH XORRISO 1 "Nov 21, 2008"
.\" Please adjust this date whenever revising the manpage.
.\"
.\" Some roff macros, for reference:
@@ -1334,6 +1334,43 @@ Rock Ridge info will be generated by the program unconditionally.
\fB\-joliet\fR "on"|"off"
If enabled by "on", generate Joliet info additional to Rock Ridge info.
.TP
+\fB\-relax_compliance\fR rule[:rule...]
+Adjust the compliance to specifications of ISO 9660 and its extensions. In some
+cases it is worth to deviate a bit in order to circumvent bugs of the intended
+reader system or to get inofficial extra features.
+.br
+There are several adjustable rules which have a keyword each. If they
+are mentioned with this option then their rule gets added to the relaxation
+list. This list can be erased by rules "strict" or "clear". It can be reset
+to its start setting by "default". The term "ISO file" means the plain ISO 9660
+names which get visible if the reader ignores Rock Ridge.
+.br
+Rule keywords are:
+.br
+"omit_version" do not add versions (";1") to the file names.
+.br
+"deep_paths" allow ISO file paths deeper than 8 levels.
+.br
+"long_paths" allow ISO file paths longer than 255 characters.
+.br
+"long_names" allow up to 37 characters with ISO file names.
+.br
+"no_force_dots" do not add a dot to filenames which have none.
+.br
+"lowercase" allow lowercase characters in ISO file names.
+.br
+"full_ascii" allow all ASCII characters in ISO file names.
+.br
+"joliet_long_paths" allow Joliet paths longer than 240 characters.
+.br
+"always_gmt" store timestamps in GMT representation with timezone 0.
+.br
+"old_rr" use Rock Ridge version 1.10 (needed if the intended reader
+system does not recognize Rock Ridge 1.12 signature).
+.br
+"rec_mtime" record with ISO files the disk file's mtime and not the
+creation time of the image.
+.TP
\fB\-volid\fR text
Specify the volume ID. xorriso accepts any text up to 32 characters,
but according to rarely obeyed specs stricter rules apply:
diff --git a/libisoburn/trunk/xorriso/xorriso.c b/libisoburn/trunk/xorriso/xorriso.c
index 5bf934a7..3088fbe1 100644
--- a/libisoburn/trunk/xorriso/xorriso.c
+++ b/libisoburn/trunk/xorriso/xorriso.c
@@ -3649,7 +3649,7 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
m->split_size= 0;
strcpy(m->list_delimiter, "--");
m->do_joliet= 0;
- m->do_always_gmt= 1; /* to avoid a timezone sign bug in FreeBSD */
+ m->relax_compliance= 0;
m->do_follow_pattern= 1;
m->do_follow_param= 0;
m->do_follow_links= 0;
@@ -3804,6 +3804,7 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
ret= Exclusions_new(&(m->disk_exclusions), 0);
if(ret<=0)
goto failure;
+ Xorriso_relax_compliance(m, "default", 0);
return(1);
failure:;
@@ -5688,6 +5689,11 @@ 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_get_relax_text(xorriso, sfe, 0) == 2);
+ sprintf(line,"-relax_compliance %s\n", sfe);
+ if(!(is_default && no_defaults))
+ Xorriso_status_result(xorriso,filter,fp,flag&2);
+
if(xorriso->do_global_uid) {
sprintf(line,"-uid %lu\n", (unsigned long) xorriso->global_uid);
Xorriso_status_result(xorriso,filter,fp,flag&2);
@@ -12473,6 +12479,9 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag)
" Specifies the application id. (128 chars)",
" -joliet \"on\"|\"off\"",
" Generate Joliet info additional to Rock Ridge info.",
+" -relax_compliance rule[:rule...]",
+" Allow more or less harmless deviations from strict standards",
+" compliance.",
" -boot_image \"any\"|\"isolinux\" \"discard\"|\"keep\"|\"patch\"|\"dir=\"",
" \"bin_path=\"|\"cat_path=\"|\"load_size=\"",
" Whether to discard or keep an exiting El Torito boot image.",
@@ -14191,6 +14200,14 @@ int Xorriso_option_reassure(struct XorrisO *xorriso, char *mode, int flag)
}
+/* Option -relax_compliance */
+int Xorriso_option_relax_compliance(struct XorrisO *xorriso, char *mode,
+ int flag)
+{
+ return(Xorriso_relax_compliance(xorriso, mode, 0));
+}
+
+
/* Option -report_about */
int Xorriso_option_report_about(struct XorrisO *xorriso, char *severity,
int flag)
@@ -14863,7 +14880,7 @@ int Xorriso_count_args(struct XorrisO *xorriso, int argc, char **argv,
"options_from_file","osirrox","outdev","out_charset","overwrite",
"pacifier","padding","path_list","pathspecs","pkt_output","print","prompt",
"prog","prog_help","publisher","quoted_not_list","quoted_path_list",
- "reassure","report_about","rom_toc_scan",
+ "reassure","relax_compliance","report_about","rom_toc_scan",
"session_log","speed","split_size","status","status_history_max",
"stream_recording","temp_mem_limit","uid","volid","use_readline",
""
@@ -15430,6 +15447,10 @@ next_command:;
(*idx)++;
ret= Xorriso_option_reassure(xorriso, arg1, 0);
+ } else if(strcmp(cmd,"relax_compliance")==0) {
+ (*idx)++;
+ Xorriso_option_relax_compliance(xorriso, arg1, 0);
+
} else if(strcmp(cmd,"report_about")==0) {
(*idx)++;
ret= Xorriso_option_report_about(xorriso, arg1, 0);
diff --git a/libisoburn/trunk/xorriso/xorriso.h b/libisoburn/trunk/xorriso/xorriso.h
index 10725c9d..f21b179f 100644
--- a/libisoburn/trunk/xorriso/xorriso.h
+++ b/libisoburn/trunk/xorriso/xorriso.h
@@ -611,6 +611,10 @@ int Xorriso_option_pwdx(struct XorrisO *xorriso, int flag);
/* Option -reassure "on"|"tree"|"off" */
int Xorriso_option_reassure(struct XorrisO *xorriso, char *mode, int flag);
+/* Option -relax_compliance */
+int Xorriso_option_relax_compliance(struct XorrisO *xorriso, char *mode,
+ int flag);
+
/* Option -report_about */
int Xorriso_option_report_about(struct XorrisO *xorriso, char *severity,
int flag);
diff --git a/libisoburn/trunk/xorriso/xorriso_eng.html b/libisoburn/trunk/xorriso/xorriso_eng.html
index 3483db64..2c8c586f 100644
--- a/libisoburn/trunk/xorriso/xorriso_eng.html
+++ b/libisoburn/trunk/xorriso/xorriso_eng.html
@@ -2,7 +2,7 @@
-
+
xorriso homepage english
@@ -14,7 +14,7 @@
Homepage of
xorriso
-ISO 9660 Rock Ridge Filesystem Manipulator for Linux
+ISO 9660 Rock Ridge Filesystem Manipulator for Linux and FreeBSD
@@ -48,10 +48,8 @@ and to MMC-5 for DVD or BD).
Linux with kernel 2.4 or higher (and libc, of course) :
With kernel 2.4 an ATA drive has to be under ide-scsi emulation.
With kernel 2.6 the drive should not be under ide-scsi.
-
libpthread
is supposed to be a standard system component.
libreadline and libreadline-dev
@@ -69,7 +67,7 @@ GPL software included:
(founded by Derek Foreman and Ben Jansens,
developed and maintained since August 2006 by
Thomas Schmitt from team of libburnia-project.org)
-libisofs-0.6.10
+libisofs-0.6.10.pl01
operates on ISO 9660 filesystem images.
(By Vreixo Formoso and Mario Danic from team of libburnia-project.org)
libisoburn-0.2.8
@@ -84,8 +82,7 @@ cdrecord and mkisofs.
This program has been tested on Intel/AMD Linux
-
-only.
+and on FreeBSD systems.
For ports to other usable systems contact us.
@@ -369,7 +366,7 @@ are interested in using BD-R media.
Download as source code (see README):
-- xorriso-0.2.8.pl00.tar.gz
+
- xorriso-0.2.8.pl01.tar.gz
(1050 KB).
@@ -406,6 +403,15 @@ Bug fixes towards xorriso-0.2.6.pl00:
-->
+
+Bug fixes towards xorriso-0.2.8.pl00 and xorriso-0.2.6.pl00:
+
+- Images generated by mkisofs which contain regular files with 0 bytes
+suffered file size confusion when xorriso sessions were appended.
+- ISOLINUX boot images were not made ready for SYSLINUX script isohybrid.
+
+
+
@@ -438,6 +444,7 @@ Enhancements towards previous stable version xorriso-0.2.6.pl00:
New option -backslash_codes for terminal safety with weird file names
New options -charset, -in_charset, -out_charset
New option -application_id
+New option -relax_compliance
diff --git a/libisoburn/trunk/xorriso/xorriso_private.h b/libisoburn/trunk/xorriso/xorriso_private.h
index 8ee03db1..23d6af75 100644
--- a/libisoburn/trunk/xorriso/xorriso_private.h
+++ b/libisoburn/trunk/xorriso/xorriso_private.h
@@ -104,7 +104,7 @@ struct XorrisO { /* the global context of xorriso */
/* >>> put libisofs aspects here <<< */
int do_joliet;
- int do_always_gmt;
+ int relax_compliance; /* opaque bitfield to be set by xorrisoburn */
int do_follow_pattern;
int do_follow_param;
int do_follow_links;
diff --git a/libisoburn/trunk/xorriso/xorriso_timestamp.h b/libisoburn/trunk/xorriso/xorriso_timestamp.h
index c6556a2e..eea34004 100644
--- a/libisoburn/trunk/xorriso/xorriso_timestamp.h
+++ b/libisoburn/trunk/xorriso/xorriso_timestamp.h
@@ -1 +1 @@
-#define Xorriso_timestamP "2008.11.21.160019"
+#define Xorriso_timestamP "2008.11.21.160632"
diff --git a/libisoburn/trunk/xorriso/xorrisoburn.c b/libisoburn/trunk/xorriso/xorrisoburn.c
index 5c29d061..5ef98d18 100644
--- a/libisoburn/trunk/xorriso/xorrisoburn.c
+++ b/libisoburn/trunk/xorriso/xorrisoburn.c
@@ -109,6 +109,12 @@ int Xorriso_path_from_node(struct XorrisO *xorriso, IsoNode *node, int lba,
#define Xorriso_cd_min_track_sizE 300
+/* Default setting for -relax_compliance */
+#define Xorriso_relax_compliance_defaulT \
+ (isoburn_igopt_allow_deep_paths | isoburn_igopt_allow_longer_paths | \
+ isoburn_igopt_always_gmt)
+
+
/* ------------------------------------------------------------------------ */
@@ -1065,7 +1071,11 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
Xorriso_process_msg_queues(xorriso, 0);
return(ret);
}
+#ifdef NIX
relax= isoburn_igopt_allow_deep_paths;
+#else
+ relax= xorriso->relax_compliance;
+#endif
xorriso->alignment= 0;
image= isoburn_get_attached_image(source_drive);
@@ -1221,8 +1231,15 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
}
isoburn_igopt_set_level(sopts, 3);
isoburn_igopt_set_extensions(sopts, 1|((!!xorriso->do_joliet)<<1));
+
+#ifdef NIX
isoburn_igopt_set_relaxed(sopts, isoburn_igopt_allow_deep_paths |
- (xorriso->do_always_gmt * isoburn_igopt_always_gmt));
+ (xorriso->do_always_gmt * isoburn_igopt_always_gmt) |
+ isoburn_igopt_rrip_version_1_10);
+#else
+ isoburn_igopt_set_relaxed(sopts, relax);
+#endif
+
isoburn_igopt_set_sort_files(sopts, 1);
isoburn_igopt_set_over_mode(sopts, 0, 0, (mode_t) 0, (mode_t) 0);
isoburn_igopt_set_over_ugid(sopts, 0, 0, (uid_t) 0, (gid_t) 0);
@@ -7278,6 +7295,19 @@ int Xorriso_iso_file_open(struct XorrisO *xorriso, char *pathname,
}
Xorriso_process_msg_queues(xorriso,0);
*stream= iso_stream;
+
+#ifdef NIX
+ /* <<< */
+ {
+ unsigned int fs_id;
+ dev_t dev_id;
+ ino_t ino;
+
+ iso_stream_get_id(iso_stream, &fs_id, &dev_id, &ino);
+ fprintf(stderr, "xorriso_debug: iso_ino= %ld\n", (long int) ino);
+ }
+#endif
+
return(1);
}
@@ -8151,3 +8181,104 @@ cannot:;
}
+int Xorriso_relax_compliance(struct XorrisO *xorriso, char *mode,
+ int flag)
+{
+ char *npt, *cpt;
+ int l, was;
+
+ was= xorriso->relax_compliance;
+ npt= cpt= mode;
+ for(; npt!=NULL; cpt= npt+1) {
+ npt= strchr(cpt,':');
+ if(npt==NULL)
+ l= strlen(cpt);
+ else
+ l= npt-cpt;
+ if(l == 0)
+ continue;
+ if((l == 6 && strncmp(cpt, "strict", l) == 0) ||
+ (l == 5 && strncmp(cpt, "clear", l) == 0)) {
+ xorriso->relax_compliance= 0;
+ } else if(l == 7 && strncmp(cpt, "default", l) == 0) {
+ xorriso->relax_compliance= Xorriso_relax_compliance_defaulT;
+ } else if(l == 12 && strncmp(cpt, "omit_version", l) == 0) {
+ xorriso->relax_compliance|= isoburn_igopt_omit_version_numbers;
+ } else if(l == 10 && strncmp(cpt, "deep_paths", l) == 0) {
+ xorriso->relax_compliance|= isoburn_igopt_allow_deep_paths;
+ } else if(l == 10 && strncmp(cpt, "long_paths", l) == 0) {
+ xorriso->relax_compliance|= isoburn_igopt_allow_longer_paths;
+ } else if(l == 10 && strncmp(cpt, "long_names", l) == 0) {
+ xorriso->relax_compliance|= isoburn_igopt_max_37_char_filenames;
+ } else if(l == 13 && strncmp(cpt, "no_force_dots", l) == 0) {
+ xorriso->relax_compliance|= isoburn_igopt_no_force_dots;
+ } else if(l == 9 && strncmp(cpt, "lowercase", l) == 0) {
+ xorriso->relax_compliance|= isoburn_igopt_allow_lowercase;
+ } else if(l == 10 && strncmp(cpt, "full_ascii", l) == 0) {
+ xorriso->relax_compliance|= isoburn_igopt_allow_full_ascii;
+ } else if(l == 17 && strncmp(cpt, "joliet_long_paths", l) == 0) {
+ xorriso->relax_compliance|= isoburn_igopt_joliet_longer_paths;
+ } else if(l == 10 && strncmp(cpt, "always_gmt", l) == 0) {
+ xorriso->relax_compliance|= isoburn_igopt_always_gmt;
+ } else if(l == 6 && strncmp(cpt, "old_rr", l) == 0) {
+ xorriso->relax_compliance|= isoburn_igopt_rrip_version_1_10;
+ } else if(l == 9 && strncmp(cpt, "rec_mtime", l) == 0) {
+ xorriso->relax_compliance|= isoburn_igopt_dir_rec_mtime;
+ } else if(l == 4 && strncmp(cpt, "help", l) == 0) {
+
+ /* >>> */;
+
+ } else {
+ if(linfo_text, "-relax_compliance: unknown mode '%s'",
+ cpt);
+ else
+ sprintf(xorriso->info_text,
+ "-relax_compliance: oversized mode parameter (%d)", l);
+ Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
+ xorriso->relax_compliance= was;
+ return(0);
+ }
+ }
+ return(1);
+}
+
+
+/* @return 1=ok 2=ok, is default setting */
+int Xorriso_get_relax_text(struct XorrisO *xorriso, char mode[1024],
+ int flag)
+{
+ int r;
+
+ r= xorriso->relax_compliance;
+ if(r == 0) {
+ strcpy(mode, "strict");
+ return(1);
+ }
+ strcpy(mode, "clear");
+ if(r & isoburn_igopt_omit_version_numbers)
+ strcat(mode, ":omit_version");
+ if(r & isoburn_igopt_allow_deep_paths)
+ strcat(mode, ":deep_paths");
+ if(r & isoburn_igopt_allow_longer_paths)
+ strcat(mode, ":long_paths");
+ if(r & isoburn_igopt_max_37_char_filenames)
+ strcat(mode, ":long_names");
+ if(r & isoburn_igopt_no_force_dots)
+ strcat(mode, ":no_force_dots");
+ if(r & isoburn_igopt_allow_lowercase)
+ strcat(mode, ":lowercase");
+ if(r & isoburn_igopt_allow_full_ascii)
+ strcat(mode, ":full_ascii");
+ if(r & isoburn_igopt_joliet_longer_paths)
+ strcat(mode, ":joliet_long_paths");
+ if(r & isoburn_igopt_always_gmt)
+ strcat(mode, ":always_gmt");
+ if(r & isoburn_igopt_rrip_version_1_10)
+ strcat(mode, ":old_rr");
+ if(r & isoburn_igopt_dir_rec_mtime)
+ strcat(mode, ":rec_mtime");
+ return(1 + (r == Xorriso_relax_compliance_defaulT));
+}
+
+
diff --git a/libisoburn/trunk/xorriso/xorrisoburn.h b/libisoburn/trunk/xorriso/xorrisoburn.h
index 3d0cf04b..a928c255 100644
--- a/libisoburn/trunk/xorriso/xorrisoburn.h
+++ b/libisoburn/trunk/xorriso/xorrisoburn.h
@@ -357,6 +357,14 @@ int Xorriso_extract_cut(struct XorrisO *xorriso,
off_t img_offset, off_t bytes, int flag);
+int Xorriso_relax_compliance(struct XorrisO *xorriso, char *mode,
+ int flag);
+
+/* @return 1=ok 2=ok, is default setting */
+int Xorriso_get_relax_text(struct XorrisO *xorriso, char mode[1024],
+ int flag);
+
+
/* A pseudo file type for El-Torito bootsectors as in man 2 stat :
For now take the highest possible value.
*/