summaryrefslogtreecommitdiff
path: root/demo/bsdopendirtype.py
diff options
context:
space:
mode:
Diffstat (limited to 'demo/bsdopendirtype.py')
-rw-r--r--demo/bsdopendirtype.py48
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)