Author: Armin Rigo <[email protected]>
Branch:
Changeset: r858:3dcb561d1819
Date: 2012-08-14 14:15 +0200
http://bitbucket.org/cffi/cffi/changeset/3dcb561d1819/
Log: Pass or skip the buffer tests on 3.2 too. The buffer interface is
*still* a complete mess on Python 3.
diff --git a/c/_cffi_backend.c b/c/_cffi_backend.c
--- a/c/_cffi_backend.c
+++ b/c/_cffi_backend.c
@@ -4033,7 +4033,7 @@
{
Py_buffer view;
if (PyBuffer_FillInfo(&view, NULL, cd->c_data, size,
- /*readonly=*/0, PyBUF_WRITABLE) < 0)
+ /*readonly=*/0, PyBUF_CONTIG | PyBUF_FORMAT) < 0)
return NULL;
return PyMemoryView_FromBuffer(&view);
}
diff --git a/cffi/backend_ctypes.py b/cffi/backend_ctypes.py
--- a/cffi/backend_ctypes.py
+++ b/cffi/backend_ctypes.py
@@ -965,10 +965,14 @@
_fields_ = [('stupid', type(val))]
ptr = ctypes.cast(buf, ctypes.POINTER(Hack))
view = memoryview(ptr.contents)
+ try:
+ view = view.cast('B')
+ except AttributeError:
+ raise NotImplementedError("buffer() with ctypes backend "
+ "in Python < 3.3")
if size >= 0:
- return view.cast('B')[:size]
- else:
- return view.cast('B')
+ view = view[:size]
+ return view
# haaaaaaaaaaaack
if '__pypy__' in sys.builtin_module_names:
diff --git a/testing/backend_tests.py b/testing/backend_tests.py
--- a/testing/backend_tests.py
+++ b/testing/backend_tests.py
@@ -9,6 +9,11 @@
SIZE_OF_PTR = ctypes.sizeof(ctypes.c_void_p)
SIZE_OF_WCHAR = ctypes.sizeof(ctypes.c_wchar)
+if sys.version_info < (3, 3):
+ bufitem = lambda x: x
+else:
+ bufitem = ord
+
class BackendTests:
@@ -1076,10 +1081,12 @@
assert len(content) == 2
if sys.byteorder == 'little':
assert content == b'\x64\x00'
- b[0] = b'\x65'[0]
+ assert b[0] == bufitem(b'\x64')
+ b[0] = bufitem(b'\x65')
else:
assert content == b'\x00\x64'
- b[1] = b'\x65'[0]
+ assert b[1] == bufitem(b'\x64')
+ b[1] = bufitem(b'\x65')
assert a[0] == 101
def test_ffi_buffer_array(self):
@@ -1097,10 +1104,10 @@
content = b.tobytes()
if sys.byteorder == 'little':
assert content.startswith(b'\x64\x00\x00\x00\x65\x00\x00\x00')
- b[4] = b'\x45'[0]
+ b[4] = bufitem(b'\x45')
else:
assert content.startswith('\x00\x00\x00\x64\x00\x00\x00\x65')
- b[7] = b'\x45'[0]
+ b[7] = bufitem(b'\x45')
assert len(content) == 4 * 10
assert a[1] == 0x45
@@ -1120,11 +1127,11 @@
assert len(content) == 1
if sys.byteorder == 'little':
assert content == b'\x43'
- b[0] = b'\x62'[0]
+ b[0] = bufitem(b'\x62')
assert a[0] == 0x4262
else:
assert content == b'\x42'
- b[0] = b'\x63'[0]
+ b[0] = bufitem(b'\x63')
assert a[0] == 0x6343
def test_ffi_buffer_array_size(self):
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit