From 4ef8e74c53ae61d5645df8caf41f5227d58334ed Mon Sep 17 00:00:00 2001 From: skodak Date: Mon, 24 Dec 2007 21:16:30 +0000 Subject: [PATCH] MDL-12725 remove_dir() does not return correct status and fails if dir does not exist + improved sanity test in check_dir_exists(); merged from MOODLE_19_STABLE --- lib/moodlelib.php | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/lib/moodlelib.php b/lib/moodlelib.php index 8d7f4c9090..f37873c700 100644 --- a/lib/moodlelib.php +++ b/lib/moodlelib.php @@ -7491,25 +7491,33 @@ function apd_get_profiling() { return shell_exec('pprofp -u ' . ini_get('apd.dumpdir') . '/pprof.' . getmypid() . '.*'); } +/** + * Delete directory or only it's content + * @param string $dir directory path + * @param bool $content_only + * @return bool success, true also if dir does not exist + */ function remove_dir($dir, $content_only=false) { - // if content_only=true then delete all but - // the directory itself - + if (!file_exists($dir)) { + // nothing to do + return true; + } $handle = opendir($dir); + $result = true; while (false!==($item = readdir($handle))) { if($item != '.' && $item != '..') { if(is_dir($dir.'/'.$item)) { - remove_dir($dir.'/'.$item); + $result = remove_dir($dir.'/'.$item) && $result; }else{ - unlink($dir.'/'.$item); + $result = unlink($dir.'/'.$item) && $result; } } } closedir($handle); if ($content_only) { - return true; + return $result; } - return rmdir($dir); + return rmdir($dir); // if anything left the result will be false, noo need for && $result } /** @@ -7525,7 +7533,7 @@ function check_dir_exists($dir, $create=false, $recursive=false) { global $CFG; - if (strstr($dir, $CFG->dataroot) === false) { + if (strstr($dir, $CFG->dataroot.'/') === false) { debugging('Warning. Wrong call to check_dir_exists(). $dir must be an absolute path under $CFG->dataroot ("' . $dir . '" is incorrect)', DEBUG_DEVELOPER); } -- 2.39.5