Implemented option -rmdir

This commit is contained in:
Thomas Schmitt 2007-11-07 15:01:20 +00:00
parent bd6c15ef71
commit 25635f3838
5 changed files with 55 additions and 53 deletions

View File

@ -331,7 +331,7 @@ Create empty directories if they do not exist yet.
Existence as directory generates a WARNING event, existence as Existence as directory generates a WARNING event, existence as
other file cause a SORRY event. other file cause a SORRY event.
.TP .TP
> \fB\-rmdir\fR iso_rr_path [...] \fB\-rmdir\fR iso_rr_path [...]
Delete empty directories. Delete empty directories.
.TP .TP
\fB\-\-\fR \fB\-\-\fR

View File

@ -1994,40 +1994,40 @@ int Xorriso_request_confirmation(struct XorrisO *xorriso, int flag)
xorriso->result_page_length= -xorriso->result_page_length; xorriso->result_page_length= -xorriso->result_page_length;
cpt= line; cpt= line;
if(*cpt=='@') { if(strcmp(cpt,"@@@")==0 ||
if(strcmp(cpt,"@@@")==0) { strcmp(cpt,"x")==0 || strcmp(cpt,"X")==0 ||
request_to_abort:; strcmp(cpt,"q")==0 || strcmp(cpt,"Q")==0) {
if(flag&1) { if(flag&1) {
strcpy(previous_line,cpt); strcpy(previous_line,cpt);
sprintf(xorriso->info_text,
"....... [%s = %s registered. Really %s ? (y/n) ] .......\n",
cpt,abort_req_text,abort_really_text);
Xorriso_info(xorriso,0);
ret= Xorriso_dialog_input(xorriso,line,sizeof(line),1);
if(ret<=0)
return(ret);
cpt= line;
if(strcmp(cpt,previous_line)==0 ||
((*cpt=='Y' || *cpt=='y' || *cpt=='j' || *cpt=='J' || *cpt=='1') &&
*(cpt+1)==0)) {
xorriso->request_to_abort= 1;
sprintf(xorriso->info_text,
"------- ( %s confirmed )\n",abort_req_text);
Xorriso_info(xorriso,0);
return(2);
}
sprintf(xorriso->info_text,
"....... ( %s revoked )\n",abort_req_text);
Xorriso_info(xorriso,0);
return(3);
}
xorriso->request_to_abort= 1;
sprintf(xorriso->info_text, sprintf(xorriso->info_text,
"----------- [%s = request to abort registered. Operation ends ] ------------\n", "....... [%s = %s registered. Really %s ? (y/n) ] .......\n",
cpt); cpt,abort_req_text,abort_really_text);
Xorriso_info(xorriso,0); Xorriso_info(xorriso,0);
return(2); ret= Xorriso_dialog_input(xorriso,line,sizeof(line),1);
} else if(strcmp(cpt,"@@")==0) { if(ret<=0)
return(ret);
cpt= line;
if(strcmp(cpt,previous_line)==0 ||
((*cpt=='Y' || *cpt=='y' || *cpt=='j' || *cpt=='J' || *cpt=='1') &&
*(cpt+1)==0)) {
xorriso->request_to_abort= 1;
sprintf(xorriso->info_text,
"------- ( %s confirmed )\n",abort_req_text);
Xorriso_info(xorriso,0);
return(2);
}
sprintf(xorriso->info_text, "....... ( %s revoked )\n",abort_req_text);
Xorriso_info(xorriso,0);
return(3);
}
xorriso->request_to_abort= 1;
sprintf(xorriso->info_text,
"----------- [%s = request to abort registered. Operation ends ] ------------\n",
cpt);
Xorriso_info(xorriso,0);
return(2);
} else if(*cpt=='@') {
if(strcmp(cpt,"@@")==0) {
goto klammer_affe; goto klammer_affe;
} else if(strcmp(cpt,"@")==0) { } else if(strcmp(cpt,"@")==0) {
@ -2061,9 +2061,6 @@ klammer_affe:;
} else if(strcmp(cpt,"r")==0 || strcmp(cpt,"R")==0 || } else if(strcmp(cpt,"r")==0 || strcmp(cpt,"R")==0 ||
strcmp(cpt,"y")==0 || strcmp(cpt,"Y")==0) { strcmp(cpt,"y")==0 || strcmp(cpt,"Y")==0) {
return(6); return(6);
} else if(strcmp(cpt,"x")==0 || strcmp(cpt,"X")==0 ||
strcmp(cpt,"q")==0 || strcmp(cpt,"Q")==0) {
goto request_to_abort;
} else { } else {
/* >>> unknown input */ /* >>> unknown input */
sprintf(xorriso->info_text, sprintf(xorriso->info_text,
@ -3870,15 +3867,15 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag)
" access time, modification time, both times.", " access time, modification time, both times.",
" -mkdir iso_rr_path [...]", " -mkdir iso_rr_path [...]",
" Create empty directories if they do not exist yet", " Create empty directories if they do not exist yet",
"> -rmdir iso_rr_path [...]", " -rmdir iso_rr_path [...]",
" Delete empty directories.", " Delete empty directories.",
" -- Mark end of particular action argument list.", " -- Mark end of particular action argument list.",
"", "",
"> -f Follow symbolic links within disk_path.", "> -f Follow symbolic links within disk_path.",
"", "",
"> -overwrite \"on\"|\"off\"", " -overwrite \"on\"|\"off\"",
" Allow or disallow to overwrite existing files in ISO image.", " Allow or disallow to overwrite existing files in ISO image.",
"> -reassure \"on\"|\"off\"", " -reassure \"on\"|\"off\"",
" If \"on\" then ask the user for \"y\" or \"n\" with any", " If \"on\" then ask the user for \"y\" or \"n\" with any",
" file before deleting or overwriting it in the ISO image.", " file before deleting or overwriting it in the ISO image.",
"", "",
@ -4605,8 +4602,8 @@ int Xorriso_option_report_about(struct XorrisO *xorriso, char *severity,
} }
/* Options -rm alias -rmi , and -rm_r aias -rm_ri */ /* Options -rm alias -rmi , -rm_r alias -rm_ri , -rmdir alias -rmdiri */
/* @param flag bit0=recursive */ /* @param flag bit0=recursive , bit2= remove empty directory: rmdir */
int Xorriso_option_rmi(struct XorrisO *xorriso, int argc, char **argv, int Xorriso_option_rmi(struct XorrisO *xorriso, int argc, char **argv,
int *idx, int flag) int *idx, int flag)
{ {
@ -4628,12 +4625,12 @@ int Xorriso_option_rmi(struct XorrisO *xorriso, int argc, char **argv,
return(ret); return(ret);
strcpy(path, eff_path); strcpy(path, eff_path);
ret= Xorriso_rmi(xorriso, NULL, path, flag&1); ret= Xorriso_rmi(xorriso, NULL, path, flag&(1|2));
if(ret<=0) if(ret<=0)
goto ex; goto ex;
if(ret<3) { if(ret<3) {
sprintf(xorriso->info_text, "Removed from ISO image: %s '%s'\n", sprintf(xorriso->info_text, "Removed from ISO image: %s '%s'\n",
(ret>1 ? "subtree" : "file"), path); ((flag&2) ? "directory" : (ret>1 ? "subtree" : "file")), path);
Xorriso_info(xorriso, 0); Xorriso_info(xorriso, 0);
} }
} }
@ -5158,7 +5155,7 @@ next_command:;
ret= Xorriso_option_rmi(xorriso, argc, argv, idx, 1); ret= Xorriso_option_rmi(xorriso, argc, argv, idx, 1);
} else if(strcmp(cmd,"-rmdir")==0 || strcmp(cmd,"-rmdiri")==0) { } else if(strcmp(cmd,"-rmdir")==0 || strcmp(cmd,"-rmdiri")==0) {
ret= Xorriso_option_rmdiri(xorriso, argc, argv, idx, 0); ret= Xorriso_option_rmi(xorriso, argc, argv, idx, 2);
} else if(strcmp(cmd,"-rollback")==0) { } else if(strcmp(cmd,"-rollback")==0) {
ret= Xorriso_option_rollback(xorriso, 0); ret= Xorriso_option_rollback(xorriso, 0);

View File

@ -286,15 +286,11 @@ int Xorriso_option_report_about(struct XorrisO *xorriso, char *severity,
/* Option -reassure "on"|"tree"|"off" */ /* Option -reassure "on"|"tree"|"off" */
int Xorriso_option_reassure(struct XorrisO *xorriso, char *mode, int flag); int Xorriso_option_reassure(struct XorrisO *xorriso, char *mode, int flag);
/* Options -rm alias -rmi , and -rm_r aias -rm_ri */ /* Options -rm alias -rmi , -rm_r alias -rm_ri , -rmdir alias -rmdiri */
/* @param flag bit0=recursive */ /* @param flag bit0=recursive , bit2= remove empty directory: rmdir */
int Xorriso_option_rmi(struct XorrisO *xorriso, int argc, char **argv, int Xorriso_option_rmi(struct XorrisO *xorriso, int argc, char **argv,
int *idx, int flag); int *idx, int flag);
/* Option -rmdir alias -rmdiri */
int Xorriso_option_rmdiri(struct XorrisO *xorriso, int argc, char **argv,
int *idx, int flag);
/* Option -rollback */ /* Option -rollback */
int Xorriso_option_rollback(struct XorrisO *xorriso, int flag); int Xorriso_option_rollback(struct XorrisO *xorriso, int flag);

View File

@ -1 +1 @@
#define Xorriso_timestamP "2007.11.07.123744" #define Xorriso_timestamP "2007.11.07.150157"

View File

@ -1422,7 +1422,14 @@ int Xorriso_rmi(struct XorrisO *xorriso, void *boss_iter,
if(LIBISO_ISDIR(victim_node)) if(LIBISO_ISDIR(victim_node))
is_dir= 1; is_dir= 1;
if(is_dir) { if(!is_dir) {
if(flag&2) { /* rmdir */
sprintf(xorriso->info_text, "%s in loaded ISO image is not a directory",
Text_shellsafe(path, sfe, 0));
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
ret= 0; goto ex;
}
} else {
if(flag&1) { /* rm -r */ if(flag&1) { /* rm -r */
if(xorriso->do_reassure==1 && !xorriso->request_not_to_ask) { if(xorriso->do_reassure==1 && !xorriso->request_not_to_ask) {
/* Iterate over subordinates and delete them */ /* Iterate over subordinates and delete them */
@ -1469,7 +1476,9 @@ int Xorriso_rmi(struct XorrisO *xorriso, void *boss_iter,
iter= iso_tree_node_children((struct iso_tree_node_dir *) victim_node); iter= iso_tree_node_children((struct iso_tree_node_dir *) victim_node);
Xorriso_process_msg_queues(xorriso,0); Xorriso_process_msg_queues(xorriso,0);
if(iso_tree_iter_next(iter)!=NULL) { if(iso_tree_iter_next(iter)!=NULL) {
sprintf(xorriso->info_text, "Directory not empty on attempt to delete"); sprintf(xorriso->info_text,
"Directory not empty on attempt to delete: %s",
Text_shellsafe(path, sfe, 0));
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
ret= 0; goto ex; ret= 0; goto ex;
} }