[next] telepathy-glib: message: change string getter to _dup_
Guillaume Desmottes
gdesmott at kemper.freedesktop.org
Thu Mar 6 04:20:08 PST 2014
Module: telepathy-glib
Branch: next
Commit: fd8ec251c418bb3496f0c1fe820e1a29855b4c34
URL: http://cgit.freedesktop.org/telepathy/telepathy-glib/commit/?id=fd8ec251c418bb3496f0c1fe820e1a29855b4c34
Author: Guillaume Desmottes <guillaume.desmottes at collabora.co.uk>
Date: Wed Feb 26 15:18:11 2014 +0100
message: change string getter to _dup_
When switching to GVariant we won't be able to guarantee the lifetime of the
returned string so best to dup them.
---
.../telepathy-glib/telepathy-glib-sections.txt | 6 +--
telepathy-glib/message.c | 43 +++++++++++---------
telepathy-glib/message.h | 6 +--
telepathy-logger/text-channel.c | 31 +++++++-------
tests/dbus/cm-message.c | 15 ++++---
5 files changed, 53 insertions(+), 48 deletions(-)
diff --git a/docs/reference/telepathy-glib/telepathy-glib-sections.txt b/docs/reference/telepathy-glib/telepathy-glib-sections.txt
index 5859518..40f0cef 100644
--- a/docs/reference/telepathy-glib/telepathy-glib-sections.txt
+++ b/docs/reference/telepathy-glib/telepathy-glib-sections.txt
@@ -2107,9 +2107,9 @@ tp_message_to_text
tp_message_get_message_type
tp_message_get_received_timestamp
tp_message_get_sent_timestamp
-tp_message_get_specific_to_interface
-tp_message_get_supersedes
-tp_message_get_token
+tp_message_dup_specific_to_interface
+tp_message_dup_supersedes
+tp_message_dup_token
tp_message_is_delivery_report
tp_message_is_rescued
tp_message_is_scrollback
diff --git a/telepathy-glib/message.c b/telepathy-glib/message.c
index c0face0..1845e3a 100644
--- a/telepathy-glib/message.c
+++ b/telepathy-glib/message.c
@@ -737,7 +737,7 @@ tp_message_is_mutable (TpMessage *self)
}
/**
- * tp_message_get_token:
+ * tp_message_dup_token:
* @self: a message
*
* Return this message's identifier in the underlying protocol. This is
@@ -747,12 +747,12 @@ tp_message_is_mutable (TpMessage *self)
*
* If there is no suitable token, return %NULL.
*
- * Returns: (transfer none): a non-empty opaque identifier, or %NULL if none
+ * Returns: (transfer full): a non-empty opaque identifier, or %NULL if none
*
* Since: 0.13.9
*/
-const gchar *
-tp_message_get_token (TpMessage *self)
+gchar *
+tp_message_dup_token (TpMessage *self)
{
const gchar *token;
@@ -763,7 +763,7 @@ tp_message_get_token (TpMessage *self)
if (tp_str_empty (token))
return NULL;
else
- return token;
+ return g_strdup (token);
}
/**
@@ -870,21 +870,19 @@ tp_message_is_rescued (TpMessage *self)
}
/**
- * tp_message_get_supersedes:
+ * tp_message_dup_supersedes:
* @self: a message
*
* If this message replaces a previous message, return the value of
- * tp_message_get_token() for that previous message. Otherwise, return %NULL.
+ * tp_message_dup_token() for that previous message. Otherwise, return %NULL.
*
* For instance, a user interface could replace the superseded
* message with this message, or grey out the superseded message.
*
- * Returns: (transfer none): a non-empty opaque identifier, or %NULL if none
- *
- * Since: 0.13.9
+ * Returns: (transfer full): a non-empty opaque identifier, or %NULL if none
*/
-const gchar *
-tp_message_get_supersedes (TpMessage *self)
+gchar *
+tp_message_dup_supersedes (TpMessage *self)
{
const gchar *token;
@@ -895,11 +893,11 @@ tp_message_get_supersedes (TpMessage *self)
if (tp_str_empty (token))
return NULL;
else
- return token;
+ return g_strdup (token);
}
/**
- * tp_message_get_specific_to_interface:
+ * tp_message_dup_specific_to_interface:
* @self: a message
*
* If this message is specific to a particular D-Bus interface and should
@@ -908,16 +906,21 @@ tp_message_get_supersedes (TpMessage *self)
*
* If this message is an ordinary message or delivery report, return %NULL.
*
- * Returns: (transfer none): a D-Bus interface name, or %NULL for ordinary
+ * Returns: (transfer full): a D-Bus interface name, or %NULL for ordinary
* messages and delivery reports
- *
- * Since: 0.13.9
*/
-const gchar *
-tp_message_get_specific_to_interface (TpMessage *self)
+gchar *
+tp_message_dup_specific_to_interface (TpMessage *self)
{
+ const gchar *interface;
+
g_return_val_if_fail (TP_IS_MESSAGE (self), NULL);
- return tp_asv_get_string (tp_message_peek (self, 0), "interface");
+
+ interface = tp_asv_get_string (tp_message_peek (self, 0), "interface");
+ if (interface == NULL)
+ return NULL;
+
+ return g_strdup (interface);
}
/**
diff --git a/telepathy-glib/message.h b/telepathy-glib/message.h
index e3a767f..608fa6a 100644
--- a/telepathy-glib/message.h
+++ b/telepathy-glib/message.h
@@ -82,13 +82,13 @@ gchar * tp_message_to_text (TpMessage *message) G_GNUC_WARN_UNUSED_RESULT;
gboolean tp_message_is_mutable (TpMessage *self);
TpChannelTextMessageType tp_message_get_message_type (TpMessage *self);
-const gchar *tp_message_get_token (TpMessage *self);
+gchar *tp_message_dup_token (TpMessage *self);
gint64 tp_message_get_sent_timestamp (TpMessage *self);
gint64 tp_message_get_received_timestamp (TpMessage *self);
gboolean tp_message_is_scrollback (TpMessage *self);
gboolean tp_message_is_rescued (TpMessage *self);
-const gchar *tp_message_get_supersedes (TpMessage *self);
-const gchar *tp_message_get_specific_to_interface (TpMessage *self);
+gchar *tp_message_dup_supersedes (TpMessage *self);
+gchar *tp_message_dup_specific_to_interface (TpMessage *self);
gboolean tp_message_is_delivery_report (TpMessage *self);
_TP_AVAILABLE_IN_0_16
guint32 tp_message_get_pending_message_id (TpMessage *self,
diff --git a/telepathy-logger/text-channel.c b/telepathy-logger/text-channel.c
index 7600d94..19f703c 100644
--- a/telepathy-logger/text-channel.c
+++ b/telepathy-logger/text-channel.c
@@ -165,17 +165,6 @@ get_network_timestamp (TpMessage *message)
return timestamp;
}
-
-static gint64
-get_message_edit_timestamp (TpMessage *message)
-{
- if (tp_message_get_supersedes (message) != NULL)
- return get_network_timestamp (message);
- else
- return 0;
-}
-
-
static gint64
get_message_timestamp (TpMessage *message)
{
@@ -199,8 +188,8 @@ tpl_text_channel_store_message (TplTextChannel *self,
TplTextChannelPriv *priv = self->priv;
const gchar *direction;
TpChannelTextMessageType type;
- gint64 timestamp;
- gchar *text;
+ gint64 timestamp, edit_timestamp;
+ gchar *text, *token, *supersedes;
TplTextEvent *event;
TplLogManager *logmanager;
GError *error = NULL;
@@ -250,6 +239,13 @@ tpl_text_channel_store_message (TplTextChannel *self,
tpl_entity_get_alias (sender),
tpl_entity_get_identifier (sender));
+ token = tp_message_dup_token (message);
+ supersedes = tp_message_dup_supersedes (message);
+
+ if (supersedes != NULL)
+ edit_timestamp = get_network_timestamp (message);
+ else
+ edit_timestamp = 0;
/* Initialise TplTextEvent */
event = g_object_new (TPL_TYPE_TEXT_EVENT,
@@ -259,14 +255,17 @@ tpl_text_channel_store_message (TplTextChannel *self,
"receiver", receiver,
"sender", sender,
"timestamp", timestamp,
- "message-token", tp_message_get_token (message),
- "supersedes-token", tp_message_get_supersedes (message),
- "edit-timestamp", get_message_edit_timestamp (message),
+ "message-token", token,
+ "supersedes-token", supersedes,
+ "edit-timestamp", edit_timestamp,
/* TplTextEvent */
"message-type", type,
"message", text,
NULL);
+ g_free (token);
+ g_free (supersedes);
+
/* Store sent event */
logmanager = tpl_log_manager_dup_singleton ();
_tpl_log_manager_add_event (logmanager, TPL_EVENT (event), &error);
diff --git a/tests/dbus/cm-message.c b/tests/dbus/cm-message.c
index 7ddc5ea..f014fd1 100644
--- a/tests/dbus/cm-message.c
+++ b/tests/dbus/cm-message.c
@@ -53,6 +53,7 @@ test_new_from_parts (Test *test,
GVariant *part_vardict;
gboolean valid;
const gchar *s;
+ gchar *token;
parts = g_ptr_array_new_full (2, (GDestroyNotify) g_hash_table_unref);
@@ -108,13 +109,15 @@ test_new_from_parts (Test *test,
g_assert_cmpuint (tp_message_get_message_type (msg), ==,
TP_CHANNEL_TEXT_MESSAGE_TYPE_NOTICE);
g_assert_cmpuint (tp_cm_message_get_sender (msg), ==, sender);
- g_assert_cmpstr (tp_message_get_token (msg), ==, "token");
+ token = tp_message_dup_token (msg);
+ g_assert_cmpstr (token, ==, "token");
+ g_free (token);
g_assert_cmpint ((gint) tp_message_get_sent_timestamp (msg), ==, 42);
g_assert_cmpint ((gint) tp_message_get_received_timestamp (msg), ==, 666);
g_assert_cmpint (tp_message_is_scrollback (msg), ==, TRUE);
g_assert_cmpint (tp_message_is_rescued (msg), ==, FALSE);
- g_assert_cmpstr (tp_message_get_supersedes (msg), ==, NULL);
- g_assert_cmpstr (tp_message_get_specific_to_interface (msg), ==, NULL);
+ g_assert_cmpstr (tp_message_dup_supersedes (msg), ==, NULL);
+ g_assert_cmpstr (tp_message_dup_specific_to_interface (msg), ==, NULL);
g_assert_cmpint (tp_message_is_delivery_report (msg), ==, FALSE);
g_assert_cmpuint (tp_message_get_pending_message_id (msg, &valid), ==, 666);
g_assert (valid);
@@ -156,13 +159,13 @@ test_new_text (Test *test,
g_assert_cmpuint (tp_message_get_message_type (msg), ==,
TP_CHANNEL_TEXT_MESSAGE_TYPE_ACTION);
g_assert_cmpuint (tp_cm_message_get_sender (msg), ==, sender);
- g_assert_cmpstr (tp_message_get_token (msg), ==, NULL);
+ g_assert_cmpstr (tp_message_dup_token (msg), ==, NULL);
g_assert_cmpint ((gint) tp_message_get_sent_timestamp (msg), ==, 0);
g_assert_cmpint ((gint) tp_message_get_received_timestamp (msg), ==, 0);
g_assert_cmpint (tp_message_is_scrollback (msg), ==, FALSE);
g_assert_cmpint (tp_message_is_rescued (msg), ==, FALSE);
- g_assert_cmpstr (tp_message_get_supersedes (msg), ==, NULL);
- g_assert_cmpstr (tp_message_get_specific_to_interface (msg), ==, NULL);
+ g_assert_cmpstr (tp_message_dup_supersedes (msg), ==, NULL);
+ g_assert_cmpstr (tp_message_dup_specific_to_interface (msg), ==, NULL);
g_assert_cmpint (tp_message_is_delivery_report (msg), ==, FALSE);
g_object_unref (msg);
More information about the telepathy-commits
mailing list