diff options
Diffstat (limited to 'demo/bsdopendirtype.py')
-rw-r--r-- | demo/bsdopendirtype.py | 48 |
1 files changed, 0 insertions, 48 deletions
diff --git a/demo/bsdopendirtype.py b/demo/bsdopendirtype.py deleted file mode 100644 index 75a996a..0000000 --- a/demo/bsdopendirtype.py +++ /dev/null @@ -1,48 +0,0 @@ -from _bsdopendirtype import ffi, lib - - -def _posix_error(): - raise OSError(ffi.errno, os.strerror(ffi.errno)) - -_dtype_to_smode = { - lib.DT_BLK: 0o060000, - lib.DT_CHR: 0o020000, - lib.DT_DIR: 0o040000, - lib.DT_FIFO: 0o010000, - lib.DT_LNK: 0o120000, - lib.DT_REG: 0o100000, - lib.DT_SOCK: 0o140000, -} - -def opendir(dir): - if len(dir) == 0: - dir = b'.' - dirname = dir - if not dirname.endswith(b'/'): - dirname += b'/' - dirp = lib.opendir(dir) - if dirp == ffi.NULL: - raise _posix_error() - try: - while True: - ffi.errno = 0 - dirent = lib.readdir(dirp) - if dirent == ffi.NULL: - if ffi.errno != 0: - raise _posix_error() - return - name = ffi.string(dirent.d_name) - if name == b'.' or name == b'..': - continue - name = dirname + name - try: - smode = _dtype_to_smode[dirent.d_type] - except KeyError: - smode = os.lstat(name).st_mode - yield name, smode - finally: - lib.closedir(dirp) - -if __name__ == '__main__': - for name, smode in opendir(b'/tmp'): - print(hex(smode), name) |