From 852a25f0fb1f1c72b72f68b1f02504909f3f45d9 Mon Sep 17 00:00:00 2001 From: Florian Schaal <florian@schaal-24.de> Date: Wed, 12 Mar 2014 13:23:14 +0100 Subject: [PATCH] changed function check_free_space --- server/lib/classes/system.inc.php | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/server/lib/classes/system.inc.php b/server/lib/classes/system.inc.php index 65fa54baa5..adf7535b76 100644 --- a/server/lib/classes/system.inc.php +++ b/server/lib/classes/system.inc.php @@ -917,13 +917,11 @@ class system{ * This function checks the free space for a given directory * @param path check path * @param limit min. free space in bytes - * @return bool - true when the the free space is above limit ohterwise false + * @return bool - true when the the free space is above limit ohterwise false, opt. available disk-space */ - function check_free_space($path, $limit = 0) { + function check_free_space($path, $limit = 0, &$free_space = 0) { $path = rtrim($path, '/'); - $parts = explode('/', $path); - $out = ''; /** * Make sure that we have only existing directories in the path. @@ -931,19 +929,16 @@ class system{ * Given a file name instead of a directory, the behaviour of the disk_free_space function is unspecified and may differ between operating systems and PHP versions. */ - for ($i = 1; $i < count($parts); $i++) { - if ( !is_file($out.'/'.$parts[$i]) && is_dir($out.'/'.$parts[$i]) ) { - $out .= '/'.$parts[$i]; - } - } - - unset($parts); + while(!is_dir($path) && $path != '/') $path = realpath(dirname($path)); - $res = disk_free_space($out); + $free_space = disk_free_space($out); - if (!$res) return false; + if (!$free_space) { + $free_space = 0; + return false; + } - if ($res >= $limit) { + if ($free_space >= $limit) { return true; } else { return false; -- GitLab