gh-103092: Isolate winsound (#103249)

This commit is contained in:
AN Long 2023-04-11 05:01:05 +08:00 committed by GitHub
parent 5ed2f19b39
commit f80014a9b0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 26 deletions

View File

@ -0,0 +1 @@
Adapt the :mod:`winsound` extension module to :pep:`687`.

View File

@ -204,31 +204,13 @@ static struct PyMethodDef sound_methods[] =
#define ADD_DEFINE(CONST) do { \ #define ADD_DEFINE(CONST) do { \
if (PyModule_AddIntConstant(module, #CONST, CONST) < 0) { \ if (PyModule_AddIntConstant(module, #CONST, CONST) < 0) { \
goto error; \ return -1; \
} \ } \
} while (0) } while (0)
static int
static struct PyModuleDef winsoundmodule = { exec_module(PyObject *module)
PyModuleDef_HEAD_INIT,
"winsound",
sound_module_doc,
-1,
sound_methods,
NULL,
NULL,
NULL,
NULL
};
PyMODINIT_FUNC
PyInit_winsound(void)
{ {
PyObject *module = PyModule_Create(&winsoundmodule);
if (module == NULL) {
return NULL;
}
ADD_DEFINE(SND_ASYNC); ADD_DEFINE(SND_ASYNC);
ADD_DEFINE(SND_NODEFAULT); ADD_DEFINE(SND_NODEFAULT);
ADD_DEFINE(SND_NOSTOP); ADD_DEFINE(SND_NOSTOP);
@ -248,9 +230,24 @@ PyInit_winsound(void)
#undef ADD_DEFINE #undef ADD_DEFINE
return module; return 0;
}
error:
Py_DECREF(module); static PyModuleDef_Slot sound_slots[] = {
return NULL; {Py_mod_exec, exec_module},
{0, NULL}
};
static struct PyModuleDef winsoundmodule = {
.m_base = PyModuleDef_HEAD_INIT,
.m_name = "winsound",
.m_doc = sound_module_doc,
.m_methods = sound_methods,
.m_slots = sound_slots,
};
PyMODINIT_FUNC
PyInit_winsound(void)
{
return PyModuleDef_Init(&winsoundmodule);
} }