From 9cc79b0fab0b4301801387abb57fc52b03f88228 Mon Sep 17 00:00:00 2001
From: Yorhel <git@yorhel.nl>
Date: Sun, 26 Apr 2009 12:58:22 +0200
Subject: [PATCH] Properly call calc_leavepath() on error

---
 src/calc.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/calc.c b/src/calc.c
index 87e426d..e54eb01 100644
--- a/src/calc.c
+++ b/src/calc.c
@@ -169,6 +169,7 @@ int calc_dir(struct dir *dest, char *name) {
     t = dest;
     while((t = t->parent) != NULL)
       t->flags |= FF_SERR;
+    calc_leavepath();
     return 0;
   }
 
@@ -177,8 +178,10 @@ int calc_dir(struct dir *dest, char *name) {
     calc_enterpath(dr->d_name);
     if(calc_item(dest, dr->d_name))
       dest->flags |= FF_ERR;
-    if(input_handle(1))
+    if(input_handle(1)) {
+      calc_leavepath();
       return 1;
+    }
     calc_leavepath();
     errno = 0;
   }
@@ -203,13 +206,16 @@ int calc_dir(struct dir *dest, char *name) {
   ch = 0;
   for(t=dest->sub; t!=NULL; t=t->next)
     if(t->flags & FF_DIR && !(t->flags & FF_EXL || t->flags & FF_OTHFS))
-      if(calc_dir(t, t->name))
+      if(calc_dir(t, t->name)) {
+        calc_leavepath();
         return 1;
+      }
 
   /* chdir back */
   if(chdir("..") < 0) {
     failed = 1;
     strcpy(errmsg, "Couldn't chdir to previous directory");
+    calc_leavepath();
     return 1;
   }
   calc_leavepath();
-- 
GitLab