From afeb4ea4fda30065b2e142981f3645597449922d Mon Sep 17 00:00:00 2001 From: Slawomir Bochenski Date: Thu, 8 Dec 2011 10:41:21 +0100 Subject: [PATCH] obexd: phonebook-tracker: Fix iso8601_utc_to_localtime Timestamp returned from Tracker can optionally contain fractional seconds. Original code treated any character after seconds as flag for UTC timestamp. This patch changes it so now only the beginning of string is scanned and the end of string is checked for UTC flag ('Z') presence. --- obexd/plugins/phonebook-tracker.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/obexd/plugins/phonebook-tracker.c b/obexd/plugins/phonebook-tracker.c index 61c7af958..da82ff5c4 100644 --- a/obexd/plugins/phonebook-tracker.c +++ b/obexd/plugins/phonebook-tracker.c @@ -728,15 +728,13 @@ static char *iso8601_utc_to_localtime(const char *datetime) time_t time; struct tm tm, *local; char localdate[32]; - char tz; int nr; memset(&tm, 0, sizeof(tm)); - nr = sscanf(datetime, "%04u-%02u-%02uT%02u:%02u:%02u%c", + nr = sscanf(datetime, "%04u-%02u-%02uT%02u:%02u:%02u", &tm.tm_year, &tm.tm_mon, &tm.tm_mday, - &tm.tm_hour, &tm.tm_min, &tm.tm_sec, - &tz); + &tm.tm_hour, &tm.tm_min, &tm.tm_sec); if (nr < 6) { /* Invalid time format */ error("sscanf(): %s (%d)", strerror(errno), errno); @@ -744,7 +742,7 @@ static char *iso8601_utc_to_localtime(const char *datetime) } /* Time already in localtime */ - if (nr == 6) { + if (!g_str_has_suffix(datetime, "Z")) { strftime(localdate, sizeof(localdate), "%Y%m%dT%H%M%S", &tm); return g_strdup(localdate); }