@@ -12894,49 +12894,51 @@ os_WSTOPSIG_impl(PyObject *module, int status)
12894
12894
12895
12895
#ifdef __APPLE__
12896
12896
/* On macOS struct statvfs uses 32-bit integers for block counts,
12897
- * resulting in overflow when filesystems are larger tan 4TB. Therefore
12897
+ * resulting in overflow when filesystems are larger than 4TB. Therefore
12898
12898
* os.statvfs is implemented in terms of statfs(2).
12899
12899
*/
12900
12900
12901
12901
static PyObject *
12902
12902
_pystatvfs_fromstructstatfs (PyObject * module , struct statfs st ) {
12903
12903
PyObject * StatVFSResultType = get_posix_state (module )-> StatVFSResultType ;
12904
12904
PyObject * v = PyStructSequence_New ((PyTypeObject * )StatVFSResultType );
12905
- if (v == NULL )
12905
+ if (v == NULL ) {
12906
12906
return NULL ;
12907
+ }
12907
12908
12908
- long flags = 0 ;
12909
- if (st .f_flags & MNT_RDONLY ) {
12910
- flags |= ST_RDONLY ;
12911
- }
12912
- if (st .f_flags & MNT_NOSUID ) {
12913
- flags |= ST_NOSUID ;
12914
- }
12909
+ long flags = 0 ;
12910
+ if (st .f_flags & MNT_RDONLY ) {
12911
+ flags |= ST_RDONLY ;
12912
+ }
12913
+ if (st .f_flags & MNT_NOSUID ) {
12914
+ flags |= ST_NOSUID ;
12915
+ }
12915
12916
12916
- _Static_assert (sizeof (st .f_blocks ) == sizeof (long long ), "assuming large file" );
12917
+ _Static_assert (sizeof (st .f_blocks ) == sizeof (long long ), "assuming large file" );
12917
12918
12918
- PyStructSequence_SET_ITEM (v , 0 , PyLong_FromLong ((long ) st .f_iosize ));
12919
- PyStructSequence_SET_ITEM (v , 1 , PyLong_FromLong ((long ) st .f_bsize ));
12920
- PyStructSequence_SET_ITEM (v , 2 ,
12921
- PyLong_FromLongLong ((long long ) st .f_blocks ));
12922
- PyStructSequence_SET_ITEM (v , 3 ,
12923
- PyLong_FromLongLong ((long long ) st .f_bfree ));
12924
- PyStructSequence_SET_ITEM (v , 4 ,
12925
- PyLong_FromLongLong ((long long ) st .f_bavail ));
12926
- PyStructSequence_SET_ITEM (v , 5 ,
12927
- PyLong_FromLongLong ((long long ) st .f_files ));
12928
- PyStructSequence_SET_ITEM (v , 6 ,
12929
- PyLong_FromLongLong ((long long ) st .f_ffree ));
12930
- PyStructSequence_SET_ITEM (v , 7 ,
12931
- PyLong_FromLongLong ((long long ) st .f_ffree ));
12932
- PyStructSequence_SET_ITEM (v , 8 , PyLong_FromLong ((long ) flags ));
12919
+ #define SET_ITEM (v , index , item ) \
12920
+ do { \
12921
+ if (item == NULL) { \
12922
+ Py_DECREF(v); \
12923
+ return NULL; \
12924
+ } \
12925
+ PyStructSequence_SET_ITEM(v, index, item); \
12926
+ } while (0) \
12933
12927
12934
- PyStructSequence_SET_ITEM (v , 9 , PyLong_FromLong ((long ) NAME_MAX ));
12935
- PyStructSequence_SET_ITEM (v , 10 , PyLong_FromUnsignedLong (st .f_fsid .val [0 ]));
12936
- if (PyErr_Occurred ()) {
12937
- Py_DECREF (v );
12938
- return NULL ;
12939
- }
12928
+ SET_ITEM (v , 0 , PyLong_FromLong ((long ) st .f_iosize ));
12929
+ SET_ITEM (v , 1 , PyLong_FromLong ((long ) st .f_bsize ));
12930
+ SET_ITEM (v , 2 , PyLong_FromLongLong ((long long ) st .f_blocks ));
12931
+ SET_ITEM (v , 3 , PyLong_FromLongLong ((long long ) st .f_bfree ));
12932
+ SET_ITEM (v , 4 , PyLong_FromLongLong ((long long ) st .f_bavail ));
12933
+ SET_ITEM (v , 5 , PyLong_FromLongLong ((long long ) st .f_files ));
12934
+ SET_ITEM (v , 6 , PyLong_FromLongLong ((long long ) st .f_ffree ));
12935
+ SET_ITEM (v , 7 , PyLong_FromLongLong ((long long ) st .f_ffree ));
12936
+ SET_ITEM (v , 8 , PyLong_FromLong ((long ) flags ));
12937
+
12938
+ SET_ITEM (v , 9 , PyLong_FromLong ((long ) NAME_MAX ));
12939
+ SET_ITEM (v , 10 , PyLong_FromUnsignedLong (st .f_fsid .val [0 ]));
12940
+
12941
+ #undef SET_ITEM
12940
12942
12941
12943
return v ;
12942
12944
}
0 commit comments