re-work findDirs()-function

Signed-off-by: Michael Kaufmann (d00p) <d00p@froxlor.org>
This commit is contained in:
Michael Kaufmann (d00p)
2014-12-16 15:14:57 +01:00
parent cd5e8801e4
commit 1e5f80ace6

View File

@@ -21,70 +21,33 @@
* Returns an array of found directories * Returns an array of found directories
* *
* This function checks every found directory if they match either $uid or $gid, if they do * This function checks every found directory if they match either $uid or $gid, if they do
* the found directory is valid. It uses recursive function calls to find subdirectories. Due * the found directory is valid. It uses recursive-iterators to find subdirectories.
* to the recursive behauviour this function may consume much memory. *
* @param string $path the path to start searching in
* @param int $uid the uid which must match the found directories
* @param int $gid the gid which must match the found direcotries
* *
* @param string path The path to start searching in
* @param integer uid The uid which must match the found directories
* @param integer gid The gid which must match the found direcotries
* @param array _fileList recursive transport array !for internal use only!
* @return array Array of found valid pathes * @return array Array of found valid pathes
*
* @author Martin Burchert <martin.burchert@syscp.de>
* @author Manuel Bernhardt <manuel.bernhardt@syscp.de>
*/ */
function findDirs($path, $uid, $gid) {
function findDirs($path, $uid, $gid)
{
$list = array(
$path
);
$_fileList = array (); $_fileList = array ();
while(sizeof($list) > 0)
{
$path = array_pop($list);
$path = makeCorrectDir($path); $path = makeCorrectDir($path);
if(!is_readable($path) || !is_executable($path)) // valid directory?
{ if (is_dir($path)) {
//return $_fileList; // create RecursiveIteratorIterator
// only 'skip' this directory, #611 $its = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path));
continue;
}
$dh = opendir($path); // check every file
foreach ($its as $fullFileName => $it) {
if($dh === false) if ($it->isDir()
{ && (fileowner($fullFileName) == $uid || filegroup($fullFileName) == $gid)
/* ) {
* this should never be called because we checked $_fileList[] = makeCorrectDir(dirname($fullFileName));
* 'is_readable' before...but we never know what might happen
*/
standard_error('cannotreaddir', $path);
return null;
} }
else
{
while(false !== ($file = @readdir($dh)))
{
if($file == '.'
&& (fileowner($path . '/' . $file) == $uid || filegroup($path . '/' . $file) == $gid))
{
$_fileList[] = makeCorrectDir($path);
}
if(is_dir($path . '/' . $file)
&& $file != '..'
&& $file != '.')
{
array_push($list, $path . '/' . $file);
} }
} }
@closedir($dh); return array_unique($_fileList);
}
}
return $_fileList;
} }