From a8eb063b1db4384f230df55c065c2638ad60baef Mon Sep 17 00:00:00 2001 From: Rafal Michalski Date: Mon, 15 Nov 2010 11:41:40 +0100 Subject: [PATCH] obexd: Fix pull phonebook with non-zero offset parameter For non-zero liststartoffset parameter, contacts which index was before offset were indexed more than once (e.g. when contact had more than one phone number or address etc.), so pulling was started earlier - before offset index was reached. This patch fix this problem and each contact is indexed only once. --- obexd/plugins/phonebook-tracker.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/obexd/plugins/phonebook-tracker.c b/obexd/plugins/phonebook-tracker.c index 672d59f49..4309e2886 100644 --- a/obexd/plugins/phonebook-tracker.c +++ b/obexd/plugins/phonebook-tracker.c @@ -1361,6 +1361,7 @@ static void pull_contacts(char **reply, int num_fields, void *user_data) int last_index, i; gboolean cdata_present = FALSE; char *home_addr, *work_addr, *other_addr; + static char *temp_id = NULL; if (num_fields < 0) { data->cb(NULL, 0, num_fields, 0, data->user_data); @@ -1396,7 +1397,11 @@ static void pull_contacts(char **reply, int num_fields, void *user_data) TRACKER_DEFAULT_CONTACT_ME)) return; - data->index++; + if (g_strcmp0(temp_id, reply[CONTACTS_ID_COL])) { + data->index++; + g_free(temp_id); + temp_id = g_strdup(reply[CONTACTS_ID_COL]); + } last_index = params->liststartoffset + params->maxlistcount; @@ -1495,6 +1500,8 @@ done: fail: g_slist_free(data->contacts); g_free(data); + g_free(temp_id); + temp_id = NULL; } static void add_to_cache(char **reply, int num_fields, void *user_data) -- 2.47.3