mirror of
https://github.com/python/cpython.git
synced 2025-08-04 17:08:35 +00:00
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.
This commit is contained in:
parent
fc75bfb8be
commit
ea1a54506b
13 changed files with 289 additions and 258 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue