@@ -12980,46 +12980,50 @@ _pystatvfs_fromstructstatvfs(PyObject *module, struct statvfs st) {
1298012980 if (v == NULL )
1298112981 return NULL ;
1298212982
12983+ int pos = 0 ;
12984+
12985+ #define SET_RESULT (CALL ) \
12986+ do { \
12987+ PyObject *item = (CALL); \
12988+ if (item == NULL) { \
12989+ Py_DECREF(v); \
12990+ return NULL; \
12991+ } \
12992+ PyStructSequence_SET_ITEM(v, pos++, item); \
12993+ } while(0)
12994+
1298312995#if !defined(HAVE_LARGEFILE_SUPPORT )
12984- PyStructSequence_SET_ITEM ( v , 0 , PyLong_FromLong ((long ) st .f_bsize ));
12985- PyStructSequence_SET_ITEM ( v , 1 , PyLong_FromLong ((long ) st .f_frsize ));
12986- PyStructSequence_SET_ITEM ( v , 2 , PyLong_FromLong ((long ) st .f_blocks ));
12987- PyStructSequence_SET_ITEM ( v , 3 , PyLong_FromLong ((long ) st .f_bfree ));
12988- PyStructSequence_SET_ITEM ( v , 4 , PyLong_FromLong ((long ) st .f_bavail ));
12989- PyStructSequence_SET_ITEM ( v , 5 , PyLong_FromLong ((long ) st .f_files ));
12990- PyStructSequence_SET_ITEM ( v , 6 , PyLong_FromLong ((long ) st .f_ffree ));
12991- PyStructSequence_SET_ITEM ( v , 7 , PyLong_FromLong ((long ) st .f_favail ));
12992- PyStructSequence_SET_ITEM ( v , 8 , PyLong_FromLong ((long ) st .f_flag ));
12993- PyStructSequence_SET_ITEM ( v , 9 , PyLong_FromLong ((long ) st .f_namemax ));
12996+ SET_RESULT ( PyLong_FromLong ((long ) st .f_bsize ));
12997+ SET_RESULT ( PyLong_FromLong ((long ) st .f_frsize ));
12998+ SET_RESULT ( PyLong_FromLong ((long ) st .f_blocks ));
12999+ SET_RESULT ( PyLong_FromLong ((long ) st .f_bfree ));
13000+ SET_RESULT ( PyLong_FromLong ((long ) st .f_bavail ));
13001+ SET_RESULT ( PyLong_FromLong ((long ) st .f_files ));
13002+ SET_RESULT ( PyLong_FromLong ((long ) st .f_ffree ));
13003+ SET_RESULT ( PyLong_FromLong ((long ) st .f_favail ));
13004+ SET_RESULT ( PyLong_FromLong ((long ) st .f_flag ));
13005+ SET_RESULT ( PyLong_FromLong ((long ) st .f_namemax ));
1299413006#else
12995- PyStructSequence_SET_ITEM (v , 0 , PyLong_FromLong ((long ) st .f_bsize ));
12996- PyStructSequence_SET_ITEM (v , 1 , PyLong_FromLong ((long ) st .f_frsize ));
12997- PyStructSequence_SET_ITEM (v , 2 ,
12998- PyLong_FromLongLong ((long long ) st .f_blocks ));
12999- PyStructSequence_SET_ITEM (v , 3 ,
13000- PyLong_FromLongLong ((long long ) st .f_bfree ));
13001- PyStructSequence_SET_ITEM (v , 4 ,
13002- PyLong_FromLongLong ((long long ) st .f_bavail ));
13003- PyStructSequence_SET_ITEM (v , 5 ,
13004- PyLong_FromLongLong ((long long ) st .f_files ));
13005- PyStructSequence_SET_ITEM (v , 6 ,
13006- PyLong_FromLongLong ((long long ) st .f_ffree ));
13007- PyStructSequence_SET_ITEM (v , 7 ,
13008- PyLong_FromLongLong ((long long ) st .f_favail ));
13009- PyStructSequence_SET_ITEM (v , 8 , PyLong_FromLong ((long ) st .f_flag ));
13010- PyStructSequence_SET_ITEM (v , 9 , PyLong_FromLong ((long ) st .f_namemax ));
13007+ SET_RESULT (PyLong_FromLong ((long ) st .f_bsize ));
13008+ SET_RESULT (PyLong_FromLong ((long ) st .f_frsize ));
13009+ SET_RESULT (PyLong_FromLongLong ((long long ) st .f_blocks ));
13010+ SET_RESULT (PyLong_FromLongLong ((long long ) st .f_bfree ));
13011+ SET_RESULT (PyLong_FromLongLong ((long long ) st .f_bavail ));
13012+ SET_RESULT (PyLong_FromLongLong ((long long ) st .f_files ));
13013+ SET_RESULT (PyLong_FromLongLong ((long long ) st .f_ffree ));
13014+ SET_RESULT (PyLong_FromLongLong ((long long ) st .f_favail ));
13015+ SET_RESULT (PyLong_FromLong ((long ) st .f_flag ));
13016+ SET_RESULT (PyLong_FromLong ((long ) st .f_namemax ));
1301113017#endif
1301213018/* The _ALL_SOURCE feature test macro defines f_fsid as a structure
1301313019 * (issue #32390). */
1301413020#if defined(_AIX ) && defined(_ALL_SOURCE )
13015- PyStructSequence_SET_ITEM ( v , 10 , PyLong_FromUnsignedLong (st .f_fsid .val [0 ]));
13021+ SET_RESULT ( PyLong_FromUnsignedLong (st .f_fsid .val [0 ]));
1301613022#else
13017- PyStructSequence_SET_ITEM ( v , 10 , PyLong_FromUnsignedLong (st .f_fsid ));
13023+ SET_RESULT ( PyLong_FromUnsignedLong (st .f_fsid ));
1301813024#endif
13019- if (PyErr_Occurred ()) {
13020- Py_DECREF (v );
13021- return NULL ;
13022- }
13025+
13026+ #undef SET_RESULT
1302313027
1302413028 return v ;
1302513029}
0 commit comments