diff --git a/src/delete.c b/src/delete.c
index 6ffe922c32d4addb50a27347c77ac1b68e3fc0b4..a5b5b2dde58f488b67f54e250b3bc60e2ddee706 100644
--- a/src/delete.c
+++ b/src/delete.c
@@ -185,7 +185,7 @@ int delete_dir(struct dir *dr) {
     }
     if((r = chdir("..")) < 0)
       goto delete_nxt;
-    r = rmdir(dr->name);
+    r = dr->sub == NULL ? rmdir(dr->name) : 0;
   } else
     r = unlink(dr->name);
 
@@ -198,11 +198,11 @@ delete_nxt:
     while(state == DS_FAILED)
       if(input_handle(0))
         return 1;
-  } else
+  } else if(!(dr->flags & FF_DIR && dr->sub != NULL)) {
     freedir(dr);
-  if(r == -1 && root == dr)
-    return 1;
-  return 0;
+    return 0;
+  }
+  return root == dr ? 1 : 0;
 }