[pypy-svn] r50867 - pypy/dist/pypy/lib/_ctypes

fijal at codespeak.net fijal at codespeak.net
Tue Jan 22 12:52:00 CET 2008


Author: fijal
Date: Tue Jan 22 12:52:00 2008
New Revision: 50867

Added:
   pypy/dist/pypy/lib/_ctypes/builtin.py   (contents, props changed)
Modified:
   pypy/dist/pypy/lib/_ctypes/__init__.py
   pypy/dist/pypy/lib/_ctypes/dummy.py
   pypy/dist/pypy/lib/_ctypes/function.py
Log:
Support for some builtin functions.


Modified: pypy/dist/pypy/lib/_ctypes/__init__.py
==============================================================================
--- pypy/dist/pypy/lib/_ctypes/__init__.py	(original)
+++ pypy/dist/pypy/lib/_ctypes/__init__.py	Tue Jan 22 12:52:00 2008
@@ -1,7 +1,5 @@
 from _ctypes.dummy import Union
 from _ctypes.dummy import resize
-from _ctypes.dummy import _memmove_addr, _memset_addr, _string_at_addr
-
 from _ctypes.basics import _CData, sizeof, alignment, byref, addressof,\
      ArgumentError
 from _ctypes.primitive import _SimpleCData
@@ -10,6 +8,7 @@
 from _ctypes.dll import dlopen
 from _ctypes.structure import Structure
 from _ctypes.array import Array
+from _ctypes.builtin import _memmove_addr, _string_at_addr, _memset_addr
 
 __version__ = '1.0.2'
 #XXX platform dependant?

Added: pypy/dist/pypy/lib/_ctypes/builtin.py
==============================================================================
--- (empty file)
+++ pypy/dist/pypy/lib/_ctypes/builtin.py	Tue Jan 22 12:52:00 2008
@@ -0,0 +1,12 @@
+
+import _rawffi, sys
+
+_memmove_addr = ('memmove', 'libc.so.6')
+_memset_addr = ('memset', 'libc.so.6')
+
+def _string_at_addr(addr, lgt):
+    # address here can be almost anything
+    import ctypes
+    obj = ctypes.c_char_p._CData_input(addr)[0]
+    return _rawffi.charp2rawstring(obj, lgt)
+

Modified: pypy/dist/pypy/lib/_ctypes/dummy.py
==============================================================================
--- pypy/dist/pypy/lib/_ctypes/dummy.py	(original)
+++ pypy/dist/pypy/lib/_ctypes/dummy.py	Tue Jan 22 12:52:00 2008
@@ -8,5 +8,4 @@
     EXPLODE
 
 resize = dummyfunc
-_memset_addr = dummyfunc
 

Modified: pypy/dist/pypy/lib/_ctypes/function.py
==============================================================================
--- pypy/dist/pypy/lib/_ctypes/function.py	(original)
+++ pypy/dist/pypy/lib/_ctypes/function.py	Tue Jan 22 12:52:00 2008
@@ -29,9 +29,12 @@
     def _getrestype(self):
         return self._restype_
     def _setrestype(self, restype):
+        if restype is int:
+            from ctypes import c_int
+            restype = c_int
         if not isinstance(restype, _CDataMeta) and not restype is None:
             raise TypeError("Expected ctypes type, got %s" % (restype,))
-        self._restype_ = restype    
+        self._restype_ = restype
     restype = property(_getrestype, _setrestype)    
 
     def __init__(self, argument=None):
@@ -49,6 +52,8 @@
         elif isinstance(argument, tuple) and len(argument) == 2:
             import ctypes
             self.name, self.dll = argument
+            if isinstance(self.dll, str):
+                self.dll = ctypes.CDLL(self.dll)
             # we need to check dll anyway
             self._getfuncptr([], ctypes.c_int)
         elif argument is None:



More information about the Pypy-commit mailing list