Narrowed rules for recognizing split file parts
This commit is contained in:
@ -2705,7 +2705,6 @@ int Xorriso_graft_split(struct XorrisO *xorriso, IsoImage *volume,
|
||||
if(ret<0)
|
||||
return(ret);
|
||||
*node= (IsoNode *) new_dir;
|
||||
|
||||
total_parts= size / xorriso->split_size;
|
||||
if(size % xorriso->split_size)
|
||||
total_parts++;
|
||||
@ -2767,7 +2766,6 @@ int Xorriso_tree_graft_node(struct XorrisO *xorriso, IsoImage *volume,
|
||||
node, 0);
|
||||
if(ret<=0)
|
||||
goto ex;
|
||||
return(1);
|
||||
} else if(size > xorriso->file_size_limit && xorriso->file_size_limit > 0) {
|
||||
sprintf(xorriso->info_text,
|
||||
"File exceeds size limit of %.f bytes: %s\n",
|
||||
@ -2775,10 +2773,11 @@ int Xorriso_tree_graft_node(struct XorrisO *xorriso, IsoImage *volume,
|
||||
Text_shellsafe(disk_path, sfe, 0));
|
||||
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);
|
||||
if(ret<0)
|
||||
goto ex;
|
||||
}
|
||||
ret= iso_tree_add_new_node(volume, dir, img_name, disk_path, node);
|
||||
if(ret<0)
|
||||
goto ex;
|
||||
}
|
||||
|
||||
if(stbuf_valid && ((xorriso->do_aaip & 16) || !(xorriso->ino_behavior & 2))) {
|
||||
@ -2804,6 +2803,7 @@ ex:;
|
||||
/* @param flag bit0= recursion is active
|
||||
bit1= do not report added files
|
||||
bit6= do not delete eventually existing node from di_array
|
||||
bit7= no special handling of split file directories
|
||||
*/
|
||||
int Xorriso_add_tree(struct XorrisO *xorriso, IsoDir *dir,
|
||||
char *img_dir_path, char *disk_dir_path,
|
||||
@ -2955,8 +2955,8 @@ cannot_lstat:;
|
||||
if(ret>0) {
|
||||
target_is_dir= LIBISO_ISDIR(node);
|
||||
target_is_split= 0;
|
||||
if(target_is_dir)
|
||||
target_is_split= Xorriso_is_split(xorriso, "", (void *) node, 1);
|
||||
if(target_is_dir && !(flag & 128))
|
||||
target_is_split= Xorriso_is_split(xorriso, "", (void *) node, 1 | 2);
|
||||
|
||||
if(!((target_is_dir && !target_is_split) && source_is_dir)) {
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
@ -3014,7 +3014,7 @@ cannot_lstat:;
|
||||
} else {
|
||||
ret= Xorriso_add_tree(xorriso, (IsoDir *) node,
|
||||
img_path, disk_path, own_link_stack,
|
||||
1 | (flag & (2 | 64)));
|
||||
1 | (flag & (2 | 64 | 128)));
|
||||
}
|
||||
if(ret<=0)
|
||||
goto was_problem;
|
||||
@ -3258,8 +3258,8 @@ int Xorriso_graft_in(struct XorrisO *xorriso, void *boss_iter,
|
||||
target_is_dir= LIBISO_ISDIR(node);
|
||||
|
||||
target_is_split= 0;
|
||||
if(target_is_dir && !(flag&128))
|
||||
target_is_split= Xorriso_is_split(xorriso, "", (void *) node, 1);
|
||||
if(target_is_dir && !(flag & 128))
|
||||
target_is_split= Xorriso_is_split(xorriso, "", (void *) node, 1 | 2);
|
||||
|
||||
if(!((target_is_dir && !target_is_split) && source_is_dir)) {
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
@ -3325,7 +3325,7 @@ attach_source:;
|
||||
(IsoNode *) dir, 4 | 32);
|
||||
if(!(flag&32)) {
|
||||
ret= Xorriso_add_tree(xorriso, dir, img_path, disk_path, NULL,
|
||||
flag & (2 | 64));
|
||||
flag & (2 | 64 | 128));
|
||||
if(ret<=0)
|
||||
return(ret);
|
||||
}
|
||||
@ -8033,7 +8033,7 @@ int Xorriso_findi(struct XorrisO *xorriso, struct FindjoB *job,
|
||||
void *dir_node_generic, char *dir_path,
|
||||
struct stat *dir_stbuf, int depth, int flag)
|
||||
{
|
||||
int ret, action= 0, hflag, deleted= 0, no_dive= 0;
|
||||
int ret, action= 0, hflag, deleted= 0, no_dive= 0, split_flag;
|
||||
IsoDirIter *iter= NULL;
|
||||
IsoDir *dir_node= NULL;
|
||||
IsoNode *node, *iso_node;
|
||||
@ -8128,7 +8128,10 @@ int Xorriso_findi(struct XorrisO *xorriso, struct FindjoB *job,
|
||||
}
|
||||
if(no_dive || !LIBISO_ISDIR((IsoNode *) dir_node))
|
||||
{ret= 1; goto ex;}
|
||||
if(Xorriso_is_split(xorriso, dir_path, (IsoNode *) dir_node, 1)>0)
|
||||
split_flag= 1 | 2;
|
||||
if(action == 14 || action == 17)
|
||||
split_flag &= ~2;
|
||||
if(Xorriso_is_split(xorriso, dir_path, (IsoNode *) dir_node, split_flag)>0)
|
||||
{ret= 1; goto ex;}
|
||||
|
||||
mem= boss_mem;
|
||||
@ -9236,6 +9239,8 @@ int Xorriso_iso_file_close(struct XorrisO *xorriso, void **stream, int flag)
|
||||
|
||||
/* @param flag bit0= in_node is valid, do not resolve iso_adr
|
||||
bit1= insist in complete collection of part files
|
||||
??? <<< bit2= recognize and parse split parts despite
|
||||
xorrio->split_size <= 0
|
||||
*/
|
||||
int Xorriso_identify_split(struct XorrisO *xorriso, char *iso_adr,
|
||||
void *in_node,
|
||||
@ -9257,6 +9262,13 @@ int Xorriso_identify_split(struct XorrisO *xorriso, char *iso_adr,
|
||||
*count= 0;
|
||||
*parts= NULL;
|
||||
|
||||
/* <<< remove bit1 and hardcode it
|
||||
flag|= 2;
|
||||
*/
|
||||
|
||||
if(xorriso->split_size <= 0 && !(flag & 4))
|
||||
return(0);
|
||||
|
||||
if(flag&1) {
|
||||
node= (IsoNode *) in_node;
|
||||
} else {
|
||||
@ -9304,12 +9316,14 @@ cannot_iter:;
|
||||
size= stbuf.st_size;
|
||||
}
|
||||
/* check for plausible size */
|
||||
if(!((partno<total_parts && size==bytes) ||
|
||||
(partno==total_parts && size<=bytes)))
|
||||
if(!((partno != total_parts && size == bytes) ||
|
||||
(partno == total_parts && size <= bytes)))
|
||||
{ret= 0; goto ex;}
|
||||
if(offset != first_bytes * (off_t) (partno - 1))
|
||||
{ret= 0; goto ex;}
|
||||
(*count)++;
|
||||
}
|
||||
if((*count)<=0)
|
||||
if(*count <= 0 || (*count != first_total_parts && (flag & 2)))
|
||||
{ret= 0; goto ex;}
|
||||
|
||||
ret= Splitparts_new(parts, (*count)+1, 0); /* (have one end marker item) */
|
||||
|
Reference in New Issue
Block a user