mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
gh-107954, PEP 741: Add PyInitConfig_AddModule() function (#123668)
This commit is contained in:
parent
7d2c2f24da
commit
0d6b6e34a2
7 changed files with 121 additions and 0 deletions
|
@ -3423,6 +3423,8 @@ _Py_DumpPathConfig(PyThreadState *tstate)
|
|||
struct PyInitConfig {
|
||||
PyPreConfig preconfig;
|
||||
PyConfig config;
|
||||
struct _inittab *inittab;
|
||||
Py_ssize_t inittab_size;
|
||||
PyStatus status;
|
||||
char *err_msg;
|
||||
};
|
||||
|
@ -3873,9 +3875,42 @@ PyInitConfig_SetStrList(PyInitConfig *config, const char *name,
|
|||
}
|
||||
|
||||
|
||||
int
|
||||
PyInitConfig_AddModule(PyInitConfig *config, const char *name,
|
||||
PyObject* (*initfunc)(void))
|
||||
{
|
||||
size_t size = sizeof(struct _inittab) * (config->inittab_size + 2);
|
||||
struct _inittab *new_inittab = PyMem_RawRealloc(config->inittab, size);
|
||||
if (new_inittab == NULL) {
|
||||
config->status = _PyStatus_NO_MEMORY();
|
||||
return -1;
|
||||
}
|
||||
config->inittab = new_inittab;
|
||||
|
||||
struct _inittab *entry = &config->inittab[config->inittab_size];
|
||||
entry->name = name;
|
||||
entry->initfunc = initfunc;
|
||||
|
||||
// Terminator entry
|
||||
entry = &config->inittab[config->inittab_size + 1];
|
||||
entry->name = NULL;
|
||||
entry->initfunc = NULL;
|
||||
|
||||
config->inittab_size++;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
Py_InitializeFromInitConfig(PyInitConfig *config)
|
||||
{
|
||||
if (config->inittab_size >= 1) {
|
||||
if (PyImport_ExtendInittab(config->inittab) < 0) {
|
||||
config->status = _PyStatus_NO_MEMORY();
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
_PyPreConfig_GetConfig(&config->preconfig, &config->config);
|
||||
|
||||
config->status = Py_PreInitializeFromArgs(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue