diff --git a/xorriso/drive_mgt.c b/xorriso/drive_mgt.c index e92b4994..6281a91f 100644 --- a/xorriso/drive_mgt.c +++ b/xorriso/drive_mgt.c @@ -154,6 +154,52 @@ ex:; } +static int Xorriso_grasp_loaded_aaip(struct XorrisO *xorriso, IsoImage *volset, + int flag) +{ + int ret; + IsoNode *root_node; + size_t value_length; + char *value= NULL; + double num; + struct FindjoB *job= NULL; + struct stat dir_stbuf; + + /* Look for isofs.st and put it into xorriso->isofs_st_in */ + root_node= (IsoNode *) iso_image_get_root(volset); + ret= iso_node_lookup_attr(root_node, "isofs.st", &value_length, &value, 0); + if(ret > 0) { + if(value_length > 0) { + sscanf(value, "%lf", &num); + if(num > 0) + xorriso->isofs_st_in= num; + } + free(value); + } + + if(xorriso->do_hfsplus) { + /* Bring isofs.hx to iso_hfsplus_xinfo_func, + isofs.hb to IsoImage blessings + */ + ret= Findjob_new(&job, "/", 0); + if(ret<=0) { + Xorriso_no_findjob(xorriso, "xorriso", 0); + {ret= -1; goto ex;} + } + Findjob_set_action_target(job, 49, NULL, 0); + ret= Xorriso_findi(xorriso, job, NULL, (off_t) 0, NULL, "/", + &dir_stbuf, 0, 0); + if(ret <= 0) + goto ex; + } + + ret= 1; +ex:; + Findjob_destroy(&job, 0); + return(ret); +} + + /* @param flag bit0= aquire as isoburn input drive bit1= aquire as libburn output drive (as isoburn drive if bit0) bit2= regard overwriteable media as blank @@ -178,12 +224,8 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, char *show_adr, struct burn_drive *drive= NULL, *out_drive= NULL, *in_drive= NULL; enum burn_disc_status state; IsoImage *volset = NULL; - IsoNode *root_node; struct isoburn_read_opts *ropts= NULL; char *libburn_adr= NULL, *off_adr= NULL, *boot_fate, *sev; - size_t value_length; - char *value= NULL; - double num; char volid[33], *adr_data= NULL, *adr_pt; Xorriso_alloc_meM(libburn_adr, char, SfileadrL); @@ -438,8 +480,8 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, char *show_adr, ext= isoburn_ropt_noiso1999; if((xorriso->ino_behavior & (1 | 2)) && !(xorriso->do_aaip & (1 | 4 | 32)) - && !(xorriso->do_md5 & 1)) - ext|= isoburn_ropt_noaaip; + && !(xorriso->do_md5 & 1) && !(xorriso->do_hfsplus)) + ext|= isoburn_ropt_noaaip; if(!(xorriso->do_aaip & 1)) ext|= isoburn_ropt_noacl; if(!(xorriso->do_aaip & 4)) @@ -572,17 +614,9 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, char *show_adr, } if(flag & 1) { - /* Look for isofs.st and put it into xorriso->isofs_st_in */; - root_node= (IsoNode *) iso_image_get_root(volset); - ret= iso_node_lookup_attr(root_node, "isofs.st", &value_length, &value, 0); - if(ret > 0) { - if(value_length > 0) { - sscanf(value, "%lf", &num); - if(num > 0) - xorriso->isofs_st_in= num; - } - free(value); - } + ret= Xorriso_grasp_loaded_aaip(xorriso, volset, 0); + if(ret <= 0) + goto ex; } if(!(flag&32)) { diff --git a/xorriso/emulators.c b/xorriso/emulators.c index 838ca190..ffda6747 100644 --- a/xorriso/emulators.c +++ b/xorriso/emulators.c @@ -1300,6 +1300,10 @@ int Xorriso_genisofs(struct XorrisO *xorriso, char *whom, } else if(strcmp(argpt, "--old-root-no-ino")==0) { old_root_ino= 0; + } else if(strcmp(argpt, "-hfsplus") == 0) { + /* Already with -indev */ + xorriso->do_hfsplus= 1; + } else if(strcmp(argpt, "--hardlinks")==0) { Xorriso_option_hardlinks(xorriso, "on", 0); } else if(strcmp(argpt, "--acl")==0) { @@ -1518,8 +1522,6 @@ illegal_c:; if(argv[i] != argpt) delay_opt_list[delay_opt_count - 1]|= 1<<31; i+= arg_count; - } else if(strcmp(argpt, "-hfsplus") == 0) { - xorriso->do_hfsplus= 1; } else if(strcmp(argpt, "-hfsplus-serial-no") == 0) { if(i+1>=argc) goto not_enough_args; diff --git a/xorriso/findjob.h b/xorriso/findjob.h index 322d0da0..1406cf03 100644 --- a/xorriso/findjob.h +++ b/xorriso/findjob.h @@ -165,6 +165,7 @@ struct FindjoB { 46= get_hfs_crtp 47= set_hfs_bless blessing 48= get_hfs_bless + 49= internal: update creator, type, and blessings from persistent isofs.* */ int action; int prune; diff --git a/xorriso/iso_manip.c b/xorriso/iso_manip.c index 3d332f16..08df7422 100644 --- a/xorriso/iso_manip.c +++ b/xorriso/iso_manip.c @@ -2414,6 +2414,8 @@ int Xorriso_findi_action(struct XorrisO *xorriso, struct FindjoB *job, struct stat dir_stbuf, stbuf; void *xinfo; struct iso_hfsplus_xinfo_data *hfsplus_xinfo; + size_t value_length; + char *value; action= Findjob_get_action_parms(job, &target, &text_2, &user, &group, &mode_and, &mode_or, &type, &date, &subjob, 0); @@ -2593,6 +2595,33 @@ int Xorriso_findi_action(struct XorrisO *xorriso, struct FindjoB *job, Xorriso_result(xorriso, 0); } else if(ret == 0) ret= 1; + } else if(action == 49) { + /* internal: update creator, type, and blessings from persistent isofs.* */ + ret= Xorriso_get_attr_value(xorriso, node, show_path, "isofs.hx", + &value_length, &value, 0); + if(ret < 0) + return(ret); + if(ret > 0 && value_length >= 10) { + ret= Xorriso_hfsplus_file_creator_type(xorriso, show_path, (void *) node, + value + 2, value + 6, 4); + free(value); + if(ret <= 0) + return(ret); + } + ret= Xorriso_get_attr_value(xorriso, node, show_path, "isofs.hb", + &value_length, &value, 0); + if(ret < 0) + return(ret); + if(ret > 0 && value_length >= 1) { + bless_code[0]= value[0]; + bless_code[1]= 0; + ret= Xorriso_hfsplus_bless(xorriso, show_path, (void *) node, + bless_code, 0); + if(ret <= 0) + return(ret); + } + ret= 1; + } else { /* includes : 15 in_iso */ Text_shellsafe(show_path, xorriso->result_line, 0); strcat(xorriso->result_line, "\n"); @@ -3543,8 +3572,92 @@ set_error:; } +/* flag bit0= in case of error talk of "overwrite" rather than "remove" +*/ +static int Xorriso_remove_hfsplus_crtp(struct XorrisO *xorriso, IsoNode *node, + char *path, int flag) +{ + int ret; + char *msg, buf[10], *bufpt; + size_t l; + static char *name= "isofs.hx"; + + ret= iso_node_remove_xinfo(node, iso_hfsplus_xinfo_func); + Xorriso_process_msg_queues(xorriso, 0); + if(ret < 0) { + if(flag & 1) + msg= "Cannot overwrite HFS+ creator and type of ISO node"; + else + msg= "Cannot remove HFS+ creator and type of ISO node"; + Xorriso_report_iso_error(xorriso, path, ret, msg, 0, "FAILURE", 1); + return(0); + } + /* Delete isofs.hx attribute */ + bufpt= buf; + + /* >>> ??? check whether there is isofs.hx attached ? */; + + ret= Xorriso_setfattr(xorriso, node, path, + (size_t) 1, &name, &l, &bufpt, 4 | 8); + return(ret); +} + + +static int Xorriso_set_hfsplus_crtp(struct XorrisO *xorriso, IsoNode *node, + char *path, char *creator, char *hfs_type, + int flag) +{ + struct iso_hfsplus_xinfo_data *hfs_data= NULL; + char buf[10], *bufpt; + size_t l; + int ret; + static char *name= "isofs.hx"; + + /* Register as non-persistent xinfo */ + hfs_data= iso_hfsplus_xinfo_new(0); + if(hfs_data == NULL) { + Xorriso_no_malloc_memory(xorriso, NULL, 0); + return(-1); + } + memcpy(hfs_data->creator_code, creator, 4); + memcpy(hfs_data->type_code, hfs_type, 4); + ret= iso_node_add_xinfo(node, iso_hfsplus_xinfo_func, (void *) hfs_data); + Xorriso_process_msg_queues(xorriso, 0); + if(ret < 0) { + Xorriso_report_iso_error(xorriso, path, ret, + "Cannot attach HFS+ creator and type to ISO node", 0, "FAILURE", 1); + goto failure; + } else if(ret == 0) { + strcat(xorriso->info_text, + "Programm error: iso_node_add_xinfo refuses to attach HFS+ creator and type"); + Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0); + goto failure; + } + + /* Register as persistent attribute isofs.hx */ + bufpt= buf; + l= 10; + buf[0]= 1; + buf[1]= 0; + memcpy(buf + 2, creator, 4); + memcpy(buf + 6, hfs_type, 4); + ret= Xorriso_setfattr(xorriso, node, path, + (size_t) 1, &name, &l, &bufpt, 2 | 8); + if(ret <= 0) + goto failure; + Xorriso_set_change_pending(xorriso, 0); + return(1); + +failure: + if(hfs_data != NULL) + iso_hfsplus_xinfo_func(hfs_data, 1); + return(0); +} + + /* @param flag bit0= only check creator and hfs_type for compliance. bit1= with bit0: check for search rather than for setting + bit2= copy 2 times 4 bytes without any check */ int Xorriso_hfsplus_file_creator_type(struct XorrisO *xorriso, char *path, void *in_node, @@ -3552,7 +3665,6 @@ int Xorriso_hfsplus_file_creator_type(struct XorrisO *xorriso, char *path, { int ret; IsoNode *node; - struct iso_hfsplus_xinfo_data *hfs_data= NULL; if(in_node == NULL && !(flag * 1)) { ret= Xorriso_node_from_path(xorriso, NULL, path, &node, 0); @@ -3560,11 +3672,13 @@ int Xorriso_hfsplus_file_creator_type(struct XorrisO *xorriso, char *path, return(ret); } else node= (IsoNode *) in_node; - if((creator[0] == 0 && hfs_type[0] == 0) || + if(flag & 4) { + ; + } else if((creator[0] == 0 && hfs_type[0] == 0) || strcmp(creator, "--delete") == 0) { if(flag & 2) { strcpy(xorriso->info_text, - "HFS+ file creator code for deletion shall be used for searching"); + "Attempt to use HFS+ file pseudo-creator '--delete' for searching"); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0); strcpy(xorriso->info_text, "Suitable are strings of length 4 or length 1"); @@ -3573,14 +3687,9 @@ int Xorriso_hfsplus_file_creator_type(struct XorrisO *xorriso, char *path, } if(flag & 1) return(1); - ret= iso_node_remove_xinfo(node, iso_hfsplus_xinfo_func); - Xorriso_process_msg_queues(xorriso, 0); - if(ret < 0) { - Xorriso_report_iso_error(xorriso, path, ret, - "Cannot remove HFS+ creator and type of ISO node", - 0, "FAILURE", 1); - goto failure; - } + ret= Xorriso_remove_hfsplus_crtp(xorriso, node, path, 0); + if(ret < 0) + return(ret); return(1); } else if((strlen(creator) != 4 && !(strlen(creator) == 1 && (flag & 3) == 3)) || @@ -3599,43 +3708,16 @@ int Xorriso_hfsplus_file_creator_type(struct XorrisO *xorriso, char *path, if(flag & 1) return(1); - hfs_data= iso_hfsplus_xinfo_new(0); - if(hfs_data == NULL) { - Xorriso_no_malloc_memory(xorriso, NULL, 0); - return(-1); - } - memcpy(hfs_data->creator_code, creator, 4); - memcpy(hfs_data->type_code, hfs_type, 4); - - ret= iso_node_remove_xinfo(node, iso_hfsplus_xinfo_func); - Xorriso_process_msg_queues(xorriso, 0); - if(ret < 0) { - Xorriso_report_iso_error(xorriso, path, ret, - "Cannot overwrite HFS+ creator and type of ISO node", - 0, "FAILURE", 1); - goto failure; - } - ret= iso_node_add_xinfo(node, iso_hfsplus_xinfo_func, (void *) hfs_data); - Xorriso_process_msg_queues(xorriso, 0); - if(ret < 0) { - Xorriso_report_iso_error(xorriso, path, ret, - "Cannot attach HFS+ creator and type to ISO node", 0, "FAILURE", 1); - goto failure; - } else if(ret == 0) { - strcat(xorriso->info_text, - "Programm error: iso_node_add_xinfo refuses to attach HFS+ creator and type"); - Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0); - goto failure; - } - Xorriso_set_change_pending(xorriso, 0); + ret= Xorriso_remove_hfsplus_crtp(xorriso, node, path, 1); + if(ret <= 0) + return(ret); + ret= Xorriso_set_hfsplus_crtp(xorriso, node, path, creator, hfs_type, 0); + if(ret <= 0) + return(ret); return(1); - -failure: - if(hfs_data != NULL) - iso_hfsplus_xinfo_func(hfs_data, 1); - return(0); } + /* @param node If node is NULL and path is empty, then the blessing will be @@ -3652,31 +3734,39 @@ failure: int Xorriso_hfsplus_bless(struct XorrisO *xorriso, char *path, void *in_node, char *blessing, int flag) { - int ret; - IsoNode *node; + int ret, bless_max; + IsoNode *node, **blessed_nodes; IsoImage *volume= NULL; enum IsoHfsplusBlessings bless_code = ISO_HFSPLUS_BLESS_MAX; /* = invalid */ + char *hb = ""; + size_t l= 0; + static char *name= "isofs.hb"; if(strcmp(blessing, "ppc_bootdir") == 0 || - strcmp(blessing, "p") == 0 || strcmp(blessing, "P") == 0) + strcmp(blessing, "p") == 0 || strcmp(blessing, "P") == 0) { bless_code= ISO_HFSPLUS_BLESS_PPC_BOOTDIR; - else if(strcmp(blessing, "intel_bootfile") == 0 || - strcmp(blessing, "i") == 0 || strcmp(blessing, "I") == 0) + hb= "p"; + } else if(strcmp(blessing, "intel_bootfile") == 0 || + strcmp(blessing, "i") == 0 || strcmp(blessing, "I") == 0) { bless_code= ISO_HFSPLUS_BLESS_INTEL_BOOTFILE; - else if(strcmp(blessing, "show_folder") == 0 || - strcmp(blessing, "s") == 0 || strcmp(blessing, "S") == 0) + hb= "i"; + } else if(strcmp(blessing, "show_folder") == 0 || + strcmp(blessing, "s") == 0 || strcmp(blessing, "S") == 0) { bless_code= ISO_HFSPLUS_BLESS_SHOWFOLDER; - else if(strcmp(blessing, "os9_folder") == 0 || - strcmp(blessing, "9") == 0) + hb= "s"; + } else if(strcmp(blessing, "os9_folder") == 0 || + strcmp(blessing, "9") == 0) { bless_code= ISO_HFSPLUS_BLESS_OS9_FOLDER; - else if(strcmp(blessing, "osx_folder") == 0 || - strcmp(blessing, "x") == 0 || strcmp(blessing, "X") == 0) + hb= "9"; + } else if(strcmp(blessing, "osx_folder") == 0 || + strcmp(blessing, "x") == 0 || strcmp(blessing, "X") == 0) { bless_code= ISO_HFSPLUS_BLESS_OSX_FOLDER; - else if((flag & 8) && (flag & 4) && + hb= "x"; + } else if((flag & 8) && (flag & 4) && (strcmp(blessing, "any") == 0 || - strcmp(blessing, "a") == 0 || strcmp(blessing, "A") == 0)) + strcmp(blessing, "a") == 0 || strcmp(blessing, "A") == 0)) { bless_code= ISO_HFSPLUS_BLESS_MAX; - else { + } else { sprintf(xorriso->info_text, "Unknown blessing type "); Text_shellsafe(blessing, xorriso->info_text, 1); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0); @@ -3695,6 +3785,24 @@ int Xorriso_hfsplus_bless(struct XorrisO *xorriso, char *path, if(ret <= 0) return(ret); + /* Remove persistent bless mark from current bearer */ + ret= iso_image_hfsplus_get_blessed(volume, &blessed_nodes, &bless_max, 0); + Xorriso_process_msg_queues(xorriso, 0); + if(ret < 0) { + Xorriso_report_iso_error(xorriso, "", ret, + "Error when trying to bless a file", + 0, "FAILURE", 1); + return(0); + } + if((int) bless_code < bless_max) { + if(blessed_nodes[(int) bless_code] != NULL) { + ret= Xorriso_setfattr(xorriso, node, path, + (size_t) 1, &name, &l, &hb, 4 | 8); + if(ret <= 0) + return(ret); + } + } + ret= iso_image_hfsplus_bless(volume, bless_code, node, flag & 3); Xorriso_process_msg_queues(xorriso, 0); if(ret == 0 && path[0]) { @@ -3717,6 +3825,12 @@ int Xorriso_hfsplus_bless(struct XorrisO *xorriso, char *path, 0, "FAILURE", 1); return(0); } + + /* Attach persistent bless mark to node */ + l= 1; + ret= Xorriso_setfattr(xorriso, node, path, (size_t) 1, &name, &l, &hb, 2 | 8); + if(ret <= 0) + return(ret); Xorriso_set_change_pending(xorriso, 0); return(1); } diff --git a/xorriso/write_run.c b/xorriso/write_run.c index 4327f8c0..a3b0eaec 100644 --- a/xorriso/write_run.c +++ b/xorriso/write_run.c @@ -817,7 +817,8 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag) (( !(xorriso->ino_behavior & 2)) * isoburn_igopt_hardlinks) | (( (!(xorriso->ino_behavior & 2)) || (xorriso->do_aaip & (2 | 8 | 16 | 256)) || - (xorriso->do_md5 & (2 | 4)) + (xorriso->do_md5 & (2 | 4)) || + xorriso->do_hfsplus ) * isoburn_igopt_aaip) | ((!!(xorriso->do_md5 & 2)) * isoburn_igopt_session_md5) | ((!!(xorriso->do_md5 & 4)) * isoburn_igopt_file_md5) | diff --git a/xorriso/xorriso.1 b/xorriso/xorriso.1 index f0251430..8d004ef4 100644 --- a/xorriso/xorriso.1 +++ b/xorriso/xorriso.1 @@ -9,7 +9,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 "Version 1.2.3, Jun 06, 2012" +.TH XORRISO 1 "Version 1.2.3, Jun 07, 2012" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: @@ -1666,7 +1666,7 @@ Matches data files which have MD5 checksums. .br \fB\-has_hfs_crtp\fR creator type : Matches files which have the given HFS+ creator and type attached. -These are codes of 4 characters which may get stored if \-hfsplus is +These are codes of 4 characters which get stored if \-hfsplus is enabled. Use a single dash '\-' as wildcard that matches any such code. E.g:. .br @@ -1679,9 +1679,6 @@ Matches files which bear the given HFS+ blessing. It may be one of : "ppc_bootdir", "intel_bootfile", "show_folder", "os9_folder", "osx_folder", "any". See also action set_hfs_bless. .br -Note that HFS+ information is not read with loaded images. So above two tests -are useful only for listing effective settings before a new image gets written. -.br \fB\-has_filter\fR : Matches files which are filtered by \-set_filter. .br @@ -1881,6 +1878,12 @@ E.g.: \-exec set_hfs_crtp YYDN TEXT .br E.g.: \-find /my/dir \-prune \-exec set_hfs_crtp \-\-delete \- .br +\fBget_hfs_crtp\fR +prints the HFS+ creator and type attributes together with the iso_rr_path, +if the file has such attributes at all. +.br +E.g.: \-exec get_hfs_crtp +.br \fBset_hfs_bless\fR applies or removes HFS+ blessings. They are roles which can be attributed to up to four directories and a data file: @@ -1897,21 +1900,12 @@ No file object can bear more than one blessing. .br E.g.: \-find /my/blessed/directory \-exec set_hfs_bless p .br -\fBget_hfs_crtp\fR -prints the HFS+ creator and type attributes together with the iso_rr_path, -if the file has such attributes at all. -.br -E.g.: \-exec get_hfs_crtp -.br \fBget_hfs_bless\fR prints the HFS+ blessing role and the iso_rr_path, if the file is blessed at all. .br E.g.: \-exec get_hfs_bless .br -Note that HFS+ information is not read with loaded images. So above two actions -are useful only for listing effective settings before a new image gets written. -.br \fBset_filter\fR applies or removes filters. .br @@ -2282,6 +2276,20 @@ metadata. The second one marks the range from HFS+ metadata to the end of file content data. If more ISO image data follow, then a third partition entry gets produced. Other features of xorriso might cause the need for more APM entries. +.br +The HFS+ filesystem is not suitable for add\-on sessions produced by the +multi\-session method of growing. An existing ISO image may nevertheless +be the base for a new image produced by the method of modifying. +If \-hfsplus is enabled when \-indev or \-dev gets executed, then AAIP +attributes get loaded from the input image and checked for information about +HFS creator, filetype, or blessing. If found, then they get enabled as +settings for the next image production. +Therefore it is advisable to perform \-hfsplus "on" before \-indev or \-dev. +.br +Information about HFS creator, type, and blessings gets stored by xorriso +if \-hfsplus is enabled at \-commit time. It is stored as copy outside the +HFS+ partition, but rather along with the Rock Ridge information. +xorriso does not read any information from the HFS+ meta data. .TP \fB\-rockridge\fR "on"|"off" Mode "off" disables production of Rock Ridge information for the ISO 9660 file diff --git a/xorriso/xorriso.info b/xorriso/xorriso.info index 8ac4e022..c105db28 100644 --- a/xorriso/xorriso.info +++ b/xorriso/xorriso.info @@ -1510,9 +1510,9 @@ File: xorriso.info, Node: CmdFind, Next: Filter, Prev: Manip, Up: Options Matches data files which have MD5 checksums. -has_hfs_crtp creator type : Matches files which have the given HFS+ creator and type - attached. These are codes of 4 characters which may get - stored if -hfsplus is enabled. Use a single dash '-' as - wildcard that matches any such code. E.g:. + attached. These are codes of 4 characters which get stored + if -hfsplus is enabled. Use a single dash '-' as wildcard + that matches any such code. E.g:. -has_hfs_crtp YYDN TEXT -has_hfs_crtp - - -has_hfs_bless blessing : @@ -1520,9 +1520,6 @@ File: xorriso.info, Node: CmdFind, Next: Filter, Prev: Manip, Up: Options one of : "ppc_bootdir", "intel_bootfile", "show_folder", "os9_folder", "osx_folder", "any". See also action set_hfs_bless. - Note that HFS+ information is not read with loaded images. So - above two tests are useful only for listing effective - settings before a new image gets written. -has_filter : Matches files which are filtered by -set_filter. -hidden hide_state : @@ -1683,6 +1680,10 @@ File: xorriso.info, Node: CmdFind, Next: Filter, Prev: Manip, Up: Options adds, changes, or removes HFS+ creator and type attributes. E.g.: -exec set_hfs_crtp YYDN TEXT E.g.: -find /my/dir -prune -exec set_hfs_crtp -delete - + get_hfs_crtp + prints the HFS+ creator and type attributes together with the + iso_rr_path, if the file has such attributes at all. + E.g.: -exec get_hfs_crtp set_hfs_bless applies or removes HFS+ blessings. They are roles which can be attributed to up to four directories and a data file: @@ -1696,17 +1697,10 @@ File: xorriso.info, Node: CmdFind, Next: Filter, Prev: Manip, Up: Options the blessing will lose it then. No file object can bear more than one blessing. E.g.: -find /my/blessed/directory -exec set_hfs_bless p - get_hfs_crtp - prints the HFS+ creator and type attributes together with the - iso_rr_path, if the file has such attributes at all. - E.g.: -exec get_hfs_crtp get_hfs_bless prints the HFS+ blessing role and the iso_rr_path, if the file is blessed at all. E.g.: -exec get_hfs_bless - Note that HFS+ information is not read with loaded images. So - above two actions are useful only for listing effective - settings before a new image gets written. set_filter applies or removes filters. E.g.: -exec set_filter --zisofs -- @@ -2036,6 +2030,20 @@ according to the setting of command -acl. ISO image data follow, then a third partition entry gets produced. Other features of xorriso might cause the need for more APM entries. + The HFS+ filesystem is not suitable for add-on sessions produced + by the multi-session method of growing. An existing ISO image may + nevertheless be the base for a new image produced by the method of + modifying. If -hfsplus is enabled when -indev or -dev gets + executed, then AAIP attributes get loaded from the input image and + checked for information about HFS creator, filetype, or blessing. + If found, then they get enabled as settings for the next image + production. Therefore it is advisable to perform -hfsplus "on" + before -indev or -dev. + Information about HFS creator, type, and blessings gets stored by + xorriso if -hfsplus is enabled at -commit time. It is stored as + copy outside the HFS+ partition, but rather along with the Rock + Ridge information. xorriso does not read any information from the + HFS+ meta data. -rockridge "on"|"off" Mode "off" disables production of Rock Ridge information for the @@ -4441,7 +4449,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * # starts a comment line: Scripting. (line 162) * -abort_on controls abort on error: Exception. (line 27) -* -abstract_file sets abstract file name: SetWrite. (line 211) +* -abstract_file sets abstract file name: SetWrite. (line 225) * -acl controls handling of ACLs: Loading. (line 143) * -add inserts one or more paths: Insert. (line 45) * -add_plainly inserts one or more paths: Insert. (line 64) @@ -4449,13 +4457,13 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -alter_date_r sets timestamps in ISO image: Manip. (line 167) * -append_partition adds arbitrary file after image end: Bootable. (line 202) -* -application_id sets application id: SetWrite. (line 170) +* -application_id sets application id: SetWrite. (line 184) * -as emulates mkisofs or cdrecord: Emulation. (line 13) * -assert_volid rejects undesired images: Loading. (line 84) * -auto_charset learns character set from image: Loading. (line 98) * -backslash_codes enables backslash conversion: Scripting. (line 67) * -ban_stdio_write demands real drive: Loading. (line 247) -* -biblio_file sets biblio file name: SetWrite. (line 218) +* -biblio_file sets biblio file name: SetWrite. (line 232) * -blank erases media: Writing. (line 61) * -boot_image controls bootability: Bootable. (line 26) * -calm_drive reduces drive activity: Loading. (line 236) @@ -4474,7 +4482,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -chown sets ownership in ISO image: Manip. (line 42) * -chown_r sets ownership in ISO image: Manip. (line 47) * -clone copies ISO directory tree: Insert. (line 174) -* -close controls media closing: SetWrite. (line 313) +* -close controls media closing: SetWrite. (line 327) * -close_damaged closes damaged track and session: Writing. (line 152) * -close_filter_list bans filter registration: Filter. (line 52) * -commit writes pending ISO image: Writing. (line 29) @@ -4482,8 +4490,8 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -compare reports ISO/disk differences: Navigate. (line 146) * -compare_l reports ISO/disk differences: Navigate. (line 164) * -compare_r reports ISO/disk differences: Navigate. (line 159) -* -compliance controls standard compliance: SetWrite. (line 38) -* -copyright_file sets copyright file name: SetWrite. (line 205) +* -compliance controls standard compliance: SetWrite. (line 52) +* -copyright_file sets copyright file name: SetWrite. (line 219) * -cp_clone copies ISO directory tree: Insert. (line 186) * -cp_rx copies file trees to disk: Restore. (line 108) * -cpax copies files to disk: Restore. (line 104) @@ -4501,11 +4509,11 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top (line 36) * -drive_class controls drive accessability: Loading. (line 54) * -du show directory size in ISO image: Navigate. (line 89) -* -dummy controls write simulation: SetWrite. (line 302) +* -dummy controls write simulation: SetWrite. (line 316) * -dus show directory size in ISO image: Navigate. (line 93) * -dusx show directory size on disk: Navigate. (line 102) * -dux show directory size on disk: Navigate. (line 97) -* -dvd_obs set write block size: SetWrite. (line 289) +* -dvd_obs set write block size: SetWrite. (line 303) * -early_stdio_test classifies stdio drives: Loading. (line 252) * -eject ejects drive tray: Writing. (line 52) * -end writes pending session and ends program: Scripting. (line 156) @@ -4523,12 +4531,12 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -follow softlinks and mount points: SetInsert. (line 76) * -for_backup -acl,-xattr,-hardlinks,-md5: Loading. (line 185) * -format formats media: Writing. (line 88) -* -fs sets size of fifo: SetWrite. (line 306) +* -fs sets size of fifo: SetWrite. (line 320) * -getfacl shows ACL in ISO image: Navigate. (line 70) * -getfacl_r shows ACL in ISO image: Navigate. (line 77) * -getfattr shows xattr in ISO image: Navigate. (line 81) * -getfattr_r shows xattr in ISO image: Navigate. (line 85) -* -gid sets global ownership: SetWrite. (line 246) +* -gid sets global ownership: SetWrite. (line 260) * -grow_blindly overides next writeable address: AqDrive. (line 46) * -hardlinks controls handling of hard links: Loading. (line 110) * -help prints help text: Scripting. (line 20) @@ -4575,17 +4583,17 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -not_paths sets absolute exclusion paths: SetInsert. (line 55) * -options_from_file reads commands from file: Scripting. (line 12) * -osirrox enables ISO-to-disk copying: Restore. (line 18) -* -out_charset sets output character set: SetWrite. (line 236) +* -out_charset sets output character set: SetWrite. (line 250) * -outdev acquires a drive for output: AqDrive. (line 31) * -overwrite enables overwriting in ISO: SetInsert. (line 127) * -pacifier controls pacifier text form: Emulation. (line 158) -* -padding sets amount or mode of image padding: SetWrite. (line 319) +* -padding sets amount or mode of image padding: SetWrite. (line 333) * -page set terminal geometry: DialogCtl. (line 19) * -paste_in copies file into disk file: Restore. (line 121) * -path_list inserts paths from disk file: Insert. (line 78) * -pathspecs sets meaning of = with -add: SetInsert. (line 118) * -pkt_output consolidates text output: Frontend. (line 7) -* -preparer_id sets preparer id: SetWrite. (line 224) +* -preparer_id sets preparer id: SetWrite. (line 238) * -print prints result text line: Scripting. (line 99) * -print_info prints message text line: Scripting. (line 102) * -print_mark prints synchronizing text line: Scripting. (line 105) @@ -4593,7 +4601,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -prog sets program name: Frontend. (line 30) * -prog_help prints help text: Frontend. (line 33) * -prompt prompts for enter key: Scripting. (line 110) -* -publisher sets publisher id: SetWrite. (line 164) +* -publisher sets publisher id: SetWrite. (line 178) * -pvd_info shows image id strings: Inquiry. (line 93) * -pwd tells working directory in ISO: Navigate. (line 20) * -pwdx tells working directory on disk: Navigate. (line 23) @@ -4608,12 +4616,12 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -rm_r deletes trees from ISO image: Manip. (line 28) * -rmdir deletes ISO directory: Manip. (line 32) * -rockridge disables production of Rock Ridge info: SetWrite. - (line 32) + (line 46) * -rollback discards pending changes: Writing. (line 9) * -rollback_end ends program without writing: Scripting. (line 159) * -rom_toc_scan searches for sessions: Loading. (line 211) * -rr_reloc_dir sets name of relocation directory: SetWrite. - (line 121) + (line 135) * -scdbackup_tag enables scdbackup checksum tag: Emulation. (line 168) * -scsi_log reports SCSI commands: Scripting. (line 147) * -session_log logs written sessions: Scripting. (line 138) @@ -4631,29 +4639,29 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -signal_handling controls handling of system signals: Exception. (line 69) * -sleep waits for a given time span: Scripting. (line 114) -* -speed set write speed: SetWrite. (line 262) +* -speed set write speed: SetWrite. (line 276) * -split_size enables large file splitting: SetInsert. (line 140) * -status shows current settings: Scripting. (line 47) * -status_history_max curbs -status history: Scripting. (line 56) -* -stdio_sync controls stdio buffer: SetWrite. (line 296) -* -stream_recording controls defect management: SetWrite. (line 277) -* -system_id sets system id: SetWrite. (line 179) +* -stdio_sync controls stdio buffer: SetWrite. (line 310) +* -stream_recording controls defect management: SetWrite. (line 291) +* -system_id sets system id: SetWrite. (line 193) * -tell_media_space reports free space: Inquiry. (line 89) * -temp_mem_limit curbs memory consumption: Scripting. (line 92) * -toc shows list of sessions: Inquiry. (line 28) -* -uid sets global ownership: SetWrite. (line 242) +* -uid sets global ownership: SetWrite. (line 256) * -update inserts path if different: Insert. (line 102) * -update_l inserts paths if different: Insert. (line 124) * -update_r inserts paths if different: Insert. (line 113) * -use_readline enables readline for dialog: DialogCtl. (line 28) * -version prints help text: Scripting. (line 23) -* -volid sets volume id: SetWrite. (line 140) -* -volset_id sets volume set id: SetWrite. (line 159) -* -volume_date sets volume timestamp: SetWrite. (line 186) +* -volid sets volume id: SetWrite. (line 154) +* -volset_id sets volume set id: SetWrite. (line 173) +* -volume_date sets volume timestamp: SetWrite. (line 200) * -x enables automatic execution order of arguments: ArgSort. (line 16) * -xattr controls handling of xattr (EA): Loading. (line 151) -* -zisofs controls zisofs production: SetWrite. (line 250) +* -zisofs controls zisofs production: SetWrite. (line 264)  File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top @@ -4686,7 +4694,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Character Set, _definition: Charset. (line 6) * Character Set, for input, -in_charset: Loading. (line 92) * Character Set, for input/output, -charset: Charset. (line 43) -* Character Set, for output, -out_charset: SetWrite. (line 236) +* Character Set, for output, -out_charset: SetWrite. (line 250) * Character set, learn from image, -auto_charset: Loading. (line 98) * Character Set, of terminal, -local_charset: Charset. (line 47) * Closed media, _definition: Media. (line 43) @@ -4741,8 +4749,8 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Filter, show chain, -show_stream: Navigate. (line 169) * Filter, show chains of tree, -show_stream_r: Navigate. (line 183) * Filter, unregister, -unregister_filter: Filter. (line 48) -* Filter, zisofs parameters, -zisofs: SetWrite. (line 250) -* Group, global in ISO image, -gid: SetWrite. (line 246) +* Filter, zisofs parameters, -zisofs: SetWrite. (line 264) +* Group, global in ISO image, -gid: SetWrite. (line 260) * Group, in ISO image, -chgrp: Manip. (line 50) * Group, in ISO image, -chgrp_r: Manip. (line 55) * Growing, _definition: Methods. (line 19) @@ -4754,16 +4762,16 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Image, demand volume id, -assert_volid: Loading. (line 84) * Image, discard pending changes, -rollback: Writing. (line 9) * Image, override change status, -changes_pending: Writing. (line 13) -* Image, set abstract file name, -abstract_file: SetWrite. (line 211) -* Image, set application id, -application_id: SetWrite. (line 170) -* Image, set biblio file name, -biblio_file: SetWrite. (line 218) -* Image, set copyright file name, -copyright_file: SetWrite. (line 205) -* Image, set preparer id, -preparer_id: SetWrite. (line 224) -* Image, set publisher id, -publisher: SetWrite. (line 164) -* Image, set system id, -system_id: SetWrite. (line 179) -* Image, set volume id, -volid: SetWrite. (line 140) -* Image, set volume set id, -volset_id: SetWrite. (line 159) -* Image, set volume timestamp, -volume_date: SetWrite. (line 186) +* Image, set abstract file name, -abstract_file: SetWrite. (line 225) +* Image, set application id, -application_id: SetWrite. (line 184) +* Image, set biblio file name, -biblio_file: SetWrite. (line 232) +* Image, set copyright file name, -copyright_file: SetWrite. (line 219) +* Image, set preparer id, -preparer_id: SetWrite. (line 238) +* Image, set publisher id, -publisher: SetWrite. (line 178) +* Image, set system id, -system_id: SetWrite. (line 193) +* Image, set volume id, -volid: SetWrite. (line 154) +* Image, set volume set id, -volset_id: SetWrite. (line 173) +* Image, set volume timestamp, -volume_date: SetWrite. (line 200) * Image, show id strings, -pvd_info: Inquiry. (line 93) * Insert, enable overwriting, -overwrite: SetInsert. (line 127) * Insert, file exclusion absolute, -not_paths: SetInsert. (line 55) @@ -4822,7 +4830,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Navigate, tell ISO working directory, -pwd: Navigate. (line 20) * Next writeable address, -grow_blindly: AqDrive. (line 46) * Overwriteable media, _definition: Media. (line 14) -* Ownership, global in ISO image, -uid: SetWrite. (line 242) +* Ownership, global in ISO image, -uid: SetWrite. (line 256) * Ownership, in ISO image, -chown: Manip. (line 42) * Ownership, in ISO image, -chown_r: Manip. (line 47) * Partition offset, _definition: Bootable. (line 146) @@ -4865,7 +4873,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Program, wait a time span, -sleep: Scripting. (line 114) * Quoted input, _definition: Processing. (line 46) * Recovery, retrieve blocks, -check_media: Verify. (line 21) -* Relocation directory, set name, -rr_reloc_dir: SetWrite. (line 121) +* Relocation directory, set name, -rr_reloc_dir: SetWrite. (line 135) * Rename, in ISO image, -mv: Manip. (line 35) * Restore, copy file into disk file, -paste_in: Restore. (line 121) * Restore, copy file piece to disk, -extract_cut: Restore. (line 81) @@ -4902,24 +4910,24 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Verify, file checksum, -check_md5: Verify. (line 153) * Verify, file tree checksums, -check_md5_r: Verify. (line 169) * Verify, preset -check_media, -check_media_defaults: Verify. (line 41) -* Write, block size, -dvd_obs: SetWrite. (line 289) +* Write, block size, -dvd_obs: SetWrite. (line 303) * Write, bootability, -boot_image: Bootable. (line 26) -* Write, buffer syncing, -stdio_sync: SetWrite. (line 296) -* Write, close media, -close: SetWrite. (line 313) -* Write, compliance to specs, -compliance: SetWrite. (line 38) -* Write, defect management, -stream_recording: SetWrite. (line 277) -* Write, disable Rock Ridge, -rockridge: SetWrite. (line 32) +* Write, buffer syncing, -stdio_sync: SetWrite. (line 310) +* Write, close media, -close: SetWrite. (line 327) +* Write, compliance to specs, -compliance: SetWrite. (line 52) +* Write, defect management, -stream_recording: SetWrite. (line 291) +* Write, disable Rock Ridge, -rockridge: SetWrite. (line 46) * Write, enable HFS+, -hfsplus: SetWrite. (line 14) * Write, enable Joliet, -joliet: SetWrite. (line 10) -* Write, fifo size, -fs: SetWrite. (line 306) +* Write, fifo size, -fs: SetWrite. (line 320) * Write, free space, -tell_media_space: Inquiry. (line 89) * Write, log problematic disk files, -errfile_log: Scripting. (line 118) * Write, log written sessions, -session_log: Scripting. (line 138) -* Write, padding image, -padding: SetWrite. (line 319) +* Write, padding image, -padding: SetWrite. (line 333) * Write, pending ISO image, -commit: Writing. (line 29) * Write, predict image size, -print_size: Inquiry. (line 80) -* Write, set speed, -speed: SetWrite. (line 262) -* Write, simulation, -dummy: SetWrite. (line 302) +* Write, set speed, -speed: SetWrite. (line 276) +* Write, simulation, -dummy: SetWrite. (line 316) * xattr, _definition: Extras. (line 54) * xattr, control handling, -xattr: Loading. (line 151) * xattr, set in ISO image, -setfattr: Manip. (line 111) @@ -4948,43 +4956,43 @@ Node: Insert45211 Node: SetInsert55127 Node: Manip63703 Node: CmdFind72526 -Node: Filter87015 -Node: Writing91570 -Node: SetWrite100534 -Node: Bootable117479 -Node: Jigdo130890 -Node: Charset135136 -Node: Exception137897 -Node: DialogCtl144016 -Node: Inquiry146613 -Node: Navigate151479 -Node: Verify159776 -Node: Restore168742 -Node: Emulation175651 -Node: Scripting185462 -Node: Frontend192622 -Node: Examples193922 -Node: ExDevices195099 -Node: ExCreate195758 -Node: ExDialog197043 -Node: ExGrowing198308 -Node: ExModifying199113 -Node: ExBootable199617 -Node: ExCharset200169 -Node: ExPseudo200990 -Node: ExCdrecord201888 -Node: ExMkisofs202205 -Node: ExGrowisofs203545 -Node: ExException204680 -Node: ExTime205134 -Node: ExIncBackup205593 -Node: ExRestore209584 -Node: ExRecovery210544 -Node: Files211114 -Node: Seealso212413 -Node: Bugreport213136 -Node: Legal213717 -Node: CommandIdx214728 -Node: ConceptIdx230527 +Node: Filter86633 +Node: Writing91188 +Node: SetWrite100152 +Node: Bootable117985 +Node: Jigdo131396 +Node: Charset135642 +Node: Exception138403 +Node: DialogCtl144522 +Node: Inquiry147119 +Node: Navigate151985 +Node: Verify160282 +Node: Restore169248 +Node: Emulation176157 +Node: Scripting185968 +Node: Frontend193128 +Node: Examples194428 +Node: ExDevices195605 +Node: ExCreate196264 +Node: ExDialog197549 +Node: ExGrowing198814 +Node: ExModifying199619 +Node: ExBootable200123 +Node: ExCharset200675 +Node: ExPseudo201496 +Node: ExCdrecord202394 +Node: ExMkisofs202711 +Node: ExGrowisofs204051 +Node: ExException205186 +Node: ExTime205640 +Node: ExIncBackup206099 +Node: ExRestore210090 +Node: ExRecovery211050 +Node: Files211620 +Node: Seealso212919 +Node: Bugreport213642 +Node: Legal214223 +Node: CommandIdx215234 +Node: ConceptIdx231033  End Tag Table diff --git a/xorriso/xorriso.texi b/xorriso/xorriso.texi index 3161c96c..4a3502db 100644 --- a/xorriso/xorriso.texi +++ b/xorriso/xorriso.texi @@ -50,7 +50,7 @@ @c man .\" First parameter, NAME, should be all caps @c man .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection @c man .\" other parameters are allowed: see man(7), man(1) -@c man .TH XORRISO 1 "Version 1.2.3, Jun 06, 2012" +@c man .TH XORRISO 1 "Version 1.2.3, Jun 07, 2012" @c man .\" Please adjust this date whenever revising the manpage. @c man .\" @c man .\" Some roff macros, for reference: @@ -2050,9 +2050,6 @@ Matches files which bear the given HFS+ blessing. It may be one of : "ppc_bootdir", "intel_bootfile", "show_folder", "os9_folder", "osx_folder", "any". See also action set_hfs_bless. @* -Note that HFS+ information is not read with loaded images. So above two tests -are useful only for listing effective settings before a new image gets written. -@* @item -has_filter : Matches files which are filtered by -set_filter. @* @@ -2270,6 +2267,12 @@ E.g.: -exec set_hfs_crtp YYDN TEXT @* E.g.: -find /my/dir -prune -exec set_hfs_crtp --delete - @* +@item get_hfs_crtp +prints the HFS+ creator and type attributes together with the iso_rr_path, +if the file has such attributes at all. +@* +E.g.: -exec get_hfs_crtp +@* @item set_hfs_bless applies or removes HFS+ blessings. They are roles which can be attributed to up to four directories and a data file: @@ -2286,21 +2289,12 @@ No file object can bear more than one blessing. @* E.g.: -find /my/blessed/directory -exec set_hfs_bless p @* -@item get_hfs_crtp -prints the HFS+ creator and type attributes together with the iso_rr_path, -if the file has such attributes at all. -@* -E.g.: -exec get_hfs_crtp -@* @item get_hfs_bless prints the HFS+ blessing role and the iso_rr_path, if the file is blessed at all. @* E.g.: -exec get_hfs_bless @* -Note that HFS+ information is not read with loaded images. So above two actions -are useful only for listing effective settings before a new image gets written. -@* @item set_filter applies or removes filters. @* @@ -2726,6 +2720,20 @@ metadata. The second one marks the range from HFS+ metadata to the end of file content data. If more ISO image data follow, then a third partition entry gets produced. Other features of xorriso might cause the need for more APM entries. +@* +The HFS+ filesystem is not suitable for add-on sessions produced by the +multi-session method of growing. An existing ISO image may nevertheless +be the base for a new image produced by the method of modifying. +If -hfsplus is enabled when -indev or -dev gets executed, then AAIP +attributes get loaded from the input image and checked for information about +HFS creator, filetype, or blessing. If found, then they get enabled as +settings for the next image production. +Therefore it is advisable to perform -hfsplus "on" before -indev or -dev. +@* +Information about HFS creator, type, and blessings gets stored by xorriso +if -hfsplus is enabled at -commit time. It is stored as copy outside the +HFS+ partition, but rather along with the Rock Ridge information. +xorriso does not read any information from the HFS+ meta data. @sp 1 @c man .TP @item -rockridge "on"|"off" diff --git a/xorriso/xorriso_timestamp.h b/xorriso/xorriso_timestamp.h index a7250a20..f2e4a13f 100644 --- a/xorriso/xorriso_timestamp.h +++ b/xorriso/xorriso_timestamp.h @@ -1 +1 @@ -#define Xorriso_timestamP "2012.06.06.184910" +#define Xorriso_timestamP "2012.06.08.071018"