mirror of
https://github.com/python/cpython.git
synced 2025-08-03 16:39:00 +00:00
bpo-40302: Add pycore_byteswap.h header file (GH-19552)
Add a new internal pycore_byteswap.h header file with the following functions: * _Py_bswap16() * _Py_bswap32() * _Py_bswap64() Use these functions in _ctypes, sha256 and sha512 modules, and also use in the UTF-32 encoder. sha256, sha512 and _ctypes modules are now built with the internal C API.
This commit is contained in:
parent
485e715cb1
commit
1ae035b7e8
13 changed files with 219 additions and 112 deletions
|
@ -9,6 +9,7 @@
|
|||
#define PY_SSIZE_T_CLEAN
|
||||
|
||||
#include "Python.h"
|
||||
#include "pycore_byteswap.h" // _Py_bswap32()
|
||||
#include "pycore_initconfig.h" // _Py_GetConfigsAsDict()
|
||||
#include "pycore_gc.h" // PyGC_Head
|
||||
|
||||
|
@ -21,7 +22,7 @@ get_configs(PyObject *self, PyObject *Py_UNUSED(args))
|
|||
|
||||
|
||||
static PyObject*
|
||||
get_recursion_depth(PyObject *self, PyObject *args)
|
||||
get_recursion_depth(PyObject *self, PyObject *Py_UNUSED(args))
|
||||
{
|
||||
PyThreadState *tstate = PyThreadState_Get();
|
||||
|
||||
|
@ -30,9 +31,38 @@ get_recursion_depth(PyObject *self, PyObject *args)
|
|||
}
|
||||
|
||||
|
||||
static PyObject*
|
||||
test_bswap(PyObject *self, PyObject *Py_UNUSED(args))
|
||||
{
|
||||
uint16_t u16 = _Py_bswap16(UINT16_C(0x3412));
|
||||
if (u16 != UINT16_C(0x1234)) {
|
||||
PyErr_Format(PyExc_AssertionError,
|
||||
"_Py_bswap16(0x3412) returns %u", u16);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
uint32_t u32 = _Py_bswap32(UINT32_C(0x78563412));
|
||||
if (u32 != UINT32_C(0x12345678)) {
|
||||
PyErr_Format(PyExc_AssertionError,
|
||||
"_Py_bswap32(0x78563412) returns %lu", u32);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
uint64_t u64 = _Py_bswap64(UINT64_C(0xEFCDAB9078563412));
|
||||
if (u64 != UINT64_C(0x1234567890ABCDEF)) {
|
||||
PyErr_Format(PyExc_AssertionError,
|
||||
"_Py_bswap64(0xEFCDAB9078563412) returns %llu", u64);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
|
||||
static PyMethodDef TestMethods[] = {
|
||||
{"get_configs", get_configs, METH_NOARGS},
|
||||
{"get_recursion_depth", get_recursion_depth, METH_NOARGS},
|
||||
{"test_bswap", test_bswap, METH_NOARGS},
|
||||
{NULL, NULL} /* sentinel */
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue