Preparations for ISO/HFS+ hybrid images by Vladimir Serbinenko

This commit is contained in:
2012-05-24 07:13:20 +00:00
parent b6857855f5
commit 4f90dad64b
18 changed files with 218 additions and 67 deletions

View File

@ -575,7 +575,7 @@ int Xorriso_genisofs_count_args(struct XorrisO *xorriso, int argc, char **argv,
"--protective-msdos-label", "--boot-catalog-hide", "--no-emul-toc",
"--emul-toc", "-disallow_dir_id_ext", "--old-empty",
"--old-root-no-md5", "--old-root-devno", "--old-root-no-ino",
"--no_rc", "--norock"
"--no_rc", "--norock", "-hfsplus",
""
};
static char arg1_options[][41]= {
@ -583,6 +583,7 @@ int Xorriso_genisofs_count_args(struct XorrisO *xorriso, int argc, char **argv,
"-boot-load-size", "-C", "-c", "-check-session", "-copyright",
"-dir-mode", "-file-mode", "-G", "-gid", "-hide", "-hide-list",
"-hidden", "-hidden-list", "-hide-joliet", "-hide-joliet-list",
"-hide-hfsplus", "-hide-hfsplus-list",
"-hide-udf", "-hide-udf-list", "-input-charset", "-output-charset",
"-iso-level", "-jcharset", "-log-file", "-m", "-exclude-list", "-M",
"-dev", "-new-dir-mode", "-o", "-p", "-preparer",
@ -723,6 +724,17 @@ int Xorriso_genisofs_help(struct XorrisO *xorriso, int flag)
" -hide-list FILE File with list of ISO9660/RR files to hide",
" -hide-joliet GLOBFILE Hide Joliet file",
" -hide-joliet-list FILE File with list of Joliet files to hide",
#ifdef Xorriso_with_hfspluS
/* >>> ts B20523 : To be activated when HFS+ works */
" -hide-hfsplus GLOBFILE Hide HFS+ file",
" -hide-hfsplus-list FILE File with list of HFS+ files to hide",
" -hfsplus Generate HFS+ filesystem",
#endif
" -input-charset CHARSET Local input charset for file name conversion",
" -output-charset CHARSET Output charset for file name conversion",
" -iso-level LEVEL Set ISO9660 conformance level (1..3) or 4 for ISO9660 version 2",
@ -860,6 +872,11 @@ int Xorriso_genisofs_help(struct XorrisO *xorriso, int flag)
mkisofs pathspec would matter (e.g. "./" versus "").
But xorriso normalizes disk_paths before further processing. Thus
the literal form does not matter.
@param hide_attrs
bit0= hide in ISO/RR
bit1= hide in Joliet
bit2= hide in HFS+
bit3 to bit5 are reserved for future hidings
*/
int Xorriso_genisofs_hide(struct XorrisO *xorriso, char *whom,
char *pattern, int hide_attrs, int flag)
@ -867,14 +884,15 @@ int Xorriso_genisofs_hide(struct XorrisO *xorriso, char *whom,
int zero= 0, ret;
char *argv[1];
if((hide_attrs & 3) == 0)
if((hide_attrs & 63) == 0)
return(2);
if(strchr(pattern, '/') != NULL) {
argv[0]= pattern;
ret= Xorriso_option_not_paths(xorriso, 1, argv, &zero,
4 | (hide_attrs & 3));
4 | ((hide_attrs & 63) << 8));
} else {
ret= Xorriso_option_not_leaf(xorriso, pattern, hide_attrs & 3);
ret= Xorriso_option_not_leaf(xorriso, pattern, hide_attrs & 63);
}
return(ret);
}
@ -885,13 +903,16 @@ int Xorriso_genisofs_hide_list(struct XorrisO *xorriso, char *whom,
char *adr, int hide_attrs, int flag)
{
int ret, linecount= 0, argc= 0, was_failure= 0, i, fret;
char **argv= NULL;
char **argv= NULL, *id= "";
FILE *fp= NULL;
if(adr[0]==0) {
if (hide_attrs & 2)
id = "joliet-";
else if (hide_attrs & 4)
id = "hfsplus-";
sprintf(xorriso->info_text,
"Empty file name given with -as %s -hide-%slist",
whom, hide_attrs == 1 ? "" : "joliet-");
"Empty file name given with -as %s -hide-%slist", whom, id);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING", 0);
return(0);
}
@ -1232,7 +1253,9 @@ int Xorriso_genisofs(struct XorrisO *xorriso, char *whom,
} else if(strcmp(argpt, "-hide") == 0 ||
strcmp(argpt, "-hide-list") == 0 ||
strcmp(argpt, "-hide-joliet") == 0 ||
strcmp(argpt, "-hide-joliet-list") == 0) {
strcmp(argpt, "-hide-joliet-list") == 0 ||
strcmp(argpt, "-hide-hfsplus") == 0 ||
strcmp(argpt, "-hide-hfsplus-list") == 0) {
if(i+1>=argc)
goto not_enough_args;
i++;
@ -1244,6 +1267,10 @@ int Xorriso_genisofs(struct XorrisO *xorriso, char *whom,
ret= Xorriso_genisofs_hide(xorriso, whom, argv[i], 2, 0);
else if(strcmp(argpt, "-hide-joliet-list") == 0)
ret= Xorriso_genisofs_hide_list(xorriso, whom, argv[i], 2, 0);
else if(strcmp(argpt, "-hide-hfsplus") == 0)
ret= Xorriso_genisofs_hide(xorriso, whom, argv[i], 4, 0);
else if(strcmp(argpt, "-hide-hfsplus-list") == 0)
ret= Xorriso_genisofs_hide_list(xorriso, whom, argv[i], 4, 0);
if(ret <= 0)
goto problem_handler_1;
@ -1477,6 +1504,8 @@ illegal_c:;
} else if(strcmp(argpt, "-joliet-long")==0) {
Xorriso_relax_compliance(xorriso,
"joliet_long_paths:joliet_long_names", 0);
} else if(strcmp(argpt, "-hfsplus")==0) {
xorriso->do_hfsplus= 1;
} else if(strcmp(argpt, "-graft-points")==0) {
xorriso->allow_graft_points= 1;
} else if(strcmp(argpt, "-path-list")==0 ||
@ -1686,7 +1715,9 @@ not_enough_args:;
} else if(strcmp(argpt, "-hide") == 0 ||
strcmp(argpt, "-hide-list") == 0 ||
strcmp(argpt, "-hide-joliet") == 0 ||
strcmp(argpt, "-hide-joliet-list") == 0) {
strcmp(argpt, "-hide-joliet-list") == 0 ||
strcmp(argpt, "-hide-hfsplus") == 0 ||
strcmp(argpt, "-hide-hfsplus-list") == 0) {
if(i+1>=argc)
goto not_enough_args;
i++;