Message224997
Here are things which support bytes instances only:
1. Constructor and setter of the "value" attribute of NUL terminated char
buffer.
>>> p = create_string_buffer(b"Hello")
>>> p.value
b'Hello'
>>> p.raw
b'Hello\x00'
>>> p.value = b'Bye'
>>> p.value
b'Bye'
>>> p.raw
b'Bye\x00o\x00'
>>> create_string_buffer(bytearray(b"Hello"))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/serhiy/py/cpython-3.4/Lib/ctypes/__init__.py", line 63, in
create_string_buffer
raise TypeError(init)
TypeError: bytearray(b'Hello')
>>> p.value = bytearray(b'Hi')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: bytes expected instead of bytearray instance
But setter of the "raw" attribute accepts arbitrary bytes-like objects.
>>> p.raw = bytearray(b'Hi')
>>> p.raw
b'Hie\x00o\x00'
The patch adds support of bytearray here. It would be not so easy to add
support for arbitrary bytes-like objects, and due to NUL-terminating it can be
confused. I even not sure that support of bytearray is needed here.
2. Constructor of NUL terminated wchar buffer (create_unicode_buffer). Actually
this doesn't work. Bytes argument is accepted, but then rejected in internal
setting function. This is a bug, bytes should be removed here.
3. c_wchar_p.from_param() accepts bytes argument, but then reject it in
internal function. This is a bug, bytes should be removed here.
4. c_void_p.from_param() accepts bytes and bytearray arguments, but then
reject bytearray in internal function. This is a bug, either bytearray should
be rejected here, or support of bytearray should be added in internal function
(very easy, the patch does this). Adding support of arbitrary bytes-like
objects is more complicated.
5. c_char_p.from_param() accepts bytes argument. Adding support for bytearray
or arbitrary bytes-like objects has same complexity as in
c_void_p.from_param().
6. Bytes arguments of call_function(), call_cdeclfunction() and
CopyComPointer() are implicitly converted to pointers. It is easy to add
support of bytearray, and more complicated for arbitrary bytes-like objects. |
|
Date |
User |
Action |
Args |
2014-08-07 08:33:52 | serhiy.storchaka | set | recipients:
+ serhiy.storchaka, theller, amaury.forgeotdarc, belopolsky, pitrou, mfxmfx, skrah, meador.inge, martin.panter |
2014-08-07 08:33:52 | serhiy.storchaka | link | issue10803 messages |
2014-08-07 08:33:50 | serhiy.storchaka | create | |
|