bpo-16396: Allow wintypes to be imported on non-Windows systems. (GH-21394)
Co-authored-by: Christian Heimes <christian@python.org>
(cherry picked from commit 5456e78f45
)
Co-authored-by: Jason R. Coombs <jaraco@jaraco.com>
This commit is contained in:
parent
b62ecc21b4
commit
05d52a0ad6
|
@ -1,12 +1,13 @@
|
|||
import sys
|
||||
import unittest
|
||||
|
||||
from ctypes import *
|
||||
# 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()
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Allow ``ctypes.wintypes`` to be imported on non-Windows systems.
|
|
@ -684,7 +684,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)
|
||||
|
@ -706,7 +710,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)
|
||||
|
@ -1538,8 +1541,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
|
||||
|
|
Loading…
Reference in New Issue