From 12b918b272a39a87886b91bfa1e40f704edcf8ac Mon Sep 17 00:00:00 2001 From: Mike Hiretsky Date: Tue, 1 Feb 2011 12:11:47 +0300 Subject: [PATCH] Fix listDirectory. --- pym/cl_utils.py | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/pym/cl_utils.py b/pym/cl_utils.py index db65b48..0593310 100644 --- a/pym/cl_utils.py +++ b/pym/cl_utils.py @@ -767,16 +767,26 @@ def getFilesCount(directory): os.walk(directory)),[])) return 0 -def listDirectory(directory): +def listDirectory(directory,findCycle=None): """Get files from directory, if it exists""" - if os.path.exists(directory) and \ - os.access(directory,os.R_OK) and \ - (stat.S_ISDIR(os.lstat(directory)[stat.ST_MODE]) or - (stat.S_ISLNK(os.lstat(directory)[stat.ST_MODE]) and - stat.S_ISDIR(os.lstat(os.readlink(directory))[stat.ST_MODE]))): - return os.listdir(directory) - else: - return [] + try: + if os.path.exists(directory) and \ + os.access(directory,os.R_OK) and \ + stat.S_ISDIR(os.lstat(directory)[stat.ST_MODE]): + return os.listdir(directory) + elif stat.S_ISLNK(os.lstat(directory)[stat.ST_MODE]): + realfile = os.path.join(os.path.dirname(directory), + os.readlink(directory)) + if not findCycle: + findCycle = [directory] + else: + if realfile in findCycle: + return [] + findCycle.append(directory) + return listDirectory(realfile,findCycle) + except OSError: + pass + return [] def detectDeviceForPartition(dev): """Detect parent device for partition by /sys/block (sysfs)"""