Author: thomas.heller
Date: Thu Jul 12 21:06:25 2007
New Revision: 56325

Modified:
   python/branches/py3k-struni/Lib/ctypes/__init__.py
   python/branches/py3k-struni/Lib/ctypes/test/test_unicode.py
   python/branches/py3k-struni/Modules/_ctypes/_ctypes.c
Log:
Accept bytes for c_wchar_p instances and c_wchar array instances.
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.


Modified: python/branches/py3k-struni/Lib/ctypes/__init__.py
==============================================================================
--- python/branches/py3k-struni/Lib/ctypes/__init__.py  (original)
+++ python/branches/py3k-struni/Lib/ctypes/__init__.py  Thu Jul 12 21:06:25 2007
@@ -281,7 +281,7 @@
         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

Modified: python/branches/py3k-struni/Lib/ctypes/test/test_unicode.py
==============================================================================
--- python/branches/py3k-struni/Lib/ctypes/test/test_unicode.py (original)
+++ python/branches/py3k-struni/Lib/ctypes/test/test_unicode.py Thu Jul 12 
21:06:25 2007
@@ -26,7 +26,7 @@
             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 @@
             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 @@
             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")
 

Modified: python/branches/py3k-struni/Modules/_ctypes/_ctypes.c
==============================================================================
--- python/branches/py3k-struni/Modules/_ctypes/_ctypes.c       (original)
+++ python/branches/py3k-struni/Modules/_ctypes/_ctypes.c       Thu Jul 12 
21:06:25 2007
@@ -847,7 +847,7 @@
 {
        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 @@
                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");
 
_______________________________________________
Python-3000-checkins mailing list
Python-3000-checkins@python.org
http://mail.python.org/mailman/listinfo/python-3000-checkins

Reply via email to