summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2022-01-11 10:56:16 (GMT)
committerGitHub <noreply@github.com>2022-01-11 10:56:16 (GMT)
commitea1a54506b4ac38b712ba63ec884292025f16111 (patch)
tree752bad07fb725dd178e2d79e4dedf23b74dcdd34 /Modules
parentfc75bfb8be8494e22123f2c14d1ab497c77cc22d (diff)
downloadcpython-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.c94
-rw-r--r--Modules/_testinternalcapi.c94
-rw-r--r--Modules/_tracemalloc.c3
-rw-r--r--Modules/mmapmodule.c5
-rw-r--r--Modules/ossaudiodev.c5
-rw-r--r--Modules/selectmodule.c7
-rw-r--r--Modules/socketmodule.c5
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, &current_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, &current_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, &current_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, &current_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