Browse Source

New command -file_name_limit, -as mkisofs -file_name_limit

master
Thomas Schmitt 6 years ago
parent
commit
0c2eed9f2e
  1. 1
      libisoburn/libisoburn.ver
  2. 1
      xorriso/base_obj.c
  3. 8
      xorriso/drive_mgt.c
  4. 14
      xorriso/emulators.c
  5. 16
      xorriso/filters.c
  6. 2
      xorriso/iso_img.c
  7. 106
      xorriso/iso_manip.c
  8. 112
      xorriso/iso_tree.c
  9. 5
      xorriso/opts_a_c.c
  10. 52
      xorriso/opts_d_h.c
  11. 17
      xorriso/opts_i_o.c
  12. 10
      xorriso/parse_exec.c
  13. 5
      xorriso/text_io.c
  14. 39
      xorriso/xorriso.1
  15. 4
      xorriso/xorriso.h
  16. 181
      xorriso/xorriso.info
  17. 39
      xorriso/xorriso.texi
  18. 1
      xorriso/xorriso_private.h
  19. 2
      xorriso/xorriso_timestamp.h
  20. 4
      xorriso/xorrisoburn.h
  21. 14
      xorriso/xorrisofs.1
  22. 135
      xorriso/xorrisofs.info
  23. 16
      xorriso/xorrisofs.texi

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

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

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

14
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 */;

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

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

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

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

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

52
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.",

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

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

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

39
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"

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

181
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

39
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