Author: Richard Plangger <[email protected]>
Branch: strbuf-as-buffer
Changeset: r89261:530e24e0fbd0
Date: 2016-12-29 13:04 +0100
http://bitbucket.org/pypy/pypy/changeset/530e24e0fbd0/
Log: expose a function to check if a W_Buffer is readonly or not (ctypes
from_buffer functions needs to check that)
diff --git a/lib_pypy/_ctypes/basics.py b/lib_pypy/_ctypes/basics.py
--- a/lib_pypy/_ctypes/basics.py
+++ b/lib_pypy/_ctypes/basics.py
@@ -85,8 +85,8 @@
def from_buffer(self, obj, offset=0):
size = self._sizeofinstances()
- buf = memoryview(obj)[offset:]
- if buf.readonly:
+ buf = buffer(obj, offset, size)
+ if buf._pypy_is_readonly():
raise TypeError("Cannot use %s as modifiable buffer" %
str(type(obj)))
if len(buf) < size:
raise ValueError(
diff --git a/pypy/objspace/std/bufferobject.py
b/pypy/objspace/std/bufferobject.py
--- a/pypy/objspace/std/bufferobject.py
+++ b/pypy/objspace/std/bufferobject.py
@@ -138,6 +138,11 @@
raise OperationError(space.w_ValueError, space.wrap(msg))
return space.wrap(rffi.cast(lltype.Signed, ptr))
+ def descr_is_readonly(self, space):
+ """ Needed in ctypes (from_buffer), CPython can check if a
+ buffer can be readonly (has a C Function/Macro for that) """
+ return space.newbool(bool(self.buf.readonly))
+
W_Buffer.typedef = TypeDef(
"buffer", None, None, "read-write",
__doc__ = """\
@@ -166,5 +171,6 @@
__repr__ = interp2app(W_Buffer.descr_repr),
__buffer__ = interp2app(W_Buffer.descr_getbuffer),
_pypy_raw_address = interp2app(W_Buffer.descr_pypy_raw_address),
+ _pypy_is_readonly = interp2app(W_Buffer.descr_is_readonly),
)
W_Buffer.typedef.acceptable_as_base_class = False
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit