@@ -340,155 +340,174 @@ resource_methods[] = {
340
340
/* Module initialization */
341
341
342
342
343
- static struct PyModuleDef resourcemodule = {
344
- PyModuleDef_HEAD_INIT ,
345
- "resource" ,
346
- NULL ,
347
- -1 ,
348
- resource_methods ,
349
- NULL ,
350
- NULL ,
351
- NULL ,
352
- NULL
353
- };
354
-
355
- PyMODINIT_FUNC
356
- PyInit_resource (void )
343
+ static int
344
+ resource_exec (PyObject * module )
357
345
{
358
- PyObject * m , * v ;
359
-
360
- /* Create the module and add the functions */
361
- m = PyModule_Create ( & resourcemodule );
362
- if ( m == NULL )
363
- return NULL ;
346
+ #define ADD_INT ( module , value ) \
347
+ do { \
348
+ if (PyModule_AddIntConstant( module, #value, value) < 0) { \
349
+ return -1; \
350
+ } \
351
+ } while (0)
364
352
365
353
/* Add some symbolic constants to the module */
366
354
Py_INCREF (PyExc_OSError );
367
- PyModule_AddObject (m , "error" , PyExc_OSError );
355
+ if (PyModule_AddObject (module , "error" , PyExc_OSError ) < 0 ) {
356
+ Py_DECREF (PyExc_OSError );
357
+ return -1 ;
358
+ }
368
359
if (!initialized ) {
369
360
if (PyStructSequence_InitType2 (& StructRUsageType ,
370
361
& struct_rusage_desc ) < 0 )
371
- return NULL ;
362
+ return -1 ;
372
363
}
373
364
374
- Py_INCREF ( & StructRUsageType );
375
- PyModule_AddObject ( m , "struct_rusage" ,
376
- ( PyObject * ) & StructRUsageType );
365
+ if ( PyModule_AddType ( module , & StructRUsageType ) < 0 ) {
366
+ return -1 ;
367
+ }
377
368
378
369
/* insert constants */
379
370
#ifdef RLIMIT_CPU
380
- PyModule_AddIntMacro ( m , RLIMIT_CPU );
371
+ ADD_INT ( module , RLIMIT_CPU );
381
372
#endif
382
373
383
374
#ifdef RLIMIT_FSIZE
384
- PyModule_AddIntMacro ( m , RLIMIT_FSIZE );
375
+ ADD_INT ( module , RLIMIT_FSIZE );
385
376
#endif
386
377
387
378
#ifdef RLIMIT_DATA
388
- PyModule_AddIntMacro ( m , RLIMIT_DATA );
379
+ ADD_INT ( module , RLIMIT_DATA );
389
380
#endif
390
381
391
382
#ifdef RLIMIT_STACK
392
- PyModule_AddIntMacro ( m , RLIMIT_STACK );
383
+ ADD_INT ( module , RLIMIT_STACK );
393
384
#endif
394
385
395
386
#ifdef RLIMIT_CORE
396
- PyModule_AddIntMacro ( m , RLIMIT_CORE );
387
+ ADD_INT ( module , RLIMIT_CORE );
397
388
#endif
398
389
399
390
#ifdef RLIMIT_NOFILE
400
- PyModule_AddIntMacro ( m , RLIMIT_NOFILE );
391
+ ADD_INT ( module , RLIMIT_NOFILE );
401
392
#endif
402
393
403
394
#ifdef RLIMIT_OFILE
404
- PyModule_AddIntMacro ( m , RLIMIT_OFILE );
395
+ ADD_INT ( module , RLIMIT_OFILE );
405
396
#endif
406
397
407
398
#ifdef RLIMIT_VMEM
408
- PyModule_AddIntMacro ( m , RLIMIT_VMEM );
399
+ ADD_INT ( module , RLIMIT_VMEM );
409
400
#endif
410
401
411
402
#ifdef RLIMIT_AS
412
- PyModule_AddIntMacro ( m , RLIMIT_AS );
403
+ ADD_INT ( module , RLIMIT_AS );
413
404
#endif
414
405
415
406
#ifdef RLIMIT_RSS
416
- PyModule_AddIntMacro ( m , RLIMIT_RSS );
407
+ ADD_INT ( module , RLIMIT_RSS );
417
408
#endif
418
409
419
410
#ifdef RLIMIT_NPROC
420
- PyModule_AddIntMacro ( m , RLIMIT_NPROC );
411
+ ADD_INT ( module , RLIMIT_NPROC );
421
412
#endif
422
413
423
414
#ifdef RLIMIT_MEMLOCK
424
- PyModule_AddIntMacro ( m , RLIMIT_MEMLOCK );
415
+ ADD_INT ( module , RLIMIT_MEMLOCK );
425
416
#endif
426
417
427
418
#ifdef RLIMIT_SBSIZE
428
- PyModule_AddIntMacro ( m , RLIMIT_SBSIZE );
419
+ ADD_INT ( module , RLIMIT_SBSIZE );
429
420
#endif
430
421
431
422
/* Linux specific */
432
423
#ifdef RLIMIT_MSGQUEUE
433
- PyModule_AddIntMacro ( m , RLIMIT_MSGQUEUE );
424
+ ADD_INT ( module , RLIMIT_MSGQUEUE );
434
425
#endif
435
426
436
427
#ifdef RLIMIT_NICE
437
- PyModule_AddIntMacro ( m , RLIMIT_NICE );
428
+ ADD_INT ( module , RLIMIT_NICE );
438
429
#endif
439
430
440
431
#ifdef RLIMIT_RTPRIO
441
- PyModule_AddIntMacro ( m , RLIMIT_RTPRIO );
432
+ ADD_INT ( module , RLIMIT_RTPRIO );
442
433
#endif
443
434
444
435
#ifdef RLIMIT_RTTIME
445
- PyModule_AddIntMacro ( m , RLIMIT_RTTIME );
436
+ ADD_INT ( module , RLIMIT_RTTIME );
446
437
#endif
447
438
448
439
#ifdef RLIMIT_SIGPENDING
449
- PyModule_AddIntMacro ( m , RLIMIT_SIGPENDING );
440
+ ADD_INT ( module , RLIMIT_SIGPENDING );
450
441
#endif
451
442
452
443
/* target */
453
444
#ifdef RUSAGE_SELF
454
- PyModule_AddIntMacro ( m , RUSAGE_SELF );
445
+ ADD_INT ( module , RUSAGE_SELF );
455
446
#endif
456
447
457
448
#ifdef RUSAGE_CHILDREN
458
- PyModule_AddIntMacro ( m , RUSAGE_CHILDREN );
449
+ ADD_INT ( module , RUSAGE_CHILDREN );
459
450
#endif
460
451
461
452
#ifdef RUSAGE_BOTH
462
- PyModule_AddIntMacro ( m , RUSAGE_BOTH );
453
+ ADD_INT ( module , RUSAGE_BOTH );
463
454
#endif
464
455
465
456
#ifdef RUSAGE_THREAD
466
- PyModule_AddIntMacro ( m , RUSAGE_THREAD );
457
+ ADD_INT ( module , RUSAGE_THREAD );
467
458
#endif
468
459
469
460
/* FreeBSD specific */
470
461
471
462
#ifdef RLIMIT_SWAP
472
- PyModule_AddIntMacro ( m , RLIMIT_SWAP );
463
+ ADD_INT ( module , RLIMIT_SWAP );
473
464
#endif
474
465
475
466
#ifdef RLIMIT_SBSIZE
476
- PyModule_AddIntMacro ( m , RLIMIT_SBSIZE );
467
+ ADD_INT ( module , RLIMIT_SBSIZE );
477
468
#endif
478
469
479
470
#ifdef RLIMIT_NPTS
480
- PyModule_AddIntMacro ( m , RLIMIT_NPTS );
471
+ ADD_INT ( module , RLIMIT_NPTS );
481
472
#endif
482
473
474
+ PyObject * v ;
483
475
if (sizeof (RLIM_INFINITY ) > sizeof (long )) {
484
476
v = PyLong_FromLongLong ((long long ) RLIM_INFINITY );
485
477
} else
486
478
{
487
479
v = PyLong_FromLong ((long ) RLIM_INFINITY );
488
480
}
489
- if (v ) {
490
- PyModule_AddObject (m , "RLIM_INFINITY" , v );
481
+ if (!v ) {
482
+ return -1 ;
483
+ }
484
+
485
+ if (PyModule_AddObject (module , "RLIM_INFINITY" , v ) < 0 ) {
486
+ Py_DECREF (v );
487
+ return -1 ;
491
488
}
489
+
492
490
initialized = 1 ;
493
- return m ;
491
+ return 0 ;
492
+
493
+ #undef ADD_INT
494
+ }
495
+
496
+ static struct PyModuleDef_Slot resource_slots [] = {
497
+ {Py_mod_exec , resource_exec },
498
+ {0 , NULL }
499
+ };
500
+
501
+ static struct PyModuleDef resourcemodule = {
502
+ PyModuleDef_HEAD_INIT ,
503
+ .m_name = "resource" ,
504
+ .m_size = 0 ,
505
+ .m_methods = resource_methods ,
506
+ .m_slots = resource_slots ,
507
+ };
508
+
509
+ PyMODINIT_FUNC
510
+ PyInit_resource (void )
511
+ {
512
+ return PyModuleDef_Init (& resourcemodule );
494
513
}
0 commit comments