@@ -1423,6 +1423,22 @@ pcmk__set_time_if_earlier(crm_time_t *target, const crm_time_t *source)
14231423 pcmk__time_log (LOG_TRACE , "target" , target , flags );
14241424}
14251425
1426+ void
1427+ pcmk__time_add_years (crm_time_t * dt , int value )
1428+ {
1429+ pcmk__assert (dt != NULL );
1430+
1431+ if ((value > 0 ) && ((dt -> years + (long long ) value ) > INT_MAX )) {
1432+ dt -> years = INT_MAX ;
1433+
1434+ } else if ((value < 0 ) && ((dt -> years + (long long ) value ) < 1 )) {
1435+ dt -> years = 1 ; // Clip to earliest we can handle (no BCE)
1436+
1437+ } else {
1438+ dt -> years += value ;
1439+ }
1440+ }
1441+
14261442/*!
14271443 * \internal
14281444 * \brief Convert a \c time_t time to a \c crm_time_t time
@@ -1445,7 +1461,7 @@ pcmk__copy_timet(time_t source_sec)
14451461 if (source -> tm_year > 0 ) {
14461462 // Years since 1900
14471463 target -> years = 1900 ;
1448- crm_time_add_years (target , source -> tm_year );
1464+ pcmk__time_add_years (target , source -> tm_year );
14491465 }
14501466
14511467 if (source -> tm_yday >= 0 ) {
@@ -1528,7 +1544,7 @@ pcmk__time_add(const crm_time_t *dt, const crm_time_t *value)
15281544 answer = pcmk__time_copy (dt );
15291545 utc = copy_time_to_utc (value );
15301546
1531- crm_time_add_years (answer , utc -> years );
1547+ pcmk__time_add_years (answer , utc -> years );
15321548 add_months (answer , utc -> months );
15331549 pcmk__time_add_days (answer , utc -> days );
15341550 pcmk__time_add_seconds (answer , utc -> seconds );
@@ -1609,7 +1625,7 @@ component_fn(enum pcmk__time_component component)
16091625{
16101626 switch (component ) {
16111627 case pcmk__time_years :
1612- return crm_time_add_years ;
1628+ return pcmk__time_add_years ;
16131629
16141630 case pcmk__time_months :
16151631 return add_months ;
@@ -1690,10 +1706,10 @@ subtract_time(const crm_time_t *dt1, const crm_time_t *dt2, bool as_duration)
16901706 // Avoid overflow when negating INT_MIN in calculations below
16911707
16921708 if (utc -> years == INT_MIN ) {
1693- crm_time_add_years (result , -1 );
1709+ pcmk__time_add_years (result , -1 );
16941710 utc -> years ++ ;
16951711 }
1696- crm_time_add_years (result , - utc -> years );
1712+ pcmk__time_add_years (result , - utc -> years );
16971713
16981714 if (utc -> months == INT_MIN ) {
16991715 add_months (result , -1 );
@@ -1768,17 +1784,7 @@ pcmk__time_compare(const crm_time_t *a, const crm_time_t *b)
17681784void
17691785crm_time_add_years (crm_time_t * dt , int value )
17701786{
1771- pcmk__assert (dt != NULL );
1772-
1773- if ((value > 0 ) && ((dt -> years + (long long ) value ) > INT_MAX )) {
1774- dt -> years = INT_MAX ;
1775-
1776- } else if ((value < 0 ) && ((dt -> years + (long long ) value ) < 1 )) {
1777- dt -> years = 1 ; // Clip to earliest we can handle (no BCE)
1778-
1779- } else {
1780- dt -> years += value ;
1781- }
1787+ pcmk__time_add_years (dt , value );
17821788}
17831789
17841790static void
0 commit comments