diff options
Diffstat (limited to 'libical/src/libical/icaltime.c')
-rw-r--r-- | libical/src/libical/icaltime.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/libical/src/libical/icaltime.c b/libical/src/libical/icaltime.c index 6f6ed5748f..e3229c6925 100644 --- a/libical/src/libical/icaltime.c +++ b/libical/src/libical/icaltime.c @@ -617,6 +617,20 @@ icaltime_adjust (struct icaltimetype *tt, days_overflow--; } + /* Normalize the month. We do this before handling the day since we may + need to know what month it is to get the number of days in it. + Note that months are 1 to 12, so we have to be a bit careful. */ + if (tt->month >= 13) { + years_overflow = (month - 1) / 12; + tt->year += years_overflow; + tt->month -= years_overflow * 12; + } else if (tt->month <= 0) { + /* 0 to -11 is -1 year out, -12 to -23 is -2 years. */ + years_overflow = (month / 12) - 1; + tt->year += years_overflow; + tt->month -= years_overflow * 12; + } + /* Add on the days. */ day = tt->day + days + days_overflow; if (day > 0) { |