Exemple #1
0
static PyObject *
call_state_registration_func(PyObject *mod, PyObject *args)
{
    int i, ret;
    PyModuleDef *def = PyModule_GetDef(mod);
    if (def == NULL) {
        return NULL;
    }
    if (!PyArg_ParseTuple(args, "i:call_state_registration_func", &i))
        return NULL;
    switch (i) {
        case 0:
            mod = PyState_FindModule(def);
            if (mod == NULL) {
                Py_RETURN_NONE;
            }
            return mod;
        case 1:
            ret = PyState_AddModule(mod, def);
            if (ret != 0) {
                return NULL;
            }
            break;
        case 2:
            ret = PyState_RemoveModule(def);
            if (ret != 0) {
                return NULL;
            }
            break;
    }
    Py_RETURN_NONE;
}
Exemple #2
0
//-------------------------------------------------------------------------------------
bool install_py_dlls(void)
{
	PyObject *modules = PyImport_GetModuleDict();
	int i = 0;

	while(true)
	{
		if(g_funs[i] == NULL)
			break;

		DEBUG_MSG(fmt::format("Script::install_py_dlls(): {}\n", g_sfuns[i]));
		PyObject * m = (*g_funs[i++])();
		if(m == NULL)
		{
			return false;
		}

		struct PyModuleDef *def;
		def = PyModule_GetDef(m);
		if (!def) {
			PyErr_BadInternalCall();
			Py_DECREF(m);
			return false;
		}

		if (PyState_AddModule(m, def) < 0 || PyDict_SetItemString(modules, def->m_name, m) < 0)
		{
			Py_DECREF(m);
			return false;
		}

		g_importedModules[i - 1] = m;
	}

	return true;
}