From fb65286863a3de6b7730966a74d885e0990c6561 Mon Sep 17 00:00:00 2001 From: Diftraku Date: Sun, 6 Mar 2011 03:17:40 +0200 Subject: [PATCH] Critical change to deltree, it seems Windows version of PHP does not consider symlinks to be links when checked with is_link(). --- core/util.inc.php | 39 +++++++++++++++++++++++++++------------ 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/core/util.inc.php b/core/util.inc.php index 8803ecf9..471af9bf 100644 --- a/core/util.inc.php +++ b/core/util.inc.php @@ -611,24 +611,39 @@ function ip_in_range($IP, $CIDR) { * "extension manager" extension, but it seems to fit better here */ function deltree($f) { - if (is_link($f)) { - //Because Windows (I know, bad excuse) - if (PHP_OS === 'WINNT') { + //Because Windows (I know, bad excuse) + if (PHP_OS === 'WINNT') { + $real = realpath($f); + $path = realpath('./').'\\'.str_replace('/', '\\', $f); + if ($path != $real) { + rmdir($path); + } + else + { + foreach(glob($f.'/*') as $sf) { + if (is_dir($sf) && !is_link($sf)) { + deltree($sf); + } else { + unlink($sf); + } + } rmdir($f); } - else { + } + else { + if (is_link($f)) { unlink($f); } - } - else if(is_dir($f)) { - foreach(glob($f.'/*') as $sf) { - if (is_dir($sf) && !is_link($sf)) { - deltree($sf); - } else { - unlink($sf); + else if(is_dir($f)) { + foreach(glob($f.'/*') as $sf) { + if (is_dir($sf) && !is_link($sf)) { + deltree($sf); + } else { + unlink($sf); + } } + rmdir($f); } - rmdir($f); } }