@@ -1509,139 +1509,142 @@ new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict)
15091509}
15101510#endif /* MS_WINDOWS */
15111511
1512- static void
1513- setint (PyObject * d , const char * name , long value )
1514- {
1515- PyObject * o = PyLong_FromLong (value );
1516- if (o ) {
1517- PyDict_SetItemString (d , name , o );
1518- Py_DECREF (o );
1519- }
1520- }
1521-
15221512static int
15231513mmap_exec (PyObject * module )
15241514{
15251515 if (PyType_Ready (& mmap_object_type ) < 0 ) {
15261516 return -1 ;
15271517 }
15281518
1529- PyObject * dict = PyModule_GetDict (module );
1530- if (!dict ) {
1519+ if (PyModule_AddObject (module , "error" , PyExc_OSError ) < 0 ) {
15311520 return -1 ;
15321521 }
1533- PyDict_SetItemString (dict , "error" , PyExc_OSError );
1534- PyDict_SetItemString (dict , "mmap" , (PyObject * ) & mmap_object_type );
1522+ if (PyModule_AddType (module , & mmap_object_type ) < 0 ) {
1523+ return -1 ;
1524+ }
1525+
1526+ #define ADD_INT_MACRO (module , macro ) \
1527+ do { \
1528+ if (PyModule_AddIntConstant(module, #macro, macro) < 0) { \
1529+ return -1; \
1530+ } \
1531+ } while (0)
1532+
15351533#ifdef PROT_EXEC
1536- setint ( dict , "PROT_EXEC" , PROT_EXEC );
1534+ ADD_INT_MACRO ( module , PROT_EXEC );
15371535#endif
15381536#ifdef PROT_READ
1539- setint ( dict , "PROT_READ" , PROT_READ );
1537+ ADD_INT_MACRO ( module , PROT_READ );
15401538#endif
15411539#ifdef PROT_WRITE
1542- setint ( dict , "PROT_WRITE" , PROT_WRITE );
1540+ ADD_INT_MACRO ( module , PROT_WRITE );
15431541#endif
15441542
15451543#ifdef MAP_SHARED
1546- setint ( dict , "MAP_SHARED" , MAP_SHARED );
1544+ ADD_INT_MACRO ( module , MAP_SHARED );
15471545#endif
15481546#ifdef MAP_PRIVATE
1549- setint ( dict , "MAP_PRIVATE" , MAP_PRIVATE );
1547+ ADD_INT_MACRO ( module , MAP_PRIVATE );
15501548#endif
15511549#ifdef MAP_DENYWRITE
1552- setint ( dict , "MAP_DENYWRITE" , MAP_DENYWRITE );
1550+ ADD_INT_MACRO ( module , MAP_DENYWRITE );
15531551#endif
15541552#ifdef MAP_EXECUTABLE
1555- setint ( dict , "MAP_EXECUTABLE" , MAP_EXECUTABLE );
1553+ ADD_INT_MACRO ( module , MAP_EXECUTABLE );
15561554#endif
15571555#ifdef MAP_ANONYMOUS
1558- setint (dict , "MAP_ANON" , MAP_ANONYMOUS );
1559- setint (dict , "MAP_ANONYMOUS" , MAP_ANONYMOUS );
1556+ if (PyModule_AddIntConstant (module , "MAP_ANON" , MAP_ANONYMOUS ) < 0 ) {
1557+ return -1 ;
1558+ }
1559+ ADD_INT_MACRO (module , MAP_ANONYMOUS );
15601560#endif
15611561#ifdef MAP_POPULATE
1562- setint ( dict , "MAP_POPULATE" , MAP_POPULATE );
1562+ ADD_INT_MACRO ( module , MAP_POPULATE );
15631563#endif
1564+ if (PyModule_AddIntConstant (module , "PAGESIZE" , (long )my_getpagesize ()) < 0 ) {
1565+ return -1 ;
1566+ }
15641567
1565- setint ( dict , "PAGESIZE " , (long )my_getpagesize ());
1566-
1567- setint ( dict , "ALLOCATIONGRANULARITY" , ( long ) my_getallocationgranularity ());
1568+ if ( PyModule_AddIntConstant ( module , "ALLOCATIONGRANULARITY " , (long )my_getallocationgranularity ()) < 0 ) {
1569+ return -1 ;
1570+ }
15681571
1569- setint ( dict , "ACCESS_DEFAULT" , ACCESS_DEFAULT );
1570- setint ( dict , "ACCESS_READ" , ACCESS_READ );
1571- setint ( dict , "ACCESS_WRITE" , ACCESS_WRITE );
1572- setint ( dict , "ACCESS_COPY" , ACCESS_COPY );
1572+ ADD_INT_MACRO ( module , ACCESS_DEFAULT );
1573+ ADD_INT_MACRO ( module , ACCESS_READ );
1574+ ADD_INT_MACRO ( module , ACCESS_WRITE );
1575+ ADD_INT_MACRO ( module , ACCESS_COPY );
15731576
15741577#ifdef HAVE_MADVISE
15751578 // Conventional advice values
15761579#ifdef MADV_NORMAL
1577- setint ( dict , "MADV_NORMAL" , MADV_NORMAL );
1580+ ADD_INT_MACRO ( module , MADV_NORMAL );
15781581#endif
15791582#ifdef MADV_RANDOM
1580- setint ( dict , "MADV_RANDOM" , MADV_RANDOM );
1583+ ADD_INT_MACRO ( module , MADV_RANDOM );
15811584#endif
15821585#ifdef MADV_SEQUENTIAL
1583- setint ( dict , "MADV_SEQUENTIAL" , MADV_SEQUENTIAL );
1586+ ADD_INT_MACRO ( module , MADV_SEQUENTIAL );
15841587#endif
15851588#ifdef MADV_WILLNEED
1586- setint ( dict , "MADV_WILLNEED" , MADV_WILLNEED );
1589+ ADD_INT_MACRO ( module , MADV_WILLNEED );
15871590#endif
15881591#ifdef MADV_DONTNEED
1589- setint ( dict , "MADV_DONTNEED" , MADV_DONTNEED );
1592+ ADD_INT_MACRO ( module , MADV_DONTNEED );
15901593#endif
15911594
15921595 // Linux-specific advice values
15931596#ifdef MADV_REMOVE
1594- setint ( dict , "MADV_REMOVE" , MADV_REMOVE );
1597+ ADD_INT_MACRO ( module , MADV_REMOVE );
15951598#endif
15961599#ifdef MADV_DONTFORK
1597- setint ( dict , "MADV_DONTFORK" , MADV_DONTFORK );
1600+ ADD_INT_MACRO ( module , MADV_DONTFORK );
15981601#endif
15991602#ifdef MADV_DOFORK
1600- setint ( dict , "MADV_DOFORK" , MADV_DOFORK );
1603+ ADD_INT_MACRO ( module , MADV_DOFORK );
16011604#endif
16021605#ifdef MADV_HWPOISON
1603- setint ( dict , "MADV_HWPOISON" , MADV_HWPOISON );
1606+ ADD_INT_MACRO ( module , MADV_HWPOISON );
16041607#endif
16051608#ifdef MADV_MERGEABLE
1606- setint ( dict , "MADV_MERGEABLE" , MADV_MERGEABLE );
1609+ ADD_INT_MACRO ( module , MADV_MERGEABLE );
16071610#endif
16081611#ifdef MADV_UNMERGEABLE
1609- setint ( dict , "MADV_UNMERGEABLE" , MADV_UNMERGEABLE );
1612+ ADD_INT_MACRO ( module , MADV_UNMERGEABLE );
16101613#endif
16111614#ifdef MADV_SOFT_OFFLINE
1612- setint ( dict , "MADV_SOFT_OFFLINE" , MADV_SOFT_OFFLINE );
1615+ ADD_INT_MACRO ( module , MADV_SOFT_OFFLINE );
16131616#endif
16141617#ifdef MADV_HUGEPAGE
1615- setint ( dict , "MADV_HUGEPAGE" , MADV_HUGEPAGE );
1618+ ADD_INT_MACRO ( module , MADV_HUGEPAGE );
16161619#endif
16171620#ifdef MADV_NOHUGEPAGE
1618- setint ( dict , "MADV_NOHUGEPAGE" , MADV_NOHUGEPAGE );
1621+ ADD_INT_MACRO ( module , MADV_NOHUGEPAGE );
16191622#endif
16201623#ifdef MADV_DONTDUMP
1621- setint ( dict , "MADV_DONTDUMP" , MADV_DONTDUMP );
1624+ ADD_INT_MACRO ( module , MADV_DONTDUMP );
16221625#endif
16231626#ifdef MADV_DODUMP
1624- setint ( dict , "MADV_DODUMP" , MADV_DODUMP );
1627+ ADD_INT_MACRO ( module , MADV_DODUMP );
16251628#endif
16261629#ifdef MADV_FREE // (Also present on FreeBSD and macOS.)
1627- setint ( dict , "MADV_FREE" , MADV_FREE );
1630+ ADD_INT_MACRO ( module , MADV_FREE );
16281631#endif
16291632
16301633 // FreeBSD-specific
16311634#ifdef MADV_NOSYNC
1632- setint ( dict , "MADV_NOSYNC" , MADV_NOSYNC );
1635+ ADD_INT_MACRO ( module , MADV_NOSYNC );
16331636#endif
16341637#ifdef MADV_AUTOSYNC
1635- setint ( dict , "MADV_AUTOSYNC" , MADV_AUTOSYNC );
1638+ ADD_INT_MACRO ( module , MADV_AUTOSYNC );
16361639#endif
16371640#ifdef MADV_NOCORE
1638- setint ( dict , "MADV_NOCORE" , MADV_NOCORE );
1641+ ADD_INT_MACRO ( module , MADV_NOCORE );
16391642#endif
16401643#ifdef MADV_CORE
1641- setint ( dict , "MADV_CORE" , MADV_CORE );
1644+ ADD_INT_MACRO ( module , MADV_CORE );
16421645#endif
16431646#ifdef MADV_PROTECT
1644- setint ( dict , "MADV_PROTECT" , MADV_PROTECT );
1647+ ADD_INT_MACRO ( module , MADV_PROTECT );
16451648#endif
16461649#endif // HAVE_MADVISE
16471650 return 0 ;
@@ -1663,4 +1666,4 @@ PyMODINIT_FUNC
16631666PyInit_mmap (void )
16641667{
16651668 return PyModuleDef_Init (& mmapmodule );
1666- }
1669+ }
0 commit comments