New command -file_name_limit, -as mkisofs -file_name_limit
This commit is contained in:
@ -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);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user