Browse Source

Preparations for ISO/HFS+ hybrid images by Vladimir Serbinenko

master
Thomas Schmitt 10 years ago
parent
commit
4f90dad64b
  1. 1
      libisoburn/libisoburn.ver
  2. 6
      xorriso/base_obj.c
  3. 1
      xorriso/compile_xorriso.sh
  4. 21
      xorriso/disk_ops.c
  5. 49
      xorriso/emulators.c
  6. 6
      xorriso/iso_img.c
  7. 21
      xorriso/iso_manip.c
  8. 4
      xorriso/iso_tree.c
  9. 65
      xorriso/misc_funct.c
  10. 16
      xorriso/opts_d_h.c
  11. 43
      xorriso/opts_i_o.c
  12. 21
      xorriso/parse_exec.c
  13. 7
      xorriso/text_io.c
  14. 5
      xorriso/write_run.c
  15. 10
      xorriso/xorriso.h
  16. 2
      xorriso/xorriso_makefile_am.txt
  17. 5
      xorriso/xorriso_private.h
  18. 2
      xorriso/xorriso_timestamp.h

1
libisoburn/libisoburn.ver

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

6
xorriso/base_obj.c

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

1
xorriso/compile_xorriso.sh

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

21
xorriso/disk_ops.c

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

49
xorriso/emulators.c

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

6
xorriso/iso_img.c

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

21
xorriso/iso_manip.c

@ -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,19 +2782,16 @@ 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:
/* >>> complain about unknown test type */;

4
xorriso/iso_tree.c

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

65
xorriso/misc_funct.c

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

16
xorriso/opts_d_h.c

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

43
xorriso/opts_i_o.c

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

21
xorriso/parse_exec.c

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

7
xorriso/text_io.c

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

5
xorriso/write_run.c

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

10
xorriso/xorriso.h

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

2
xorriso/xorriso_makefile_am.txt

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

5
xorriso/xorriso_private.h

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

2
xorriso/xorriso_timestamp.h

@ -1 +1 @@
#define Xorriso_timestamP "2012.05.24.070718"
#define Xorriso_timestamP "2012.05.24.071402"

Loading…
Cancel
Save