Skip to content

Commit 92a98ed

Browse files
authored
bpo-1635741: Port syslog module to multiphase initialization (GH-19907)
1 parent 9d74658 commit 92a98ed

File tree

2 files changed

+64
-59
lines changed

2 files changed

+64
-59
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Port :mod:`syslog` to multiphase initialization (:pep:`489`).

Modules/syslogmodule.c

Lines changed: 63 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -261,72 +261,55 @@ static PyMethodDef syslog_methods[] = {
261261
{NULL, NULL, 0}
262262
};
263263

264-
/* Initialization function for the module */
265-
266-
267-
static struct PyModuleDef syslogmodule = {
268-
PyModuleDef_HEAD_INIT,
269-
"syslog",
270-
NULL,
271-
-1,
272-
syslog_methods,
273-
NULL,
274-
NULL,
275-
NULL,
276-
NULL
277-
};
278264

279-
PyMODINIT_FUNC
280-
PyInit_syslog(void)
265+
static int
266+
syslog_exec(PyObject *module)
281267
{
282-
PyObject *m;
283-
284-
/* Create the module and add the functions */
285-
m = PyModule_Create(&syslogmodule);
286-
if (m == NULL)
287-
return NULL;
288-
289-
/* Add some symbolic constants to the module */
290-
268+
#define ADD_INT_MACRO(module, macro) \
269+
do { \
270+
if (PyModule_AddIntConstant(module, #macro, macro) < 0) { \
271+
return -1; \
272+
} \
273+
} while (0)
291274
/* Priorities */
292-
PyModule_AddIntMacro(m, LOG_EMERG);
293-
PyModule_AddIntMacro(m, LOG_ALERT);
294-
PyModule_AddIntMacro(m, LOG_CRIT);
295-
PyModule_AddIntMacro(m, LOG_ERR);
296-
PyModule_AddIntMacro(m, LOG_WARNING);
297-
PyModule_AddIntMacro(m, LOG_NOTICE);
298-
PyModule_AddIntMacro(m, LOG_INFO);
299-
PyModule_AddIntMacro(m, LOG_DEBUG);
275+
ADD_INT_MACRO(module, LOG_EMERG);
276+
ADD_INT_MACRO(module, LOG_ALERT);
277+
ADD_INT_MACRO(module, LOG_CRIT);
278+
ADD_INT_MACRO(module, LOG_ERR);
279+
ADD_INT_MACRO(module, LOG_WARNING);
280+
ADD_INT_MACRO(module, LOG_NOTICE);
281+
ADD_INT_MACRO(module, LOG_INFO);
282+
ADD_INT_MACRO(module, LOG_DEBUG);
300283

301284
/* openlog() option flags */
302-
PyModule_AddIntMacro(m, LOG_PID);
303-
PyModule_AddIntMacro(m, LOG_CONS);
304-
PyModule_AddIntMacro(m, LOG_NDELAY);
285+
ADD_INT_MACRO(module, LOG_PID);
286+
ADD_INT_MACRO(module, LOG_CONS);
287+
ADD_INT_MACRO(module, LOG_NDELAY);
305288
#ifdef LOG_ODELAY
306-
PyModule_AddIntMacro(m, LOG_ODELAY);
289+
ADD_INT_MACRO(module, LOG_ODELAY);
307290
#endif
308291
#ifdef LOG_NOWAIT
309-
PyModule_AddIntMacro(m, LOG_NOWAIT);
292+
ADD_INT_MACRO(module, LOG_NOWAIT);
310293
#endif
311294
#ifdef LOG_PERROR
312-
PyModule_AddIntMacro(m, LOG_PERROR);
295+
ADD_INT_MACRO(module, LOG_PERROR);
313296
#endif
314297

315298
/* Facilities */
316-
PyModule_AddIntMacro(m, LOG_KERN);
317-
PyModule_AddIntMacro(m, LOG_USER);
318-
PyModule_AddIntMacro(m, LOG_MAIL);
319-
PyModule_AddIntMacro(m, LOG_DAEMON);
320-
PyModule_AddIntMacro(m, LOG_AUTH);
321-
PyModule_AddIntMacro(m, LOG_LPR);
322-
PyModule_AddIntMacro(m, LOG_LOCAL0);
323-
PyModule_AddIntMacro(m, LOG_LOCAL1);
324-
PyModule_AddIntMacro(m, LOG_LOCAL2);
325-
PyModule_AddIntMacro(m, LOG_LOCAL3);
326-
PyModule_AddIntMacro(m, LOG_LOCAL4);
327-
PyModule_AddIntMacro(m, LOG_LOCAL5);
328-
PyModule_AddIntMacro(m, LOG_LOCAL6);
329-
PyModule_AddIntMacro(m, LOG_LOCAL7);
299+
ADD_INT_MACRO(module, LOG_KERN);
300+
ADD_INT_MACRO(module, LOG_USER);
301+
ADD_INT_MACRO(module, LOG_MAIL);
302+
ADD_INT_MACRO(module, LOG_DAEMON);
303+
ADD_INT_MACRO(module, LOG_AUTH);
304+
ADD_INT_MACRO(module, LOG_LPR);
305+
ADD_INT_MACRO(module, LOG_LOCAL0);
306+
ADD_INT_MACRO(module, LOG_LOCAL1);
307+
ADD_INT_MACRO(module, LOG_LOCAL2);
308+
ADD_INT_MACRO(module, LOG_LOCAL3);
309+
ADD_INT_MACRO(module, LOG_LOCAL4);
310+
ADD_INT_MACRO(module, LOG_LOCAL5);
311+
ADD_INT_MACRO(module, LOG_LOCAL6);
312+
ADD_INT_MACRO(module, LOG_LOCAL7);
330313

331314
#ifndef LOG_SYSLOG
332315
#define LOG_SYSLOG LOG_DAEMON
@@ -341,14 +324,35 @@ PyInit_syslog(void)
341324
#define LOG_CRON LOG_DAEMON
342325
#endif
343326

344-
PyModule_AddIntMacro(m, LOG_SYSLOG);
345-
PyModule_AddIntMacro(m, LOG_CRON);
346-
PyModule_AddIntMacro(m, LOG_UUCP);
347-
PyModule_AddIntMacro(m, LOG_NEWS);
327+
ADD_INT_MACRO(module, LOG_SYSLOG);
328+
ADD_INT_MACRO(module, LOG_CRON);
329+
ADD_INT_MACRO(module, LOG_UUCP);
330+
ADD_INT_MACRO(module, LOG_NEWS);
348331

349332
#ifdef LOG_AUTHPRIV
350-
PyModule_AddIntMacro(m, LOG_AUTHPRIV);
333+
ADD_INT_MACRO(module, LOG_AUTHPRIV);
351334
#endif
352335

353-
return m;
336+
return 0;
354337
}
338+
339+
static PyModuleDef_Slot syslog_slots[] = {
340+
{Py_mod_exec, syslog_exec},
341+
{0, NULL}
342+
};
343+
344+
/* Initialization function for the module */
345+
346+
static struct PyModuleDef syslogmodule = {
347+
PyModuleDef_HEAD_INIT,
348+
.m_name = "syslog",
349+
.m_size = 0,
350+
.m_methods = syslog_methods,
351+
.m_slots = syslog_slots,
352+
};
353+
354+
PyMODINIT_FUNC
355+
PyInit_syslog(void)
356+
{
357+
return PyModuleDef_Init(&syslogmodule);
358+
}

0 commit comments

Comments
 (0)