New option -relax_compliance

This commit is contained in:
Thomas Schmitt 2008-11-21 16:07:03 +00:00
parent 3f08f2cafc
commit 0ac6297ff7
8 changed files with 222 additions and 14 deletions

View File

@ -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:

View File

@ -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);

View File

@ -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);

View File

@ -2,7 +2,7 @@
<HEAD>
<META NAME="description" CONTENT="xorriso, creates, loads, manipulates and writes ISO 9660 filesystem images with Rock Ridge extensions">
<META NAME="keywords" CONTENT="xorriso, libburn, libburnia, burn, CD, DVD, ISO, ISO 9660, RockRidge, Rock Ridge, linux, recording, burning, CD-R, CD-RW, DVD-R, DVD-RW, DVD+RW, DVD+R, DVD+R DL, BD-RE, scdbackup">
<META NAME="keywords" CONTENT="xorriso, libburn, libburnia, burn, CD, DVD, ISO, ISO 9660, RockRidge, Rock Ridge, Linux, FreeBSD, recording, burning, CD-R, CD-RW, DVD-R, DVD-RW, DVD+RW, DVD+R, DVD+R DL, BD-RE, scdbackup">
<META NAME="robots" CONTENT="follow">
<TITLE>xorriso homepage english</TITLE>
</HEAD>
@ -14,7 +14,7 @@
<P><H2> Homepage of </H2>
<H1> xorriso </H1>
<H2>ISO 9660 Rock Ridge Filesystem Manipulator for Linux</H2>
<H2>ISO 9660 Rock Ridge Filesystem Manipulator for Linux and FreeBSD</H2>
</CENTER>
<P>
@ -48,10 +48,8 @@ and to MMC-5 for DVD or BD).
<DT>Linux with kernel 2.4 or higher (and libc, of course) :</DT>
<DD>With kernel 2.4 an ATA drive has to be under ide-scsi emulation.</DD>
<DD>With kernel 2.6 the drive should not be under ide-scsi.</DD>
<!--
<DT>or FreeBSD (with libc, of course) :</DT>
<DD>ATAPI/CAM support has to be enabled in the kernel, see atapicam(4).</DD>
-->
<DT>libpthread</DT>
<DD>is supposed to be a standard system component.</DD>
<DT>libreadline and libreadline-dev</DT>
@ -69,7 +67,7 @@ GPL software included:<BR>
<DD>(founded by Derek Foreman and Ben Jansens,
developed and maintained since August 2006 by
Thomas Schmitt from team of libburnia-project.org)</DD>
<DT>libisofs-0.6.10</DT>
<DT>libisofs-0.6.10.pl01</DT>
<DD>operates on ISO 9660 filesystem images.</DD>
<DD>(By Vreixo Formoso and Mario Danic from team of libburnia-project.org)</DD>
<DT>libisoburn-0.2.8</DT>
@ -84,8 +82,7 @@ cdrecord and mkisofs.</A>
<P>
This program has been tested on Intel/AMD Linux
<!-- and FreeBSD systems -->
only.<BR>
and on FreeBSD systems.<BR>
For ports to other usable systems <A HREF="#contact">contact us</A>.
</P>
@ -369,7 +366,7 @@ are interested in using BD-R media.
<P>
<DL>
<DT><H3>Download as source code (see README):</H3></DT>
<DD><A HREF="xorriso-0.2.8.pl00.tar.gz">xorriso-0.2.8.pl00.tar.gz</A>
<DD><A HREF="xorriso-0.2.8.pl01.tar.gz">xorriso-0.2.8.pl01.tar.gz</A>
(1050 KB).
</DD>
</DL>
@ -406,6 +403,15 @@ Bug fixes towards xorriso-0.2.6.pl00:
-->
</UL>
Bug fixes towards xorriso-0.2.8.pl00 and xorriso-0.2.6.pl00:
<UL>
<LI>Images generated by mkisofs which contain regular files with 0 bytes
suffered file size confusion when xorriso sessions were appended.</LI>
<LI>ISOLINUX boot images were not made ready for SYSLINUX script isohybrid.
</LI>
</UL>
</P>
<P>
@ -438,6 +444,7 @@ Enhancements towards previous stable version xorriso-0.2.6.pl00:
<LI>New option -backslash_codes for terminal safety with weird file names</LI>
<LI>New options -charset, -in_charset, -out_charset </LI>
<LI>New option -application_id</LI>
<LI>New option -relax_compliance</LI>
<!--
<LI>- none yet -</LI>
-->

View File

@ -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;

View File

@ -1 +1 @@
#define Xorriso_timestamP "2008.11.21.160019"
#define Xorriso_timestamP "2008.11.21.160632"

View File

@ -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(l<SfileadrL)
sprintf(xorriso->info_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));
}

View File

@ -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.
*/