@@ -492,113 +492,140 @@ ST_CTIME\n\
492
492
" );
493
493
494
494
495
+ static int
496
+ stat_exec (PyObject * module )
497
+ {
498
+ #define ADD_INT_MACRO (module , macro ) \
499
+ do { \
500
+ if (PyModule_AddIntConstant(module, #macro, macro) < 0) { \
501
+ return -1; \
502
+ } \
503
+ } while (0)
504
+
505
+ ADD_INT_MACRO (module , S_IFDIR );
506
+ ADD_INT_MACRO (module , S_IFCHR );
507
+ ADD_INT_MACRO (module , S_IFBLK );
508
+ ADD_INT_MACRO (module , S_IFREG );
509
+ ADD_INT_MACRO (module , S_IFIFO );
510
+ ADD_INT_MACRO (module , S_IFLNK );
511
+ ADD_INT_MACRO (module , S_IFSOCK );
512
+ ADD_INT_MACRO (module , S_IFDOOR );
513
+ ADD_INT_MACRO (module , S_IFPORT );
514
+ ADD_INT_MACRO (module , S_IFWHT );
515
+
516
+ ADD_INT_MACRO (module , S_ISUID );
517
+ ADD_INT_MACRO (module , S_ISGID );
518
+ ADD_INT_MACRO (module , S_ISVTX );
519
+ ADD_INT_MACRO (module , S_ENFMT );
520
+
521
+ ADD_INT_MACRO (module , S_IREAD );
522
+ ADD_INT_MACRO (module , S_IWRITE );
523
+ ADD_INT_MACRO (module , S_IEXEC );
524
+
525
+ ADD_INT_MACRO (module , S_IRWXU );
526
+ ADD_INT_MACRO (module , S_IRUSR );
527
+ ADD_INT_MACRO (module , S_IWUSR );
528
+ ADD_INT_MACRO (module , S_IXUSR );
529
+
530
+ ADD_INT_MACRO (module , S_IRWXG );
531
+ ADD_INT_MACRO (module , S_IRGRP );
532
+ ADD_INT_MACRO (module , S_IWGRP );
533
+ ADD_INT_MACRO (module , S_IXGRP );
534
+
535
+ ADD_INT_MACRO (module , S_IRWXO );
536
+ ADD_INT_MACRO (module , S_IROTH );
537
+ ADD_INT_MACRO (module , S_IWOTH );
538
+ ADD_INT_MACRO (module , S_IXOTH );
539
+
540
+ ADD_INT_MACRO (module , UF_NODUMP );
541
+ ADD_INT_MACRO (module , UF_IMMUTABLE );
542
+ ADD_INT_MACRO (module , UF_APPEND );
543
+ ADD_INT_MACRO (module , UF_OPAQUE );
544
+ ADD_INT_MACRO (module , UF_NOUNLINK );
545
+ ADD_INT_MACRO (module , UF_COMPRESSED );
546
+ ADD_INT_MACRO (module , UF_HIDDEN );
547
+ ADD_INT_MACRO (module , SF_ARCHIVED );
548
+ ADD_INT_MACRO (module , SF_IMMUTABLE );
549
+ ADD_INT_MACRO (module , SF_APPEND );
550
+ ADD_INT_MACRO (module , SF_NOUNLINK );
551
+ ADD_INT_MACRO (module , SF_SNAPSHOT );
552
+
553
+ const char * st_constants [] = {
554
+ "ST_MODE" ,
555
+ "ST_INO" ,
556
+ "ST_DEV" ,
557
+ "ST_NLINK" ,
558
+ "ST_UID" ,
559
+ "ST_GID" ,
560
+ "ST_SIZE" ,
561
+ "ST_ATIME" ,
562
+ "ST_MTIME" ,
563
+ "ST_CTIME"
564
+ };
565
+
566
+ for (int i = 0 ; i < Py_ARRAY_LENGTH (st_constants ); i ++ ) {
567
+ if (PyModule_AddIntConstant (module , st_constants [i ], i ) < 0 ) {
568
+ return -1 ;
569
+ }
570
+ }
571
+
572
+ #ifdef MS_WINDOWS
573
+ ADD_INT_MACRO (module , FILE_ATTRIBUTE_ARCHIVE );
574
+ ADD_INT_MACRO (module , FILE_ATTRIBUTE_COMPRESSED );
575
+ ADD_INT_MACRO (module , FILE_ATTRIBUTE_DEVICE );
576
+ ADD_INT_MACRO (module , FILE_ATTRIBUTE_DIRECTORY );
577
+ ADD_INT_MACRO (module , FILE_ATTRIBUTE_ENCRYPTED );
578
+ ADD_INT_MACRO (module , FILE_ATTRIBUTE_HIDDEN );
579
+ ADD_INT_MACRO (module , FILE_ATTRIBUTE_INTEGRITY_STREAM );
580
+ ADD_INT_MACRO (module , FILE_ATTRIBUTE_NORMAL );
581
+ ADD_INT_MACRO (module , FILE_ATTRIBUTE_NOT_CONTENT_INDEXED );
582
+ ADD_INT_MACRO (module , FILE_ATTRIBUTE_NO_SCRUB_DATA );
583
+ ADD_INT_MACRO (module , FILE_ATTRIBUTE_OFFLINE );
584
+ ADD_INT_MACRO (module , FILE_ATTRIBUTE_READONLY );
585
+ ADD_INT_MACRO (module , FILE_ATTRIBUTE_REPARSE_POINT );
586
+ ADD_INT_MACRO (module , FILE_ATTRIBUTE_SPARSE_FILE );
587
+ ADD_INT_MACRO (module , FILE_ATTRIBUTE_SYSTEM );
588
+ ADD_INT_MACRO (module , FILE_ATTRIBUTE_TEMPORARY );
589
+ ADD_INT_MACRO (module , FILE_ATTRIBUTE_VIRTUAL );
590
+
591
+ if (PyModule_AddObject (module , "IO_REPARSE_TAG_SYMLINK" ,
592
+ PyLong_FromUnsignedLong (IO_REPARSE_TAG_SYMLINK )) < 0 ) {
593
+ return -1 ;
594
+ }
595
+ if (PyModule_AddObject (module , "IO_REPARSE_TAG_MOUNT_POINT" ,
596
+ PyLong_FromUnsignedLong (IO_REPARSE_TAG_MOUNT_POINT )) < 0 ) {
597
+ return -1 ;
598
+ }
599
+ if (PyModule_AddObject (module , "IO_REPARSE_TAG_APPEXECLINK" ,
600
+ PyLong_FromUnsignedLong (IO_REPARSE_TAG_APPEXECLINK )) < 0 ) {
601
+ return -1 ;
602
+ }
603
+ #endif
604
+
605
+ return 0 ;
606
+ }
607
+
608
+
609
+ static PyModuleDef_Slot stat_slots [] = {
610
+ {Py_mod_exec , stat_exec },
611
+ {0 , NULL }
612
+ };
613
+
614
+
495
615
static struct PyModuleDef statmodule = {
496
616
PyModuleDef_HEAD_INIT ,
497
- "_stat" ,
498
- module_doc ,
499
- -1 ,
500
- stat_methods ,
501
- NULL ,
502
- NULL ,
503
- NULL ,
504
- NULL
617
+ .m_name = "_stat" ,
618
+ .m_doc = module_doc ,
619
+ .m_size = 0 ,
620
+ .m_methods = stat_methods ,
621
+ .m_slots = stat_slots ,
505
622
};
506
623
624
+
507
625
PyMODINIT_FUNC
508
626
PyInit__stat (void )
509
627
{
510
- PyObject * m ;
511
- m = PyModule_Create (& statmodule );
512
- if (m == NULL )
513
- return NULL ;
514
-
515
- if (PyModule_AddIntMacro (m , S_IFDIR )) return NULL ;
516
- if (PyModule_AddIntMacro (m , S_IFCHR )) return NULL ;
517
- if (PyModule_AddIntMacro (m , S_IFBLK )) return NULL ;
518
- if (PyModule_AddIntMacro (m , S_IFREG )) return NULL ;
519
- if (PyModule_AddIntMacro (m , S_IFIFO )) return NULL ;
520
- if (PyModule_AddIntMacro (m , S_IFLNK )) return NULL ;
521
- if (PyModule_AddIntMacro (m , S_IFSOCK )) return NULL ;
522
- if (PyModule_AddIntMacro (m , S_IFDOOR )) return NULL ;
523
- if (PyModule_AddIntMacro (m , S_IFPORT )) return NULL ;
524
- if (PyModule_AddIntMacro (m , S_IFWHT )) return NULL ;
525
-
526
- if (PyModule_AddIntMacro (m , S_ISUID )) return NULL ;
527
- if (PyModule_AddIntMacro (m , S_ISGID )) return NULL ;
528
- if (PyModule_AddIntMacro (m , S_ISVTX )) return NULL ;
529
- if (PyModule_AddIntMacro (m , S_ENFMT )) return NULL ;
530
-
531
- if (PyModule_AddIntMacro (m , S_IREAD )) return NULL ;
532
- if (PyModule_AddIntMacro (m , S_IWRITE )) return NULL ;
533
- if (PyModule_AddIntMacro (m , S_IEXEC )) return NULL ;
534
-
535
- if (PyModule_AddIntMacro (m , S_IRWXU )) return NULL ;
536
- if (PyModule_AddIntMacro (m , S_IRUSR )) return NULL ;
537
- if (PyModule_AddIntMacro (m , S_IWUSR )) return NULL ;
538
- if (PyModule_AddIntMacro (m , S_IXUSR )) return NULL ;
539
-
540
- if (PyModule_AddIntMacro (m , S_IRWXG )) return NULL ;
541
- if (PyModule_AddIntMacro (m , S_IRGRP )) return NULL ;
542
- if (PyModule_AddIntMacro (m , S_IWGRP )) return NULL ;
543
- if (PyModule_AddIntMacro (m , S_IXGRP )) return NULL ;
544
-
545
- if (PyModule_AddIntMacro (m , S_IRWXO )) return NULL ;
546
- if (PyModule_AddIntMacro (m , S_IROTH )) return NULL ;
547
- if (PyModule_AddIntMacro (m , S_IWOTH )) return NULL ;
548
- if (PyModule_AddIntMacro (m , S_IXOTH )) return NULL ;
549
-
550
- if (PyModule_AddIntMacro (m , UF_NODUMP )) return NULL ;
551
- if (PyModule_AddIntMacro (m , UF_IMMUTABLE )) return NULL ;
552
- if (PyModule_AddIntMacro (m , UF_APPEND )) return NULL ;
553
- if (PyModule_AddIntMacro (m , UF_OPAQUE )) return NULL ;
554
- if (PyModule_AddIntMacro (m , UF_NOUNLINK )) return NULL ;
555
- if (PyModule_AddIntMacro (m , UF_COMPRESSED )) return NULL ;
556
- if (PyModule_AddIntMacro (m , UF_HIDDEN )) return NULL ;
557
- if (PyModule_AddIntMacro (m , SF_ARCHIVED )) return NULL ;
558
- if (PyModule_AddIntMacro (m , SF_IMMUTABLE )) return NULL ;
559
- if (PyModule_AddIntMacro (m , SF_APPEND )) return NULL ;
560
- if (PyModule_AddIntMacro (m , SF_NOUNLINK )) return NULL ;
561
- if (PyModule_AddIntMacro (m , SF_SNAPSHOT )) return NULL ;
562
-
563
- if (PyModule_AddIntConstant (m , "ST_MODE" , 0 )) return NULL ;
564
- if (PyModule_AddIntConstant (m , "ST_INO" , 1 )) return NULL ;
565
- if (PyModule_AddIntConstant (m , "ST_DEV" , 2 )) return NULL ;
566
- if (PyModule_AddIntConstant (m , "ST_NLINK" , 3 )) return NULL ;
567
- if (PyModule_AddIntConstant (m , "ST_UID" , 4 )) return NULL ;
568
- if (PyModule_AddIntConstant (m , "ST_GID" , 5 )) return NULL ;
569
- if (PyModule_AddIntConstant (m , "ST_SIZE" , 6 )) return NULL ;
570
- if (PyModule_AddIntConstant (m , "ST_ATIME" , 7 )) return NULL ;
571
- if (PyModule_AddIntConstant (m , "ST_MTIME" , 8 )) return NULL ;
572
- if (PyModule_AddIntConstant (m , "ST_CTIME" , 9 )) return NULL ;
573
-
574
- #ifdef MS_WINDOWS
575
- if (PyModule_AddIntMacro (m , FILE_ATTRIBUTE_ARCHIVE )) return NULL ;
576
- if (PyModule_AddIntMacro (m , FILE_ATTRIBUTE_COMPRESSED )) return NULL ;
577
- if (PyModule_AddIntMacro (m , FILE_ATTRIBUTE_DEVICE )) return NULL ;
578
- if (PyModule_AddIntMacro (m , FILE_ATTRIBUTE_DIRECTORY )) return NULL ;
579
- if (PyModule_AddIntMacro (m , FILE_ATTRIBUTE_ENCRYPTED )) return NULL ;
580
- if (PyModule_AddIntMacro (m , FILE_ATTRIBUTE_HIDDEN )) return NULL ;
581
- if (PyModule_AddIntMacro (m , FILE_ATTRIBUTE_INTEGRITY_STREAM )) return NULL ;
582
- if (PyModule_AddIntMacro (m , FILE_ATTRIBUTE_NORMAL )) return NULL ;
583
- if (PyModule_AddIntMacro (m , FILE_ATTRIBUTE_NOT_CONTENT_INDEXED )) return NULL ;
584
- if (PyModule_AddIntMacro (m , FILE_ATTRIBUTE_NO_SCRUB_DATA )) return NULL ;
585
- if (PyModule_AddIntMacro (m , FILE_ATTRIBUTE_OFFLINE )) return NULL ;
586
- if (PyModule_AddIntMacro (m , FILE_ATTRIBUTE_READONLY )) return NULL ;
587
- if (PyModule_AddIntMacro (m , FILE_ATTRIBUTE_REPARSE_POINT )) return NULL ;
588
- if (PyModule_AddIntMacro (m , FILE_ATTRIBUTE_SPARSE_FILE )) return NULL ;
589
- if (PyModule_AddIntMacro (m , FILE_ATTRIBUTE_SYSTEM )) return NULL ;
590
- if (PyModule_AddIntMacro (m , FILE_ATTRIBUTE_TEMPORARY )) return NULL ;
591
- if (PyModule_AddIntMacro (m , FILE_ATTRIBUTE_VIRTUAL )) return NULL ;
592
-
593
- if (PyModule_AddObject (m , "IO_REPARSE_TAG_SYMLINK" ,
594
- PyLong_FromUnsignedLong (IO_REPARSE_TAG_SYMLINK ))) return NULL ;
595
- if (PyModule_AddObject (m , "IO_REPARSE_TAG_MOUNT_POINT" ,
596
- PyLong_FromUnsignedLong (IO_REPARSE_TAG_MOUNT_POINT ))) return NULL ;
597
- if (PyModule_AddObject (m , "IO_REPARSE_TAG_APPEXECLINK" ,
598
- PyLong_FromUnsignedLong (IO_REPARSE_TAG_APPEXECLINK ))) return NULL ;
599
- #endif
600
-
601
- return m ;
628
+ return PyModuleDef_Init (& statmodule );
602
629
}
603
630
604
631
#ifdef __cplusplus
0 commit comments