gh-107954, PEP 741: Add PyInitConfig_AddModule() function (#123668)

This commit is contained in:
Victor Stinner 2024-09-04 13:41:57 +02:00 committed by GitHub
parent 7d2c2f24da
commit 0d6b6e34a2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 121 additions and 0 deletions

View file

@ -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(