From 19b52545df898ec911c44e29f75badb902924c0b Mon Sep 17 00:00:00 2001 From: Thomas Heller Date: Fri, 13 Jul 2007 12:52:51 +0000 Subject: c_char, c_char_p objects and c_char array structure fields return their value now as str, no longer str8. --- Lib/ctypes/test/test_buffers.py | 6 ++--- Lib/ctypes/test/test_bytes.py | 8 ++++-- Lib/ctypes/test/test_objects.py | 2 +- Lib/ctypes/test/test_random_things.py | 2 +- Lib/ctypes/test/test_repr.py | 2 +- Lib/ctypes/test/test_slicing.py | 2 +- Modules/_ctypes/cfield.c | 47 ++++++++++++----------------------- 7 files changed, 29 insertions(+), 40 deletions(-) diff --git a/Lib/ctypes/test/test_buffers.py b/Lib/ctypes/test/test_buffers.py index 7ccb2fd..72cd0dd 100644 --- a/Lib/ctypes/test/test_buffers.py +++ b/Lib/ctypes/test/test_buffers.py @@ -7,12 +7,12 @@ class StringBufferTestCase(unittest.TestCase): b = create_string_buffer(32) self.failUnlessEqual(len(b), 32) self.failUnlessEqual(sizeof(b), 32 * sizeof(c_char)) - self.failUnless(type(b[0]) is str8) + self.failUnless(type(b[0]) is str) b = create_string_buffer("abc") self.failUnlessEqual(len(b), 4) # trailing nul char self.failUnlessEqual(sizeof(b), 4 * sizeof(c_char)) - self.failUnless(type(b[0]) is str8) + self.failUnless(type(b[0]) is str) self.failUnlessEqual(b[0], "a") self.failUnlessEqual(b[:], "abc\0") @@ -20,7 +20,7 @@ class StringBufferTestCase(unittest.TestCase): b = create_string_buffer("abc") self.failUnlessEqual(len(b), 4) # trailing nul char self.failUnlessEqual(sizeof(b), 4 * sizeof(c_char)) - self.failUnless(type(b[0]) is str8) + self.failUnless(type(b[0]) is str) self.failUnlessEqual(b[0], "a") self.failUnlessEqual(b[:], "abc\0") diff --git a/Lib/ctypes/test/test_bytes.py b/Lib/ctypes/test/test_bytes.py index db2824d..374b2d7 100644 --- a/Lib/ctypes/test/test_bytes.py +++ b/Lib/ctypes/test/test_bytes.py @@ -29,14 +29,18 @@ class BytesTest(unittest.TestCase): _fields_ = [("a", c_char * 3)] X("abc") - X(b"abc") + x = X(b"abc") + self.assertEqual(x.a, "abc") + self.assertEqual(type(x.a), str) def test_struct_W(self): class X(Structure): _fields_ = [("a", c_wchar * 3)] X("abc") - X(b"abc") + x = X(b"abc") + self.assertEqual(x.a, "abc") + self.assertEqual(type(x.a), str) if sys.platform == "win32": def test_BSTR(self): diff --git a/Lib/ctypes/test/test_objects.py b/Lib/ctypes/test/test_objects.py index 83a8e1b..2bb3b09 100644 --- a/Lib/ctypes/test/test_objects.py +++ b/Lib/ctypes/test/test_objects.py @@ -24,7 +24,7 @@ assigned from Python must be kept. >>> array._objects {'4': b'foo bar'} >>> array[4] -s'foo bar' +'foo bar' >>> It gets more complicated when the ctypes instance itself is contained diff --git a/Lib/ctypes/test/test_random_things.py b/Lib/ctypes/test/test_random_things.py index e83f59c..2f8e667 100644 --- a/Lib/ctypes/test/test_random_things.py +++ b/Lib/ctypes/test/test_random_things.py @@ -69,7 +69,7 @@ class CallbackTracbackTestCase(unittest.TestCase): out = self.capture_stderr(cb, "spam") self.failUnlessEqual(out.splitlines()[-1], "TypeError: " - "unsupported operand type(s) for /: 'int' and 'str8'") + "unsupported operand type(s) for /: 'int' and 'str'") if __name__ == '__main__': unittest.main() diff --git a/Lib/ctypes/test/test_repr.py b/Lib/ctypes/test/test_repr.py index 383082f..f6f9366 100644 --- a/Lib/ctypes/test/test_repr.py +++ b/Lib/ctypes/test/test_repr.py @@ -22,7 +22,7 @@ class ReprTest(unittest.TestCase): self.failUnlessEqual("ob_refcnt == 1) { - /* shorten the result */ - _PyString_Resize(&result, size); - return result; - } else - /* cannot shorten the result */ - return PyString_FromStringAndSize(ptr, size); + p = (char *)ptr; + for (i = 0; i < size; ++i) { + if (*p++ == '\0') + break; + } + + return PyUnicode_FromStringAndSize((char *)ptr, (Py_ssize_t)i); } static PyObject * @@ -1393,7 +1378,7 @@ z_get(void *ptr, Py_ssize_t size) return NULL; } #endif - return PyString_FromString(*(char **)ptr); + return PyUnicode_FromString(*(char **)ptr); } else { Py_INCREF(Py_None); return Py_None; -- cgit v0.12