New -as mkisofs options -root , -old-root, --old-root-no-md5, --old-root-no-ino, --old-root-dev
This commit is contained in:
@ -611,6 +611,7 @@ int Xorriso_graft_in(struct XorrisO *xorriso, void *boss_iter,
|
||||
int target_is_split, hide_attrs;
|
||||
struct stat stbuf;
|
||||
|
||||
hide_attrs= (flag >> 8) & 3;
|
||||
if (disk_path == NULL && !(flag & 1)) {
|
||||
Xorriso_msgs_submit(xorriso, 0,
|
||||
"Program error: Xorriso_graft_in(): disk_path == NULL && !(flag & 1)",
|
||||
@ -627,7 +628,6 @@ int Xorriso_graft_in(struct XorrisO *xorriso, void *boss_iter,
|
||||
return(3*!!(flag&16));
|
||||
|
||||
/* Check for mkisofs-style hidings */
|
||||
hide_attrs= (flag >> 8) & 3;
|
||||
if(hide_attrs != 3) {
|
||||
ret= Xorriso_path_is_hidden(xorriso, disk_path, 0);
|
||||
if(ret<0)
|
||||
@ -1380,6 +1380,18 @@ int Xorriso_rename(struct XorrisO *xorriso, void *boss_iter,
|
||||
}
|
||||
|
||||
|
||||
int Xorriso_cannot_clone(struct XorrisO *xorriso, char *eff_origin,
|
||||
char *eff_dest, int flag)
|
||||
{
|
||||
Xorriso_report_iso_error(xorriso, eff_dest, 0, "Cannot clone",
|
||||
0, "FAILURE", 1);
|
||||
sprintf(xorriso->info_text, "Failed to clone ");
|
||||
Text_shellsafe(eff_origin, xorriso->info_text, 1);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
return(0);
|
||||
}
|
||||
|
||||
|
||||
int Xorriso_clone_tree(struct XorrisO *xorriso, void *boss_iter,
|
||||
char *origin, char *dest, int flag)
|
||||
{
|
||||
@ -1454,19 +1466,78 @@ int Xorriso_clone_tree(struct XorrisO *xorriso, void *boss_iter,
|
||||
|
||||
ret = iso_tree_clone(origin_node, new_parent, leafname, &new_node, 0);
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
if (ret < 0) {
|
||||
Xorriso_report_iso_error(xorriso, eff_dest, 0, "Cannot clone",
|
||||
0, "FAILURE", 1);
|
||||
sprintf(xorriso->info_text, "Failed to clone ");
|
||||
Text_shellsafe(eff_origin, xorriso->info_text, 1);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
return(0);
|
||||
if(ret < 0) {
|
||||
Xorriso_cannot_clone(xorriso, eff_origin, eff_dest, 0);
|
||||
return(0);
|
||||
}
|
||||
Xorriso_set_change_pending(xorriso, 0);
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
int Xorriso_clone_under(struct XorrisO *xorriso, char *origin, char *dest,
|
||||
int flag)
|
||||
{
|
||||
int ret, pass;
|
||||
char eff_dest[SfileadrL], eff_origin[SfileadrL], *namept;
|
||||
IsoDir *origin_dir, *dest_dir;
|
||||
IsoDirIter *iter= NULL;
|
||||
IsoNode *origin_node, *new_node;
|
||||
IsoImage *volume;
|
||||
|
||||
ret= Xorriso_get_volume(xorriso, &volume, 0);
|
||||
if(ret <= 0)
|
||||
return(ret);
|
||||
ret= Xorriso_dir_from_path(xorriso, "Copy source", origin, &origin_dir, 0);
|
||||
if(ret <= 0)
|
||||
return(ret);
|
||||
ret= Xorriso_dir_from_path(xorriso, "Copy destination", dest, &dest_dir, 0);
|
||||
if(ret <= 0)
|
||||
return(ret);
|
||||
|
||||
for(pass= 0; pass < 2; pass++) {
|
||||
ret= iso_dir_get_children(origin_dir, &iter);
|
||||
if(ret < 0) {
|
||||
Xorriso_cannot_create_iter(xorriso, ret, 0);
|
||||
{ret= -1; goto ex;}
|
||||
}
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
|
||||
while(iso_dir_iter_next(iter, &origin_node) == 1) {
|
||||
namept= (char *) iso_node_get_name(origin_node);
|
||||
sprintf(eff_origin, "%s/%s", origin, namept);
|
||||
sprintf(eff_dest, "%s%s", dest, namept);
|
||||
if(pass == 0) {
|
||||
ret= Xorriso_node_from_path(xorriso, volume, eff_dest, &new_node, 1);
|
||||
if(ret < 0)
|
||||
goto ex;
|
||||
if(ret > 0) {
|
||||
sprintf(xorriso->info_text, "Cloning: Copy address already exists: ");
|
||||
Text_shellsafe(eff_dest, xorriso->info_text, 1);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
ret= 0; goto ex;
|
||||
}
|
||||
} else {
|
||||
ret = iso_tree_clone(origin_node, dest_dir, namept, &new_node, 0);
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
if(ret < 0) {
|
||||
Xorriso_cannot_clone(xorriso, eff_origin, eff_dest, 0);
|
||||
ret= 0; goto ex;
|
||||
}
|
||||
}
|
||||
}
|
||||
iso_dir_iter_free(iter);
|
||||
iter= NULL;
|
||||
}
|
||||
ret= 1;
|
||||
ex:;
|
||||
if(iter != NULL)
|
||||
iso_dir_iter_free(iter);
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
return(ret);
|
||||
}
|
||||
|
||||
|
||||
int Xorriso_set_st_mode(struct XorrisO *xorriso, char *in_path,
|
||||
mode_t mode_and, mode_t mode_or, int flag)
|
||||
{
|
||||
|
Reference in New Issue
Block a user