os: Use uos.ilistdir() if available.

pull/65/merge
Paul Sokolovsky 2015-12-20 00:44:13 +02:00
rodzic 217bb5fd33
commit 69ab21b6fc
1 zmienionych plików z 18 dodań i 15 usunięć

Wyświetl plik

@ -106,21 +106,24 @@ def makedirs(name, mode=0o777, exist_ok=False):
if e.args[0] != errno_.EEXIST: if e.args[0] != errno_.EEXIST:
raise raise
def ilistdir(path="."): if hasattr(uos, "ilistdir"):
dir = opendir_(path) ilistdir = uos.ilistdir
if not dir: else:
raise_error() def ilistdir(path="."):
res = [] dir = opendir_(path)
dirent_fmt = "LLHB256s" if not dir:
while True: raise_error()
dirent = readdir_(dir) res = []
if not dirent: dirent_fmt = "LLHB256s"
break while True:
import uctypes dirent = readdir_(dir)
dirent = uctypes.bytes_at(dirent, struct.calcsize(dirent_fmt)) if not dirent:
dirent = struct.unpack(dirent_fmt, dirent) break
dirent = (dirent[-1].split(b'\0', 1)[0], dirent[-2], dirent[0]) import uctypes
yield dirent dirent = uctypes.bytes_at(dirent, struct.calcsize(dirent_fmt))
dirent = struct.unpack(dirent_fmt, dirent)
dirent = (dirent[-1].split(b'\0', 1)[0], dirent[-2], dirent[0])
yield dirent
def listdir(path="."): def listdir(path="."):
is_str = type(path) is not bytes is_str = type(path) is not bytes