@@ -1479,15 +1479,24 @@ sys_getwindowsversion_impl(PyObject *module)
1479
1479
if (version == NULL )
1480
1480
return NULL ;
1481
1481
1482
- PyStructSequence_SET_ITEM (version , pos ++ , PyLong_FromLong (ver .dwMajorVersion ));
1483
- PyStructSequence_SET_ITEM (version , pos ++ , PyLong_FromLong (ver .dwMinorVersion ));
1484
- PyStructSequence_SET_ITEM (version , pos ++ , PyLong_FromLong (ver .dwBuildNumber ));
1485
- PyStructSequence_SET_ITEM (version , pos ++ , PyLong_FromLong (ver .dwPlatformId ));
1486
- PyStructSequence_SET_ITEM (version , pos ++ , PyUnicode_FromWideChar (ver .szCSDVersion , -1 ));
1487
- PyStructSequence_SET_ITEM (version , pos ++ , PyLong_FromLong (ver .wServicePackMajor ));
1488
- PyStructSequence_SET_ITEM (version , pos ++ , PyLong_FromLong (ver .wServicePackMinor ));
1489
- PyStructSequence_SET_ITEM (version , pos ++ , PyLong_FromLong (ver .wSuiteMask ));
1490
- PyStructSequence_SET_ITEM (version , pos ++ , PyLong_FromLong (ver .wProductType ));
1482
+ #define SET_VERSION_INFO (CALL ) \
1483
+ do { \
1484
+ PyObject *item = (CALL); \
1485
+ if (item == NULL) { \
1486
+ goto error; \
1487
+ } \
1488
+ PyStructSequence_SET_ITEM(version, pos++, item); \
1489
+ } while(0)
1490
+
1491
+ SET_VERSION_INFO (PyLong_FromLong (ver .dwMajorVersion ));
1492
+ SET_VERSION_INFO (PyLong_FromLong (ver .dwMinorVersion ));
1493
+ SET_VERSION_INFO (PyLong_FromLong (ver .dwBuildNumber ));
1494
+ SET_VERSION_INFO (PyLong_FromLong (ver .dwPlatformId ));
1495
+ SET_VERSION_INFO (PyUnicode_FromWideChar (ver .szCSDVersion , -1 ));
1496
+ SET_VERSION_INFO (PyLong_FromLong (ver .wServicePackMajor ));
1497
+ SET_VERSION_INFO (PyLong_FromLong (ver .wServicePackMinor ));
1498
+ SET_VERSION_INFO (PyLong_FromLong (ver .wSuiteMask ));
1499
+ SET_VERSION_INFO (PyLong_FromLong (ver .wProductType ));
1491
1500
1492
1501
realMajor = ver .dwMajorVersion ;
1493
1502
realMinor = ver .dwMinorVersion ;
@@ -1514,17 +1523,19 @@ sys_getwindowsversion_impl(PyObject *module)
1514
1523
}
1515
1524
PyMem_RawFree (verblock );
1516
1525
}
1517
- PyStructSequence_SET_ITEM ( version , pos ++ , Py_BuildValue ("(kkk)" ,
1526
+ SET_VERSION_INFO ( Py_BuildValue ("(kkk)" ,
1518
1527
realMajor ,
1519
1528
realMinor ,
1520
1529
realBuild
1521
1530
));
1522
1531
1523
- if (PyErr_Occurred ()) {
1524
- Py_DECREF (version );
1525
- return NULL ;
1526
- }
1532
+ #undef SET_VERSION_INFO
1533
+
1527
1534
return version ;
1535
+
1536
+ error :
1537
+ Py_DECREF (version );
1538
+ return NULL ;
1528
1539
}
1529
1540
1530
1541
#pragma warning(pop)
0 commit comments