New option -relax_compliance

This commit is contained in:
2008-11-21 16:07:03 +00:00
parent 2a62564d46
commit 6241cd8e48
8 changed files with 222 additions and 14 deletions

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