From dc5fc0e163421f5a01c3cdaab23ca2ea1eb3fae2 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Wed, 4 Oct 2017 11:48:48 +0200 Subject: [PATCH 1/2] Use icaltime_is_utc() instead of icaltimetype::is_utc The structure member is going to be removed from libical in the next release and the function is available for a long time, thus it's safe to replace the usage in the code. (cherry picked from commit f607f8628a28440374579531bc78848dfe0c782e) --- src/calendar/backends/contacts/e-cal-backend-contacts.c | 1 - src/calendar/libecal/e-cal-component.c | 8 ++++---- src/calendar/libecal/e-cal-recur.c | 8 ++++---- src/calendar/libecal/e-cal-time-util.c | 3 +-- 4 files changed, 9 insertions(+), 11 deletions(-) diff --git a/src/calendar/backends/contacts/e-cal-backend-contacts.c b/src/calendar/backends/contacts/e-cal-backend-contacts.c index d2b570885..cf2c62062 100644 --- a/src/calendar/backends/contacts/e-cal-backend-contacts.c +++ b/src/calendar/backends/contacts/e-cal-backend-contacts.c @@ -699,7 +699,6 @@ cdate_to_icaltime (EContactDate *cdate) ret.month = cdate->month; ret.day = cdate->day; ret.is_date = TRUE; - ret.is_utc = FALSE; ret.zone = NULL; ret.is_daylight = FALSE; diff --git a/src/calendar/libecal/e-cal-component.c b/src/calendar/libecal/e-cal-component.c index 65b530d1e..6d8a9814d 100644 --- a/src/calendar/libecal/e-cal-component.c +++ b/src/calendar/libecal/e-cal-component.c @@ -2522,7 +2522,7 @@ get_datetime (struct datetime *datetime, * This makes the timezone code simpler. */ if (datetime->tzid_param) dt->tzid = g_strdup (icalparameter_get_tzid (datetime->tzid_param)); - else if (dt->value && dt->value->is_utc) + else if (dt->value && icaltime_is_utc (*dt->value)) dt->tzid = g_strdup ("UTC"); else dt->tzid = NULL; @@ -2559,9 +2559,9 @@ set_datetime (ECalComponent *comp, /* If the TZID is set to "UTC", we set the is_utc flag. */ if (dt->tzid && !strcmp (dt->tzid, "UTC")) - dt->value->is_utc = 1; - else - dt->value->is_utc = 0; + dt->value->zone = icaltimezone_get_utc_timezone (); + else if (dt->value->zone == icaltimezone_get_utc_timezone ()) + dt->value->zone = NULL; if (datetime->prop) { /* make sure no VALUE property is left if not needed */ diff --git a/src/calendar/libecal/e-cal-recur.c b/src/calendar/libecal/e-cal-recur.c index 535d56c14..cad588c4d 100644 --- a/src/calendar/libecal/e-cal-recur.c +++ b/src/calendar/libecal/e-cal-recur.c @@ -195,7 +195,7 @@ ensure_timezone (icalcomponent *comp, a different icalcomponent and cause use-after-free. */ tt->zone = NULL; - if (tt->is_utc) + if (icaltime_is_utc (*tt)) return TRUE; tt->zone = default_timezone; @@ -435,7 +435,7 @@ e_cal_recur_generate_instances_sync (icalcomponent *comp, rrule.until.minute = 0; rrule.until.second = 0; - if (!rrule.until.zone && !rrule.until.is_utc) + if (!rrule.until.zone && !icaltime_is_utc (rrule.until)) rrule.until.zone = dtstart.zone; } @@ -542,7 +542,7 @@ e_cal_recur_generate_instances_sync (icalcomponent *comp, exrule.until.minute = 0; exrule.until.second = 0; - if (!exrule.until.zone && !exrule.until.is_utc) + if (!exrule.until.zone && !icaltime_is_utc (exrule.until)) exrule.until.zone = dtstart.zone; } @@ -586,7 +586,7 @@ e_cal_recur_generate_instances_sync (icalcomponent *comp, if (!success) break; - if (!exdate.zone && !exdate.is_utc) + if (!exdate.zone && !icaltime_is_utc (exdate)) exdate.zone = dtstart.zone; if (intersects_interval (&exdate, NULL, duration_days, duration_seconds, &interval_start, &interval_end)) { diff --git a/src/calendar/libecal/e-cal-time-util.c b/src/calendar/libecal/e-cal-time-util.c index 7bcbc8ba1..914761cb0 100644 --- a/src/calendar/libecal/e-cal-time-util.c +++ b/src/calendar/libecal/e-cal-time-util.c @@ -763,9 +763,8 @@ tm_to_icaltimetype (struct tm *tm, itt.day = tm->tm_mday; itt.month = tm->tm_mon + 1; - itt.year = tm->tm_year+ 1900; + itt.year = tm->tm_year + 1900; - itt.is_utc = 0; itt.is_date = is_date; return itt; -- 2.15.1 From fccd77cf4620ca76c4fd2bf7721e3fb7eaf55ec6 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Thu, 5 Oct 2017 13:50:08 +0200 Subject: [PATCH 2/2] e-cal-recur.c:ensure_timezone(): Unset icaltimetype::zone only if not UTC With a removal of icaltimetype::is_utc the icaltimetype::zone is used to determine whether it's UTC or not. That means that the icaltimetype::zone can be unset only if it's not the built-in UTC time zone. (cherry picked from commit 1f39ade8db00091d6fa4c752ccb70361ef0e8abc) --- src/calendar/libecal/e-cal-recur.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/calendar/libecal/e-cal-recur.c b/src/calendar/libecal/e-cal-recur.c index cad588c4d..fc14fb15c 100644 --- a/src/calendar/libecal/e-cal-recur.c +++ b/src/calendar/libecal/e-cal-recur.c @@ -193,7 +193,8 @@ ensure_timezone (icalcomponent *comp, /* Do not trust the 'zone' set on the structure, as it can come from a different icalcomponent and cause use-after-free. */ - tt->zone = NULL; + if (tt->zone != icaltimezone_get_utc_timezone ()) + tt->zone = NULL; if (icaltime_is_utc (*tt)) return TRUE; -- 2.15.1