bpo-1635741: Port syslog module to multiphase initialization (GH-19907) · python/cpython@92a98ed

@@ -261,72 +261,55 @@ static PyMethodDef syslog_methods[] = {

261261

{NULL, NULL, 0}

262262

};

263263264-

/* 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-

};

278264279-

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);

300283301284

/* 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

314297315298

/* 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);

330313331314

#ifndef LOG_SYSLOG

332315

#define LOG_SYSLOG LOG_DAEMON

@@ -341,14 +324,35 @@ PyInit_syslog(void)

341324

#define LOG_CRON LOG_DAEMON

342325

#endif

343326344-

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);

348331349332

#ifdef LOG_AUTHPRIV

350-

PyModule_AddIntMacro(m, LOG_AUTHPRIV);

333+

ADD_INT_MACRO(module, LOG_AUTHPRIV);

351334

#endif

352335353-

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+

}