@@ -1509,157 +1509,163 @@ new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict)
1509
1509
}
1510
1510
#endif /* MS_WINDOWS */
1511
1511
1512
- static void
1513
- setint (PyObject * d , const char * name , long value )
1512
+ static int
1513
+ mmap_exec (PyObject * module )
1514
1514
{
1515
- PyObject * o = PyLong_FromLong (value );
1516
- if (o ) {
1517
- PyDict_SetItemString (d , name , o );
1518
- Py_DECREF (o );
1515
+ if (PyType_Ready (& mmap_object_type ) < 0 ) {
1516
+ return -1 ;
1519
1517
}
1520
- }
1521
-
1522
1518
1523
- static struct PyModuleDef mmapmodule = {
1524
- PyModuleDef_HEAD_INIT ,
1525
- "mmap" ,
1526
- NULL ,
1527
10000
- -1 ,
1528
- NULL ,
1529
- NULL ,
1530
- NULL ,
1531
- NULL ,
1532
- NULL
1533
- };
1534
-
1535
- PyMODINIT_FUNC
1536
- PyInit_mmap (void )
1537
- {
1538
- PyObject * dict , * module ;
1519
+ Py_INCREF (PyExc_OSError );
1520
+ if (PyModule_AddObject (module , "error" , PyExc_OSError ) < 0 ) {
1521
+ Py_DECREF (PyExc_OSError );
1522
+ return -1 ;
1523
+ }
1524
+ if (PyModule_AddType (module , & mmap_object_type ) < 0 ) {
1525
+ return -1 ;
1526
+ }
1539
1527
1540
- if (PyType_Ready (& mmap_object_type ) < 0 )
1541
- return NULL ;
1528
+ #define ADD_INT_MACRO (module , constant ) \
1529
+ do { \
1530
+ if (PyModule_AddIntConstant(module, #constant, constant) < 0) { \
1531
+ return -1; \
1532
+ } \
1533
+ } while (0)
1542
1534
1543
- module = PyModule_Create (& mmapmodule );
1544
- if (module == NULL )
1545
- return NULL ;
1546
- dict = PyModule_GetDict (module );
1547
- if (!dict )
1548
- return NULL ;
1549
- PyDict_SetItemString (dict , "error" , PyExc_OSError );
1550
- PyDict_SetItemString (dict , "mmap" , (PyObject * ) & mmap_object_type );
1551
1535
#ifdef PROT_EXEC
1552
- setint ( dict , "PROT_EXEC" , PROT_EXEC );
1536
+ ADD_INT_MACRO ( module , PROT_EXEC );
1553
1537
#endif
1554
1538
#ifdef PROT_READ
1555
- setint ( dict , "PROT_READ" , PROT_READ );
1539
+ ADD_INT_MACRO ( module , PROT_READ );
1556
1540
#endif
1557
1541
#ifdef PROT_WRITE
1558
- setint ( dict , "PROT_WRITE" , PROT_WRITE );
1542
+ ADD_INT_MACRO ( module , PROT_WRITE );
1559
1543
#endif
1560
1544
1561
1545
#ifdef MAP_SHARED
1562
- setint ( dict , "MAP_SHARED" , MAP_SHARED );
1546
+ ADD_INT_MACRO ( module , MAP_SHARED );
1563
1547
#endif
1564
1548
#ifdef MAP_PRIVATE
1565
- setint ( dict , "MAP_PRIVATE" , MAP_PRIVATE );
1549
+ ADD_INT_MACRO ( module , MAP_PRIVATE );
1566
1550
#endif
1567
1551
#ifdef MAP_DENYWRITE
1568
- setint ( dict , "MAP_DENYWRITE" , MAP_DENYWRITE );
1552
+ ADD_INT_MACRO ( module , MAP_DENYWRITE );
1569
1553
#endif
1570
1554
#ifdef MAP_EXECUTABLE
1571
- setint ( dict , "MAP_EXECUTABLE" , MAP_EXECUTABLE );
1555
+ ADD_INT_MACRO ( module , MAP_EXECUTABLE );
1572
1556
#endif
1573
1557
#ifdef MAP_ANONYMOUS
1574
- setint (dict , "MAP_ANON" , MAP_ANONYMOUS );
1575
- setint (dict , "MAP_ANONYMOUS" , MAP_ANONYMOUS );
1558
+ if (PyModule_AddIntConstant (module , "MAP_ANON" , MAP_ANONYMOUS ) < 0 ) {
1559
+ return -1 ;
1560
+ }
1561
+ ADD_INT_MACRO (module , MAP_ANONYMOUS );
1576
1562
#endif
1577
1563
#ifdef MAP_POPULATE
1578
- setint ( dict , "MAP_POPULATE" , MAP_POPULATE );
1564
+ ADD_INT_MACRO ( module , MAP_POPULATE );
1579
1565
#endif
1566
+ if (PyModule_AddIntConstant (module , "PAGESIZE" , (long )my_getpagesize ()) < 0 ) {
1567
+ return -1 ;
1568
+ }
1580
1569
1581
- setint ( dict , "PAGESIZE " , (long )my_getpagesize ());
1582
-
1583
- setint ( dict , "ALLOCATIONGRANULARITY" , ( long ) my_getallocationgranularity ());
1570
+ if ( PyModule_AddIntConstant ( module , "ALLOCATIONGRANULARITY " , (long )my_getallocationgranularity ()) < 0 ) {
1571
+ return -1 ;
1572
+ }
1584
1573
1585
- setint ( dict , "ACCESS_DEFAULT" , ACCESS_DEFAULT );
1586
- setint ( dict , "ACCESS_READ" , ACCESS_READ );
1587
- setint ( dict , "ACCESS_WRITE" , ACCESS_WRITE );
1588
- setint ( dict , "ACCESS_COPY" , ACCESS_COPY );
1574
+ ADD_INT_MACRO ( module , ACCESS_DEFAULT );
1575
+ ADD_INT_MACRO ( module , ACCESS_READ );
1576
+ ADD_INT_MACRO ( module , ACCESS_WRITE );
1577
+ ADD_INT_MACRO ( module , ACCESS_COPY );
1589
1578
1590
1579
#ifdef HAVE_MADVISE
1591
1580
// Conventional advice values
1592
1581
#ifdef MADV_NORMAL
1593
- setint ( dict , "MADV_NORMAL" , MADV_NORMAL );
1582
+ ADD_INT_MACRO ( module , MADV_NORMAL );
1594
1583
#endif
1595
1584
#ifdef MADV_RANDOM
1596
- setint ( dict , "MADV_RANDOM" , MADV_RANDOM );
1585
+ ADD_INT_MACRO ( module , MADV_RANDOM );
1597
1586
#endif
1598
1587
#ifdef MADV_SEQUENTIAL
1599
- setint ( dict , "MADV_SEQUENTIAL" , MADV_SEQUENTIAL );
1588
+ ADD_INT_MACRO ( module , MADV_SEQUENTIAL );
1600
1589
#endif
1601
1590
#ifdef MADV_WILLNEED
1602
- setint ( dict , "MADV_WILLNEED" , MADV_WILLNEED );
1591
+ ADD_INT_MACRO ( module , MADV_WILLNEED );
1603
1592
#endif
1604
1593
#ifdef MADV_DONTNEED
1605
- setint ( dict , "MADV_DONTNEED" , MADV_DONTNEED );
1594
+ ADD_INT_MACRO ( module , MADV_DONTNEED );
1606
1595
#endif
1607
1596
1608
1597
// Linux-specific advice values
1609
1598
#ifdef MADV_REMOVE
1610
- setint ( dict , "MADV_REMOVE" , MADV_REMOVE );
1599
+ ADD_INT_MACRO ( module , MADV_REMOVE );
1611
1600
#endif
1612
1601
#ifdef MADV_DONTFORK
1613
- setint ( dict , "MADV_DONTFORK" , MADV_DONTFORK );
1602
+ ADD_INT_MACRO ( module , MADV_DONTFORK );
1614
1603
#endif
1615
1604
#ifdef MADV_DOFORK
1616
- setint ( dict , "MADV_DOFORK" , MADV_DOFORK );
1605
+ ADD_INT_MACRO ( module , MADV_DOFORK );
1617
1606
#endif
1618
1607
#ifdef MADV_HWPOISON
1619
- setint ( dict , "MADV_HWPOISON" , MADV_HWPOISON );
1608
+ ADD_INT_MACRO ( module , MADV_HWPOISON );
1620
1609
#endif
1621
1610
#ifdef MADV_MERGEABLE
1622
- setint ( dict , "MADV_MERGEABLE" , MADV_MERGEABLE );
1611
+ ADD_INT_MACRO ( module , MADV_MERGEABLE );
1623
1612
#endif
1624
1613
#ifdef MADV_UNMERGEABLE
1625
- setint ( dict , "MADV_UNMERGEABLE" , MADV_UNMERGEABLE );
1614
+ ADD_INT_MACRO ( module , MADV_UNMERGEABLE );
1626
1615
#endif
1627
1616
#ifdef MADV_SOFT_OFFLINE
1628
- setint ( dict , "MADV_SOFT_OFFLINE" , MADV_SOFT_OFFLINE );
1617
+ ADD_INT_MACRO ( module , MADV_SOFT_OFFLINE );
1629
1618
#endif
1630
1619
#ifdef MADV_HUGEPAGE
1631
- setint ( dict , "MADV_HUGEPAGE" , MADV_HUGEPAGE );
1620
+ ADD_INT_MACRO ( module , MADV_HUGEPAGE );
1632
1621
#endif
1633
1622
#ifdef MADV_NOHUGEPAGE
1634
- setint ( dict , "MADV_NOHUGEPAGE" , MADV_NOHUGEPAGE );
1623
+ ADD_INT_MACRO ( module , MADV_NOHUGEPAGE );
1635
1624
#endif
1636
1625
#ifdef MADV_DONTDUMP
1637
- setint ( dict , "MADV_DONTDUMP" , MADV_DONTDUMP );
1626
+ ADD_INT_MACRO ( module , MADV_DONTDUMP );
1638
1627
#endif
1639
1628
#ifdef MADV_DODUMP
1640
- setint ( dict , "MADV_DODUMP" , MADV_DODUMP );
1629
+ ADD_INT_MACRO ( module , MADV_DODUMP );
1641
1630
#endif
1642
1631
#ifdef MADV_FREE // (Also present on FreeBSD and macOS.)
1643
- setint ( dict , "MADV_FREE" , MADV_FREE );
1632
+ ADD_INT_MACRO ( module , MADV_FREE );
1644
1633
#endif
1645
1634
1646
1635
// FreeBSD-specific
1647
1636
#ifdef MADV_NOSYNC
1648
- setint ( dict , "MADV_NOSYNC" , MADV_NOSYNC );
1637
+ ADD_INT_MACRO ( module , MADV_NOSYNC );
1649
1638
#endif
1650
1639
#ifdef MADV_AUTOSYNC
1651
- setint ( dict , "MADV_AUTOSYNC" , MADV_AUTOSYNC );
1640
+ ADD_INT_MACRO ( module , MADV_AUTOSYNC );
1652
1641
#endif
1653
1642
#ifdef MADV_NOCORE
1654
- setint ( dict , "MADV_NOCORE" , MADV_NOCORE );
1643
+ ADD_INT_MACRO ( module , MADV_NOCORE );
1655
1644
#endif
1656
1645
#ifdef MADV_CORE
1657
- setint ( dict , "MADV_CORE" , MADV_CORE );
1646
+ ADD_INT_MACRO ( module , MADV_CORE );
1658
1647
#endif
1659
1648
#ifdef MADV_PROTECT
1660
- setint ( dict , "MADV_PROTECT" , MADV_PROTECT );
1649
+ ADD_INT_MACRO ( module , MADV_PROTECT );
1661
1650
#endif
1662
1651
#endif // HAVE_MADVISE
1652
+ return 0 ;
1653
+ }
1663
1654
1664
- return module ;
1655
+ static PyModuleDef_Slot mmap_slots [] = {
1656
+ {Py_mod_exec , mmap_exec },
1657
+ {0 , NULL }
1658
+ };
1659
+
1660
+ static struct PyModuleDef mmapmodule = {
1661
+ PyModuleDef_HEAD_INIT ,
1662
+ .m_name = "mmap" ,
1663
+ .m_size = 0 ,
1664
+ .m_slots = mmap_slots ,
1665
+ };
1666
+
1667
+ PyMODINIT_FUNC
1668
+ PyInit_mmap (void )
1669
+ {
1670
+ return PyModuleDef_Init (& mmapmodule );
1665
1671
}
0 commit comments