Preparations for ISO/HFS+ hybrid images by Vladimir Serbinenko
This commit is contained in:
parent
1846f26acd
commit
bcc39f10b4
@ -188,6 +188,7 @@ Xorriso_option_gid;
|
||||
Xorriso_option_grow_blindly;
|
||||
Xorriso_option_hardlinks;
|
||||
Xorriso_option_help;
|
||||
Xorriso_option_hfsplus;
|
||||
Xorriso_option_hide;
|
||||
Xorriso_option_history;
|
||||
Xorriso_option_iso_rr_pattern;
|
||||
|
@ -134,6 +134,7 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
|
||||
m->ino_behavior= 7;
|
||||
m->iso_level= 3;
|
||||
m->do_joliet= 0;
|
||||
m->do_hfsplus= 0;
|
||||
m->do_rockridge= 1;
|
||||
m->do_iso1999= 0;
|
||||
m->do_aaip= 0;
|
||||
@ -291,6 +292,7 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
|
||||
m->disk_exclusions= NULL;
|
||||
m->iso_rr_hidings= NULL;
|
||||
m->joliet_hidings= NULL;
|
||||
m->hfsplus_hidings= NULL;
|
||||
m->disk_excl_mode= 1;
|
||||
m->use_stdin= 0;
|
||||
m->result_page_length= 0;
|
||||
@ -414,6 +416,9 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
|
||||
if(ret<=0)
|
||||
goto failure;
|
||||
ret= Exclusions_new(&(m->joliet_hidings), 0);
|
||||
if(ret<=0)
|
||||
goto failure;
|
||||
ret= Exclusions_new(&(m->hfsplus_hidings), 0);
|
||||
if(ret<=0)
|
||||
goto failure;
|
||||
Xorriso_relax_compliance(m, "default", 0);
|
||||
@ -482,6 +487,7 @@ int Xorriso_destroy(struct XorrisO **xorriso, int flag)
|
||||
Exclusions_destroy(&(m->disk_exclusions), 0);
|
||||
Exclusions_destroy(&(m->iso_rr_hidings), 0);
|
||||
Exclusions_destroy(&(m->joliet_hidings), 0);
|
||||
Exclusions_destroy(&(m->hfsplus_hidings), 0);
|
||||
Xorriso_destroy_all_extf(m, 0);
|
||||
Xorriso_lst_destroy_all(&(m->drive_blacklist), 0);
|
||||
Xorriso_lst_destroy_all(&(m->drive_greylist), 0);
|
||||
|
@ -92,6 +92,7 @@ libisofs="$libisofs $isofs"fsource.o
|
||||
libisofs="$libisofs $isofs"image.o
|
||||
libisofs="$libisofs $isofs"iso1999.o
|
||||
libisofs="$libisofs $isofs"joliet.o
|
||||
libisofs="$libisofs $isofs"hfsplus.o
|
||||
libisofs="$libisofs $isofs"libiso_msgs.o
|
||||
libisofs="$libisofs $isofs"messages.o
|
||||
libisofs="$libisofs $isofs"node.o
|
||||
|
@ -1,7 +1,7 @@
|
||||
|
||||
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
|
||||
|
||||
Copyright 2007-2011 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
Copyright 2007-2012 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
|
||||
Provided under GPL version 2 or later.
|
||||
|
||||
@ -573,7 +573,10 @@ ex:;
|
||||
|
||||
|
||||
/* @param flag bit1= add '+' to perms
|
||||
bit2-3: hidden_state : 0=off, 1=iso_rr, 2=joliet= 3=on
|
||||
bit2-7: hidden_state :
|
||||
bit2= hide in ISO/RR
|
||||
bit3= hide in Joliet
|
||||
bit4= hide in HFS+
|
||||
*/
|
||||
int Xorriso__mode_to_perms(mode_t st_mode, char perms[11], int flag)
|
||||
{
|
||||
@ -607,12 +610,15 @@ int Xorriso__mode_to_perms(mode_t st_mode, char perms[11], int flag)
|
||||
else
|
||||
perms[8]= 'T';
|
||||
}
|
||||
hidden_state= (flag >> 2) & 3;
|
||||
|
||||
hidden_state= (flag >> 2) & 63;
|
||||
if(hidden_state == 1)
|
||||
perms[9]= 'I';
|
||||
else if(hidden_state == 2)
|
||||
perms[9]= 'J';
|
||||
else if(hidden_state == 3)
|
||||
else if(hidden_state == 4)
|
||||
perms[9]= 'A';
|
||||
else if(hidden_state)
|
||||
perms[9]= 'H';
|
||||
if(flag & 2) {
|
||||
if(hidden_state)
|
||||
@ -626,7 +632,10 @@ int Xorriso__mode_to_perms(mode_t st_mode, char perms[11], int flag)
|
||||
|
||||
/* @param flag bit0= recognize Xorriso_IFBOOT as file type
|
||||
bit1= add '+' to perms
|
||||
bit2-3: hidden_state : 0=off, 1=iso_rr, 2=joliet= 3=on
|
||||
bit2-7: hidden_state :
|
||||
bit2= hide in ISO/RR
|
||||
bit3= hide in Joliet
|
||||
bit4= hide in HFS+
|
||||
*/
|
||||
int Xorriso_format_ls_l(struct XorrisO *xorriso, struct stat *stbuf, int flag)
|
||||
{
|
||||
@ -660,7 +669,7 @@ int Xorriso_format_ls_l(struct XorrisO *xorriso, struct stat *stbuf, int flag)
|
||||
else
|
||||
strcat(rpt, "?");
|
||||
|
||||
Xorriso__mode_to_perms(st_mode, perms, flag & (2 | 12));
|
||||
Xorriso__mode_to_perms(st_mode, perms, flag & (2 | 252));
|
||||
strcat(rpt, perms);
|
||||
|
||||
sprintf(rpt+strlen(rpt)," %3u ",(unsigned int) stbuf->st_nlink);
|
||||
|
@ -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++;
|
||||
|
@ -588,8 +588,10 @@ no_image:;
|
||||
}
|
||||
if(bin_path_in_use) {
|
||||
is_default= !xorriso->boot_image_cat_hidden;
|
||||
hpt= Xorriso__hide_mode_text(xorriso->boot_image_cat_hidden & 3, 0);
|
||||
sprintf(line, "-boot_image %s cat_hidden=%s\n", form, hpt);
|
||||
hpt= Xorriso__hide_mode_text(xorriso->boot_image_cat_hidden & 63, 0);
|
||||
if(hpt != NULL)
|
||||
sprintf(line, "-boot_image %s cat_hidden=%s\n", form, hpt);
|
||||
Xorriso_free_meM(hpt);
|
||||
if(!(is_default && no_defaults))
|
||||
Xorriso_status_result(xorriso,filter,fp,flag&2);
|
||||
}
|
||||
|
@ -2242,6 +2242,8 @@ int Xorriso_set_hidden(struct XorrisO *xorriso, void *in_node, char *path,
|
||||
hide_attrs|= LIBISO_HIDE_ON_RR;
|
||||
if(hide_state & 2)
|
||||
hide_attrs|= LIBISO_HIDE_ON_JOLIET;
|
||||
if(hide_state & 4)
|
||||
hide_attrs|= LIBISO_HIDE_ON_HFSPLUS;
|
||||
}
|
||||
iso_node_set_hidden(node, hide_attrs);
|
||||
return(1);
|
||||
@ -2780,18 +2782,15 @@ return:
|
||||
value= !! Exprtest_match_disk_name(xorriso, ftest, node, 0);
|
||||
|
||||
break; case 17: /* -hidden int *arg1 */
|
||||
value= 0;
|
||||
value= 1;
|
||||
ret= iso_node_get_hidden(node);
|
||||
mask= *((int *) arg1) & 3;
|
||||
if(mask == 0 && !(ret & (LIBISO_HIDE_ON_RR | LIBISO_HIDE_ON_JOLIET)))
|
||||
value= 1;
|
||||
else if(mask == 1 && (ret & LIBISO_HIDE_ON_RR))
|
||||
value= 1;
|
||||
else if(mask == 2 && (ret & LIBISO_HIDE_ON_JOLIET))
|
||||
value= 1;
|
||||
else if(mask == 3 && (ret & LIBISO_HIDE_ON_RR) &&
|
||||
(ret & LIBISO_HIDE_ON_JOLIET))
|
||||
value= 1;
|
||||
if((!!(mask & 1)) ^ (!!(ret & LIBISO_HIDE_ON_RR)))
|
||||
value= 0;
|
||||
if((!!(mask & 2)) ^ (!!(ret & LIBISO_HIDE_ON_JOLIET)))
|
||||
value= 0;
|
||||
if((!!(mask & 3)) ^ (!!(ret & LIBISO_HIDE_ON_HFSPLUS)))
|
||||
value= 0;
|
||||
|
||||
break; default:
|
||||
|
||||
|
@ -1533,12 +1533,14 @@ int Xorriso_node_eff_hidden(struct XorrisO *xorriso, IsoNode *node, int flag)
|
||||
IsoNode *current, *parent;
|
||||
|
||||
current= node;
|
||||
for(current= node; hidden_state != 3;) {
|
||||
for(current= node; hidden_state != 7;) {
|
||||
ret= iso_node_get_hidden(current);
|
||||
if(ret & LIBISO_HIDE_ON_RR)
|
||||
hidden_state|= 1;
|
||||
if(ret & LIBISO_HIDE_ON_JOLIET)
|
||||
hidden_state|= 2;
|
||||
if(ret & LIBISO_HIDE_ON_HFSPLUS)
|
||||
hidden_state|= 4;
|
||||
parent= (IsoNode *) iso_node_get_parent(current);
|
||||
if(parent == current)
|
||||
break;
|
||||
|
@ -1213,31 +1213,58 @@ int Xorriso__bourne_to_reg(char bourne_expr[], char reg_expr[], int flag)
|
||||
|
||||
int Xorriso__hide_mode(char *mode, int flag)
|
||||
{
|
||||
if(strcmp(mode, "on") == 0)
|
||||
return(1 | 2);
|
||||
else if(strcmp(mode, "iso_rr") == 0)
|
||||
return(1);
|
||||
else if(strcmp(mode, "joliet") == 0)
|
||||
return(2);
|
||||
else if(strcmp(mode, "off") == 0)
|
||||
return(0);
|
||||
return(-1);
|
||||
char *npt, *cpt;
|
||||
int l, value= 0;
|
||||
|
||||
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 == 2 && strncmp(cpt, "on", l) == 0)
|
||||
value= 1 | 2 | 4;
|
||||
else if(l == 6 && strncmp(cpt, "iso_rr", l) == 0)
|
||||
value |= 1;
|
||||
else if(l == 6 && strncmp(cpt, "joliet", l) == 0)
|
||||
value |= 2;
|
||||
else if(l == 7 && strncmp(cpt, "hfsplus", l) == 0)
|
||||
value |= 4;
|
||||
else if(l == 3 && strncmp(cpt, "off", l) == 0)
|
||||
value= 0;
|
||||
else
|
||||
return(-1);
|
||||
}
|
||||
return(value);
|
||||
}
|
||||
|
||||
|
||||
char *Xorriso__hide_mode_text(int hide_mode, int flag)
|
||||
{
|
||||
switch(hide_mode & 3) {
|
||||
case 0:
|
||||
return "off";
|
||||
case 1:
|
||||
return "iso_rr";
|
||||
case 2:
|
||||
return "joliet";
|
||||
case 3:
|
||||
return "on";
|
||||
char *acc= NULL;
|
||||
|
||||
acc = calloc(1, 80);
|
||||
if(acc == NULL)
|
||||
return(NULL);
|
||||
acc[0]= 0;
|
||||
if(hide_mode == 0) {
|
||||
strcat(acc, "off:");
|
||||
} else if(hide_mode == 7) {
|
||||
strcat(acc, "on:");
|
||||
} else {
|
||||
if(hide_mode & 1)
|
||||
strcat(acc, "iso_rr:");
|
||||
if(hide_mode & 2)
|
||||
strcat(acc, "joliet:");
|
||||
if(hide_mode & 4)
|
||||
strcat(acc, "hfsplus:");
|
||||
}
|
||||
return "invalid";
|
||||
if(acc[0])
|
||||
acc[strlen(acc) - 1]= 0; /* cut off last colon */
|
||||
return acc;
|
||||
}
|
||||
|
||||
|
||||
|
@ -2096,6 +2096,22 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag)
|
||||
}
|
||||
|
||||
|
||||
/* Option -hfsplus "on"|"off" */
|
||||
int Xorriso_option_hfsplus(struct XorrisO *xorriso, char *mode, int flag)
|
||||
{
|
||||
if(strcmp(mode, "off")==0)
|
||||
xorriso->do_hfsplus= 0;
|
||||
else if(strcmp(mode, "on")==0)
|
||||
xorriso->do_hfsplus= 1;
|
||||
else {
|
||||
sprintf(xorriso->info_text, "-hfsplus: unknown mode '%s'", mode);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
return(0);
|
||||
}
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
/* Option -hide */
|
||||
int Xorriso_option_hide(struct XorrisO *xorriso, char *hide_state,
|
||||
int argc, char **argv, int *idx, int flag)
|
||||
|
@ -886,8 +886,10 @@ int Xorriso_option_no_rc(struct XorrisO *xorriso, int flag)
|
||||
|
||||
|
||||
/* Option -not_leaf , (-hide_disk_leaf resp. -as mkisofs -hide) */
|
||||
/* @param flag bit0= add to iso_rr_hidings rather than disk_exclusions
|
||||
bit1= add to joliet_hidings rather than disk_exclusions
|
||||
/* @param flag bit0-bit5= hide rather than adding to disk_exclusions
|
||||
bit0= add to iso_rr_hidings
|
||||
bit1= add to joliet_hidings
|
||||
bit2= add to hfsplus_hidings
|
||||
*/
|
||||
int Xorriso_option_not_leaf(struct XorrisO *xorriso, char *pattern, int flag)
|
||||
{
|
||||
@ -902,7 +904,7 @@ int Xorriso_option_not_leaf(struct XorrisO *xorriso, char *pattern, int flag)
|
||||
Xorriso__bourne_to_reg(pattern, regexpr, 0);
|
||||
if(regcomp(&re, regexpr, 0)!=0)
|
||||
{ret= 0; goto cannot_add;}
|
||||
if(flag & 3) {
|
||||
if(flag & 63) {
|
||||
if(flag & 1) {
|
||||
ret= Exclusions_add_not_leafs(xorriso->iso_rr_hidings, pattern, &re, 0);
|
||||
if(ret<=0)
|
||||
@ -913,6 +915,11 @@ int Xorriso_option_not_leaf(struct XorrisO *xorriso, char *pattern, int flag)
|
||||
if(ret<=0)
|
||||
goto cannot_add;
|
||||
}
|
||||
if(flag & 4) {
|
||||
ret= Exclusions_add_not_leafs(xorriso->hfsplus_hidings, pattern, &re, 0);
|
||||
if(ret<=0)
|
||||
goto cannot_add;
|
||||
}
|
||||
} else {
|
||||
ret= Exclusions_add_not_leafs(xorriso->disk_exclusions, pattern, &re, 0);
|
||||
}
|
||||
@ -1054,13 +1061,16 @@ ex:;
|
||||
/* @param flag bit0= add to iso_rr_hidings rather than disk_exclusions
|
||||
bit1= add to joliet_hidings rather than disk_exclusions
|
||||
bit2= enable disk pattern expansion regardless of -disk_pattern
|
||||
|
||||
bit8-13= consolidated hide state bits, duplicating bit0-1
|
||||
bit8= add to iso_rr_hidings
|
||||
bit9= add to joliet_hidings
|
||||
bit10= add to hfsplus_hidings
|
||||
*/
|
||||
int Xorriso_option_not_paths(struct XorrisO *xorriso, int argc, char **argv,
|
||||
int *idx, int flag)
|
||||
{
|
||||
int ret, end_idx, num_descr= 0, dummy, optc= 0, i;
|
||||
char **descr= NULL, **optv= NULL, *eff_path= NULL;
|
||||
char **descr= NULL, **optv= NULL, *eff_path= NULL, *hpt= NULL;
|
||||
|
||||
end_idx= Xorriso_end_idx(xorriso, argc, argv, *idx,
|
||||
(xorriso->do_disk_pattern == 1 || (flag & 4)) | 2);
|
||||
@ -1091,20 +1101,23 @@ no_memory:;
|
||||
goto no_memory;
|
||||
}
|
||||
|
||||
ret= Xorriso_opt_args(xorriso, (flag & 3) ? "-hide_disk_paths" : "-not_paths",
|
||||
ret= Xorriso_opt_args(xorriso,
|
||||
(flag & 0x3f03) ? "-hide_disk_paths" : "-not_paths",
|
||||
num_descr, descr, 0, &dummy, &optc, &optv,
|
||||
2 | ((flag & 4) << 7));
|
||||
if(ret<=0)
|
||||
goto ex;
|
||||
if(flag & 3) {
|
||||
if(flag & 1) {
|
||||
if(flag & 0x3f03) {
|
||||
if(flag & 0x0101) {
|
||||
ret= Exclusions_add_not_paths(xorriso->iso_rr_hidings,
|
||||
num_descr, descr, optc, optv, 0);
|
||||
if(ret<=0) {
|
||||
no_hide:;
|
||||
sprintf(xorriso->info_text,
|
||||
"Cannot add path list: -hide_disk_paths %s ",
|
||||
Xorriso__hide_mode_text(flag & 3, 0));
|
||||
sprintf(xorriso->info_text, "Cannot add path list: -hide_disk_paths ");
|
||||
hpt= Xorriso__hide_mode_text(flag & 0x3f03, 0);
|
||||
if(hpt != NULL)
|
||||
sprintf(xorriso->info_text + strlen(xorriso->info_text), "%s ", hpt);
|
||||
Xorriso_free_meM(hpt);
|
||||
Text_shellsafe(argv[*idx], xorriso->info_text, 1);
|
||||
strcat(xorriso->info_text, num_descr > 1 ? " ... " : " ");
|
||||
strcat(xorriso->info_text, xorriso->list_delimiter);
|
||||
@ -1112,12 +1125,18 @@ no_hide:;
|
||||
goto ex;
|
||||
}
|
||||
}
|
||||
if(flag & 2) {
|
||||
if(flag & 0x0202) {
|
||||
ret= Exclusions_add_not_paths(xorriso->joliet_hidings,
|
||||
num_descr, descr, optc, optv, 0);
|
||||
if(ret<=0)
|
||||
goto no_hide;
|
||||
}
|
||||
if(flag & 0x0400) {
|
||||
ret= Exclusions_add_not_paths(xorriso->hfsplus_hidings,
|
||||
num_descr, descr, optc, optv, 0);
|
||||
if(ret<=0)
|
||||
goto no_hide;
|
||||
}
|
||||
} else {
|
||||
ret= Exclusions_add_not_paths(xorriso->disk_exclusions,
|
||||
num_descr, descr, optc, optv, 0);
|
||||
|
@ -466,14 +466,15 @@ int Xorriso_count_args(struct XorrisO *xorriso, int argc, char **argv,
|
||||
"dev","dialog","disk_dev_ino","disk_pattern","displacement",
|
||||
"dummy","dvd_obs","early_stdio_test", "eject",
|
||||
"iso_rr_pattern","follow","format","fs","gid","grow_blindly","hardlinks",
|
||||
"history","indev","in_charset","joliet",
|
||||
"hfsplus","history","indev","in_charset","joliet",
|
||||
"list_delimiter","list_extras","list_profiles","local_charset",
|
||||
"mark","md5","mount_opts","not_leaf","not_list","not_mgt",
|
||||
"options_from_file","osirrox","outdev","out_charset","overwrite",
|
||||
"pacifier","padding","path_list","pathspecs","pkt_output",
|
||||
"preparer_id","print","print_info","print_mark","prompt",
|
||||
"prog","prog_help","publisher","quoted_not_list","quoted_path_list",
|
||||
"reassure","report_about","rom_toc_scan","rr_reloc_dir","scsi_log",
|
||||
"reassure","report_about","rockridge",
|
||||
"rom_toc_scan","rr_reloc_dir","scsi_log",
|
||||
"session_log","signal_handling","sleep",
|
||||
"speed","split_size","status","status_history_max",
|
||||
"stdio_sync","stream_recording","system_id","temp_mem_limit",
|
||||
@ -659,7 +660,8 @@ int Xorriso_cmd_sorting_rank(struct XorrisO *xorriso,
|
||||
"mount",
|
||||
|
||||
"* Settings for result writing:",
|
||||
"joliet", "compliance", "rr_reloc_dir", "volid", "volset_id", "publisher",
|
||||
"joliet", "hfsplus","compliance", "rr_reloc_dir",
|
||||
"volid", "volset_id", "publisher",
|
||||
"application_id", "system_id", "volume_date", "copyright_file",
|
||||
"abstract_file", "biblio_file", "preparer_id", "out_charset",
|
||||
"read_mkisofsrc",
|
||||
@ -1270,6 +1272,10 @@ next_command:;
|
||||
(*idx)++;
|
||||
ret= Xorriso_option_hardlinks(xorriso, arg1, 0);
|
||||
|
||||
} else if(strcmp(cmd,"hfsplus")==0) {
|
||||
(*idx)++;
|
||||
ret= Xorriso_option_hfsplus(xorriso, arg1, 0);
|
||||
|
||||
} else if(strcmp(cmd,"help")==0) {
|
||||
Xorriso_option_help(xorriso,0);
|
||||
|
||||
@ -1549,6 +1555,10 @@ next_command:;
|
||||
} else if(strcmp(cmd,"rmdir")==0 || strcmp(cmd,"rmdiri")==0) {
|
||||
ret= Xorriso_option_rmi(xorriso, argc, argv, idx, 2);
|
||||
|
||||
} else if(strcmp(cmd, "rockridge") == 0) {
|
||||
(*idx)++;
|
||||
ret= Xorriso_option_rockridge(xorriso, arg1, 0);
|
||||
|
||||
} else if(strcmp(cmd,"rollback")==0) {
|
||||
ret= Xorriso_option_rollback(xorriso, 0);
|
||||
|
||||
@ -2529,6 +2539,11 @@ failure:;
|
||||
goto failure;
|
||||
if(ret > 0)
|
||||
hide_attrs|= 2;
|
||||
ret= Exclusions_match(xorriso->hfsplus_hidings, path, 0);
|
||||
if(ret < 0)
|
||||
goto failure;
|
||||
if(ret > 0)
|
||||
hide_attrs|= 4;
|
||||
return(hide_attrs);
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
|
||||
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
|
||||
|
||||
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
Copyright 2007-2012 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
|
||||
Provided under GPL version 2 or later.
|
||||
|
||||
@ -1573,6 +1573,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->do_hfsplus == 0);
|
||||
sprintf(line,"-hfsplus %s\n", (xorriso->do_hfsplus == 1 ? "on" : "off"));
|
||||
if(!(is_default && no_defaults))
|
||||
Xorriso_status_result(xorriso,filter,fp,flag&2);
|
||||
|
||||
Xorriso_lst_get_last(xorriso->jigdo_params, &plst, 0);
|
||||
Xorriso_lst_get_last(xorriso->jigdo_values, &vlst, 0);
|
||||
if(plst == NULL || vlst == NULL) {
|
||||
|
@ -753,6 +753,8 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
|
||||
hide_attr|= LIBISO_HIDE_ON_RR;
|
||||
if(xorriso->boot_image_cat_hidden & 2)
|
||||
hide_attr|= LIBISO_HIDE_ON_JOLIET;
|
||||
if(xorriso->boot_image_cat_hidden & 4)
|
||||
hide_attr|= LIBISO_HIDE_ON_HFSPLUS;
|
||||
iso_image_set_boot_catalog_hidden(image, hide_attr);
|
||||
} else if(xorriso->patch_isolinux_image & 1) {
|
||||
if(is_bootable == 1) {
|
||||
@ -808,8 +810,9 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
|
||||
}
|
||||
|
||||
isoburn_igopt_set_level(sopts, xorriso->iso_level);
|
||||
ext= isoburn_igopt_rockridge |
|
||||
ext= ((!!xorriso->do_rockridge) * isoburn_igopt_rockridge) |
|
||||
((!!xorriso->do_joliet) * isoburn_igopt_joliet) |
|
||||
((!!xorriso->do_hfsplus) * isoburn_igopt_hfsplus) |
|
||||
((!!xorriso->do_iso1999) * isoburn_igopt_iso1999) |
|
||||
(( !(xorriso->ino_behavior & 2)) * isoburn_igopt_hardlinks) |
|
||||
(( (!(xorriso->ino_behavior & 2)) ||
|
||||
|
@ -930,6 +930,9 @@ int Xorriso_option_hardlinks(struct XorrisO *xorriso, char *mode, int flag);
|
||||
/* Command -help and part of -prog_help */
|
||||
int Xorriso_option_help(struct XorrisO *xorriso, int flag);
|
||||
|
||||
/* Option -hfsplus "on"|"off" */
|
||||
int Xorriso_option_hfsplus(struct XorrisO *xorriso, char *mode, int flag);
|
||||
|
||||
/* Command -hide */
|
||||
/* @since 0.6.0 */
|
||||
int Xorriso_option_hide(struct XorrisO *xorriso, char *hide_state,
|
||||
@ -1053,6 +1056,8 @@ int Xorriso_option_no_rc(struct XorrisO *xorriso, int flag);
|
||||
@since 0.6.0
|
||||
bit1= add to joliet hide list rather than disk exclusions
|
||||
@since 0.6.0
|
||||
bit2= add to HFS+ hide list rather than disk exclusions
|
||||
@since 1.2.4
|
||||
*/
|
||||
int Xorriso_option_not_leaf(struct XorrisO *xorriso, char *pattern, int flag);
|
||||
|
||||
@ -1069,6 +1074,11 @@ int Xorriso_option_not_mgt(struct XorrisO *xorriso, char *setting, int flag);
|
||||
bit1= add to joliet hide list rather than disk exclusions
|
||||
@since 0.6.0
|
||||
bit2= enable disk pattern expansion regardless of -disk_pattern
|
||||
bit8-13= consolidated hide state bits, duplicating bit0-1
|
||||
@since 1.2.4
|
||||
bit8= add to iso_rr_hidings, same as bit0
|
||||
bit9= add to joliet_hidings, same as bit1
|
||||
bit10= add to hfsplus_hidings
|
||||
*/
|
||||
int Xorriso_option_not_paths(struct XorrisO *xorriso, int argc, char **argv,
|
||||
int *idx, int flag);
|
||||
|
@ -136,6 +136,8 @@ xorriso_xorriso_SOURCES = \
|
||||
libisofs/rockridge_read.c \
|
||||
libisofs/joliet.h \
|
||||
libisofs/joliet.c \
|
||||
libisofs/hfsplus.h \
|
||||
libisofs/hfsplus.c \
|
||||
libisofs/eltorito.h \
|
||||
libisofs/eltorito.c \
|
||||
libisofs/data_source.c \
|
||||
|
@ -133,6 +133,7 @@ struct XorrisO { /* the global context of xorriso */
|
||||
|
||||
int iso_level;
|
||||
int do_joliet;
|
||||
int do_hfsplus;
|
||||
int do_rockridge;
|
||||
int do_iso1999;
|
||||
|
||||
@ -337,7 +338,8 @@ struct XorrisO { /* the global context of xorriso */
|
||||
|
||||
int keep_boot_image;
|
||||
char boot_image_cat_path[SfileadrL];
|
||||
int boot_image_cat_hidden; /* bit0= hidden in ISO/RR , bit1= in Joliet */
|
||||
int boot_image_cat_hidden; /* bit0= hidden in ISO/RR , bit1= in Joliet ,
|
||||
bit2= in HFS+ */
|
||||
int boot_count; /* number of already attached boot images */
|
||||
|
||||
char boot_image_bin_path[SfileadrL];
|
||||
@ -506,6 +508,7 @@ struct XorrisO { /* the global context of xorriso */
|
||||
|
||||
struct ExclusionS *iso_rr_hidings;
|
||||
struct ExclusionS *joliet_hidings;
|
||||
struct ExclusionS *hfsplus_hidings;
|
||||
|
||||
int use_stdin; /* use raw stdin even if readline support is compiled */
|
||||
int result_page_length;
|
||||
|
@ -1 +1 @@
|
||||
#define Xorriso_timestamP "2012.05.24.070718"
|
||||
#define Xorriso_timestamP "2012.05.24.071402"
|
||||
|
Loading…
Reference in New Issue
Block a user