From 63661c3cd46b482c0e5512cf7e9bc4d0d4aa6d7f Mon Sep 17 00:00:00 2001 From: Tobias Ulmer Date: Fri, 2 Sep 2016 14:43:16 +0200 Subject: [PATCH] e2lib: make unlink_recursive() work when pathname is not a directory Signed-off-by: Tobias Ulmer --- generic/e2lib.lua | 54 +++++++++++++++++++++++++++++------------------ 1 file changed, 33 insertions(+), 21 deletions(-) diff --git a/generic/e2lib.lua b/generic/e2lib.lua index 389883a..ad2c29b 100644 --- a/generic/e2lib.lua +++ b/generic/e2lib.lua @@ -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 -- 2.39.5