diff options
author | Victor Stinner <vstinner@python.org> | 2022-01-11 10:56:16 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-11 10:56:16 (GMT) |
commit | ea1a54506b4ac38b712ba63ec884292025f16111 (patch) | |
tree | 752bad07fb725dd178e2d79e4dedf23b74dcdd34 /Modules | |
parent | fc75bfb8be8494e22123f2c14d1ab497c77cc22d (diff) | |
download | cpython-ea1a54506b4ac38b712ba63ec884292025f16111.zip cpython-ea1a54506b4ac38b712ba63ec884292025f16111.tar.gz cpython-ea1a54506b4ac38b712ba63ec884292025f16111.tar.bz2 |
bpo-46303: Move fileutils.h private functions to internal C API (GH-30484)
Move almost all private functions of Include/cpython/fileutils.h to
the internal C API Include/internal/pycore_fileutils.h.
Only keep _Py_fopen_obj() in Include/cpython/fileutils.h, since it's
used by _testcapi which must not use the internal C API.
Move EncodeLocaleEx() and DecodeLocaleEx() functions from _testcapi
to _testinternalcapi, since the C API moved to the internal C API.
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/_testcapimodule.c | 94 | ||||
-rw-r--r-- | Modules/_testinternalcapi.c | 94 | ||||
-rw-r--r-- | Modules/_tracemalloc.c | 3 | ||||
-rw-r--r-- | Modules/mmapmodule.c | 5 | ||||
-rw-r--r-- | Modules/ossaudiodev.c | 5 | ||||
-rw-r--r-- | Modules/selectmodule.c | 7 | ||||
-rw-r--r-- | Modules/socketmodule.c | 5 |
7 files changed, 117 insertions, 96 deletions
diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index be40d68..ea9c048 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -5417,98 +5417,6 @@ bad_get(PyObject *module, PyObject *const *args, Py_ssize_t nargs) } -static PyObject * -encode_locale_ex(PyObject *self, PyObject *args) -{ - PyObject *unicode; - int current_locale = 0; - wchar_t *wstr; - PyObject *res = NULL; - const char *errors = NULL; - - if (!PyArg_ParseTuple(args, "U|is", &unicode, ¤t_locale, &errors)) { - return NULL; - } - wstr = PyUnicode_AsWideCharString(unicode, NULL); - if (wstr == NULL) { - return NULL; - } - _Py_error_handler error_handler = _Py_GetErrorHandler(errors); - - char *str = NULL; - size_t error_pos; - const char *reason = NULL; - int ret = _Py_EncodeLocaleEx(wstr, - &str, &error_pos, &reason, - current_locale, error_handler); - PyMem_Free(wstr); - - switch(ret) { - case 0: - res = PyBytes_FromString(str); - PyMem_RawFree(str); - break; - case -1: - PyErr_NoMemory(); - break; - case -2: - PyErr_Format(PyExc_RuntimeError, "encode error: pos=%zu, reason=%s", - error_pos, reason); - break; - case -3: - PyErr_SetString(PyExc_ValueError, "unsupported error handler"); - break; - default: - PyErr_SetString(PyExc_ValueError, "unknown error code"); - break; - } - return res; -} - - -static PyObject * -decode_locale_ex(PyObject *self, PyObject *args) -{ - char *str; - int current_locale = 0; - PyObject *res = NULL; - const char *errors = NULL; - - if (!PyArg_ParseTuple(args, "y|is", &str, ¤t_locale, &errors)) { - return NULL; - } - _Py_error_handler error_handler = _Py_GetErrorHandler(errors); - - wchar_t *wstr = NULL; - size_t wlen = 0; - const char *reason = NULL; - int ret = _Py_DecodeLocaleEx(str, - &wstr, &wlen, &reason, - current_locale, error_handler); - - switch(ret) { - case 0: - res = PyUnicode_FromWideChar(wstr, wlen); - PyMem_RawFree(wstr); - break; - case -1: - PyErr_NoMemory(); - break; - case -2: - PyErr_Format(PyExc_RuntimeError, "decode error: pos=%zu, reason=%s", - wlen, reason); - break; - case -3: - PyErr_SetString(PyExc_ValueError, "unsupported error handler"); - break; - default: - PyErr_SetString(PyExc_ValueError, "unknown error code"); - break; - } - return res; -} - - #ifdef Py_REF_DEBUG static PyObject * negative_refcount(PyObject *self, PyObject *Py_UNUSED(args)) @@ -6125,8 +6033,6 @@ static PyMethodDef TestMethods[] = { {"test_pythread_tss_key_state", test_pythread_tss_key_state, METH_VARARGS}, {"hamt", new_hamt, METH_NOARGS}, {"bad_get", (PyCFunction)(void(*)(void))bad_get, METH_FASTCALL}, - {"EncodeLocaleEx", encode_locale_ex, METH_VARARGS}, - {"DecodeLocaleEx", decode_locale_ex, METH_VARARGS}, #ifdef Py_REF_DEBUG {"negative_refcount", negative_refcount, METH_NOARGS}, #endif diff --git a/Modules/_testinternalcapi.c b/Modules/_testinternalcapi.c index 19babb0..9deba35 100644 --- a/Modules/_testinternalcapi.c +++ b/Modules/_testinternalcapi.c @@ -399,6 +399,98 @@ get_getpath_codeobject(PyObject *self, PyObject *Py_UNUSED(args)) { } +static PyObject * +encode_locale_ex(PyObject *self, PyObject *args) +{ + PyObject *unicode; + int current_locale = 0; + wchar_t *wstr; + PyObject *res = NULL; + const char *errors = NULL; + + if (!PyArg_ParseTuple(args, "U|is", &unicode, ¤t_locale, &errors)) { + return NULL; + } + wstr = PyUnicode_AsWideCharString(unicode, NULL); + if (wstr == NULL) { + return NULL; + } + _Py_error_handler error_handler = _Py_GetErrorHandler(errors); + + char *str = NULL; + size_t error_pos; + const char *reason = NULL; + int ret = _Py_EncodeLocaleEx(wstr, + &str, &error_pos, &reason, + current_locale, error_handler); + PyMem_Free(wstr); + + switch(ret) { + case 0: + res = PyBytes_FromString(str); + PyMem_RawFree(str); + break; + case -1: + PyErr_NoMemory(); + break; + case -2: + PyErr_Format(PyExc_RuntimeError, "encode error: pos=%zu, reason=%s", + error_pos, reason); + break; + case -3: + PyErr_SetString(PyExc_ValueError, "unsupported error handler"); + break; + default: + PyErr_SetString(PyExc_ValueError, "unknown error code"); + break; + } + return res; +} + + +static PyObject * +decode_locale_ex(PyObject *self, PyObject *args) +{ + char *str; + int current_locale = 0; + PyObject *res = NULL; + const char *errors = NULL; + + if (!PyArg_ParseTuple(args, "y|is", &str, ¤t_locale, &errors)) { + return NULL; + } + _Py_error_handler error_handler = _Py_GetErrorHandler(errors); + + wchar_t *wstr = NULL; + size_t wlen = 0; + const char *reason = NULL; + int ret = _Py_DecodeLocaleEx(str, + &wstr, &wlen, &reason, + current_locale, error_handler); + + switch(ret) { + case 0: + res = PyUnicode_FromWideChar(wstr, wlen); + PyMem_RawFree(wstr); + break; + case -1: + PyErr_NoMemory(); + break; + case -2: + PyErr_Format(PyExc_RuntimeError, "decode error: pos=%zu, reason=%s", + wlen, reason); + break; + case -3: + PyErr_SetString(PyExc_ValueError, "unsupported error handler"); + break; + default: + PyErr_SetString(PyExc_ValueError, "unknown error code"); + break; + } + return res; +} + + static PyMethodDef TestMethods[] = { {"get_configs", get_configs, METH_NOARGS}, {"get_recursion_depth", get_recursion_depth, METH_NOARGS}, @@ -413,6 +505,8 @@ static PyMethodDef TestMethods[] = { {"test_edit_cost", test_edit_cost, METH_NOARGS}, {"normalize_path", normalize_path, METH_O, NULL}, {"get_getpath_codeobject", get_getpath_codeobject, METH_NOARGS, NULL}, + {"EncodeLocaleEx", encode_locale_ex, METH_VARARGS}, + {"DecodeLocaleEx", decode_locale_ex, METH_VARARGS}, {NULL, NULL} /* sentinel */ }; diff --git a/Modules/_tracemalloc.c b/Modules/_tracemalloc.c index 68e5f0d..b838439 100644 --- a/Modules/_tracemalloc.c +++ b/Modules/_tracemalloc.c @@ -1,8 +1,9 @@ #include "Python.h" +#include "pycore_fileutils.h" // _Py_write_noraise() #include "pycore_gc.h" // PyGC_Head +#include "pycore_hashtable.h" // _Py_hashtable_t #include "pycore_pymem.h" // _Py_tracemalloc_config #include "pycore_traceback.h" -#include "pycore_hashtable.h" #include <pycore_frame.h> #include <stdlib.h> // malloc() diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c index 742bcb3..7c9c28f 100644 --- a/Modules/mmapmodule.c +++ b/Modules/mmapmodule.c @@ -18,8 +18,13 @@ / ftp://squirl.nightmare.com/pub/python/python-ext. */ +#ifndef Py_BUILD_CORE_BUILTIN +# define Py_BUILD_CORE_MODULE 1 +#endif + #define PY_SSIZE_T_CLEAN #include <Python.h> +#include "pycore_fileutils.h" // _Py_stat_struct #include "structmember.h" // PyMemberDef #include <stddef.h> // offsetof() diff --git a/Modules/ossaudiodev.c b/Modules/ossaudiodev.c index 4bab9a5..c9e788f 100644 --- a/Modules/ossaudiodev.c +++ b/Modules/ossaudiodev.c @@ -17,8 +17,13 @@ * $Id$ */ +#ifndef Py_BUILD_CORE_BUILTIN +# define Py_BUILD_CORE_MODULE 1 +#endif + #define PY_SSIZE_T_CLEAN #include "Python.h" +#include "pycore_fileutils.h" // _Py_write() #include "structmember.h" // PyMemberDef #include <stdlib.h> // getenv() diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c index ff1c028..367e299 100644 --- a/Modules/selectmodule.c +++ b/Modules/selectmodule.c @@ -4,11 +4,16 @@ have any value except INVALID_SOCKET. */ +#ifndef Py_BUILD_CORE_BUILTIN +# define Py_BUILD_CORE_MODULE 1 +#endif + #if defined(HAVE_POLL_H) && !defined(_GNU_SOURCE) -#define _GNU_SOURCE +# define _GNU_SOURCE #endif #include "Python.h" +#include "pycore_fileutils.h" // _Py_set_inheritable() #include "structmember.h" // PyMemberDef #ifdef HAVE_SYS_DEVPOLL_H diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 89e93c5..ed83f5c 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -85,6 +85,10 @@ Local naming conventions: */ +#ifndef Py_BUILD_CORE_BUILTIN +# define Py_BUILD_CORE_MODULE 1 +#endif + #ifdef __APPLE__ // Issue #35569: Expose RFC 3542 socket options. #define __APPLE_USE_RFC_3542 1 @@ -103,6 +107,7 @@ Local naming conventions: #define PY_SSIZE_T_CLEAN #include "Python.h" +#include "pycore_fileutils.h" // _Py_set_inheritable() #include "structmember.h" // PyMemberDef #ifdef _Py_MEMORY_SANITIZER |