From 22113859c935c6f979f8d1cfe633a4aa3cb05e81 Mon Sep 17 00:00:00 2001 From: Aleksander Morgado Date: Mon, 5 Mar 2012 18:29:27 +0100 Subject: messaging: part index may be repeated in different storages --- src/mm-sms-list.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) (limited to 'src/mm-sms-list.c') diff --git a/src/mm-sms-list.c b/src/mm-sms-list.c index 930d1cc2..def9aa94 100644 --- a/src/mm-sms-list.c +++ b/src/mm-sms-list.c @@ -211,11 +211,17 @@ cmp_sms_by_concat_reference (MMSms *sms, return (GPOINTER_TO_UINT (user_data) - mm_sms_get_multipart_reference (sms)); } +typedef struct { + guint part_index; + MMSmsStorage storage; +} PartIndexAndStorage; + static guint -cmp_sms_by_part_index (MMSms *sms, - gpointer user_data) +cmp_sms_by_part_index_and_storage (MMSms *sms, + PartIndexAndStorage *ctx) { - return !mm_sms_has_part_index (sms, GPOINTER_TO_UINT (user_data)); + return !(mm_sms_get_storage (sms) == ctx->storage && + mm_sms_has_part_index (sms, ctx->part_index)); } static gboolean @@ -295,10 +301,15 @@ mm_sms_list_take_part (MMSmsList *self, MMSmsStorage storage, GError **error) { + PartIndexAndStorage ctx; + + ctx.part_index = mm_sms_part_get_index (part); + ctx.storage = storage; + /* Ensure we don't have already taken a part with the same index */ if (g_list_find_custom (self->priv->list, - GUINT_TO_POINTER (mm_sms_part_get_index (part)), - (GCompareFunc)cmp_sms_by_part_index)) { + &ctx, + (GCompareFunc)cmp_sms_by_part_index_and_storage)) { g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, -- cgit v1.2.3-70-g09d2