Author: Armin Rigo <[email protected]>
Branch: cffi-1.0
Changeset: r1768:4954444df617
Date: 2015-04-18 19:27 +0200
http://bitbucket.org/cffi/cffi/changeset/4954444df617/
Log: Add/remove files
diff --git a/new/bsdopendirtype.py b/new/bsdopendirtype.py
new file mode 100644
--- /dev/null
+++ b/new/bsdopendirtype.py
@@ -0,0 +1,48 @@
+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 = '.'
+ dirname = dir
+ if not dirname.endswith('/'):
+ dirname += '/'
+ 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 == '.' or name == '..':
+ 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('/tmp'):
+ print hex(smode), name
diff --git a/new/bsdopendirtype_build.py b/new/bsdopendirtype_build.py
new file mode 100644
--- /dev/null
+++ b/new/bsdopendirtype_build.py
@@ -0,0 +1,21 @@
+from cffi1 import FFI
+import recompiler
+
+ffi = FFI()
+ffi.cdef("""
+ typedef ... DIR;
+ struct dirent {
+ unsigned char d_type; /* type of file */
+ char d_name[]; /* filename */
+ ...;
+ };
+ DIR *opendir(const char *name);
+ int closedir(DIR *dirp);
+ struct dirent *readdir(DIR *dirp);
+ static const int DT_BLK, DT_CHR, DT_DIR, DT_FIFO, DT_LNK, DT_REG, DT_SOCK;
+""")
+
+recompiler.recompile(ffi, "_bsdopendirtype", """
+ #include <sys/types.h>
+ #include <dirent.h>
+""")
diff --git a/new/udir.py b/new/udir.py
deleted file mode 100644
--- a/new/udir.py
+++ /dev/null
@@ -1,3 +0,0 @@
-import py
-
-udir = py.path.local.make_numbered_dir(prefix = 'ffi-')
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit