From 0c2eed9f2e16f7c9e8142e81da9e510d7f70b4b4 Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Thu, 17 Sep 2015 12:12:41 +0000 Subject: [PATCH] New command -file_name_limit, -as mkisofs -file_name_limit --- libisoburn/libisoburn.ver | 1 + xorriso/base_obj.c | 1 + xorriso/drive_mgt.c | 8 ++ xorriso/emulators.c | 14 ++- xorriso/filters.c | 16 +++- xorriso/iso_img.c | 2 + xorriso/iso_manip.c | 106 +++++++++++++++------ xorriso/iso_tree.c | 112 ++++++++++++++++++++-- xorriso/opts_a_c.c | 5 +- xorriso/opts_d_h.c | 52 ++++++++++- xorriso/opts_i_o.c | 17 ++-- xorriso/parse_exec.c | 10 +- xorriso/text_io.c | 5 + xorriso/xorriso.1 | 39 +++++++- xorriso/xorriso.h | 4 + xorriso/xorriso.info | 181 +++++++++++++++++++++--------------- xorriso/xorriso.texi | 39 +++++++- xorriso/xorriso_private.h | 1 + xorriso/xorriso_timestamp.h | 2 +- xorriso/xorrisoburn.h | 4 + xorriso/xorrisofs.1 | 14 ++- xorriso/xorrisofs.info | 135 +++++++++++++++------------ xorriso/xorrisofs.texi | 16 +++- 23 files changed, 582 insertions(+), 202 deletions(-) diff --git a/libisoburn/libisoburn.ver b/libisoburn/libisoburn.ver index 4e4e4d78..df7a3fec 100644 --- a/libisoburn/libisoburn.ver +++ b/libisoburn/libisoburn.ver @@ -209,6 +209,7 @@ Xorriso_option_error_behavior; Xorriso_option_external_filter; Xorriso_option_extract; Xorriso_option_extract_cut; +Xorriso_option_file_name_limit; Xorriso_option_file_size_limit; Xorriso_option_find; Xorriso_option_follow; diff --git a/xorriso/base_obj.c b/xorriso/base_obj.c index 48a2a155..58215d01 100644 --- a/xorriso/base_obj.c +++ b/xorriso/base_obj.c @@ -321,6 +321,7 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag) m->do_disk_pattern= 2; m->temp_mem_limit= 16*1024*1024; m->file_size_limit= Xorriso_default_file_size_limiT; + m->file_name_limit= 255; m->disk_exclusions= NULL; m->iso_rr_hidings= NULL; m->joliet_hidings= NULL; diff --git a/xorriso/drive_mgt.c b/xorriso/drive_mgt.c index 66a10112..d1a93e3b 100644 --- a/xorriso/drive_mgt.c +++ b/xorriso/drive_mgt.c @@ -359,6 +359,13 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, char *show_adr, xorriso->outdev_is_exclusive= xorriso->drives_exclusive; } drive= dinfo[0].drive; + volset= isoburn_get_attached_image(drive); + if(volset != NULL) { + ret= iso_image_set_truncate_mode(volset, 1, xorriso->file_name_limit); + Xorriso_process_msg_queues(xorriso,0); + if(ret < 0) + {ret= 0; goto ex;} + } state= isoburn_disc_get_status(drive); Xorriso_process_msg_queues(xorriso,0); if(flag&1) { @@ -524,6 +531,7 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, char *show_adr, isoburn_ropt_set_auto_incharset(ropts, !!(xorriso->do_aaip & 512)); isoburn_ropt_set_displacement(ropts, xorriso->displacement, xorriso->displacement_sign); + isoburn_ropt_set_truncate_mode(ropts, 1, xorriso->file_name_limit); Xorriso_set_image_severities(xorriso, 1); /* No DEBUG messages */ Xorriso_pacifier_reset(xorriso, 0); diff --git a/xorriso/emulators.c b/xorriso/emulators.c index ec9d1caf..b9d97ae6 100644 --- a/xorriso/emulators.c +++ b/xorriso/emulators.c @@ -651,7 +651,7 @@ int Xorriso_genisofs_count_args(struct XorrisO *xorriso, int argc, char **argv, "-rr_reloc_dir", "-hfsplus-serial-no", "-prep-boot-part", "-efi-boot-part", "-hfsplus-block-size", "-apm-block-size", "--grub2-mbr", "--grub2-sparc-core", "--sort-weight-list", "--sort-weight-patterns", - "-hppa-hdrversion", + "-hppa-hdrversion","-file_name_limit", "" }; static char arg2_options[][41]= { @@ -811,6 +811,7 @@ int Xorriso_genisofs_help(struct XorrisO *xorriso, int flag) " -R, -rock Generate Rock Ridge directory information", " -r, -rational-rock Generate rationalized Rock Ridge directory information", " --norock Disable Rock Ridge. (Strongly discouraged !)", +" -file_name_limit LEN Set truncation limit for Rock Ridge names", " --hardlinks Record eventual hard link relations of files", " --acl Record eventual ACLs of files", " --xattr Record eventual user space xattr of files", @@ -1460,8 +1461,14 @@ int Xorriso_genisofs(struct XorrisO *xorriso, char *whom, xorriso->no_emul_toc|= 1; } else if(strcmp(argpt, "-log-file") == 0) { /* already handled before this loop */; + i++; } else if(strcmp(argpt, "-gui") == 0) { xorriso->pacifier_interval= 0.25; + } else if(strcmp(argpt, "-file_name_limit") == 0) { + if(i+1>=argc) + goto not_enough_args; + i++; + Xorriso_option_file_name_limit(xorriso, argv[i], 0); } else { if(argv[i][0] == '-') { ret= Xorriso_genisofs_fused_options(xorriso, whom, argv[i] + 1, @@ -2097,9 +2104,8 @@ rr_reloc_dir:; goto problem_handler_2; Xorriso_relax_compliance(xorriso, "deep_paths_off:long_paths_off", 0); - } else if(strcmp(argpt, "-log-file") == 0) { - if(i + 1 >= argc) - goto not_enough_args; + } else if(strcmp(argpt, "-log-file") == 0 || + strcmp(argpt, "-file_name_limit") == 0) { i+= 1; /* was already handled before this loop */; diff --git a/xorriso/filters.c b/xorriso/filters.c index f3703530..703b7688 100644 --- a/xorriso/filters.c +++ b/xorriso/filters.c @@ -25,6 +25,7 @@ #include "lib_mgt.h" #include "iso_tree.h" +#include "iso_img.h" /* @@ -32,7 +33,6 @@ #include "xorriso_private.h" #include "xorrisoburn.h" -#include "iso_img.h" #include "iso_manip.h" #include "sort_cmp.h" @@ -183,9 +183,13 @@ int Xorriso_rename_suffix(struct XorrisO *xorriso, IsoNode *node, char *suffix, { int ret, lo= 0, ls= 0, strip_suffix; char *old_name= NULL, *show_name; + IsoImage *volume; strip_suffix= !!(flag & 2); + ret= Xorriso_get_volume(xorriso, &volume, 0); + if(ret <= 0) + goto ex; old_name= strdup((char *) iso_node_get_name(node)); show_name= old_name; if(show_path != NULL) @@ -205,7 +209,7 @@ int Xorriso_rename_suffix(struct XorrisO *xorriso, IsoNode *node, char *suffix, goto cannot_remove_suffix; strcpy(new_name, old_name); new_name[lo - ls]= 0; - ret = iso_node_set_name(node, new_name); + ret = iso_image_set_node_name(volume, node, new_name, 1); if (ret < 0) { Xorriso_process_msg_queues(xorriso,0); if (!(flag & 1)) @@ -235,7 +239,7 @@ cannot_append_suffix:; ret= 2 * (flag & 1); goto ex; } sprintf(new_name, "%s%s", old_name, suffix); - ret = iso_node_set_name(node, new_name); + ret = iso_image_set_node_name(volume, node, new_name, 1); if (ret < 0) { Xorriso_process_msg_queues(xorriso,0); if (!(flag & 1)) @@ -270,6 +274,7 @@ int Xorriso_set_filter(struct XorrisO *xorriso, void *in_node, IsoExternalFilterCommand *cmd = NULL; char *old_name= NULL, *new_name= NULL, *suffix= ""; IsoStream *stream; + IsoImage *volume; Xorriso_alloc_meM(new_name, char, SfileadrL); new_name[0]= 0; @@ -409,7 +414,10 @@ int Xorriso_set_filter(struct XorrisO *xorriso, void *in_node, } } if(filter_ret != 1 && new_name[0] && old_name != NULL) { - ret = iso_node_set_name(node, old_name); + ret= Xorriso_get_volume(xorriso, &volume, 0); + if(ret<=0) + goto ex; + ret = iso_image_set_node_name(volume, node, old_name, 1); if (ret < 0) { Xorriso_process_msg_queues(xorriso,0); if (!(flag & 1)) diff --git a/xorriso/iso_img.c b/xorriso/iso_img.c index d928af0a..61a4ff2c 100644 --- a/xorriso/iso_img.c +++ b/xorriso/iso_img.c @@ -97,6 +97,8 @@ int Xorriso_create_empty_iso(struct XorrisO *xorriso, int flag) isoburn_ropt_set_input_charset(ropts, xorriso->in_charset); isoburn_ropt_set_data_cache(ropts, 1, 1, 0); isoburn_set_read_pacifier(drive, NULL, NULL); + isoburn_ropt_set_truncate_mode(ropts, 1, xorriso->file_name_limit); + ret= isoburn_read_image(drive, ropts, &volset); Xorriso_process_msg_queues(xorriso,0); isoburn_ropt_destroy(&ropts, 0); diff --git a/xorriso/iso_manip.c b/xorriso/iso_manip.c index 4c0b3515..942ca164 100644 --- a/xorriso/iso_manip.c +++ b/xorriso/iso_manip.c @@ -129,8 +129,8 @@ int Xorriso_graft_split(struct XorrisO *xorriso, IsoImage *volume, Xorriso_alloc_meM(part_name, char, SfileadrL); - ret= iso_tree_add_new_dir(dir, img_name, &new_dir); - if(ret<0) + ret= iso_image_add_new_dir(volume, dir, img_name, &new_dir); + if(ret < 0) goto ex; *node= (IsoNode *) new_dir; if(xorriso->update_flags & 1) { @@ -166,6 +166,7 @@ ex:; /* @param flag bit0= ISO_NODE_NAME_NOT_UNIQUE exception mode: Do not issue message. Return existing node into *node. + bit1= if name truncation happens: copy truncated into img_name bit3= cut_out_node: offset and size are valid bit8= hide in iso_rr bit9= hide in joliet @@ -179,14 +180,31 @@ int Xorriso_tree_graft_node(struct XorrisO *xorriso, IsoImage *volume, { int ret, stbuf_valid= 0; struct stat stbuf; - char *namept; + char *namept, *eff_name, *trunc_name= NULL; off_t size= 0; + eff_name= img_name; if(lstat(disk_path, &stbuf) != -1) { stbuf_valid= 1; if(S_ISREG(stbuf.st_mode)) size= stbuf.st_size; } + if((int) strlen(eff_name) > xorriso->file_name_limit) { + Xorriso_alloc_meM(trunc_name, char, SfileadrL); + strncpy(trunc_name, eff_name, SfileadrL - 1); + trunc_name[SfileadrL - 1]= 0; + ret= iso_truncate_leaf_name(1, xorriso->file_name_limit, trunc_name, 0); + if(ret < 0) + goto ex; + strcpy(xorriso->info_text, "File name had to be truncated and MD5 marked: "); + Text_shellsafe(eff_name, xorriso->info_text, 1); + strcat(xorriso->info_text, " -> "); + Text_shellsafe(trunc_name, xorriso->info_text, 1); + Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING", 0); + eff_name= trunc_name; + if(flag & 2) + strcpy(img_name, trunc_name); + } if(flag&8) { if(cut_size > xorriso->file_size_limit && xorriso->file_size_limit > 0) { sprintf(xorriso->info_text, @@ -197,13 +215,13 @@ int Xorriso_tree_graft_node(struct XorrisO *xorriso, IsoImage *volume, Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0); return(0); } - ret= iso_tree_add_new_cut_out_node(volume, dir, img_name, disk_path, + ret= iso_tree_add_new_cut_out_node(volume, dir, eff_name, disk_path, offset, cut_size, node); if(ret<0) goto ex; } else { if(xorriso->split_size > 0 && size > xorriso->split_size) { - ret= Xorriso_graft_split(xorriso, volume, dir, disk_path, img_name, + ret= Xorriso_graft_split(xorriso, volume, dir, disk_path, eff_name, nominal_source, nominal_target, size, node, 0); if(ret<=0) @@ -217,7 +235,7 @@ int Xorriso_tree_graft_node(struct XorrisO *xorriso, IsoImage *volume, Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0); return(0); } else { - ret= iso_tree_add_new_node(volume, dir, img_name, disk_path, node); + ret= iso_tree_add_new_node(volume, dir, eff_name, disk_path, node); if(ret<0) goto ex; } @@ -234,7 +252,7 @@ int Xorriso_tree_graft_node(struct XorrisO *xorriso, IsoImage *volume, goto ex; } if(xorriso->update_flags & 1) { - ret= Xorriso_mark_update_merge(xorriso, img_name, *node, 1); + ret= Xorriso_mark_update_merge(xorriso, eff_name, *node, 1); if(ret <= 0) goto ex; } @@ -242,7 +260,7 @@ int Xorriso_tree_graft_node(struct XorrisO *xorriso, IsoImage *volume, ex:; if(ret<0) { if(ret == (int) ISO_NODE_NAME_NOT_UNIQUE && (flag & 1)) { - iso_dir_get_node(dir, img_name, node); + iso_image_dir_get_node(volume, dir, eff_name, node, 0); } else { Xorriso_process_msg_queues(xorriso,0); if(ret == (int) ISO_RR_NAME_TOO_LONG || @@ -254,11 +272,13 @@ ex:; Xorriso_report_iso_error(xorriso, namept, ret, "Cannot add node to tree", 0, "FAILURE", 1|2); } - return(ret); + } else { + if(LIBISO_ISREG(*node)) + xorriso->pacifier_byte_count+= iso_file_get_size((IsoFile *) *node); + ret= 1; } - if(LIBISO_ISREG(*node)) - xorriso->pacifier_byte_count+= iso_file_get_size((IsoFile *) *node); - return(1); + Xorriso_free_meM(trunc_name); + return(ret); } @@ -522,7 +542,7 @@ cannot_lstat:; /* does a node exist with this name ? */ node= NULL; if(dir != NULL) { - ret= iso_dir_get_node(dir, img_name, &node); + ret= iso_image_get_dir_node(volume, dir, img_name, &node); } else { ret= Xorriso_node_from_path(xorriso, volume, img_path, &node, 1); } @@ -733,8 +753,12 @@ int Xorriso_add_symlink(struct XorrisO *xorriso, IsoDir *parent, { int ret= 0; IsoSymlink *link= NULL; + IsoImage *volume; - ret= iso_tree_add_new_symlink(parent, leaf_name, link_target, &link); + ret= Xorriso_get_volume(xorriso, &volume, 0); + if(ret <= 0) + return(ret); + ret= iso_image_add_new_symlink(volume, parent, leaf_name, link_target, &link); Xorriso_process_msg_queues(xorriso,0); if(ret < 0) { Xorriso_report_iso_error(xorriso, nominal_path, ret, @@ -924,8 +948,8 @@ int Xorriso_graft_in(struct XorrisO *xorriso, void *boss_iter, So optimism will pay off only with the leaf. I.e. if(done). */ if(source_is_dir) { /* eventually create directory */ - ret= iso_dir_get_node(dir, apt, &node); - if(ret > 0) { + ret= iso_image_dir_get_node(volume, dir, apt, &node, 0); + if(ret == 1) { ret= Xoriso_handle_collision(xorriso, boss_iter, &node, path, img_path, disk_path, disk_path[0] ? disk_path : img_path, @@ -937,7 +961,7 @@ int Xorriso_graft_in(struct XorrisO *xorriso, void *boss_iter, } else node= NULL; if(node == NULL) { - ret= iso_tree_add_new_dir(dir, apt, &hdir); + ret= iso_image_add_new_dir(volume, dir, apt, &hdir); if(ret < 0) { Xorriso_process_msg_queues(xorriso,0); if(disk_path[0]) @@ -1022,7 +1046,10 @@ attach_source:; {ret= 0; goto ex;} } Xorriso_set_change_pending(xorriso, 0); - iso_node_set_name(node, apt); + + /* <<< Why set the name once again ? + iso_image_set_node_name(volume, node, apt, 1); + */ xorriso->pacifier_count++; if(xorriso->pacifier_count%100 && !(flag&2)) @@ -1036,8 +1063,8 @@ attach_source:; #else /* Xorriso_optimistic_graft_iN */ node= NULL; - ret= iso_dir_get_node(dir, apt, &node); - if(ret>0) { + ret= iso_image_dir_get_node(volume, dir, apt, &node, 0); + if(ret == 1) { #ifdef Xorriso_graft_handle_collisioN @@ -1097,7 +1124,7 @@ attach_source:; handle_path_node:; if(node==NULL && source_is_dir) { /* make a directory */ - ret= iso_tree_add_new_dir(dir, apt, &hdir); + ret= iso_image_add_new_dir(volume, dir, apt, &hdir); if(ret<0) { Xorriso_process_msg_queues(xorriso,0); if(disk_path[0]) @@ -1167,7 +1194,7 @@ attach_source:; {ret= 0; goto ex;} } Xorriso_set_change_pending(xorriso, 0); - iso_node_set_name(node, apt); + iso_image_set_node_name(volume, node, apt, 1); xorriso->pacifier_count++; if(xorriso->pacifier_count%100 && !(flag&2)) @@ -1717,13 +1744,19 @@ int Xorriso_rename(struct XorrisO *xorriso, void *boss_iter, old_leafname= (char *) iso_node_get_name(node); if(strcmp(leafname, old_leafname)!=0) - ret= iso_node_set_name(node, leafname); + ret= iso_image_set_node_name(volume, node, leafname, 1); else ret= 1; if(ret<0) { Xorriso_process_msg_queues(xorriso,0); - Xorriso_report_iso_error(xorriso, eff_dest, 0, "Cannot set name", 0, + Xorriso_report_iso_error(xorriso, eff_dest, ret, "Cannot set name", 0, "FAILURE", 1); + ret= iso_dir_add_node(origin_dir, node, 0); + Xorriso_process_msg_queues(xorriso,0); + if(ret < 0) + Xorriso_report_iso_error(xorriso, eff_origin, ret, + "Cannot re-instate node at old path", + 0, "FAILURE", 1); {ret= -1; goto ex;} } Xorriso_process_msg_queues(xorriso,0); @@ -1837,7 +1870,8 @@ int Xorriso_clone_tree(struct XorrisO *xorriso, void *boss_iter, goto ex; new_parent= (IsoDir *) dir_node; - ret = iso_tree_clone(origin_node, new_parent, leafname, &new_node, flag & 1); + ret = iso_image_tree_clone(volume, origin_node, new_parent, leafname, + &new_node, (flag & 1) | 2); Xorriso_process_msg_queues(xorriso,0); if(ret < 0) { Xorriso_cannot_clone(xorriso, eff_origin, eff_dest, ret, 0); @@ -1907,7 +1941,8 @@ int Xorriso_clone_under(struct XorrisO *xorriso, char *origin, char *dest, ret= 0; goto ex; } } else { - ret = iso_tree_clone(origin_node, dest_dir, namept, &new_node, 1); + ret = iso_image_tree_clone(volume, origin_node, dest_dir, namept, + &new_node, 1 | 2); Xorriso_process_msg_queues(xorriso,0); if(ret < 0) { Xorriso_cannot_clone(xorriso, eff_origin, eff_dest, ret, 0); @@ -4226,3 +4261,22 @@ ex: return(ret); } + +int Xorriso_set_file_name_limit(struct XorrisO *xorriso, int value, int flag) +{ + int ret; + IsoImage *volume= NULL; + + ret= Xorriso_get_volume(xorriso, &volume, 1); + if(ret < 0) + return(ret); + if (volume != NULL) { + Xorriso_msgs_submit(xorriso, 0, + "-file_name_limit cannot be changed while an ISO images is present", + 0, "SORRY", 0); + return(0); + } + xorriso->file_name_limit= value; + return(1); +} + diff --git a/xorriso/iso_tree.c b/xorriso/iso_tree.c index bc0c34a1..eb27e113 100644 --- a/xorriso/iso_tree.c +++ b/xorriso/iso_tree.c @@ -240,6 +240,7 @@ int Xorriso_node_get_dev(struct XorrisO *xorriso, IsoNode *node, bit3= stbuf is to be used without eventual ACL bit4= try to obtain a better st_nlink count if hardlinks are enabled + bit5= do not look for truncated versions of path component */ int Xorriso_fake_stbuf(struct XorrisO *xorriso, char *path, struct stat *stbuf, IsoNode **node, int flag) @@ -257,7 +258,8 @@ int Xorriso_fake_stbuf(struct XorrisO *xorriso, char *path, struct stat *stbuf, ret= Xorriso_get_volume(xorriso, &volume, 0); if(ret<=0) return(-1); - ret= Xorriso_node_from_path(xorriso, volume, path, node, !(flag&4)); + ret= Xorriso_node_from_path(xorriso, volume, path, node, + ((flag >> 4) & 2) | !(flag&4)); if(ret<=0) *node= NULL; } @@ -1587,10 +1589,91 @@ int Xorriso_node_eff_hidden(struct XorrisO *xorriso, IsoNode *node, int flag) } +/* @param flag bit0= do not truncate components which contain any of "*?[" +*/ +int Xorriso_truncate_path_comps(struct XorrisO *xorriso, char *path, + char *buffer, char **resultpt, int flag) +{ + char *rpt, *basrpt, *wpt, *baswpt, *cpt; + int ended, ret, skip; + + *resultpt= path; + + /* Check component lengths */ + rpt= path; + if(*rpt == '/') + rpt++; + for(ended= 0; !ended;) { + basrpt= rpt; + rpt= strchr(basrpt, '/'); + if(rpt == NULL) { + rpt= basrpt + strlen(basrpt); + ended= 1; + } + skip= 0; + if(flag & 1) { + for(cpt= basrpt; cpt < rpt; cpt++) { + if(strchr("*?[", *cpt) != NULL) { + skip= 1; + break; + } + } + } + if((!skip) && rpt - basrpt > xorriso->file_name_limit) { + ended= 0; + break; + } + if(*rpt == '/') + rpt++; + } + if(ended) + return(1); /* All short enough */ + + /* Some truncation is needed */ + buffer[0]= 0; + wpt= buffer; + if(path[0] == '/') + *(wpt++)= '/'; + rpt= path; + if(*rpt == '/') + rpt++; + for(ended= 0; !ended;) { + basrpt= rpt; + baswpt= wpt; + rpt= strchr(basrpt, '/'); + if(rpt == NULL) { + rpt= basrpt + strlen(basrpt); + ended= 1; + } + skip= 0; + for(cpt= basrpt; cpt < rpt; cpt++) { + *(wpt++)= *cpt; + if((flag & 1) && strchr("*?[", *cpt) != NULL) + skip= 1; + } + *wpt= 0; + if((!skip) && rpt - basrpt > xorriso->file_name_limit) { + ret= iso_truncate_leaf_name(1, xorriso->file_name_limit, baswpt, 0); + Xorriso_process_msg_queues(xorriso, 0); + if(ret < 0) + return(0); + wpt= baswpt + strlen(baswpt); + } + if(!ended) { + *(wpt++)= '/'; + rpt++; + } + } + *resultpt= buffer; + return(1); +} + + /* @param flag bit0= long format bit1= do not print count of nodes bit2= du format bit3= print directories as themselves (ls -d) + bit5= do not look for truncated versions of path component */ int Xorriso_ls_filev(struct XorrisO *xorriso, char *wd, int filec, char **filev, off_t boss_mem, int flag) @@ -1599,7 +1682,7 @@ int Xorriso_ls_filev(struct XorrisO *xorriso, char *wd, IsoNode *node; IsoImage *volume; char *path= NULL, *link_target= NULL, *rpt, **dfilev= NULL; - char *a_text= NULL, *d_text= NULL; + char *a_text= NULL, *d_text= NULL, *namept; off_t size; struct stat stbuf; @@ -1621,7 +1704,8 @@ int Xorriso_ls_filev(struct XorrisO *xorriso, char *wd, was_error++; continue; } - ret= Xorriso_node_from_path(xorriso, volume, path, &node, 1); + ret= Xorriso_node_from_path(xorriso, volume, path, &node, + 1 | ((flag >> 4) & 2)); if(ret<=0) { sprintf(xorriso->info_text, "Not found in ISO image: "); Text_shellsafe(path, xorriso->info_text, 1); @@ -1670,7 +1754,7 @@ int Xorriso_ls_filev(struct XorrisO *xorriso, char *wd, Xorriso_result(xorriso,0); } Xorriso_ls_filev(xorriso, path, - dfilec, dfilev, boss_mem, (flag&1)|2|8); + dfilec, dfilev, boss_mem, (flag & 1) | 2 | 8); } if(dfilec>0) Sfile_destroy_argv(&dfilec, &dfilev, 0); @@ -1708,12 +1792,13 @@ int Xorriso_ls_filev(struct XorrisO *xorriso, char *wd, else sprintf(rpt, "%7.f ",(double) (size/1024)); } + Xorriso_truncate_path_comps(xorriso, filev[i], path, &namept, 0); if(link_target[0] && (flag&5)==1) { - Xorriso_esc_filepath(xorriso, filev[i], xorriso->result_line, 1), + Xorriso_esc_filepath(xorriso, namept, xorriso->result_line, 1); strcat(xorriso->result_line, " -> "); Xorriso_esc_filepath(xorriso, link_target, xorriso->result_line, 1 | 2); } else { - Xorriso_esc_filepath(xorriso, filev[i], xorriso->result_line, 1); + Xorriso_esc_filepath(xorriso, namept, xorriso->result_line, 1); } strcat(xorriso->result_line, "\n"); Xorriso_result(xorriso, 0); @@ -2470,7 +2555,9 @@ int Xorriso_search_hardlinks(struct XorrisO *xorriso, IsoNode *node, } -/* @param flag bit0=do not complain about non existent node */ +/* @param flag bit0=do not complain about non existent node + bit1= do not try to find truncated name first + */ int Xorriso_node_from_path(struct XorrisO *xorriso, IsoImage *volume, char *path, IsoNode **node, int flag) { @@ -2486,7 +2573,11 @@ int Xorriso_node_from_path(struct XorrisO *xorriso, IsoImage *volume, return(ret); } *node= NULL; - ret= iso_tree_path_to_node(volume, path_pt, node); + ret= 2; + if(!(flag & 2)) + ret= iso_image_path_to_node(volume, path_pt, node); + if(ret == 2) + ret= iso_tree_path_to_node(volume, path_pt, node); Xorriso_process_msg_queues(xorriso,0); if(ret<=0 || (*node)==NULL) { if(!(flag&1)) { @@ -2501,6 +2592,9 @@ int Xorriso_node_from_path(struct XorrisO *xorriso, IsoImage *volume, } +/* @param flag bit0=do not complain about non existent node + bit1= do not try to find truncated name first + */ int Xorriso_dir_from_path(struct XorrisO *xorriso, char *purpose, char *path, IsoDir **dir_node, int flag) { @@ -2512,7 +2606,7 @@ int Xorriso_dir_from_path(struct XorrisO *xorriso, char *purpose, if(ret<=0) return(ret); - ret= Xorriso_node_from_path(xorriso, volume, path, &node, 0); + ret= Xorriso_node_from_path(xorriso, volume, path, &node, flag & 3); if(ret<=0) goto wdi_is_not_a_dir; if(LIBISO_ISDIR(node)) diff --git a/xorriso/opts_a_c.c b/xorriso/opts_a_c.c index ca54587f..9cb026b0 100644 --- a/xorriso/opts_a_c.c +++ b/xorriso/opts_a_c.c @@ -1280,7 +1280,7 @@ int Xorriso_option_calm_drive(struct XorrisO *xorriso, char *which, int flag) /* Option -cd alias -cdi */ int Xorriso_option_cdi(struct XorrisO *xorriso, char *iso_rr_path, int flag) { - char *path= NULL, *eff_path= NULL; + char *path= NULL, *eff_path= NULL, *namept; int ret; Xorriso_alloc_meM(path, char, SfileadrL); @@ -1329,7 +1329,8 @@ int Xorriso_option_cdi(struct XorrisO *xorriso, char *iso_rr_path, int flag) Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0); {ret= 0; goto ex;} } - strcpy(xorriso->wdi, eff_path); + Xorriso_truncate_path_comps(xorriso, eff_path, path, &namept, 0); + strcpy(xorriso->wdi, namept); Xorriso_option_pwdi(xorriso, 0); ret= 1; diff --git a/xorriso/opts_d_h.c b/xorriso/opts_d_h.c index b56c7c70..c9b0bc85 100644 --- a/xorriso/opts_d_h.c +++ b/xorriso/opts_d_h.c @@ -648,6 +648,25 @@ int Xorriso_option_extract_cut(struct XorrisO *xorriso, char *iso_rr_path, } +/* Command -file_name_limit */ +int Xorriso_option_file_name_limit(struct XorrisO *xorriso, char *value, + int flag) +{ + int ret; + double num; + + num= Scanf_io_size(value, 0); + if(num < 64 || num > 255) { + sprintf(xorriso->info_text, + "-file_name_limit: Value '%s' out of range [64..255]", value); + Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0); + return(0); + } + ret= Xorriso_set_file_name_limit(xorriso, (int) num, 0); + return(ret > 0); +} + + /* Option -file_size_limit */ int Xorriso_option_file_size_limit(struct XorrisO *xorriso, int argc, char **argv, int *idx, int flag) @@ -702,6 +721,23 @@ static int Xorriso_determine_name_space(struct XorrisO *xorriso, return(0); } +static int Xorriso_truncate_const_find_name(struct XorrisO *xorriso, + char *expr, char *buffer, + char **namept, int flag) +{ + int ret; + + *namept= expr; + ret= Xorriso_truncate_path_comps(xorriso, expr, buffer, namept, 1); + if(ret < 0) { + sprintf(xorriso->info_text, + "-find[ix]: cannot truncate constant -name to -file_name_limit: "); + Text_shellsafe(expr, xorriso->info_text, 1); + Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0); + return(0); + } + return(1); +} /* Option -find alias -findi, and -findx */ /* @param flag bit0= -findx rather than -findi @@ -720,7 +756,7 @@ int Xorriso_option_find(struct XorrisO *xorriso, int argc, char **argv, struct FindjoB *job, *first_job= NULL, *new_job; char *start_path, *path= NULL, *cpt, *other_path_start= NULL, *cd_pt; char *access_acl_text= NULL, *default_acl_text= NULL, *list_extattr_mode; - char *arg1_pt; + char *arg1_pt, *namept; struct stat dir_stbuf; uid_t user= 0; @@ -756,7 +792,10 @@ not_enough_arguments:; goto sorry_ex; } i++; - ret= Findjob_set_name_expr(job, argv[i], 0); + ret= Xorriso_truncate_const_find_name(xorriso, argv[i], path, &namept, 0); + if(ret <= 0) + goto ex; + ret= Findjob_set_name_expr(job, namept, 0); if(ret<=0) { sprintf(xorriso->info_text, "-find[ix]: cannot set -name expression "); Text_shellsafe(argv[i], xorriso->info_text, 1); @@ -766,7 +805,10 @@ not_enough_arguments:; if(i+1>=end_idx) goto not_enough_arguments; i++; - ret= Findjob_set_name_expr(job, argv[i], 1); + ret= Xorriso_truncate_const_find_name(xorriso, argv[i], path, &namept, 0); + if(ret <= 0) + goto ex; + ret= Findjob_set_name_expr(job, namept, 1); if(ret<=0) { sprintf(xorriso->info_text, "-find[ix]: cannot set -wholename expression "); @@ -1863,6 +1905,10 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag) " -pathspecs \"on\"|\"off\" Allow or disallow pathspecs of form ", " iso_rr_path=disk_path . Only \"off\" allows eventual", " -disk_pattern expansion.", +" -file_name_limit number", +" Set truncation size for file names [64 ... 255].", +" -file_size_limit value [...]", +" Set limit for file content size. One or more numbers to add.", " -add pathspec [...] | disk_path [***]", " Insert the given files or directory trees from", " filesystem into the ISO image. Much like mkisofs.", diff --git a/xorriso/opts_i_o.c b/xorriso/opts_i_o.c index 091fa1f5..2fc18245 100644 --- a/xorriso/opts_i_o.c +++ b/xorriso/opts_i_o.c @@ -215,9 +215,10 @@ int Xorriso_option_lnsi(struct XorrisO *xorriso, char *target, char *path, int flag) { int ret; - char *eff_path= NULL; + char *eff_path= NULL, *buffer= NULL, *namept; Xorriso_alloc_meM(eff_path, char, SfileadrL); + Xorriso_alloc_meM(buffer, char, SfileadrL); ret= Xorriso_normalize_img_path(xorriso, xorriso->wdi, path, eff_path, 1); if(ret < 0) @@ -231,12 +232,16 @@ int Xorriso_option_lnsi(struct XorrisO *xorriso, char *target, char *path, ret= Xorriso_normalize_img_path(xorriso, xorriso->wdi, path, eff_path, 2); if(ret < 0) {ret= 0; goto ex;} - ret= Xorriso_graft_in(xorriso, NULL, target, eff_path, (off_t) 0, (off_t) 0, + ret= Xorriso_truncate_path_comps(xorriso, target, buffer, &namept, 0); + if(ret < 0) + {ret= 0; goto ex;} + ret= Xorriso_graft_in(xorriso, NULL, namept, eff_path, (off_t) 0, (off_t) 0, 1024); if(ret <= 0) {ret= 0; goto ex;} ret= 1; ex:; + Xorriso_free_meM(buffer); Xorriso_free_meM(eff_path); return(ret); } @@ -977,10 +982,10 @@ int Xorriso_option_move(struct XorrisO *xorriso, char *origin, char *dest, ret= Xorriso_normalize_img_path(xorriso, xorriso->wdi, origin, eff_origin, 0); if(ret <= 0) - goto ex; - ret= Xorriso_normalize_img_path(xorriso, xorriso->wdi, dest, eff_dest, 0); - if(ret <= 0) - goto ex; + {ret= 0; goto ex;} + ret= Xorriso_normalize_img_path(xorriso, xorriso->wdi, dest, eff_dest, 2); + if(ret < 0) + {ret= 0; goto ex;} ret= Xorriso_rename(xorriso, NULL, eff_origin, eff_dest, 0); if(ret <= 0) goto ex; diff --git a/xorriso/parse_exec.c b/xorriso/parse_exec.c index 774fbbd5..47646a83 100644 --- a/xorriso/parse_exec.c +++ b/xorriso/parse_exec.c @@ -523,7 +523,8 @@ int Xorriso_count_args(struct XorrisO *xorriso, int argc, char **argv, "commit_eject","compliance","copyright_file", "dev","dialog","disk_dev_ino","disk_pattern","displacement", "dummy","dvd_obs","early_stdio_test","ecma119_map","eject", - "iso_rr_pattern","follow","format","fs","gid","grow_blindly","hardlinks", + "iso_rr_pattern","file_name_limit","follow","format","fs", + "gid","grow_blindly","hardlinks", "hfsplus","history","indev","in_charset","joliet", "list_delimiter","list_extras","list_profiles","local_charset", "mark","md5","mount_opts","modesty_on_drive", @@ -685,7 +686,8 @@ int Xorriso_cmd_sorting_rank(struct XorrisO *xorriso, "toc", "toc_of", "pvd_info", "report_system_area", "report_el_torito", "* Settings for file insertion:", - "file_size_limit", "not_mgt", "not_paths", "not_leaf", "not_list", + "file_name_limit", "file_size_limit", + "not_mgt", "not_paths", "not_leaf", "not_list", "quoted_not_list", "follow", "pathspecs", "overwrite", "split_size", "* Navigation in ISO image and disk filesystem (1):", @@ -1302,6 +1304,10 @@ next_command:; (*idx)+= 2; ret= Xorriso_option_extract(xorriso, arg1, arg2, 32); + } else if(strcmp(cmd,"file_name_limit")==0) { + (*idx)++; + ret= Xorriso_option_file_name_limit(xorriso, arg1, 0); + } else if(strcmp(cmd,"file_size_limit")==0) { ret= Xorriso_option_file_size_limit(xorriso, argc, argv, idx, 0); diff --git a/xorriso/text_io.c b/xorriso/text_io.c index 10a47696..195a7594 100644 --- a/xorriso/text_io.c +++ b/xorriso/text_io.c @@ -3095,6 +3095,11 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag) } } + is_default= (xorriso->file_name_limit == 255); + sprintf(line, "-file_name_limit %d\n", xorriso->file_name_limit); + if(!(is_default && no_defaults)) + Xorriso_status_result(xorriso,filter,fp,flag&2); + is_default= (xorriso->file_size_limit == Xorriso_default_file_size_limiT); if(xorriso->file_size_limit <= 0) diff --git a/xorriso/xorriso.1 b/xorriso/xorriso.1 index 222da185..7ccd6299 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.4.1, Sep 05, 2015" +.TH XORRISO 1 "Version 1.4.1, Sep 16, 2015" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: @@ -972,6 +972,31 @@ The speed advantage appears only if the loaded session was produced with Note that \-disk_dev_ino "off" is totally in effect only if \-hardlinks is "off", too. .TP +\fB\-file_name_limit\fR number +Set the maximum permissible length for file names in the range of 64 to 255. +Path components which are longer than the given number will get truncated +and have their last 33 bytes overwritten by a colon ':' and the +hex representation of the MD5 of the first 4095 bytes of the whole +oversized name. Potential incomplete UTF\-8 characters will get their +leading bytes replaced by '_'. +.br +iso_rr_paths with the long components will still be able to access the +file paths with truncated components. To avoid confusion by having both +truncated and untrancated names in the same directory, it is not possible +to change this setting after a drive was aquired. All file names get +truncated by the same length. +.br +File name patterns will only work if they match the truncated name. +This might change in future. +.br +Linux kernels up to at least 4.1 misrepresent names of length 254 and 255. +If you expect such names in or under disk_paths and plan to mount the ISO +by such Linux kernels, consider to set \-file_name_limit 253. +Else just avoid names longer than 253 characters. +.br +Files with truncated names get deleted and re\-added unconditionally +during \-update and \-update_r. This might change in future. +.TP \fB\-rom_toc_scan\fR "on"|"force"|"off"[:"emul_off"][:"emul_wide"] Read\-only drives do not tell the actual media type but show any media as ROM (e.g. as DVD\-ROM). The session history of MMC multi\-session media might @@ -1742,11 +1767,15 @@ if all its tests match. Available tests are: .br \fB\-name\fR pattern : -Matches if pattern matches the file leaf name. +Matches if pattern matches the file leaf name. If the pattern does not contain +any of the characters "*?[", then it will be truncated according +to \-file_name_limit and thus match the truncated name in the ISO filesystem. .br \fB\-wholename\fR pattern : Matches if pattern matches the file path as it would be printed by action -"echo". Character '/' is not special but can be matched by wildcards. +"echo". Character '/' can be matched by wildcards. If pattern pieces +between '/' do not contain any of the characters "*?[", they will +be truncated according to \-file_name_limit. .br \fB\-disk_name\fR pattern : Like \-name but testing the leaf name of the file source on disk. @@ -3096,6 +3125,10 @@ for existing El Torito boot equipment but also for the recognizable boot provisions in the System Area. It discards any existing \-boot_image setting and executes the commands proposed by command \-report_el_torito "cmd". .br +This action will only succeed if the file objects mentioned in the +output of command \-report_el_torito "cmd" are still available. Do not +remove or rename boot image files after \-indev. +.br Drop unknown El Torito: \-boot_image "any" "discard" .br Maintain recognizable stuff: \-boot_image "any" "replay" diff --git a/xorriso/xorriso.h b/xorriso/xorriso.h index abd2cb93..150e7e13 100644 --- a/xorriso/xorriso.h +++ b/xorriso/xorriso.h @@ -1503,6 +1503,10 @@ int Xorriso_option_extract(struct XorrisO *xorriso, char *disk_path, int Xorriso_option_extract_cut(struct XorrisO *xorriso, char *iso_rr_path, char *start, char *count, char *disk_path, int flag); +/* Command -file_name_limit */ +int Xorriso_option_file_name_limit(struct XorrisO *xorriso, char *value, + int flag); + /* Command -file_size_limit */ int Xorriso_option_file_size_limit(struct XorrisO *xorriso, int argc, char **argv, int *idx, int flag); diff --git a/xorriso/xorriso.info b/xorriso/xorriso.info index 02e5579f..34c1732e 100644 --- a/xorriso/xorriso.info +++ b/xorriso/xorriso.info @@ -877,6 +877,27 @@ activate them only after image loading. with -disk_dev_ino "on" too. Note that -disk_dev_ino "off" is totally in effect only if -hardlinks is "off", too. +-file_name_limit number + Set the maximum permissible length for file names in the range of + 64 to 255. Path components which are longer than the given number + will get truncated and have their last 33 bytes overwritten by a + colon ':' and the hex representation of the MD5 of the first 4095 + bytes of the whole oversized name. Potential incomplete UTF-8 + characters will get their leading bytes replaced by '_'. + iso_rr_paths with the long components will still be able to access + the file paths with truncated components. To avoid confusion by + having both truncated and untrancated names in the same directory, + it is not possible to change this setting after a drive was + aquired. All file names get truncated by the same length. + File name patterns will only work if they match the truncated name. + This might change in future. + Linux kernels up to at least 4.1 misrepresent names of length 254 + and 255. If you expect such names in or under disk_paths and plan + to mount the ISO by such Linux kernels, consider to set + -file_name_limit 253. Else just avoid names longer than 253 + characters. + Files with truncated names get deleted and re-added unconditionally + during -update and -update_r. This might change in future. -rom_toc_scan "on"|"force"|"off"[:"emul_off"][:"emul_wide"] Read-only drives do not tell the actual media type but show any media as ROM (e.g. as DVD-ROM). The session history of MMC @@ -1501,11 +1522,16 @@ File: xorriso.info, Node: CmdFind, Next: Filter, Prev: Manip, Up: Commands Available tests are: -name pattern : - Matches if pattern matches the file leaf name. + Matches if pattern matches the file leaf name. If the pattern + does not contain any of the characters "*?[", then it will be + truncated according to -file_name_limit and thus match the + truncated name in the ISO filesystem. -wholename pattern : Matches if pattern matches the file path as it would be - printed by action "echo". Character '/' is not special but - can be matched by wildcards. + printed by action "echo". Character '/' can be matched by + wildcards. If pattern pieces between '/' do not contain any + of the characters "*?[", they will be truncated according to + -file_name_limit. -disk_name pattern : Like -name but testing the leaf name of the file source on disk. Can match only data files which do not stem from the @@ -2614,6 +2640,9 @@ Examples: boot provisions in the System Area. It discards any existing -boot_image setting and executes the commands proposed by command -report_el_torito "cmd". + This action will only succeed if the file objects mentioned in the + output of command -report_el_torito "cmd" are still available. Do + not remove or rename boot image files after -indev. Drop unknown El Torito: -boot_image "any" "discard" Maintain recognizable stuff: -boot_image "any" "replay" El Torito only for GRUB: -boot_image "grub" "patch" @@ -4982,18 +5011,18 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -alter_date sets timestamps in ISO image: Manip. (line 136) * -alter_date_r sets timestamps in ISO image: Manip. (line 168) * -append_partition adds arbitrary file after image end: Bootable. - (line 351) + (line 354) * -application_id sets application id: SetWrite. (line 191) * -application_use sets application use field: SetWrite. (line 250) * -as emulates mkisofs or cdrecord: Emulation. (line 13) * -assert_volid rejects undesired images: Loading. (line 102) * -auto_charset learns character set from image: Loading. (line 114) * -backslash_codes enables backslash conversion: Scripting. (line 71) -* -ban_stdio_write demands real drive: Loading. (line 275) +* -ban_stdio_write demands real drive: Loading. (line 296) * -biblio_file sets biblio file name: SetWrite. (line 234) * -blank erases media: Writing. (line 57) * -boot_image controls bootability: Bootable. (line 65) -* -calm_drive reduces drive activity: Loading. (line 265) +* -calm_drive reduces drive activity: Loading. (line 286) * -cd sets working directory in ISO: Navigate. (line 7) * -cdx sets working directory on disk: Navigate. (line 15) * -changes_pending overrides change status: Writing. (line 12) @@ -5027,7 +5056,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -cp_rx copies file trees to disk: Restore. (line 104) * -cp_rx copies file trees to disk <1>: Restore. (line 112) * -cut_out inserts piece of data file: Insert. (line 118) -* -data_cache_size adjusts read cache size: Loading. (line 291) +* -data_cache_size adjusts read cache size: Loading. (line 312) * -dev acquires one drive for input and output: AqDrive. (line 12) * -devices gets list of drives: Inquiry. (line 7) * -device_links gets list of drives: Inquiry. (line 17) @@ -5043,7 +5072,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -dusx show directory size on disk: Navigate. (line 85) * -dux show directory size on disk: Navigate. (line 81) * -dvd_obs set write block size: SetWrite. (line 314) -* -early_stdio_test classifies stdio drives: Loading. (line 279) +* -early_stdio_test classifies stdio drives: Loading. (line 300) * -ecma119_map names w/o Rock Ridge, Joliet: Loading. (line 205) * -eject ejects drive tray: Writing. (line 50) * -end writes pending session and ends program: Scripting. (line 151) @@ -5055,6 +5084,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -extract_cut copies file piece to disk: Restore. (line 80) * -extract_l copies files to disk: Restore. (line 76) * -extract_single copies file to disk: Restore. (line 73) +* -file_name_limit curbs length of file names: Loading. (line 237) * -file_size_limit limits data file size: SetInsert. (line 7) * -find traverses and alters ISO tree: CmdFind. (line 7) * -findx traverses disk tree: Navigate. (line 88) @@ -5158,7 +5188,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top (line 51) * -rollback discards pending changes: Writing. (line 9) * -rollback_end ends program without writing: Scripting. (line 154) -* -rom_toc_scan searches for sessions: Loading. (line 237) +* -rom_toc_scan searches for sessions: Loading. (line 258) * -rr_reloc_dir sets name of relocation directory: SetWrite. (line 144) * -scdbackup_tag enables scdbackup checksum tag: Emulation. (line 179) * -scsi_log reports SCSI commands: Scripting. (line 143) @@ -5220,11 +5250,11 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * ACL, show in ISO image, -getfacl: Navigate. (line 60) * ACL, show in ISO image, -getfacl_r: Navigate. (line 66) * ACL, _definition: Extras. (line 50) -* APM block size: Bootable. (line 342) +* APM block size: Bootable. (line 345) * APM, _definition: Extras. (line 42) * Appendable media, _definition: Media. (line 38) -* Appended Filesystem Image, -append_partition: Bootable. (line 351) -* Appended partition, in MBR or GPT: Bootable. (line 230) +* Appended Filesystem Image, -append_partition: Bootable. (line 354) +* Appended partition, in MBR or GPT: Bootable. (line 233) * Automatic execution order, of arguments, -x: ArgSort. (line 16) * Backslash Interpretation, _definition: Processing. (line 53) * Backup, enable fast incremental, -disk_dev_ino: Loading. (line 217) @@ -5241,15 +5271,15 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Character set, learn from image, -auto_charset: Loading. (line 114) * Character Set, of terminal, -local_charset: Charset. (line 57) * Character Set, _definition: Charset. (line 6) -* CHRP partition, _definition: Bootable. (line 235) +* CHRP partition, _definition: Bootable. (line 238) * Closed media, _definition: Media. (line 44) * Comment, #: Scripting. (line 156) * Control, signal handling, -signal_handling: Exception. (line 66) * Create, new ISO image, _definition: Methods. (line 7) -* Cylinder alignment, _definition: Bootable. (line 279) -* Cylinder size, _definition: Bootable. (line 264) +* Cylinder alignment, _definition: Bootable. (line 282) +* Cylinder size, _definition: Bootable. (line 267) * Damaged track and session, close, -close_damaged: Writing. (line 164) -* DEC Alpha SRM boot sector, production: Bootable. (line 328) +* DEC Alpha SRM boot sector, production: Bootable. (line 331) * Delete, from ISO image, -rm: Manip. (line 20) * Delete, from ISO image, -rm_r: Manip. (line 26) * Delete, ISO directory, -rmdir: Manip. (line 29) @@ -5265,8 +5295,8 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Directory, delete, -rmdir: Manip. (line 29) * disk_path, _definition: Insert. (line 6) * Drive, accessability, -drive_class: Loading. (line 73) -* Drive, classify stdio, -early_stdio_test: Loading. (line 279) -* Drive, demand real MMC, -ban_stdio_write: Loading. (line 275) +* Drive, classify stdio, -early_stdio_test: Loading. (line 300) +* Drive, demand real MMC, -ban_stdio_write: Loading. (line 296) * Drive, eject tray, -eject: Writing. (line 50) * Drive, for input and output, -dev: AqDrive. (line 12) * Drive, for input, -indev: AqDrive. (line 23) @@ -5274,13 +5304,13 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Drive, get drive list, -devices: Inquiry. (line 7) * Drive, get drive list, -device_links: Inquiry. (line 17) * Drive, list supported media, -list_profiles: Writing. (line 177) -* Drive, reduce activity, -calm_drive: Loading. (line 265) +* Drive, reduce activity, -calm_drive: Loading. (line 286) * Drive, report SCSI commands, -scsi_log: Scripting. (line 143) * Drive, write and eject, -commit_eject: Writing. (line 53) * Drive, _definition: Drives. (line 6) * EA, _definition: Extras. (line 66) * ECMA-119, _definition: Model. (line 6) -* EFI system partition, _definition: Bootable. (line 244) +* EFI system partition, _definition: Bootable. (line 247) * El Torito, _definition: Extras. (line 19) * Emulation, -as: Emulation. (line 13) * Emulation, .mkisofsrc, -read_mkisofsrc: Emulation. (line 155) @@ -5290,6 +5320,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Examples: Examples. (line 6) * extattr, _definition: Extras. (line 66) * File content, copy, -concat: Restore. (line 119) +* File names, curb length, -file_name_limit: Loading. (line 237) * File names, if neither Rock Ridge nor Joliet: Loading. (line 205) * Filter, apply to file tree, -set_filter_r: Filter. (line 84) * Filter, apply to file, -set_filter: Filter. (line 58) @@ -5308,11 +5339,11 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Group, in ISO image, -chgrp_r: Manip. (line 53) * Growing, _definition: Methods. (line 20) * Hard links, control handling, -hardlinks: Loading. (line 125) -* HFS+ allocation block size: Bootable. (line 339) -* HFS+ serial number: Bootable. (line 336) +* HFS+ allocation block size: Bootable. (line 342) +* HFS+ serial number: Bootable. (line 339) * hidden, set in ISO image, -hide: Manip. (line 171) -* HP-PA boot sector, production: Bootable. (line 311) -* Image reading, cache size, -data_cache_size: Loading. (line 291) +* HP-PA boot sector, production: Bootable. (line 314) +* Image reading, cache size, -data_cache_size: Loading. (line 312) * Image, demand volume ID, -assert_volid: Loading. (line 102) * Image, discard pending changes, -rollback: Writing. (line 9) * Image, override change status, -changes_pending: Writing. (line 12) @@ -5363,14 +5394,14 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * LBA, _definition: Drives. (line 17) * List delimiter, _definition: Processing. (line 9) * Local Character Set, _definition: Charset. (line 11) -* MBR, set, -boot_image system_area=: Bootable. (line 181) +* MBR, set, -boot_image system_area=: Bootable. (line 184) * MBR, _definition: Extras. (line 27) * MD5, control handling, -md5: Loading. (line 173) * Media, erase, -blank: Writing. (line 57) * Media, format, -format: Writing. (line 87) * Media, list formats, -list_formats: Writing. (line 129) * Media, list write speeds, -list_speeds: Writing. (line 140) -* MIPS boot file, activation: Bootable. (line 290) +* MIPS boot file, activation: Bootable. (line 293) * mkisofs, Emulation: Emulation. (line 17) * Modifying, _definition: Methods. (line 28) * Multi-session media, _definition: Media. (line 7) @@ -5397,15 +5428,15 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Ownership, global in ISO image, -uid: SetWrite. (line 268) * Ownership, in ISO image, -chown: Manip. (line 43) * Ownership, in ISO image, -chown_r: Manip. (line 47) -* Partition offset, _definition: Bootable. (line 254) -* Partition table, _definition: Bootable. (line 211) +* Partition offset, _definition: Bootable. (line 257) +* Partition table, _definition: Bootable. (line 214) * Pathspec, _definition: SetInsert. (line 117) * Pattern expansion, for disk paths, -disk_pattern: Insert. (line 34) * Pattern expansion, for ISO paths, -iso_rr_pattern: Manip. (line 10) * Pattern expansion, _definition: Processing. (line 25) * Permissions, in ISO image, -chmod: Manip. (line 55) * Permissions, in ISO image, -chmod_r: Manip. (line 66) -* PReP partition, _definition: Bootable. (line 239) +* PReP partition, _definition: Bootable. (line 242) * Problems, reporting: Bugreport. (line 6) * Process, consolidate text output, -pkt_output: Frontend. (line 7) * Process, control abort on error, -abort_on: Exception. (line 27) @@ -5465,11 +5496,11 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Session, select as input, -load: Loading. (line 33) * Session, _definition: Model. (line 6) * Sorting order, for -x, -list_arg_sorting: ArgSort. (line 26) -* SUN Disk Label, production: Bootable. (line 301) -* SUN SPARC boot images, activation: Bootable. (line 374) +* SUN Disk Label, production: Bootable. (line 304) +* SUN SPARC boot images, activation: Bootable. (line 377) * Symbolic link, create, -lns: Insert. (line 160) -* System area, _definition: Bootable. (line 181) -* Table-of-content, search sessions, -rom_toc_scan: Loading. (line 237) +* System area, _definition: Bootable. (line 184) +* Table-of-content, search sessions, -rom_toc_scan: Loading. (line 258) * Table-of-content, show, -toc: Inquiry. (line 27) * Timestamps, set in ISO image, -alter_date: Manip. (line 136) * Timestamps, set in ISO image, -alter_date_r: Manip. (line 168) @@ -5527,47 +5558,47 @@ Node: Commands24941 Node: ArgSort26618 Node: AqDrive28112 Node: Loading31167 -Node: Insert48845 -Node: SetInsert59070 -Node: Manip67918 -Node: CmdFind77701 -Node: Filter95461 -Node: Writing100084 -Node: SetWrite110239 -Node: Bootable133184 -Node: Jigdo155519 -Node: Charset159778 -Node: Exception163105 -Node: DialogCtl169234 -Node: Inquiry171836 -Node: Navigate180281 -Node: Verify188576 -Node: Restore198438 -Node: Emulation207059 -Node: Scripting217469 -Node: Frontend225250 -Node: Examples234885 -Node: ExDevices236063 -Node: ExCreate236724 -Node: ExDialog238024 -Node: ExGrowing239295 -Node: ExModifying240104 -Node: ExBootable240614 -Node: ExCharset241169 -Node: ExPseudo242065 -Node: ExCdrecord242988 -Node: ExMkisofs243308 -Node: ExGrowisofs244665 -Node: ExException245819 -Node: ExTime246277 -Node: ExIncBackup246735 -Node: ExRestore250761 -Node: ExRecovery251707 -Node: Files252279 -Node: Seealso253596 -Node: Bugreport254311 -Node: Legal254902 -Node: CommandIdx255914 -Node: ConceptIdx272810 +Node: Insert50158 +Node: SetInsert60383 +Node: Manip69231 +Node: CmdFind79014 +Node: Filter97109 +Node: Writing101732 +Node: SetWrite111887 +Node: Bootable134832 +Node: Jigdo157368 +Node: Charset161627 +Node: Exception164954 +Node: DialogCtl171083 +Node: Inquiry173685 +Node: Navigate182130 +Node: Verify190425 +Node: Restore200287 +Node: Emulation208908 +Node: Scripting219318 +Node: Frontend227099 +Node: Examples236734 +Node: ExDevices237912 +Node: ExCreate238573 +Node: ExDialog239873 +Node: ExGrowing241144 +Node: ExModifying241953 +Node: ExBootable242463 +Node: ExCharset243018 +Node: ExPseudo243914 +Node: ExCdrecord244837 +Node: ExMkisofs245157 +Node: ExGrowisofs246514 +Node: ExException247668 +Node: ExTime248126 +Node: ExIncBackup248584 +Node: ExRestore252610 +Node: ExRecovery253556 +Node: Files254128 +Node: Seealso255445 +Node: Bugreport256160 +Node: Legal256751 +Node: CommandIdx257763 +Node: ConceptIdx274732  End Tag Table diff --git a/xorriso/xorriso.texi b/xorriso/xorriso.texi index 9b6666a7..b69dab36 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.4.1, Sep 05, 2015" +@c man .TH XORRISO 1 "Version 1.4.1, Sep 16, 2015" @c man .\" Please adjust this date whenever revising the manpage. @c man .\" @c man .\" Some roff macros, for reference: @@ -1219,6 +1219,33 @@ The speed advantage appears only if the loaded session was produced with Note that -disk_dev_ino "off" is totally in effect only if -hardlinks is "off", too. @c man .TP +@item -file_name_limit number +@kindex -file_name_limit curbs length of file names +@cindex File names, curb length, -file_name_limit +Set the maximum permissible length for file names in the range of 64 to 255. +Path components which are longer than the given number will get truncated +and have their last 33 bytes overwritten by a colon ':' and the +hex representation of the MD5 of the first 4095 bytes of the whole +oversized name. Potential incomplete UTF-8 characters will get their +leading bytes replaced by '_'. +@* +iso_rr_paths with the long components will still be able to access the +file paths with truncated components. To avoid confusion by having both +truncated and untrancated names in the same directory, it is not possible +to change this setting after a drive was aquired. All file names get +truncated by the same length. +@* +File name patterns will only work if they match the truncated name. +This might change in future. +@* +Linux kernels up to at least 4.1 misrepresent names of length 254 and 255. +If you expect such names in or under disk_paths and plan to mount the ISO +by such Linux kernels, consider to set -file_name_limit 253. +Else just avoid names longer than 253 characters. +@* +Files with truncated names get deleted and re-added unconditionally +during -update and -update_r. This might change in future. +@c man .TP @item -rom_toc_scan "on"|"force"|"off"[:"emul_off"][:"emul_wide"] @kindex -rom_toc_scan searches for sessions @cindex Table-of-content, search sessions, -rom_toc_scan @@ -2125,11 +2152,15 @@ Available tests are: @table @asis @sp 1 @item -name pattern : -Matches if pattern matches the file leaf name. +Matches if pattern matches the file leaf name. If the pattern does not contain +any of the characters "*?[", then it will be truncated according +to -file_name_limit and thus match the truncated name in the ISO filesystem. @* @item -wholename pattern : Matches if pattern matches the file path as it would be printed by action -"echo". Character '/' is not special but can be matched by wildcards. +"echo". Character '/' can be matched by wildcards. If pattern pieces +between '/' do not contain any of the characters "*?[", they will +be truncated according to -file_name_limit. @* @item -disk_name pattern : Like -name but testing the leaf name of the file source on disk. @@ -3626,7 +3657,7 @@ setting and executes the commands proposed by command -report_el_torito "cmd". @* This action will only succeed if the file objects mentioned in the output of command -report_el_torito "cmd" are still available. Do not -remove boot image files after -indev. +remove or rename boot image files after -indev. @* Drop unknown El Torito: -boot_image "any" "discard" @* diff --git a/xorriso/xorriso_private.h b/xorriso/xorriso_private.h index da746f26..c55e7745 100644 --- a/xorriso/xorriso_private.h +++ b/xorriso/xorriso_private.h @@ -604,6 +604,7 @@ struct XorrisO { /* the global context of xorriso */ int temp_mem_limit; off_t file_size_limit; + int file_name_limit; struct ExclusionS *disk_exclusions; int disk_excl_mode; /* bit0= on (else off) diff --git a/xorriso/xorriso_timestamp.h b/xorriso/xorriso_timestamp.h index 03bfdca3..74bfcc99 100644 --- a/xorriso/xorriso_timestamp.h +++ b/xorriso/xorriso_timestamp.h @@ -1 +1 @@ -#define Xorriso_timestamP "2015.09.17.120554" +#define Xorriso_timestamP "2015.09.17.121258" diff --git a/xorriso/xorrisoburn.h b/xorriso/xorrisoburn.h index f193f4b8..71add604 100644 --- a/xorriso/xorrisoburn.h +++ b/xorriso/xorrisoburn.h @@ -630,6 +630,10 @@ int Xorriso_report_system_area(struct XorrisO *xorriso, char *form, int flag); int Xorriso_external_filter_banned(struct XorrisO *xorriso, char *purpose, int flag); +int Xorriso_set_file_name_limit(struct XorrisO *xorriso, int value, int flag); + +int Xorriso_truncate_path_comps(struct XorrisO *xorriso, char *path, + char *buffer, char **resultpt, int flag); #endif /* Xorrisoburn_includeD */ diff --git a/xorriso/xorrisofs.1 b/xorriso/xorrisofs.1 index 3b4f48af..b6703989 100644 --- a/xorriso/xorrisofs.1 +++ b/xorriso/xorrisofs.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 XORRISOFS 1 "Version 1.4.1, Jul 30, 2015" +.TH XORRISOFS 1 "Version 1.4.1, Sep 13, 2015" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: @@ -551,6 +551,18 @@ ISO 9660 file objects. The multi\-session capabilities of \fBxorrisofs\fR depend much on the naming fidelity of Rock Ridge. So it is strongly discouraged to disable it by this option. .TP +\fB\-file_name_limit\fR number +Set the maximum permissible length for file names in the range of 64 to 255. +Path components which are longer than the given number will get truncated +and have their last 33 bytes overwritten by a colon ':' and the +hex representation of the MD5 of the first 4095 bytes of the whole +oversized name. Potential incomplete UTF\-8 characters will get their +leading bytes replaced by '_'. +.br +Linux kernels up to at least 4.1 misrepresent names of length 254 and 255. +If you expect such names in or under disk_paths and plan to mount the ISO +by such Linux kernels, consider to set \-file_name_limit 253. +.TP \fB\-D\fR The standard ECMA\-119 demands that no path in the image shall have more than 8 name components or 255 characters. Therefore it would be necessary diff --git a/xorriso/xorrisofs.info b/xorriso/xorrisofs.info index f1331671..f8489e32 100644 --- a/xorriso/xorrisofs.info +++ b/xorriso/xorrisofs.info @@ -516,6 +516,17 @@ File: xorrisofs.info, Node: SetExtras, Next: SetHide, Prev: SetCompl, Up: Op the ISO 9660 file objects. The multi-session capabilities of 'xorrisofs' depend much on the naming fidelity of Rock Ridge. So it is strongly discouraged to disable it by this option. +-file_name_limit number + Set the maximum permissible length for file names in the range of + 64 to 255. Path components which are longer than the given number + will get truncated and have their last 33 bytes overwritten by a + colon ':' and the hex representation of the MD5 of the first 4095 + bytes of the whole oversized name. Potential incomplete UTF-8 + characters will get their leading bytes replaced by '_'. + Linux kernels up to at least 4.1 misrepresent names of length 254 + and 255. If you expect such names in or under disk_paths and plan + to mount the ISO by such Linux kernels, consider to set + -file_name_limit 253. -D The standard ECMA-119 demands that no path in the image shall have more than 8 name components or 255 characters. Therefore it would @@ -1786,18 +1797,18 @@ File: xorrisofs.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: T [index] * Menu: -* --acl Recording of ACLs: SetExtras. (line 65) +* --acl Recording of ACLs: SetExtras. (line 76) * --application_use set Application Use field: ImageId. (line 77) * --boot-catalog-hide Hide El Torito boot catalog: Bootable. (line 101) * --efi-boot El Torito EFI boot image: Bootable. (line 53) * --embedded-boot Fill System Area e.g. by MBR: SystemArea. (line 75) * --emul-toc enable table-of-content emulation: SetProduct. (line 33) -* --for_backup Enable backup fidelity: SetExtras. (line 62) +* --for_backup Enable backup fidelity: SetExtras. (line 73) * --grub2-boot-info Patch El Torito boot image: Bootable. (line 89) * --grub2-mbr Install modern GRUB2 MBR: SystemArea. (line 77) * --grub2-sparc-core SUN SPARC core file: SystemArea. (line 237) -* --hardlinks Recording of hardlink relations: SetExtras. (line 86) -* --md5 Recording of MD5 checksums: SetExtras. (line 78) +* --hardlinks Recording of hardlink relations: SetExtras. (line 97) +* --md5 Recording of MD5 checksums: SetExtras. (line 89) * --modification-date set ISO image timestamps: ImageId. (line 70) * --no-emul-toc no table-of-content emulation: SetProduct. (line 41) * --norock disable Rock Ridge production: SetExtras. (line 24) @@ -1813,7 +1824,7 @@ File: xorrisofs.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: T (line 116) * --quoted_path_list read pathspecs from disk file: SetInsert. (line 12) -* --scdbackup_tag Recording of MD5 checksum: SetExtras. (line 94) +* --scdbackup_tag Recording of MD5 checksum: SetExtras. (line 105) * --sort-weight set block address sorting weight: SetProduct. (line 45) * --sort-weight-list set block address sorting weight: SetProduct. (line 56) @@ -1821,7 +1832,7 @@ File: xorrisofs.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: T (line 76) * --stdio_sync control forced output to disk files: SetProduct. (line 23) -* --xattr Recording of xattr: SetExtras. (line 71) +* --xattr Recording of xattr: SetExtras. (line 82) * -A set Application Id: ImageId. (line 34) * -abstract set Abstract File path: ImageId. (line 57) * -allow-lowercase lowercase in ISO file names: SetCompl. (line 42) @@ -1846,12 +1857,12 @@ File: xorrisofs.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: T * -chrp-boot CHRP partition: SystemArea. (line 204) * -chrp-boot-part CHRP partition: SystemArea. (line 195) * -copyright set Copyright File path: ImageId. (line 66) -* -D allow deep directory hierachies: SetExtras. (line 30) +* -D allow deep directory hierachies: SetExtras. (line 41) * -d omit trailing dot in ISO file names: SetCompl. (line 50) * -dev set path for loading existing ISO image: Loading. (line 23) * -dir-mode permissions for all directories: SetProduct. (line 79) * -disable-deep-relocation allow deep directory hierachies: SetExtras. - (line 42) + (line 53) * -disallow_dir_id_ext enforce ISO level 1 directory names: SetCompl. (line 23) * -e El Torito EFI boot image: Bootable. (line 47) @@ -1866,6 +1877,7 @@ File: xorrisofs.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: T * -exclude-list exclude disk files from inserting: SetInsert. (line 44) * -f follow symbolic links on disk: SetInsert. (line 22) * -file-mode permissions for all data files: SetProduct. (line 84) +* -file_name_limit curbs length of file names: SetExtras. (line 30) * -follow-links follow symbolic links on disk: SetInsert. (line 26) * -full-iso9660-filenames allow 31 characters in ISO file names: SetCompl. (line 59) @@ -1876,15 +1888,15 @@ File: xorrisofs.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: T (line 29) * -hard-disk-boot El Torito boot image emulation: Bootable. (line 63) * -help list supported options: Miscellaneous. (line 21) -* -hfs-bless HFS+ blessing ppc_bootdir: SetExtras. (line 170) -* -hfs-bless-by HFS+ blessing: SetExtras. (line 160) -* -hfsplus enable production of HFS+ partition: SetExtras. (line 119) -* -hfsplus-block-size set APM block size: SetExtras. (line 150) +* -hfs-bless HFS+ blessing ppc_bootdir: SetExtras. (line 181) +* -hfs-bless-by HFS+ blessing: SetExtras. (line 171) +* -hfsplus enable production of HFS+ partition: SetExtras. (line 130) +* -hfsplus-block-size set APM block size: SetExtras. (line 161) * -hfsplus-block-size set HFS+ allocation block size: SetExtras. - (line 146) -* -hfsplus-file-creator-type HFS+ creator-type attribute: SetExtras. (line 157) -* -hfsplus-serial-no set HFS+ serial number: SetExtras. (line 142) +* -hfsplus-file-creator-type HFS+ creator-type attribute: SetExtras. + (line 168) +* -hfsplus-serial-no set HFS+ serial number: SetExtras. (line 153) * -hide keep matching files invisible in ISO tree: SetHide. (line 8) * -hide-hfsplus keep matching files invisible in HFS+ tree: SetHide. (line 25) @@ -1897,7 +1909,7 @@ File: xorrisofs.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: T * -hide-list keep matching files invisible in ISO tree: SetHide. (line 15) * -hide-rr-moved set deep directory relocation target: SetExtras. - (line 60) + (line 71) * -hppa-bootloader HP-PA bootloader file: SystemArea. (line 249) * -hppa-cmdline HP-PA PALO command line: SystemArea. (line 243) * -hppa-hdrversion HP-PA PALO header version: SystemArea. (line 257) @@ -1912,7 +1924,7 @@ File: xorrisofs.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: T * -isohybrid-gpt-basdat Mark boot image in GPT: SystemArea. (line 94) * -isohybrid-gpt-hfsplus Mark boot image in GPT: SystemArea. (line 104) * -isohybrid-mbr Install ISOLINUX isohybrid MBR: SystemArea. (line 83) -* -J enable production of Joliet directory tree: SetExtras. (line 102) +* -J enable production of Joliet directory tree: SetExtras. (line 113) * -jigdo-exclude add exclusion pattern for .md5: Jigdo. (line 55) * -jigdo-force-md5 add check pattern for .md5: Jigdo. (line 49) * -jigdo-jigdo set name of .jigdo file: Jigdo. (line 38) @@ -1922,9 +1934,9 @@ File: xorrisofs.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: T * -jigdo-template-compress choose compression algorithm: Jigdo. (line 69) * -joliet enable production of Joliet directory tree: SetExtras. - (line 106) -* -joliet-long allow longer Joliet names: SetExtras. (line 108) -* -joliet-utf16 use UTF-16 with Joliet names: SetExtras. (line 114) + (line 117) +* -joliet-long allow longer Joliet names: SetExtras. (line 119) +* -joliet-utf16 use UTF-16 with Joliet names: SetExtras. (line 125) * -l allow 31 characters in ISO file names: SetCompl. (line 56) * -log-file redirect stderr messages: Miscellaneous. (line 33) * -m exclude disk files from inserting: SetInsert. (line 31) @@ -1971,7 +1983,7 @@ File: xorrisofs.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: T * -rock Rock Ridge (is enabled by default): SetExtras. (line 13) * -root redirect ISO root directory: SetInsert. (line 55) * -rr_reloc_dir set deep directory relocation target: SetExtras. - (line 44) + (line 55) * -sparc-boot SUN SPARC boot images: SystemArea. (line 233) * -sparc-label SUN Disk Label text: SystemArea. (line 235) * -sysid set System Id: ImageId. (line 43) @@ -2000,10 +2012,10 @@ File: xorrisofs.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Menu: * Abstract File, set path, -abstract: ImageId. (line 57) -* ACL, record and load, --acl: SetExtras. (line 65) +* ACL, record and load, --acl: SetExtras. (line 76) * APM, _definition: SystemArea. (line 16) * Application Id, set, -A, -appid: ImageId. (line 34) -* Backup, enable fidelity, --for_backup: SetExtras. (line 62) +* Backup, enable fidelity, --for_backup: SetExtras. (line 73) * Biblio File, set path, -biblio: ImageId. (line 62) * Block address, set sorting weight, --sort-weight: SetProduct. (line 45) @@ -2070,11 +2082,11 @@ File: xorrisofs.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Character sets, _definition: Charset. (line 6) * Copyright File, set path, -copyright: ImageId. (line 66) * Deep directories, allow, -D, -disable-deep-relocation: SetExtras. - (line 30) + (line 41) * Deep directories, relocation target, -hide-rr-moved: SetExtras. - (line 60) + (line 71) * Deep directories, relocation target, -rr_reloc_dir: SetExtras. - (line 44) + (line 55) * Disk files, exclude, -hide-list: SetInsert. (line 44) * Disk files, exclude, -m, -exclude, -x, -old-exclude: SetInsert. (line 31) @@ -2082,18 +2094,19 @@ File: xorrisofs.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * ECMA-119, _definition: Standards. (line 6) * El Torito, _definition: Bootable. (line 13) * Examples: Examples. (line 6) +* File names, curb length, -file_name_limit: SetExtras. (line 30) * Forced output, control, --stdio_sync: SetProduct. (line 23) * GPT, mark appended partitions, -appended_part_as_gpt: SystemArea. (line 179) * GPT, _definition: SystemArea. (line 13) -* HFS+, enables production: SetExtras. (line 119) -* HFS+, issue blessing ppc_bootdir, -hfs-bless: SetExtras. (line 170) -* HFS+, issue blessing, -hfs-bless-by: SetExtras. (line 160) -* HFS+, set allocation block size: SetExtras. (line 146) -* HFS+, set APM block size: SetExtras. (line 150) +* HFS+, enables production: SetExtras. (line 130) +* HFS+, issue blessing ppc_bootdir, -hfs-bless: SetExtras. (line 181) +* HFS+, issue blessing, -hfs-bless-by: SetExtras. (line 171) +* HFS+, set allocation block size: SetExtras. (line 157) +* HFS+, set APM block size: SetExtras. (line 161) * HFS+, set creator and type of file, -hfsplus-file-creator-type: SetExtras. - (line 157) -* HFS+, set serial number: SetExtras. (line 142) + (line 168) +* HFS+, set serial number: SetExtras. (line 153) * HFS+, _definition: Standards. (line 32) * Hiding, from HFS+, -hide-hfsplus: SetHide. (line 25) * Hiding, from HFS+, -hide-hfsplus-list: SetHide. (line 28) @@ -2150,16 +2163,16 @@ File: xorrisofs.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Jigdo Template Extraction, -jigdo-template-compress: Jigdo. (line 69) * Jigdo Template Extraction, -md5-list: Jigdo. (line 67) * Jigdo Template Extraction, _definition: Jigdo. (line 6) -* Joliet, allows longer names, -joliet-long: SetExtras. (line 108) -* Joliet, enable, -J, -joliet: SetExtras. (line 102) +* Joliet, allows longer names, -joliet-long: SetExtras. (line 119) +* Joliet, enable, -J, -joliet: SetExtras. (line 113) * Joliet, _definition: Standards. (line 21) * Links, follow on disk, -f, -follow-links: SetInsert. (line 22) -* Links, record and load hard links, --hardlinks: SetExtras. (line 86) +* Links, record and load hard links, --hardlinks: SetExtras. (line 97) * MBR, GPT, append partition, -append_partition: SystemArea. (line 159) * MBR, sectors per head, -partition_sec_hd: SystemArea. (line 131) * MBR, sectors per head, -partition_sec_hd <1>: SystemArea. (line 134) * MBR, _definition: SystemArea. (line 9) -* MD5, record and load, --md5: SetExtras. (line 78) +* MD5, record and load, --md5: SetExtras. (line 89) * Message output, increase frequency, -gui: Miscellaneous. (line 29) * Message output, redirect stderr, -log-file: Miscellaneous. (line 33) * Message output, suppress, -quiet: Miscellaneous. (line 25) @@ -2185,7 +2198,7 @@ File: xorrisofs.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top (line 16) * Rock Ridge, disable production, --norock: SetExtras. (line 24) * Rock Ridge, _definition: Standards. (line 14) -* scdbackup, record checksum tag, --scdbackup_tag: SetExtras. (line 94) +* scdbackup, record checksum tag, --scdbackup_tag: SetExtras. (line 105) * Session, select path, -M, -prev-session, -dev: Loading. (line 11) * Session, set load and write address, -C, -cdrecord-params: Loading. (line 25) @@ -2194,11 +2207,11 @@ File: xorrisofs.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * System Id, set, -sysid: ImageId. (line 43) * Table-of-content, emulation off, --no-emul-toc: SetProduct. (line 41) * Table-of-content, emulation, --emul-toc: SetProduct. (line 33) -* UTF-16, for Joliet paths, -joliet-utf16: SetExtras. (line 114) +* UTF-16, for Joliet paths, -joliet-utf16: SetExtras. (line 125) * Verbosity, high, -v, -verbose: Miscellaneous. (line 38) * Volume Id, set, -V, -volid: ImageId. (line 13) * Volume Set Id, set, -volset: ImageId. (line 25) -* xattr, record and load, --xattr: SetExtras. (line 71) +* xattr, record and load, --xattr: SetExtras. (line 82) * xorriso, mkisofs emulation: Xorriso. (line 6) * xorriso, options: Options. (line 6) * zisofs file, enable recognition, -z, -transparent-compression: SetInsert. @@ -2218,26 +2231,26 @@ Node: SetInsert9752 Node: SetProduct14161 Node: SetCompl19331 Node: SetExtras21923 -Node: SetHide30618 -Node: ImageId31922 -Node: Bootable36093 -Node: SystemArea41260 -Node: Charset55832 -Node: Jigdo56857 -Node: Miscellaneous61134 -Node: Examples62779 -Node: ExSimple63273 -Node: ExGraft63756 -Node: ExMkisofs65056 -Node: ExGrowisofs66322 -Node: ExIncBackup67512 -Node: ExIncBckAcc70673 -Node: ExBootable72362 -Node: Files76544 -Node: Seealso77639 -Node: Bugreport78288 -Node: Legal78879 -Node: CommandIdx79776 -Node: ConceptIdx94571 +Node: SetHide31287 +Node: ImageId32591 +Node: Bootable36762 +Node: SystemArea41929 +Node: Charset56501 +Node: Jigdo57526 +Node: Miscellaneous61803 +Node: Examples63448 +Node: ExSimple63942 +Node: ExGraft64425 +Node: ExMkisofs65725 +Node: ExGrowisofs66991 +Node: ExIncBackup68181 +Node: ExIncBckAcc71342 +Node: ExBootable73031 +Node: Files77213 +Node: Seealso78308 +Node: Bugreport78957 +Node: Legal79548 +Node: CommandIdx80445 +Node: ConceptIdx95313  End Tag Table diff --git a/xorriso/xorrisofs.texi b/xorriso/xorrisofs.texi index 7b5d4699..d2cac9f3 100644 --- a/xorriso/xorrisofs.texi +++ b/xorriso/xorrisofs.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 XORRISOFS 1 "Version 1.4.1, Jul 30, 2015" +@c man .TH XORRISOFS 1 "Version 1.4.1, Sep 13, 2015" @c man .\" Please adjust this date whenever revising the manpage. @c man .\" @c man .\" Some roff macros, for reference: @@ -792,6 +792,20 @@ ISO 9660 file objects. The multi-session capabilities of @command{xorrisofs} depend much on the naming fidelity of Rock Ridge. So it is strongly discouraged to disable it by this option. @c man .TP +@item -file_name_limit number +@kindex -file_name_limit curbs length of file names +@cindex File names, curb length, -file_name_limit +Set the maximum permissible length for file names in the range of 64 to 255. +Path components which are longer than the given number will get truncated +and have their last 33 bytes overwritten by a colon ':' and the +hex representation of the MD5 of the first 4095 bytes of the whole +oversized name. Potential incomplete UTF-8 characters will get their +leading bytes replaced by '_'. +@* +Linux kernels up to at least 4.1 misrepresent names of length 254 and 255. +If you expect such names in or under disk_paths and plan to mount the ISO +by such Linux kernels, consider to set -file_name_limit 253. +@c man .TP @item -D @kindex -D allow deep directory hierachies @cindex Deep directories, allow, -D, -disable-deep-relocation