[Python-checkins] gh-103092: Isolate winsound (#103249)
erlend-aasland
webhook-mailer at python.org
Mon Apr 10 17:01:13 EDT 2023
https://github.com/python/cpython/commit/f80014a9b0e8d00df3e65379070be1dfd2721682
commit: f80014a9b0e8d00df3e65379070be1dfd2721682
branch: main
author: AN Long <aisk at users.noreply.github.com>
committer: erlend-aasland <erlend.aasland at protonmail.com>
date: 2023-04-10T23:01:05+02:00
summary:
gh-103092: Isolate winsound (#103249)
files:
A Misc/NEWS.d/next/Library/2023-04-04-21-27-51.gh-issue-103092.7s7Bzf.rst
M PC/winsound.c
diff --git a/Misc/NEWS.d/next/Library/2023-04-04-21-27-51.gh-issue-103092.7s7Bzf.rst b/Misc/NEWS.d/next/Library/2023-04-04-21-27-51.gh-issue-103092.7s7Bzf.rst
new file mode 100644
index 000000000000..39c62ffbe8c6
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2023-04-04-21-27-51.gh-issue-103092.7s7Bzf.rst
@@ -0,0 +1 @@
+Adapt the :mod:`winsound` extension module to :pep:`687`.
diff --git a/PC/winsound.c b/PC/winsound.c
index bae8e4497957..17ce2ef423b1 100644
--- a/PC/winsound.c
+++ b/PC/winsound.c
@@ -204,31 +204,13 @@ static struct PyMethodDef sound_methods[] =
#define ADD_DEFINE(CONST) do { \
if (PyModule_AddIntConstant(module, #CONST, CONST) < 0) { \
- goto error; \
+ return -1; \
} \
} while (0)
-
-static struct PyModuleDef winsoundmodule = {
- PyModuleDef_HEAD_INIT,
- "winsound",
- sound_module_doc,
- -1,
- sound_methods,
- NULL,
- NULL,
- NULL,
- NULL
-};
-
-PyMODINIT_FUNC
-PyInit_winsound(void)
+static int
+exec_module(PyObject *module)
{
- PyObject *module = PyModule_Create(&winsoundmodule);
- if (module == NULL) {
- return NULL;
- }
-
ADD_DEFINE(SND_ASYNC);
ADD_DEFINE(SND_NODEFAULT);
ADD_DEFINE(SND_NOSTOP);
@@ -248,9 +230,24 @@ PyInit_winsound(void)
#undef ADD_DEFINE
- return module;
+ return 0;
+}
+
+static PyModuleDef_Slot sound_slots[] = {
+ {Py_mod_exec, exec_module},
+ {0, NULL}
+};
-error:
- Py_DECREF(module);
- return 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);
}
More information about the Python-checkins
mailing list