@@ -6538,97 +6538,123 @@ PyInit__datetime(void)
6538
6538
6539
6539
for (size_t i = 0 ; i < Py_ARRAY_LENGTH (types ); i ++ ) {
6540
6540
if (PyModule_AddType (m , types [i ]) < 0 ) {
6541
- return NULL ;
6541
+ goto error ;
6542
6542
}
6543
6543
}
6544
6544
6545
6545
if (PyType_Ready (& PyDateTime_IsoCalendarDateType ) < 0 ) {
6546
- return NULL ;
6546
+ goto error ;
6547
6547
}
6548
6548
Py_INCREF (& PyDateTime_IsoCalendarDateType );
6549
6549
6550
6550
/* timedelta values */
6551
6551
d = PyDateTime_DeltaType .tp_dict ;
6552
6552
6553
6553
x = new_delta (0 , 0 , 1 , 0 );
6554
- if (x == NULL || PyDict_SetItemString (d , "resolution" , x ) < 0 )
6555
- return NULL ;
6554
+ if (x == NULL || PyDict_SetItemString (d , "resolution" , x ) < 0 ) {
6555
+ Py_XDECREF (x );
6556
+ goto error ;
6557
+ }
6556
6558
Py_DECREF (x );
6557
6559
6558
6560
x = new_delta (- MAX_DELTA_DAYS , 0 , 0 , 0 );
6559
- if (x == NULL || PyDict_SetItemString (d , "min" , x ) < 0 )
6560
- return NULL ;
6561
+ if (x == NULL || PyDict_SetItemString (d , "min" , x ) < 0 ) {
6562
+ Py_XDECREF (x );
6563
+ goto error ;
6564
+ }
6561
6565
Py_DECREF (x );
6562
6566
6563
6567
x = new_delta (MAX_DELTA_DAYS , 24 * 3600 - 1 , 1000000 - 1 , 0 );
6564
- if (x == NULL || PyDict_SetItemString (d , "max" , x ) < 0 )
6565
- return NULL ;
6568
+ if (x == NULL || PyDict_SetItemString (d , "max" , x ) < 0 ) {
6569
+ Py_XDECREF (x );
6570
+ goto error ;
6571
+ }
6566
6572
Py_DECREF (x );
6567
6573
6568
6574
/* date values */
6569
6575
d = PyDateTime_DateType .tp_dict ;
6570
6576
6571
6577
x = new_date (1 , 1 , 1 );
6572
- if (x == NULL || PyDict_SetItemString (d , "min" , x ) < 0 )
6573
- return NULL ;
6578
+ if (x == NULL || PyDict_SetItemString (d , "min" , x ) < 0 ) {
6579
+ Py_XDECREF (x );
6580
+ goto error ;
6581
+ }
6574
6582
Py_DECREF (x );
6575
6583
6576
6584
x = new_date (MAXYEAR , 12 , 31 );
6577
- if (x == NULL || PyDict_SetItemString (d , "max" , x ) < 0 )
6578
- return NULL ;
6585
+ if (x == NULL || PyDict_SetItemString (d , "max" , x ) < 0 ) {
6586
+ Py_XDECREF (x );
6587
+ goto error ;
6588
+ }
6579
6589
Py_DECREF (x );
6580
6590
6581
6591
x = new_delta (1 , 0 , 0 , 0 );
6582
- if (x == NULL || PyDict_SetItemString (d , "resolution" , x ) < 0 )
6583
- return NULL ;
6592
+ if (x == NULL || PyDict_SetItemString (d , "resolution" , x ) < 0 ) {
6593
+ Py_XDECREF (x );
6594
+ goto error ;
6595
+ }
6584
6596
Py_DECREF (x );
6585
6597
6586
6598
/* time values */
6587
6599
d = PyDateTime_TimeType .tp_dict ;
6588
6600
6589
6601
x = new_time (0 , 0 , 0 , 0 , Py_None , 0 );
6590
- if (x == NULL || PyDict_SetItemString (d , "min" , x ) < 0 )
6591
- return NULL ;
6602
+ if (x == NULL || PyDict_SetItemString (d , "min" , x ) < 0 ) {
6603
+ Py_XDECREF (x );
6604
+ goto error ;
6605
+ }
6592
6606
Py_DECREF (x );
6593
6607
6594
6608
x = new_time (23 , 59 , 59 , 999999 , Py_None , 0 );
6595
- if (x == NULL || PyDict_SetItemString (d , "max" , x ) < 0 )
6596
- return NULL ;
6609
+ if (x == NULL || PyDict_SetItemString (d , "max" , x ) < 0 ) {
6610
+ Py_XDECREF (x );
6611
+ goto error ;
6612
+ }
6597
6613
Py_DECREF (x );
6598
6614
6599
6615
x = new_delta (0 , 0 , 1 , 0 );
6600
- if (x == NULL || PyDict_SetItemString (d , "resolution" , x ) < 0 )
6601
- return NULL ;
6616
+ if (x == NULL || PyDict_SetItemString (d , "resolution" , x ) < 0 ) {
6617
+ Py_XDECREF (x );
6618
+ goto error ;
6619
+ }
6602
6620
Py_DECREF (x );
6603
6621
6604
6622
/* datetime values */
6605
6623
d = PyDateTime_DateTimeType .tp_dict ;
6606
6624
6607
6625
x = new_datetime (1 , 1 , 1 , 0 , 0 , 0 , 0 , Py_None , 0 );
6608
- if (x == NULL || PyDict_SetItemString (d , "min" , x ) < 0 )
6609
- return NULL ;
6626
+ if (x == NULL || PyDict_SetItemString (d , "min" , x ) < 0 ) {
6627
+ Py_XDECREF (x );
6628
+ goto error ;
6629
+ }
6610
6630
Py_DECREF (x );
6611
6631
6612
6632
x = new_datetime (MAXYEAR , 12 , 31 , 23 , 59 , 59 , 999999 , Py_None , 0 );
6613
- if (x == NULL || PyDict_SetItemString (d , "max" , x ) < 0 )
6614
- return NULL ;
6633
+ if (x == NULL || PyDict_SetItemString (d , "max" , x ) < 0 ) {
6634
+ Py_XDECREF (x );
6635
+ goto error ;
6636
+ }
6615
6637
Py_DECREF (x );
6616
6638
6617
6639
x = new_delta (0 , 0 , 1 , 0 );
6618
- if (x == NULL || PyDict_SetItemString (d , "resolution" , x ) < 0 )
6619
- return NULL ;
6640
+ if (x == NULL || PyDict_SetItemString (d , "resolution" , x ) < 0 ) {
6641
+ Py_XDECREF (x );
6642
+ goto error ;
6643
+ }
6620
6644
Py_DECREF (x );
6621
6645
6622
6646
/* timezone values */
6623
6647
d = PyDateTime_TimeZoneType .tp_dict ;
6624
6648
6625
6649
delta = new_delta (0 , 0 , 0 , 0 );
6626
6650
if (delta == NULL )
6627
- return NULL ;
6651
+ goto error ;
6628
6652
x = create_timezone (delta , NULL );
6629
6653
Py_DECREF (delta );
6630
- if (x == NULL || PyDict_SetItemString (d , "utc" , x ) < 0 )
6631
- return NULL ;
6654
+ if (x == NULL || PyDict_SetItemString (d , "utc" , x ) < 0 ) {
6655
+ Py_XDECREF (x );
6656
+ goto error ;
6657
+ }
6632
6658
PyDateTime_TimeZone_UTC = x ;
6633
6659
CAPI .TimeZone_UTC = PyDateTime_TimeZone_UTC ;
6634
6660
@@ -6637,35 +6663,43 @@ PyInit__datetime(void)
6637
6663
* values. This may change in the future.*/
6638
6664
delta = new_delta (-1 , 60 , 0 , 1 ); /* -23:59 */
6639
6665
if (delta == NULL )
6640
- return NULL ;
6666
+ goto error ;
6641
6667
x = create_timezone (delta , NULL );
6642
6668
Py_DECREF (delta );
6643
- if (x == NULL || PyDict_SetItemString (d , "min" , x ) < 0 )
6644
- return NULL ;
6669
+ if (x == NULL || PyDict_SetItemString (d , "min" , x ) < 0 ) {
6670
+ Py_XDECREF (x );
6671
+ goto error ;
6672
+ }
6645
6673
Py_DECREF (x );
6646
6674
6647
6675
delta = new_delta (0 , (23 * 60 + 59 ) * 60 , 0 , 0 ); /* +23:59 */
6648
6676
if (delta == NULL )
6649
- return NULL ;
6677
+ goto error ;
6650
6678
x = create_timezone (delta , NULL );
6651
6679
Py_DECREF (delta );
6652
- if (x == NULL || PyDict_SetItemString (d , "max" , x ) < 0 )
6653
- return NULL ;
6680
+ if (x == NULL || PyDict_SetItemString (d , "max" , x ) < 0 ) {
6681
+ Py_XDECREF (x );
6682
+ goto error ;
6683
+ }
6654
6684
Py_DECREF (x );
6655
6685
6656
6686
/* Epoch */
6657
6687
PyDateTime_Epoch = new_datetime (1970 , 1 , 1 , 0 , 0 , 0 , 0 ,
6658
6688
PyDateTime_TimeZone_UTC , 0 );
6659
6689
if (PyDateTime_Epoch == NULL )
6660
- return NULL ;
6690
+ goto error ;
6661
6691
6662
6692
/* module initialization */
6663
- PyModule_AddIntMacro (m , MINYEAR );
6664
- PyModule_AddIntMacro (m , MAXYEAR );
6693
+ if (PyModule_AddIntMacro (m , MINYEAR ) < 0 ) {
6694
+ goto error ;
6695
+ }
6696
+ if (PyModule_AddIntMacro (m , MAXYEAR ) < 0 ) {
6697
+ goto error ;
6698
+ }
6665
6699
6666
6700
if (PyModule_Add (m , "datetime_CAPI" ,
6667
6701
PyCapsule_New (& CAPI , PyDateTime_CAPSULE_NAME , NULL )) < 0 ) {
6668
- return NULL ;
6702
+ goto error ;
6669
6703
};
6670
6704
6671
6705
/* A 4-year cycle has an extra leap day over what we'd get from
@@ -6692,7 +6726,7 @@ PyInit__datetime(void)
6692
6726
seconds_per_day = PyLong_FromLong (24 * 3600 );
6693
6727
if (us_per_ms == NULL || us_per_second == NULL ||
6694
6728
us_per_minute == NULL || seconds_per_day == NULL )
6695
- return NULL ;
6729
+ goto error ;
6696
6730
6697
6731
/* The rest are too big for 32-bit ints, but even
6698
6732
* us_per_week fits in 40 bits, so doubles should be exact.
@@ -6701,8 +6735,12 @@ PyInit__datetime(void)
6701
6735
us_per_day = PyLong_FromDouble (86400000000.0 );
6702
6736
us_per_week = PyLong_FromDouble (604800000000.0 );
6703
6737
if (us_per_hour == NULL || us_per_day == NULL || us_per_week == NULL )
6704
- return NULL ;
6738
+ goto error ;
6705
6739
return m ;
6740
+
6741
+ error :
6742
+ Py_DECREF (m );
6743
+ return NULL ;
6706
6744
}
6707
6745
6708
6746
/* ---------------------------------------------------------------------------
0 commit comments