mirror of
https://github.com/python/cpython.git
synced 2025-10-26 16:27:06 +00:00
Ctypes currently produces wrong pep3118 type codes for several types.
E.g. memoryview(ctypes.c_long()).format gives "<l" on 64-bit platforms,
but it should be "<q" instead for sizeof(c_long) == 8
The problem is that the '<>' endian specification in the struct syntax
also turns on the "standard size" mode, which makes type characters have
a platform-independent meaning, which does not match with the codes used
internally in ctypes. The struct module format syntax also does not
allow specifying native-size non-native-endian items.
This commit adds a converter function that maps the internal ctypes
codes to appropriate struct module standard-size codes in the pep3118
format strings. The tests are modified to check for this.
(cherry picked from commit
|
||
|---|---|---|
| .. | ||
| macholib | ||
| test | ||
| __init__.py | ||
| _endian.py | ||
| util.py | ||
| wintypes.py | ||