diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2012-03-05 18:29:27 +0100 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2012-03-05 18:29:27 +0100 |
commit | 270b911907a1facada7d8c8f5bae5aef16c82469 (patch) | |
tree | 475acdb5247bd93ecc7ca431a8b8d1c5f8d499b2 | |
parent | 24924730058aecff540f789b548f25558fd0caf9 (diff) | |
download | ModemManager-270b911907a1facada7d8c8f5bae5aef16c82469.tar.gz |
messaging: part index may be repeated in different storages
-rw-r--r-- | src/mm-sms-list.c | 21 | ||||
-rw-r--r-- | src/mm-sms.c | 11 | ||||
-rw-r--r-- | src/mm-sms.h | 7 |
3 files changed, 31 insertions, 8 deletions
diff --git a/src/mm-sms-list.c b/src/mm-sms-list.c index 930d1cc29..def9aa94d 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, diff --git a/src/mm-sms.c b/src/mm-sms.c index 11399f187..66f1fd4fe 100644 --- a/src/mm-sms.c +++ b/src/mm-sms.c @@ -347,6 +347,17 @@ mm_sms_get_path (MMSms *self) return self->priv->path; } +MMSmsStorage +mm_sms_get_storage (MMSms *self) +{ + MMSmsStorage storage = MM_SMS_STORAGE_UNKNOWN; + + g_object_get (self, + "storage", &storage, + NULL); + return storage; +} + gboolean mm_sms_is_multipart (MMSms *self) { diff --git a/src/mm-sms.h b/src/mm-sms.h index df232157a..6e30f48a4 100644 --- a/src/mm-sms.h +++ b/src/mm-sms.h @@ -103,9 +103,10 @@ gboolean mm_sms_multipart_take_part (MMSms *self, MMSmsPart *part, GError **error); -void mm_sms_export (MMSms *self); -void mm_sms_unexport (MMSms *self); -const gchar *mm_sms_get_path (MMSms *self); +void mm_sms_export (MMSms *self); +void mm_sms_unexport (MMSms *self); +const gchar *mm_sms_get_path (MMSms *self); +MMSmsStorage mm_sms_get_storage (MMSms *self); gboolean mm_sms_has_part_index (MMSms *self, guint index); |