@@ -27,9 +27,21 @@ extern "C" {
2727#endif /* HAVE_SYS_STAT_H */
2828
2929#ifdef MS_WINDOWS
30+ #include <windows.h>
3031typedef unsigned short mode_t ;
32+
33+ /* FILE_ATTRIBUTE_INTEGRITY_STREAM and FILE_ATTRIBUTE_NO_SCRUB_DATA
34+ are not present in VC2010, so define them manually */
35+ #ifndef FILE_ATTRIBUTE_INTEGRITY_STREAM
36+ # define FILE_ATTRIBUTE_INTEGRITY_STREAM 0x8000
37+ #endif
38+
39+ #ifndef FILE_ATTRIBUTE_NO_SCRUB_DATA
40+ # define FILE_ATTRIBUTE_NO_SCRUB_DATA 0x20000
3141#endif
3242
43+ #endif /* MS_WINDOWS */
44+
3345/* From Python's stat.py */
3446#ifndef S_IMODE
3547# define S_IMODE 07777
@@ -473,6 +485,10 @@ ST_SIZE\n\
473485ST_ATIME\n\
474486ST_MTIME\n\
475487ST_CTIME\n\
488+ \n"
489+
490+ "FILE_ATTRIBUTE_*: Windows file attribute constants\n\
491+ (only present on Windows)\n\
476492" );
477493
478494
@@ -555,6 +571,26 @@ PyInit__stat(void)
555571 if (PyModule_AddIntConstant (m , "ST_MTIME" , 8 )) return NULL ;
556572 if (PyModule_AddIntConstant (m , "ST_CTIME" , 9 )) return NULL ;
557573
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+ #endif
593+
558594 return m ;
559595}
560596
0 commit comments