]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-16396: Allow wintypes to be imported on non-Windows systems. (GH-21394)
authorJason R. Coombs <jaraco@jaraco.com>
Mon, 19 Oct 2020 22:06:05 +0000 (18:06 -0400)
committerGitHub <noreply@github.com>
Mon, 19 Oct 2020 22:06:05 +0000 (23:06 +0100)
Co-authored-by: Christian Heimes <christian@python.org>
Lib/ctypes/test/test_wintypes.py
Misc/NEWS.d/next/Library/2020-07-08-09-45-00.bpo-16936.z8o8Pn.rst [new file with mode: 0644]
Modules/_ctypes/cfield.c

index 71442df8301affdbd65da31c8579f7694e34f924..243d5962ffa7f1c6b7e0971d42a7b0ec98de99a0 100644 (file)
@@ -1,12 +1,13 @@
-import sys
 import unittest
 
+# also work on POSIX
+
 from ctypes import *
+from ctypes import wintypes
+
 
-@unittest.skipUnless(sys.platform.startswith('win'), 'Windows-only test')
 class WinTypesTest(unittest.TestCase):
     def test_variant_bool(self):
-        from ctypes import wintypes
         # reads 16-bits from memory, anything non-zero is True
         for true_value in (1, 32767, 32768, 65535, 65537):
             true = POINTER(c_int16)(c_int16(true_value))
@@ -37,5 +38,6 @@ class WinTypesTest(unittest.TestCase):
         vb.value = []
         self.assertIs(vb.value, False)
 
+
 if __name__ == "__main__":
     unittest.main()
diff --git a/Misc/NEWS.d/next/Library/2020-07-08-09-45-00.bpo-16936.z8o8Pn.rst b/Misc/NEWS.d/next/Library/2020-07-08-09-45-00.bpo-16936.z8o8Pn.rst
new file mode 100644 (file)
index 0000000..c76db4e
--- /dev/null
@@ -0,0 +1 @@
+Allow ``ctypes.wintypes`` to be imported on non-Windows systems.
index 3bd9ae438db44029604372af5130db6bb9fdc786..98939290fb97f930a028f8639c53db28d3917381 100644 (file)
@@ -658,7 +658,11 @@ i_get_sw(void *ptr, Py_ssize_t size)
     return PyLong_FromLong(val);
 }
 
-#ifdef MS_WIN32
+#ifndef MS_WIN32
+/* http://msdn.microsoft.com/en-us/library/cc237864.aspx */
+#define VARIANT_FALSE 0x0000
+#define VARIANT_TRUE 0xFFFF
+#endif
 /* short BOOL - VARIANT_BOOL */
 static PyObject *
 vBOOL_set(void *ptr, PyObject *value, Py_ssize_t size)
@@ -680,7 +684,6 @@ vBOOL_get(void *ptr, Py_ssize_t size)
 {
     return PyBool_FromLong((long)*(short int *)ptr);
 }
-#endif
 
 static PyObject *
 bool_set(void *ptr, PyObject *value, Py_ssize_t size)
@@ -1511,8 +1514,8 @@ static struct fielddesc formattable[] = {
 #endif
 #ifdef MS_WIN32
     { 'X', BSTR_set, BSTR_get, &ffi_type_pointer},
-    { 'v', vBOOL_set, vBOOL_get, &ffi_type_sshort},
 #endif
+    { 'v', vBOOL_set, vBOOL_get, &ffi_type_sshort},
 #if SIZEOF__BOOL == 1
     { '?', bool_set, bool_get, &ffi_type_uchar}, /* Also fallback for no native _Bool support */
 #elif SIZEOF__BOOL == SIZEOF_SHORT