[pypy-svn] r78769 - in pypy/branch/fast-forward: lib_pypy/_ctypes pypy/module/_rawffi
afa at codespeak.net
afa at codespeak.net
Fri Nov 5 22:06:10 CET 2010
Author: afa
Date: Fri Nov 5 22:06:08 2010
New Revision: 78769
Modified:
pypy/branch/fast-forward/lib_pypy/_ctypes/builtin.py
pypy/branch/fast-forward/lib_pypy/_ctypes/primitive.py
pypy/branch/fast-forward/pypy/module/_rawffi/__init__.py
pypy/branch/fast-forward/pypy/module/_rawffi/interp_rawffi.py
Log:
implement _rawffi.wcharp2rawunicode() and use it in _ctypes
Modified: pypy/branch/fast-forward/lib_pypy/_ctypes/builtin.py
==============================================================================
--- pypy/branch/fast-forward/lib_pypy/_ctypes/builtin.py (original)
+++ pypy/branch/fast-forward/lib_pypy/_ctypes/builtin.py Fri Nov 5 22:06:08 2010
@@ -23,13 +23,4 @@
def _wstring_at_addr(addr, lgt):
import ctypes
arg = ctypes.c_void_p._CData_value(addr)
- # XXX purely applevel
- if lgt == -1:
- lgt = sys.maxint
- a = _rawffi.Array('u').fromaddress(arg, lgt)
- res = []
- for i in xrange(lgt):
- if lgt == sys.maxint and a[i] == '\x00':
- break
- res.append(a[i])
- return u''.join(res)
+ return _rawffi.wcharp2rawunicode(arg, lgt)
Modified: pypy/branch/fast-forward/lib_pypy/_ctypes/primitive.py
==============================================================================
--- pypy/branch/fast-forward/lib_pypy/_ctypes/primitive.py (original)
+++ pypy/branch/fast-forward/lib_pypy/_ctypes/primitive.py Fri Nov 5 22:06:08 2010
@@ -142,13 +142,12 @@
result.value = property(_getvalue, _setvalue)
elif tp == 'Z':
# c_wchar_p
- from _ctypes import _wstring_at_addr
def _getvalue(self):
addr = self._buffer[0]
if addr == 0:
return None
else:
- return _wstring_at_addr(addr, -1)
+ return _rawffi.wcharp2unicode(addr)
def _setvalue(self, value):
if isinstance(value, basestring):
@@ -217,14 +216,13 @@
SysAllocStringLen = windll.oleaut32.SysAllocStringLen
SysStringLen = windll.oleaut32.SysStringLen
SysFreeString = windll.oleaut32.SysFreeString
- from _ctypes import _wstring_at_addr
def _getvalue(self):
addr = self._buffer[0]
if addr == 0:
return None
else:
size = SysStringLen(addr)
- return _wstring_at_addr(addr, size)
+ return _rawffi.wcharp2rawunicode(addr, size)
def _setvalue(self, value):
if isinstance(value, basestring):
Modified: pypy/branch/fast-forward/pypy/module/_rawffi/__init__.py
==============================================================================
--- pypy/branch/fast-forward/pypy/module/_rawffi/__init__.py (original)
+++ pypy/branch/fast-forward/pypy/module/_rawffi/__init__.py Fri Nov 5 22:06:08 2010
@@ -24,6 +24,7 @@
'charp2string' : 'interp_rawffi.charp2string',
'wcharp2unicode' : 'interp_rawffi.wcharp2unicode',
'charp2rawstring' : 'interp_rawffi.charp2rawstring',
+ 'wcharp2rawunicode' : 'interp_rawffi.wcharp2rawunicode',
'CallbackPtr' : 'callback.W_CallbackPtr',
'_num_of_allocated_objects' : 'tracker.num_of_allocated_objects',
'get_libc' : 'interp_rawffi.get_libc',
Modified: pypy/branch/fast-forward/pypy/module/_rawffi/interp_rawffi.py
==============================================================================
--- pypy/branch/fast-forward/pypy/module/_rawffi/interp_rawffi.py (original)
+++ pypy/branch/fast-forward/pypy/module/_rawffi/interp_rawffi.py Fri Nov 5 22:06:08 2010
@@ -501,6 +501,13 @@
return space.wrap(s)
charp2rawstring.unwrap_spec = [ObjSpace, r_uint, int]
+def wcharp2rawunicode(space, address, maxlength=-1):
+ if maxlength == -1:
+ return wcharp2unicode(space, address)
+ s = rffi.wcharpsize2unicode(rffi.cast(rffi.CCHARP, address), maxlength)
+ return space.wrap(s)
+charp2rawstring.unwrap_spec = [ObjSpace, r_uint, int]
+
if _MS_WINDOWS:
def FormatError(space, code):
return space.wrap(rwin32.FormatError(code))
More information about the Pypy-commit
mailing list