Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
cpython
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
Batuhan Osman TASKAYA
cpython
Commits
bf547fd3
Kaydet (Commit)
bf547fd3
authored
Tem 13, 2011
tarafından
Victor Stinner
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
Close #4376: ctypes now supports nested structures in a endian different than
the parent structure. Patch by Vlad Riscutia.
üst
fbe84d92
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
40 additions
and
18 deletions
+40
-18
_endian.py
Lib/ctypes/_endian.py
+10
-6
test_byteswap.py
Lib/ctypes/test/test_byteswap.py
+26
-12
ACKS
Misc/ACKS
+1
-0
NEWS
Misc/NEWS
+3
-0
No files found.
Lib/ctypes/_endian.py
Dosyayı görüntüle @
bf547fd3
...
...
@@ -10,14 +10,18 @@ def _other_endian(typ):
"""Return the type with the 'other' byte order. Simple types like
c_int and so on already have __ctype_be__ and __ctype_le__
attributes which contain the types, for more complicated types
only array
s are supported.
arrays and structure
s are supported.
"""
try
:
# check _OTHER_ENDIAN attribute (present if typ is primitive type)
if
hasattr
(
typ
,
_OTHER_ENDIAN
):
return
getattr
(
typ
,
_OTHER_ENDIAN
)
except
AttributeError
:
if
type
(
typ
)
==
_array_type
:
return
_other_endian
(
typ
.
_type_
)
*
typ
.
_length_
raise
TypeError
(
"This type does not support other endian:
%
s"
%
typ
)
# if typ is array
if
isinstance
(
typ
,
_array_type
):
return
_other_endian
(
typ
.
_type_
)
*
typ
.
_length_
# if typ is structure
if
issubclass
(
typ
,
Structure
):
return
typ
raise
TypeError
(
"This type does not support other endian:
%
s"
%
typ
)
class
_swapped_meta
(
type
(
Structure
)):
def
__setattr__
(
self
,
attrname
,
value
):
...
...
Lib/ctypes/test/test_byteswap.py
Dosyayı görüntüle @
bf547fd3
...
...
@@ -185,18 +185,32 @@ class Test(unittest.TestCase):
self
.
assertRaises
(
TypeError
,
setattr
,
T
,
"_fields_"
,
[(
"x"
,
typ
)])
def
test_struct_struct
(
self
):
# Nested structures with different byte order not (yet) supported
if
sys
.
byteorder
==
"little"
:
base
=
BigEndianStructure
else
:
base
=
LittleEndianStructure
class
T
(
Structure
):
_fields_
=
[(
"a"
,
c_int
),
(
"b"
,
c_int
)]
class
S
(
base
):
pass
self
.
assertRaises
(
TypeError
,
setattr
,
S
,
"_fields_"
,
[(
"s"
,
T
)])
# nested structures with different byteorders
# create nested structures with given byteorders and set memory to data
def
set_structures
(
endianness
,
nested_endianness
,
data
):
class
NestedStructure
(
nested_endianness
):
_fields_
=
[(
"x"
,
c_uint32
),
(
"y"
,
c_uint32
)]
class
TestStructure
(
endianness
):
_fields_
=
[(
"point"
,
NestedStructure
)]
self
.
assertEqual
(
len
(
data
),
sizeof
(
TestStructure
))
return
cast
(
data
,
POINTER
(
TestStructure
))[
0
]
for
nested
,
data
in
(
(
BigEndianStructure
,
b
'
\0\0\0\1\0\0\0\2
'
),
(
LittleEndianStructure
,
b
'
\1\0\0\0\2\0\0\0
'
),
):
for
parent
in
(
BigEndianStructure
,
LittleEndianStructure
,
Structure
,
):
s
=
set_structures
(
parent
,
nested
,
data
)
self
.
assertEqual
(
s
.
point
.
x
,
1
)
self
.
assertEqual
(
s
.
point
.
y
,
2
)
def
test_struct_fields_2
(
self
):
# standard packing in struct uses no alignment.
...
...
Misc/ACKS
Dosyayı görüntüle @
bf547fd3
...
...
@@ -685,6 +685,7 @@ Jan Pieter Riegel
Armin Rigo
Nicholas Riley
Jean-Claude Rimbault
Vlad Riscutia
Juan M. Bello Rivas
Davide Rizzo
Anthony Roach
...
...
Misc/NEWS
Dosyayı görüntüle @
bf547fd3
...
...
@@ -30,6 +30,9 @@ Core and Builtins
Library
-------
- Issue #4376: ctypes now supports nested structures in a endian different than
the parent structure. Patch by Vlad Riscutia.
- Issue #12493: subprocess: Popen.communicate() now also handles EINTR errors
if the process has only one pipe.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment