diff --git a/lib/mu-msg-iter.cc b/lib/mu-msg-iter.cc index 0d5e7d49..b7099d13 100644 --- a/lib/mu-msg-iter.cc +++ b/lib/mu-msg-iter.cc @@ -359,14 +359,16 @@ mu_msg_iter_get_docid (MuMsgIter *iter) -const char* +char* mu_msg_iter_get_msgid (MuMsgIter *iter) { g_return_val_if_fail (iter, NULL); g_return_val_if_fail (!mu_msg_iter_is_done(iter), NULL); try { - return iter->msgid().c_str(); + const char *msgid (iter->msgid().c_str()); + + return msgid ? g_strdup (msgid) : NULL; } MU_XAPIAN_CATCH_BLOCK_RETURN (NULL); } @@ -388,7 +390,7 @@ mu_msg_iter_get_refs (MuMsgIter *iter) } MU_XAPIAN_CATCH_BLOCK_RETURN (NULL); } -const char* +char* mu_msg_iter_get_thread_id (MuMsgIter *iter) { g_return_val_if_fail (iter, NULL); @@ -397,7 +399,8 @@ mu_msg_iter_get_thread_id (MuMsgIter *iter) try { const std::string thread_id ( iter->cursor().get_document().get_value(MU_MSG_FIELD_ID_THREAD_ID).c_str()); - return thread_id.empty() ? NULL : thread_id.c_str(); + + return thread_id.empty() ? NULL : g_strdup (thread_id.c_str()); } MU_XAPIAN_CATCH_BLOCK_RETURN (NULL); diff --git a/lib/mu-msg-iter.h b/lib/mu-msg-iter.h index f98d8d81..49d35d95 100644 --- a/lib/mu-msg-iter.h +++ b/lib/mu-msg-iter.h @@ -145,7 +145,7 @@ void mu_msg_iter_set_preferred (MuMsgIter *iter, GHashTable *preferred_hash); * * @return the docid or (unsigned int)-1 in case of error */ -unsigned int mu_msg_iter_get_docid (MuMsgIter *iter); +guint mu_msg_iter_get_docid (MuMsgIter *iter); /** @@ -196,10 +196,10 @@ const MuMsgIterThreadInfo* mu_msg_iter_get_thread_info (MuMsgIter *iter); * * @param iter a valid MuMsgIter iterator * - * @return the message-id; this only stays valid as long as the - * current iter stays valid. + * @return the message-id; free with g_free(). */ -const char* mu_msg_iter_get_msgid (MuMsgIter *iter); +char* mu_msg_iter_get_msgid (MuMsgIter *iter) + G_GNUC_WARN_UNUSED_RESULT; /** * get the list of references for this messages as a NULL-terminated @@ -210,7 +210,8 @@ const char* mu_msg_iter_get_msgid (MuMsgIter *iter); * @return a NULL-terminated string array. free with g_strfreev when * it's no longer needed. */ -char** mu_msg_iter_get_refs (MuMsgIter *iter); +char** mu_msg_iter_get_refs (MuMsgIter *iter) + G_GNUC_WARN_UNUSED_RESULT; /** @@ -218,15 +219,10 @@ char** mu_msg_iter_get_refs (MuMsgIter *iter); * * @param iter a valid MuMsgIter iterator * - * @return the thread-id; this only stays valid as long as the - * current iter stays valid. + * @return the thread-id; free with g_free(). */ -const char* mu_msg_iter_get_thread_id (MuMsgIter *iter); - - - - - +char* mu_msg_iter_get_thread_id (MuMsgIter *iter) + G_GNUC_WARN_UNUSED_RESULT; /* FIXME */ diff --git a/lib/mu-query.cc b/lib/mu-query.cc index f6c4bec7..5761f2a0 100644 --- a/lib/mu-query.cc +++ b/lib/mu-query.cc @@ -414,22 +414,23 @@ static GHashTable* get_thread_ids (MuMsgIter *iter, GHashTable **orig_set) { GHashTable *ids; + ids = g_hash_table_new_full (g_str_hash, g_str_equal, (GDestroyNotify)g_free, NULL); *orig_set = g_hash_table_new_full (g_str_hash, g_str_equal, (GDestroyNotify)g_free, NULL); while (!mu_msg_iter_is_done (iter)) { - const char *thread_id, *msgid; - unsigned docid; + char *thread_id, *msgid; + unsigned docid; /* record the thread id for the message */ if ((thread_id = mu_msg_iter_get_thread_id (iter))) - g_hash_table_insert (ids, g_strdup (thread_id), + g_hash_table_insert (ids, thread_id, GSIZE_TO_POINTER(TRUE)); /* record the original set */ docid = mu_msg_iter_get_docid(iter); if (docid != 0 && (msgid = mu_msg_iter_get_msgid (iter))) - g_hash_table_insert (*orig_set, g_strdup (msgid), + g_hash_table_insert (*orig_set, msgid, GSIZE_TO_POINTER(docid)); if (!mu_msg_iter_next (iter))