[pypy-svn] r50864 - in pypy/dist/pypy/module/_rawffi: . test

fijal at codespeak.net fijal at codespeak.net
Tue Jan 22 12:01:25 CET 2008


Author: fijal
Date: Tue Jan 22 12:01:25 2008
New Revision: 50864

Modified:
   pypy/dist/pypy/module/_rawffi/__init__.py
   pypy/dist/pypy/module/_rawffi/interp_rawffi.py
   pypy/dist/pypy/module/_rawffi/test/test__rawffi.py
Log:
A bit more friendly routine for ctypes (adheres to ctypes insanity)


Modified: pypy/dist/pypy/module/_rawffi/__init__.py
==============================================================================
--- pypy/dist/pypy/module/_rawffi/__init__.py	(original)
+++ pypy/dist/pypy/module/_rawffi/__init__.py	Tue Jan 22 12:01:25 2008
@@ -19,6 +19,7 @@
         'sizeof'             : 'interp_rawffi.sizeof',
         'alignment'          : 'interp_rawffi.alignment',
         'charp2string'       : 'interp_rawffi.charp2string',
+        'charp2rawstring'    : 'interp_rawffi.charp2rawstring',
         'CallbackPtr'        : 'callback.W_CallbackPtr',
     }
 

Modified: pypy/dist/pypy/module/_rawffi/interp_rawffi.py
==============================================================================
--- pypy/dist/pypy/module/_rawffi/interp_rawffi.py	(original)
+++ pypy/dist/pypy/module/_rawffi/interp_rawffi.py	Tue Jan 22 12:01:25 2008
@@ -334,3 +334,10 @@
     s = rffi.charp2strn(rffi.cast(rffi.CCHARP, address), maxlength)
     return space.wrap(s)
 charp2string.unwrap_spec = [ObjSpace, r_uint, int]
+
+def charp2rawstring(space, address, maxlength=-1):
+    if maxlength == -1:
+        return charp2string(space, address)
+    s = rffi.charpsize2str(rffi.cast(rffi.CCHARP, address), maxlength)
+    return space.wrap(s)
+charp2rawstring.unwrap_spec = [ObjSpace, r_uint, int]

Modified: pypy/dist/pypy/module/_rawffi/test/test__rawffi.py
==============================================================================
--- pypy/dist/pypy/module/_rawffi/test/test__rawffi.py	(original)
+++ pypy/dist/pypy/module/_rawffi/test/test__rawffi.py	Tue Jan 22 12:01:25 2008
@@ -162,6 +162,11 @@
         arg2[0] = 'x'
         res = char_check(arg1, arg2)
         assert _rawffi.charp2string(res[0]) == 'xxxxxx'
+        assert _rawffi.charp2rawstring(res[0]) == 'xxxxxx'
+        assert _rawffi.charp2rawstring(res[0], 3) == 'xxx'
+        a = A(6, 'xx\x00\x00xx')
+        assert _rawffi.charp2string(a.buffer) == 'xx'
+        assert _rawffi.charp2rawstring(a.buffer, 4) == 'xx\x00\x00'
         res.free()
         arg1[0] = 'x'
         arg2[0] = 'y'



More information about the Pypy-commit mailing list