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-05 17:14:58 -0500
commitfab38e944eebe4ec07a022323d9fd939b61b013f (patch)
treeec2f4f35caf045b01463eac16eee096cf8bcc2dd
parent5efb02583917decadc3699f8d71f9c1d42efb230 (diff)
downloadlibical-git-fab38e944eebe4ec07a022323d9fd939b61b013f.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 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 */