diff options
author | Victor Stinner <victor.stinner@haypocalc.com> | 2010-06-11 21:50:30 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@haypocalc.com> | 2010-06-11 21:50:30 (GMT) |
commit | da0eca427aef6c58f3c134c0789f54d7b8fa4210 (patch) | |
tree | 035de9f0ffe1bca76631b3459dab6dc64179ca60 | |
parent | cc0cfd357611c69a99841f21affa73e829416789 (diff) | |
download | cpython-da0eca427aef6c58f3c134c0789f54d7b8fa4210.zip cpython-da0eca427aef6c58f3c134c0789f54d7b8fa4210.tar.gz cpython-da0eca427aef6c58f3c134c0789f54d7b8fa4210.tar.bz2 |
Issue #8966: If a ctypes structure field is an array of c_char, convert its
value to bytes instead of str (as done for c_char and c_char_p).
-rw-r--r-- | Lib/ctypes/test/test_bytes.py | 4 | ||||
-rw-r--r-- | Lib/ctypes/test/test_structures.py | 10 | ||||
-rw-r--r-- | Misc/NEWS | 5 | ||||
-rw-r--r-- | Modules/_ctypes/cfield.c | 2 |
4 files changed, 12 insertions, 9 deletions
diff --git a/Lib/ctypes/test/test_bytes.py b/Lib/ctypes/test/test_bytes.py index 374b2d7..4a1d0fd 100644 --- a/Lib/ctypes/test/test_bytes.py +++ b/Lib/ctypes/test/test_bytes.py @@ -30,8 +30,8 @@ class BytesTest(unittest.TestCase): X("abc") x = X(b"abc") - self.assertEqual(x.a, "abc") - self.assertEqual(type(x.a), str) + self.assertEqual(x.a, b"abc") + self.assertEqual(type(x.a), bytes) def test_struct_W(self): class X(Structure): diff --git a/Lib/ctypes/test/test_structures.py b/Lib/ctypes/test/test_structures.py index c58d949..fb048aa 100644 --- a/Lib/ctypes/test/test_structures.py +++ b/Lib/ctypes/test/test_structures.py @@ -209,9 +209,9 @@ class StructureTestCase(unittest.TestCase): self.assertRaises(TypeError, Person, "Name", "HI") # short enough - self.assertEqual(Person("12345", 5).name, "12345") + self.assertEqual(Person("12345", 5).name, b"12345") # exact fit - self.assertEqual(Person("123456", 5).name, "123456") + self.assertEqual(Person("123456", 5).name, b"123456") # too long self.assertRaises(ValueError, Person, "1234567", 5) @@ -269,9 +269,9 @@ class StructureTestCase(unittest.TestCase): p = Person("Someone", ("1234", "5678"), 5) - self.assertEqual(p.name, "Someone") - self.assertEqual(p.phone.areacode, "1234") - self.assertEqual(p.phone.number, "5678") + self.assertEqual(p.name, b"Someone") + self.assertEqual(p.phone.areacode, b"1234") + self.assertEqual(p.phone.number, b"5678") self.assertEqual(p.age, 5) def test_structures_with_wchar(self): @@ -421,6 +421,9 @@ C-API Library ------- +- Issue #8966: If a ctypes structure field is an array of c_char, convert its + value to bytes instead of str (as done for c_char and c_char_p). + - Issue #8188: Comparisons between Decimal and Fraction objects are now permitted, returning a result based on the exact numerical values of the operands. This builds on issue #2531, which allowed @@ -1288,7 +1291,7 @@ Extension Modules ----------------- - Issue #3129: Trailing digits in format string are no longer ignored. - For example, "1" or "ilib123" are now invalid formats and cause + For example, "1" or "ilib123" are now invalid formats and cause ``struct.error`` to be raised. - Issue #7384: If the system readline library is linked against ncurses, diff --git a/Modules/_ctypes/cfield.c b/Modules/_ctypes/cfield.c index 441ed9e..876e2c0 100644 --- a/Modules/_ctypes/cfield.c +++ b/Modules/_ctypes/cfield.c @@ -1333,7 +1333,7 @@ s_get(void *ptr, Py_ssize_t size) break; } - return PyUnicode_FromStringAndSize((char *)ptr, (Py_ssize_t)i); + return PyBytes_FromStringAndSize((char *)ptr, (Py_ssize_t)i); } static PyObject * |