summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKen Murchison <murch@fastmail.com>2020-11-05 17:14:58 -0500
committerKen Murchison <murch@fastmail.com>2020-11-08 09:07:02 -0500
commitbd8d105d161fff555027d16ae50413bd4abed8db (patch)
treec07ab8c5eeadf89a5f235b77371b148fb0f3f5c0
parent940ccc635cf9999f42c034c387479e85219a993e (diff)
downloadlibical-git-bd8d105d161fff555027d16ae50413bd4abed8db.tar.gz
icalrecur.c: don't fill daysmask twice for BYWEEKNO + BYDAY
-rw-r--r--src/libical/icalrecur.c35
1 files changed, 19 insertions, 16 deletions
diff --git a/src/libical/icalrecur.c b/src/libical/icalrecur.c
index 64ec9732..7d1eedad 100644
--- a/src/libical/icalrecur.c
+++ b/src/libical/icalrecur.c
@@ -2601,22 +2601,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 */