'Return the list of files at given C{path}, adding C{keys} stat
informations if specified.
@param path: the directory or file to check.
@type path: C{str}
@param keys: the list of desired metadata
@type keys: C{list} of C{str}'

def list(self, path, keys=()):

    filePath = self._path(path)
    if filePath.isdir():
        entries = filePath.listdir()
        fileEntries = [filePath.child(p) for p in entries]
    elif filePath.isfile():
        entries = [os.path.join(*filePath.segmentsFrom(self.filesystemRoot))]
        fileEntries = [filePath]
    else:
        return defer.fail(FileNotFoundError(path))
    results = []
    for (fileName, filePath) in zip(entries, fileEntries):
        ent = []
        results.append((fileName, ent))
        if keys:
            try:
                ent.extend(self._statNode(filePath, keys))
            except (IOError, OSError) as e:
                return errnoToFailure(e.errno, fileName)
            except:
                return defer.fail()
    return defer.succeed(results)
