summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2009-04-19 12:43:25 +0200
committerYorhel <git@yorhel.nl>2009-04-19 12:43:25 +0200
commitd8058362ecfba4b23ad7ada81f3d6df8b2b42df7 (patch)
treee78dc2bf71e5598db1777e3e236c5bc0889234c6
parentba4d06e09e9b08f1dfc11cee827e09e723fa21f0 (diff)
Actually delete parents as well when deleting directories
-rw-r--r--src/delete.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/src/delete.c b/src/delete.c
index e19b7e2..cfdd086 100644
--- a/src/delete.c
+++ b/src/delete.c
@@ -184,7 +184,7 @@ int delete_key(int ch) {
}
-struct dir *delete_dir(struct dir *dr) {
+int delete_dir(struct dir *dr) {
struct dir *nxt, *cur;
int r;
char file[PATH_MAX];
@@ -196,8 +196,8 @@ struct dir *delete_dir(struct dir *dr) {
/* check for input or screen resizes */
strcpy(curfile, file);
- if(input_handle(1))
- return root;
+ if(input_handle(0))
+ return 1;
/* do the actual deleting */
if(dr->flags & FF_DIR) {
@@ -206,8 +206,8 @@ struct dir *delete_dir(struct dir *dr) {
while(nxt != NULL) {
cur = nxt;
nxt = cur->next;
- if(delete_dir(cur) == root)
- return root;
+ if(delete_dir(cur))
+ return 1;
}
}
r = rmdir(file);
@@ -220,14 +220,16 @@ struct dir *delete_dir(struct dir *dr) {
lasterrno = errno;
while(state == DS_FAILED)
if(input_handle(0))
- return root;
+ return 1;
}
- return freedir(dr);
+ freedir(dr);
+ return 0;
}
void delete_process() {
+ struct dir *n = root->parent;
/* confirm */
seloption = 1;
while(state == DS_CONFIRM && !noconfirm)
@@ -237,7 +239,10 @@ void delete_process() {
/* delete */
lastupdate = 999;
seloption = 0;
- return browse_init(delete_dir(root));
+ if(delete_dir(root))
+ browse_init(root);
+ else
+ browse_init(n);
}