summaryrefslogtreecommitdiffstats
path: root/Modules/_ctypes
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2022-03-11 23:10:02 (GMT)
committerGitHub <noreply@github.com>2022-03-11 23:10:02 (GMT)
commit882d8096c262a5945e0cfdd706e5db3ad2b73543 (patch)
tree5e903c7e87a13203543e3e215f30b6b708df018d /Modules/_ctypes
parentecfff63e06e77e22035a7f7caa26986f033f3aea (diff)
downloadcpython-882d8096c262a5945e0cfdd706e5db3ad2b73543.zip
cpython-882d8096c262a5945e0cfdd706e5db3ad2b73543.tar.gz
cpython-882d8096c262a5945e0cfdd706e5db3ad2b73543.tar.bz2
bpo-46906: Add PyFloat_Pack8() to the C API (GH-31657)
Add new functions to pack and unpack C double (serialize and deserialize): * PyFloat_Pack2(), PyFloat_Pack4(), PyFloat_Pack8() * PyFloat_Unpack2(), PyFloat_Unpack4(), PyFloat_Unpack8() Document these functions and add unit tests. Rename private functions and move them from the internal C API to the public C API: * _PyFloat_Pack2() => PyFloat_Pack2() * _PyFloat_Pack4() => PyFloat_Pack4() * _PyFloat_Pack8() => PyFloat_Pack8() * _PyFloat_Unpack2() => PyFloat_Unpack2() * _PyFloat_Unpack4() => PyFloat_Unpack4() * _PyFloat_Unpack8() => PyFloat_Unpack8() Replace the "unsigned char*" type with "char*" which is more common and easy to use.
Diffstat (limited to 'Modules/_ctypes')
-rw-r--r--Modules/_ctypes/cfield.c17
1 files changed, 8 insertions, 9 deletions
diff --git a/Modules/_ctypes/cfield.c b/Modules/_ctypes/cfield.c
index 2992d34..3b769f9 100644
--- a/Modules/_ctypes/cfield.c
+++ b/Modules/_ctypes/cfield.c
@@ -10,7 +10,6 @@
#include "pycore_bitutils.h" // _Py_bswap32()
#include "pycore_call.h" // _PyObject_CallNoArgs()
-#include "pycore_floatobject.h" // _PyFloat_Pack8()
#include <ffi.h>
#include "ctypes.h"
@@ -1009,10 +1008,10 @@ d_set_sw(void *ptr, PyObject *value, Py_ssize_t size)
if (x == -1 && PyErr_Occurred())
return NULL;
#ifdef WORDS_BIGENDIAN
- if (_PyFloat_Pack8(x, (unsigned char *)ptr, 1))
+ if (PyFloat_Pack8(x, ptr, 1))
return NULL;
#else
- if (_PyFloat_Pack8(x, (unsigned char *)ptr, 0))
+ if (PyFloat_Pack8(x, ptr, 0))
return NULL;
#endif
_RET(value);
@@ -1022,9 +1021,9 @@ static PyObject *
d_get_sw(void *ptr, Py_ssize_t size)
{
#ifdef WORDS_BIGENDIAN
- return PyFloat_FromDouble(_PyFloat_Unpack8(ptr, 1));
+ return PyFloat_FromDouble(PyFloat_Unpack8(ptr, 1));
#else
- return PyFloat_FromDouble(_PyFloat_Unpack8(ptr, 0));
+ return PyFloat_FromDouble(PyFloat_Unpack8(ptr, 0));
#endif
}
@@ -1057,10 +1056,10 @@ f_set_sw(void *ptr, PyObject *value, Py_ssize_t size)
if (x == -1 && PyErr_Occurred())
return NULL;
#ifdef WORDS_BIGENDIAN
- if (_PyFloat_Pack4(x, (unsigned char *)ptr, 1))
+ if (PyFloat_Pack4(x, ptr, 1))
return NULL;
#else
- if (_PyFloat_Pack4(x, (unsigned char *)ptr, 0))
+ if (PyFloat_Pack4(x, ptr, 0))
return NULL;
#endif
_RET(value);
@@ -1070,9 +1069,9 @@ static PyObject *
f_get_sw(void *ptr, Py_ssize_t size)
{
#ifdef WORDS_BIGENDIAN
- return PyFloat_FromDouble(_PyFloat_Unpack4(ptr, 1));
+ return PyFloat_FromDouble(PyFloat_Unpack4(ptr, 1));
#else
- return PyFloat_FromDouble(_PyFloat_Unpack4(ptr, 0));
+ return PyFloat_FromDouble(PyFloat_Unpack4(ptr, 0));
#endif
}