gh-126579: Adapt sys.audit() to Argument Clinic (GH-126580)

This commit is contained in:
Serhiy Storchaka 2024-11-08 15:11:44 +02:00 committed by GitHub
parent a3e8e7bbc3
commit a93fc0969e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 63 additions and 42 deletions

View file

@ -7,6 +7,7 @@ preserve
# include "pycore_runtime.h" // _Py_ID()
#endif
#include "pycore_modsupport.h" // _PyArg_UnpackKeywords()
#include "pycore_tuple.h" // _PyTuple_FromArray()
PyDoc_STRVAR(sys_addaudithook__doc__,
"addaudithook($module, /, hook)\n"
@ -64,6 +65,54 @@ exit:
return return_value;
}
PyDoc_STRVAR(sys_audit__doc__,
"audit($module, event, /, *args)\n"
"--\n"
"\n"
"Passes the event to any audit hooks that are attached.");
#define SYS_AUDIT_METHODDEF \
{"audit", _PyCFunction_CAST(sys_audit), METH_FASTCALL, sys_audit__doc__},
static PyObject *
sys_audit_impl(PyObject *module, const char *event, PyObject *args);
static PyObject *
sys_audit(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
{
PyObject *return_value = NULL;
const char *event;
PyObject *__clinic_args = NULL;
if (!_PyArg_CheckPositional("audit", nargs, 1, PY_SSIZE_T_MAX)) {
goto exit;
}
if (!PyUnicode_Check(args[0])) {
_PyArg_BadArgument("audit", "argument 1", "str", args[0]);
goto exit;
}
Py_ssize_t event_length;
event = PyUnicode_AsUTF8AndSize(args[0], &event_length);
if (event == NULL) {
goto exit;
}
if (strlen(event) != (size_t)event_length) {
PyErr_SetString(PyExc_ValueError, "embedded null character");
goto exit;
}
__clinic_args = _PyTuple_FromArray(args + 1, nargs - 1);
if (__clinic_args == NULL) {
goto exit;
}
return_value = sys_audit_impl(module, event, __clinic_args);
exit:
/* Cleanup for args */
Py_XDECREF(__clinic_args);
return return_value;
}
PyDoc_STRVAR(sys_displayhook__doc__,
"displayhook($module, object, /)\n"
"--\n"
@ -1619,4 +1668,4 @@ exit:
#ifndef SYS_GETANDROIDAPILEVEL_METHODDEF
#define SYS_GETANDROIDAPILEVEL_METHODDEF
#endif /* !defined(SYS_GETANDROIDAPILEVEL_METHODDEF) */
/*[clinic end generated code: output=cf24c260a269a5d2 input=a9049054013a1b77]*/
/*[clinic end generated code: output=6d4f6cd20419b675 input=a9049054013a1b77]*/