diff options
author | Ken Murchison <murch@fastmail.com> | 2020-11-05 17:14:58 -0500 |
---|---|---|
committer | Ken Murchison <murch@fastmail.com> | 2020-11-05 17:14:58 -0500 |
commit | fab38e944eebe4ec07a022323d9fd939b61b013f (patch) | |
tree | ec2f4f35caf045b01463eac16eee096cf8bcc2dd | |
parent | 5efb02583917decadc3699f8d71f9c1d42efb230 (diff) | |
download | libical-git-fab38e944eebe4ec07a022323d9fd939b61b013f.tar.gz |
icalrecur.c: don't fill daysmask twice for BYWEEKNO + BYDAY
-rw-r--r-- | src/libical/icalrecur.c | 35 |
1 files changed, 19 insertions, 16 deletions
diff --git a/src/libical/icalrecur.c b/src/libical/icalrecur.c index 1c1344a1..f48d063b 100644 --- a/src/libical/icalrecur.c +++ b/src/libical/icalrecur.c @@ -2753,22 +2753,25 @@ static int expand_year_days(icalrecur_iterator *impl, int year) return 0; } - /* Calculate location of DTSTART day in weekno 1 */ - doy = get_day_of_year(impl, year, - impl->dtstart.month, impl->dtstart.day, NULL); - (void)__icaltime_from_day_of_year(impl, doy, year, &weekno); - if (weekno > doy) weekno = 0; - start_doy = doy - 7 * (weekno - 1); - - /* Add day of week in each BYWEEKNO to the year days bitmask */ - for (i = 0; BYWEEKPTR[i] != ICAL_RECURRENCE_ARRAY_MAX; i++) { - weekno = BYWEEKPTR[i]; - - doy = start_doy + 7 * (weekno - 1); - - daysmask_setbit(impl->days, doy, 1); - set_pos_total++; - if (doy < impl->days_index) impl->days_index = doy; + /* BYWEEKNO + BYDAY handled below */ + if (!has_by_data(impl, BY_DAY)) { + /* Calculate location of DTSTART day in weekno 1 */ + doy = get_day_of_year(impl, year, + impl->dtstart.month, impl->dtstart.day, NULL); + (void)__icaltime_from_day_of_year(impl, doy, year, &weekno); + if (weekno > doy) weekno = 0; + start_doy = doy - 7 * (weekno - 1); + + /* Add day of week in each BYWEEKNO to the year days bitmask */ + for (i = 0; BYWEEKPTR[i] != ICAL_RECURRENCE_ARRAY_MAX; i++) { + weekno = BYWEEKPTR[i]; + + doy = start_doy + 7 * (weekno - 1); + + daysmask_setbit(impl->days, doy, 1); + set_pos_total++; + if (doy < impl->days_index) impl->days_index = doy; + } } } else { /* Add each BYMONTHDAY in each BYMONTH to the year days bitmask */ |