]> git.e2factory.org Git - e2factory.git/commitdiff
e2lib: make unlink_recursive() work when pathname is not a directory
authorTobias Ulmer <tu@emlix.com>
Fri, 2 Sep 2016 12:43:16 +0000 (14:43 +0200)
committerTobias Ulmer <tu@emlix.com>
Wed, 16 Nov 2016 14:41:18 +0000 (15:41 +0100)
Signed-off-by: Tobias Ulmer <tu@emlix.com>
generic/e2lib.lua

index 389883a384752bbd897d2d44740d9374bce78f63..ad2c29bd0a5e2975a22a8e4eda646ff78377de93 100644 (file)
@@ -1838,41 +1838,53 @@ function e2lib.unlink(pathname)
 end
 
 --- Remove directories and files recursively.
--- @param pathname Directory to delete.
+-- @param pathname File or directory to delete.
 -- @return True on success, false on error.
 -- @return Error object on failure.
 function e2lib.unlink_recursive(pathname)
     local de, rc, re
     local filepath
 
-    for file, re in e2lib.directory(pathname, true) do
-        if not file then
-            return false, re
-        end
+    de, re = e2lib.stat(pathname, false) -- do not follow links
+    if not de then
+        return false, re
+    end
 
-        filepath = e2lib.join(pathname, file)
+    if de.type == "directory" then
+        for file, re in e2lib.directory(pathname, true) do
+            if not file then
+                return false, re
+            end
 
-        de, re = e2lib.stat(filepath, false) -- do not follow links
-        if not de then
-            return false, re
-        end
+            filepath = e2lib.join(pathname, file)
 
-        if de.type == "directory" then
-            rc, re = e2lib.unlink_recursive(filepath)
-            if not rc then
+            de, re = e2lib.stat(filepath, false) -- do not follow links
+            if not de then
                 return false, re
             end
-        else
-            rc, re = e2lib.unlink(filepath)
-            if not rc then
-                return false, re
+
+            if de.type == "directory" then
+                rc, re = e2lib.unlink_recursive(filepath)
+                if not rc then
+                    return false, re
+                end
+            else
+                rc, re = e2lib.unlink(filepath)
+                if not rc then
+                    return false, re
+                end
             end
         end
-    end
 
-    rc, re = e2lib.rmdir(pathname)
-    if not rc then
-        return false, re
+        rc, re = e2lib.rmdir(pathname)
+        if not rc then
+            return false, re
+        end
+    else
+        rc, re = e2lib.unlink(pathname)
+        if not rc then
+            return false, re
+        end
     end
 
     return true