@@ -481,7 +481,18 @@ tmtotuple(time_module_state *state, struct tm *p
481
481
if (v == NULL )
482
482
return NULL ;
483
483
484
- #define SET (i ,val ) PyStructSequence_SET_ITEM(v, i, PyLong_FromLong((long) val))
484
+ #define SET_ITEM (INDEX , CALL ) \
485
+ do { \
486
+ PyObject *obj = (CALL); \
487
+ if (obj == NULL) { \
488
+ Py_DECREF(v); \
489
+ return NULL; \
490
+ } \
491
+ PyStructSequence_SET_ITEM(v, (INDEX), obj); \
492
+ } while (0)
493
+
494
+ #define SET (INDEX , VAL ) \
495
+ SET_ITEM((INDEX), PyLong_FromLong((long) (VAL)))
485
496
486
497
SET (0 , p -> tm_year + 1900 );
487
498
SET (1 , p -> tm_mon + 1 ); /* Want January == 1 */
@@ -493,19 +504,15 @@ tmtotuple(time_module_state *state, struct tm *p
493
504
SET (7 , p -> tm_yday + 1 ); /* Want January, 1 == 1 */
494
505
SET (8 , p -> tm_isdst );
495
506
#ifdef HAVE_STRUCT_TM_TM_ZONE
496
- PyStructSequence_SET_ITEM (v , 9 ,
497
- PyUnicode_DecodeLocale (p -> tm_zone , "surrogateescape" ));
507
+ SET_ITEM (9 , PyUnicode_DecodeLocale (p -> tm_zone , "surrogateescape" ));
498
508
SET (10 , p -> tm_gmtoff );
499
509
#else
500
- PyStructSequence_SET_ITEM (v , 9 ,
501
- PyUnicode_DecodeLocale (zone , "surrogateescape" ));
502
- PyStructSequence_SET_ITEM (v , 10 , _PyLong_FromTime_t (gmtoff ));
510
+ SET_ITEM (9 , PyUnicode_DecodeLocale (zone , "surrogateescape" ));
511
+ SET_ITEM (10 , _PyLong_FromTime_t (gmtoff ));
503
512
#endif /* HAVE_STRUCT_TM_TM_ZONE */
513
+
504
514
#undef SET
505
- if (PyErr_Occurred ()) {
506
- Py_XDECREF (v );
507
- return NULL ;
508
- }
515
+ #undef SET_ITEM
509
516
510
517
return v ;
511
518
}
0 commit comments