Author: Armin Rigo <[email protected]>
Branch:
Changeset: r68656:55aed8609dfd
Date: 2014-01-14 08:21 +0100
http://bitbucket.org/pypy/pypy/changeset/55aed8609dfd/
Log: Add rawstring2charp.
diff --git a/pypy/module/_rawffi/__init__.py b/pypy/module/_rawffi/__init__.py
--- a/pypy/module/_rawffi/__init__.py
+++ b/pypy/module/_rawffi/__init__.py
@@ -19,6 +19,7 @@
'wcharp2unicode' : 'interp_rawffi.wcharp2unicode',
'charp2rawstring' : 'interp_rawffi.charp2rawstring',
'wcharp2rawunicode' : 'interp_rawffi.wcharp2rawunicode',
+ 'rawstring2charp' : 'interp_rawffi.rawstring2charp',
'CallbackPtr' : 'callback.W_CallbackPtr',
'_num_of_allocated_objects' : 'tracker.num_of_allocated_objects',
'get_libc' : 'interp_rawffi.get_libc',
diff --git a/pypy/module/_rawffi/interp_rawffi.py
b/pypy/module/_rawffi/interp_rawffi.py
--- a/pypy/module/_rawffi/interp_rawffi.py
+++ b/pypy/module/_rawffi/interp_rawffi.py
@@ -579,6 +579,13 @@
s = rffi.wcharpsize2unicode(rffi.cast(rffi.CWCHARP, address), maxlength)
return space.wrap(s)
+@unwrap_spec(address=r_uint, newcontent=str)
+def rawstring2charp(space, address, newcontent):
+ from rpython.rtyper.annlowlevel import llstr
+ from rpython.rtyper.lltypesystem.rstr import copy_string_to_raw
+ array = rffi.cast(rffi.CCHARP, address)
+ copy_string_to_raw(llstr(newcontent), array, 0, len(newcontent))
+
if _MS_WINDOWS:
@unwrap_spec(code=int)
def FormatError(space, code):
diff --git a/pypy/module/_rawffi/test/test__rawffi.py
b/pypy/module/_rawffi/test/test__rawffi.py
--- a/pypy/module/_rawffi/test/test__rawffi.py
+++ b/pypy/module/_rawffi/test/test__rawffi.py
@@ -323,6 +323,14 @@
assert res == u'xx'
a.free()
+ def test_rawstring2charp(self):
+ import _rawffi
+ A = _rawffi.Array('c')
+ a = A(10, 'x'*10)
+ _rawffi.rawstring2charp(a.buffer, "foobar")
+ assert ''.join([a[i] for i in range(10)]) == "foobarxxxx"
+ a.free()
+
def test_raw_callable(self):
import _rawffi
lib = _rawffi.CDLL(self.lib_name)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit