[Telepathy-commits] [telepathy-glib/master] TpBaseConnectionManager: Don't do arithmetic on void pointers

Simon McVittie simon.mcvittie at collabora.co.uk
Wed Jan 7 06:26:11 PST 2009


The effect of doing arithmetic on a void* is undefined. gcc treats
it like a char* and our code assumed that behaviour, so make that
explicit, for portability.
---
 telepathy-glib/base-connection-manager.c |   12 +++++++-----
 1 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/telepathy-glib/base-connection-manager.c b/telepathy-glib/base-connection-manager.c
index e7779df..c76274a 100644
--- a/telepathy-glib/base-connection-manager.c
+++ b/telepathy-glib/base-connection-manager.c
@@ -415,6 +415,8 @@ tp_cm_param_setter_offset (const TpCMParamSpec *paramspec,
                            const GValue *value,
                            gpointer params)
 {
+  char *params_mem = params;
+
   if (paramspec->offset == G_MAXSIZE)
     {
       /* quietly ignore any obsolete params provided */
@@ -425,7 +427,7 @@ tp_cm_param_setter_offset (const TpCMParamSpec *paramspec,
     {
       case DBUS_TYPE_STRING:
         {
-          gchar **save_to = (gchar **) (params + paramspec->offset);
+          gchar **save_to = (gchar **) (params_mem + paramspec->offset);
           const gchar *str;
 
           g_assert (paramspec->gtype == G_TYPE_STRING);
@@ -451,7 +453,7 @@ tp_cm_param_setter_offset (const TpCMParamSpec *paramspec,
       case DBUS_TYPE_INT16:
       case DBUS_TYPE_INT32:
         {
-          gint *save_to = (gint *) (params + paramspec->offset);
+          gint *save_to = (gint *) (params_mem + paramspec->offset);
           gint i = g_value_get_int (value);
 
           g_assert (paramspec->gtype == G_TYPE_INT);
@@ -462,7 +464,7 @@ tp_cm_param_setter_offset (const TpCMParamSpec *paramspec,
       case DBUS_TYPE_UINT16:
       case DBUS_TYPE_UINT32:
         {
-          guint *save_to = (guint *) (params + paramspec->offset);
+          guint *save_to = (guint *) (params_mem + paramspec->offset);
           guint i = g_value_get_uint (value);
 
           g_assert (paramspec->gtype == G_TYPE_UINT);
@@ -472,7 +474,7 @@ tp_cm_param_setter_offset (const TpCMParamSpec *paramspec,
         break;
       case DBUS_TYPE_BOOLEAN:
         {
-          gboolean *save_to = (gboolean *) (params + paramspec->offset);
+          gboolean *save_to = (gboolean *) (params_mem + paramspec->offset);
           gboolean b = g_value_get_boolean (value);
 
           g_assert (paramspec->gtype == G_TYPE_BOOLEAN);
@@ -486,7 +488,7 @@ tp_cm_param_setter_offset (const TpCMParamSpec *paramspec,
           {
             case DBUS_TYPE_BYTE:
               {
-                GArray **save_to = (GArray **) (params + paramspec->offset);
+                GArray **save_to = (GArray **) (params_mem + paramspec->offset);
                 GArray *a = g_value_get_boxed (value);
 
                 if (*save_to != NULL)
-- 
1.5.6.5




More information about the Telepathy-commits mailing list