]> granicus.if.org Git - python/commitdiff
Accept bytes for c_wchar_p instances and c_wchar array instances.
authorThomas Heller <theller@ctypes.org>
Thu, 12 Jul 2007 19:06:25 +0000 (19:06 +0000)
committerThomas Heller <theller@ctypes.org>
Thu, 12 Jul 2007 19:06:25 +0000 (19:06 +0000)
ctypes.create_unicode_buffer also accepts bytes now.

Revert some tests in test_unicode: Since string literals are unicode
now, conversion takes place when byte literals are passed as unicode
parameters.

Lib/ctypes/__init__.py
Lib/ctypes/test/test_unicode.py
Modules/_ctypes/_ctypes.c

index 8c9fe1a64968b8fa6292273390dea40a3b11a5f0..86678ea766cdc63d2fda97f14a820966433bc7ee 100644 (file)
@@ -281,7 +281,7 @@ else:
         create_unicode_buffer(anInteger) -> character array
         create_unicode_buffer(aString, anInteger) -> character array
         """
-        if isinstance(init, str):
+        if isinstance(init, (str, bytes)):
             if size is None:
                 size = len(init)+1
             buftype = c_wchar * size
index 3a89d8d156f0fb616911859501a1bea4c04bc82b..bf5486c777c519cd667c9c801fa712a07125d474 100644 (file)
@@ -26,7 +26,7 @@ else:
             self.failUnlessEqual(wcslen("ab\u2070"), 3)
             # string args are converted
             self.failUnlessEqual(wcslen("abc"), 3)
-            self.failUnlessRaises(ctypes.ArgumentError, wcslen, "ab\xe4")
+            self.failUnlessRaises(ctypes.ArgumentError, wcslen, b"ab\xe4")
 
         def test_ascii_replace(self):
             ctypes.set_conversion_mode("ascii", "replace")
@@ -41,7 +41,7 @@ else:
             self.failUnlessEqual(wcslen("ab\u2070"), 3)
             # ignore error mode skips non-ascii characters
             self.failUnlessEqual(wcslen("abc"), 3)
-            self.failUnlessEqual(wcslen("\xe4\xf6\xfc\xdf"), 0)
+            self.failUnlessEqual(wcslen(b"\xe4\xf6\xfc\xdf"), 0)
 
         def test_latin1_strict(self):
             ctypes.set_conversion_mode("latin-1", "strict")
@@ -56,11 +56,11 @@ else:
             self.failUnlessEqual(len(buf), 3+1)
 
             ctypes.set_conversion_mode("ascii", "replace")
-            buf = ctypes.create_unicode_buffer("ab\xe4\xf6\xfc")
+            buf = ctypes.create_unicode_buffer(b"ab\xe4\xf6\xfc")
             self.failUnlessEqual(buf[:], "ab\uFFFD\uFFFD\uFFFD\0")
 
             ctypes.set_conversion_mode("ascii", "ignore")
-            buf = ctypes.create_unicode_buffer("ab\xe4\xf6\xfc")
+            buf = ctypes.create_unicode_buffer(b"ab\xe4\xf6\xfc")
             # is that correct? not sure.  But with 'ignore', you get what you pay for..
             self.failUnlessEqual(buf[:], "ab\0\0\0\0")
 
index 5d4e7c5f0fec21ea85f3391eca7e3ef1d8482160..bab1e351346eecd4c4a33b8f80f8a2d161274be6 100644 (file)
@@ -847,7 +847,7 @@ WCharArray_set_value(CDataObject *self, PyObject *value)
 {
        Py_ssize_t result = 0;
 
-       if (PyString_Check(value)) {
+       if (PyBytes_Check(value)) {
                value = PyUnicode_FromEncodedObject(value,
                                                    conversion_mode_encoding,
                                                    conversion_mode_errors);
@@ -1119,7 +1119,7 @@ c_wchar_p_from_param(PyObject *type, PyObject *value)
                Py_INCREF(Py_None);
                return Py_None;
        }
-       if (PyUnicode_Check(value) || PyString_Check(value)) {
+       if (PyUnicode_Check(value) || PyBytes_Check(value)) {
                PyCArgObject *parg;
                struct fielddesc *fd = getentry("Z");