Author: Armin Rigo <[email protected]>
Branch: cffi-1.0
Changeset: r2011:a2ac4d2335a6
Date: 2015-05-16 11:46 +0200
http://bitbucket.org/cffi/cffi/changeset/a2ac4d2335a6/

Log:    Modernize this dlopen() demo

diff --git a/demo/readdir.py b/demo/readdir.py
--- a/demo/readdir.py
+++ b/demo/readdir.py
@@ -1,49 +1,25 @@
 # A Linux-only demo
 #
 import sys
-from cffi import FFI
 
 if not sys.platform.startswith('linux'):
     raise Exception("Linux-only demo")
 
-
-ffi = FFI()
-ffi.cdef("""
-
-    typedef void DIR;
-    typedef long ino_t;
-    typedef long off_t;
-
-    struct dirent {
-        ino_t          d_ino;       /* inode number */
-        off_t          d_off;       /* offset to the next dirent */
-        unsigned short d_reclen;    /* length of this record */
-        unsigned char  d_type;      /* type of file; not supported
-                                       by all file system types */
-        char           d_name[256]; /* filename */
-    };
-
-    int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result);
-    int openat(int dirfd, const char *pathname, int flags);
-    DIR *fdopendir(int fd);
-    int closedir(DIR *dirp);
-
-""")
-ffi.C = ffi.dlopen(None)
-
+from _readdir import ffi
+lib = ffi.dlopen(None)
 
 
 def walk(basefd, path):
     print '{', path
-    dirfd = ffi.C.openat(basefd, path, 0)
+    dirfd = lib.openat(basefd, path, 0)
     if dirfd < 0:
         # error in openat()
         return
-    dir = ffi.C.fdopendir(dirfd)
+    dir = lib.fdopendir(dirfd)
     dirent = ffi.new("struct dirent *")
     result = ffi.new("struct dirent **")
     while True:
-        if ffi.C.readdir_r(dir, dirent, result):
+        if lib.readdir_r(dir, dirent, result):
             # error in readdir_r()
             break
         if result[0] == ffi.NULL:
@@ -52,7 +28,7 @@
         print '%3d %s' % (dirent.d_type, name)
         if dirent.d_type == 4 and name != '.' and name != '..':
             walk(dirfd, name)
-    ffi.C.closedir(dir)
+    lib.closedir(dir)
     print '}'
 
 
diff --git a/demo/readdir_build.py b/demo/readdir_build.py
new file mode 100644
--- /dev/null
+++ b/demo/readdir_build.py
@@ -0,0 +1,33 @@
+import sys
+from cffi import FFI
+
+if not sys.platform.startswith('linux'):
+    raise Exception("Linux-only demo")
+
+
+ffi = FFI()
+ffi.cdef("""
+
+    typedef void DIR;
+    typedef long ino_t;
+    typedef long off_t;
+
+    struct dirent {
+        ino_t          d_ino;       /* inode number */
+        off_t          d_off;       /* offset to the next dirent */
+        unsigned short d_reclen;    /* length of this record */
+        unsigned char  d_type;      /* type of file; not supported
+                                       by all file system types */
+        char           d_name[256]; /* filename */
+    };
+
+    int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result);
+    int openat(int dirfd, const char *pathname, int flags);
+    DIR *fdopendir(int fd);
+    int closedir(DIR *dirp);
+
+""")
+ffi.set_source("_readdir", None)
+
+if __name__ == '__main__':
+    ffi.compile()
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to