MDL-12725 remove_dir() does not return correct status and fails if dir does not exist...
authorskodak <skodak>
Mon, 24 Dec 2007 21:16:30 +0000 (21:16 +0000)
committerskodak <skodak>
Mon, 24 Dec 2007 21:16:30 +0000 (21:16 +0000)
lib/moodlelib.php

index 8d7f4c9090a08f580f127a87df6f27925ebf61d7..f37873c70040ef80a7b0d0be4b5fa74baaf17c00 100644 (file)
@@ -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);
     }