diff options
Diffstat (limited to 'glib/dbus-gvalue.c')
| -rw-r--r-- | glib/dbus-gvalue.c | 237 | 
1 files changed, 38 insertions, 199 deletions
diff --git a/glib/dbus-gvalue.c b/glib/dbus-gvalue.c index 282b3747..ebde24b0 100644 --- a/glib/dbus-gvalue.c +++ b/glib/dbus-gvalue.c @@ -25,6 +25,7 @@  #include "config.h"  #include "dbus-gtest.h"  #include "dbus-gvalue.h" +#include "dbus-gsignature.h"  #include "dbus-gobject.h"  #include "dbus-gvalue-utils.h"  #include "dbus/dbus-glib.h" @@ -140,52 +141,14 @@ set_type_metadata (GType type, const DBusGTypeMarshalData *data)    g_type_set_qdata (type, dbus_g_type_metadata_data_quark (), (gpointer) data);  } -#define MAP_BASIC(d_t, g_t)                     \ -    case DBUS_TYPE_##d_t:                       \ -      return G_TYPE_##g_t; -static GType -typecode_to_gtype (int type) -{ -  switch (type) -    { -      MAP_BASIC (BOOLEAN, BOOLEAN); -      MAP_BASIC (BYTE,    UCHAR); -      MAP_BASIC (INT16,   INT); -      MAP_BASIC (INT32,   INT); -      MAP_BASIC (UINT16,  UINT); -      MAP_BASIC (UINT32,  UINT); -      MAP_BASIC (INT64,   INT64); -      MAP_BASIC (UINT64,  UINT64); -      MAP_BASIC (DOUBLE,  DOUBLE); -      MAP_BASIC (STRING,  STRING); -    default: -      return G_TYPE_INVALID; -    } -} -#undef MAP_BASIC - -static gboolean -dbus_typecode_maps_to_basic (int typecode) -{ -  return typecode_to_gtype (typecode) != G_TYPE_INVALID; -} - -static GType -basic_typecode_to_gtype (int typecode) -{ -  g_assert (dbus_type_is_basic (typecode)); -  g_assert (dbus_typecode_maps_to_basic (typecode)); -  return typecode_to_gtype (typecode); -} -  static void  register_basic (int typecode, const DBusGTypeMarshalData *typedata)  { -  set_type_metadata (basic_typecode_to_gtype (typecode), typedata); +  set_type_metadata (_dbus_gtype_from_basic_typecode (typecode), typedata);  }  void -dbus_g_value_types_init (void) +_dbus_g_value_types_init (void)  {    static gboolean types_initialized; @@ -198,8 +161,7 @@ dbus_g_value_types_init (void)      return;    dbus_g_type_specialized_init (); -  dbus_g_type_specialized_builtins_init (); -   +  _dbus_g_type_specialized_builtins_init ();    /* Register basic types */    { @@ -384,109 +346,8 @@ dbus_g_object_path_get_g_type (void)    return type_id;  } -static GType -signature_iter_to_g_type_dict (const DBusSignatureIter *subiter, gboolean is_client) -{ -  DBusSignatureIter iter; -  GType key_gtype; -  GType value_gtype; - -  g_assert (dbus_signature_iter_get_current_type (subiter) == DBUS_TYPE_DICT_ENTRY); - -  dbus_signature_iter_recurse (subiter, &iter); - -  key_gtype = dbus_gtype_from_signature_iter (&iter, is_client);  -  if (key_gtype == G_TYPE_INVALID) -    return G_TYPE_INVALID; - -  dbus_signature_iter_next (&iter); -  value_gtype = dbus_gtype_from_signature_iter (&iter, is_client); -  if (value_gtype == G_TYPE_INVALID) -    return G_TYPE_INVALID; - -  if (!dbus_gtype_is_valid_hash_key (key_gtype) -      || !dbus_gtype_is_valid_hash_value (value_gtype)) -    /* Later we need to return DBUS_TYPE_G_VALUE */ -    return G_TYPE_INVALID;  - -  return dbus_g_type_get_map ("GHashTable", key_gtype, value_gtype); -} - -static GType -signature_iter_to_g_type_array (DBusSignatureIter *iter, gboolean is_client) -{ -  GType elt_gtype; - -  elt_gtype = dbus_gtype_from_signature_iter (iter, is_client); -  if (elt_gtype == G_TYPE_INVALID) -    return G_TYPE_INVALID; - -  if (elt_gtype == G_TYPE_OBJECT) -    return DBUS_TYPE_G_OBJECT_ARRAY; -  if (elt_gtype == G_TYPE_STRING) -    return G_TYPE_STRV; -  if (dbus_g_type_is_fixed (elt_gtype)) -    return dbus_g_type_get_collection ("GArray", elt_gtype); -  else if (g_type_is_a (elt_gtype, G_TYPE_OBJECT) -	   || g_type_is_a (elt_gtype, G_TYPE_BOXED)) -    return dbus_g_type_get_collection ("GPtrArray", elt_gtype); - -  /* Later we need to return DBUS_TYPE_G_VALUE */ -  return G_TYPE_INVALID;  -} - -GType -dbus_gtype_from_signature_iter (DBusSignatureIter *iter, gboolean is_client) -{ -  int current_type; - -  current_type = dbus_signature_iter_get_current_type (iter); -  /* TODO: handle type 0? */ -  if (dbus_typecode_maps_to_basic (current_type)) -    return basic_typecode_to_gtype (current_type); -  else if (current_type == DBUS_TYPE_OBJECT_PATH) -    return DBUS_TYPE_G_OBJECT_PATH; -  else -    { -      DBusSignatureIter subiter; - -      g_assert (dbus_type_is_container (current_type)); - -      if (current_type == DBUS_TYPE_VARIANT) -	return G_TYPE_VALUE; -      if (current_type == DBUS_TYPE_STRUCT) -	return G_TYPE_VALUE_ARRAY; -       -      dbus_signature_iter_recurse (iter, &subiter); - -      if (current_type == DBUS_TYPE_ARRAY) -	{ -	  int elt_type = dbus_signature_iter_get_current_type (&subiter); -	  if (elt_type == DBUS_TYPE_DICT_ENTRY) -	    return signature_iter_to_g_type_dict (&subiter, is_client); -	  else  -	    return signature_iter_to_g_type_array (&subiter, is_client); -	} -      else -	{ -	  g_assert_not_reached (); -	  return G_TYPE_INVALID; -	} -    } -} - -GType -dbus_gtype_from_signature (const char *signature, gboolean is_client) -{ -  DBusSignatureIter iter; - -  dbus_signature_iter_init (&iter, signature); - -  return dbus_gtype_from_signature_iter (&iter, is_client); -} -  char * -dbus_gtype_to_signature (GType gtype) +_dbus_gtype_to_signature (GType gtype)  {    char *ret;    DBusGTypeMarshalData *typedata; @@ -497,7 +358,7 @@ dbus_gtype_to_signature (GType gtype)        char *subsig;        elt_gtype = dbus_g_type_get_collection_specialization (gtype); -      subsig = dbus_gtype_to_signature (elt_gtype); +      subsig = _dbus_gtype_to_signature (elt_gtype);        ret = g_strconcat (DBUS_TYPE_ARRAY_AS_STRING, subsig, NULL);        g_free (subsig);      } @@ -510,8 +371,8 @@ dbus_gtype_to_signature (GType gtype)        key_gtype = dbus_g_type_get_map_key_specialization (gtype);        val_gtype = dbus_g_type_get_map_value_specialization (gtype); -      key_subsig = dbus_gtype_to_signature (key_gtype); -      val_subsig = dbus_gtype_to_signature (val_gtype); +      key_subsig = _dbus_gtype_to_signature (key_gtype); +      val_subsig = _dbus_gtype_to_signature (val_gtype);        ret = g_strconcat (DBUS_TYPE_ARRAY_AS_STRING DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING, key_subsig, val_subsig, DBUS_DICT_ENTRY_END_CHAR_AS_STRING, NULL);        g_free (key_subsig);        g_free (val_subsig); @@ -552,31 +413,9 @@ dbus_gvalue_to_signature (const GValue *val)        return g_string_free (str, FALSE);      }    else -    return dbus_gtype_to_signature (gtype); -} - -GArray * -dbus_gtypes_from_arg_signature (const char *argsig, gboolean is_client) -{ -  GArray *ret; -  int current_type; -  DBusSignatureIter sigiter; - -  ret = g_array_new (FALSE, FALSE, sizeof (GType)); - -  dbus_signature_iter_init (&sigiter, argsig); -  while ((current_type = dbus_signature_iter_get_current_type (&sigiter)) != DBUS_TYPE_INVALID) -    { -      GType curtype; - -      curtype = dbus_gtype_from_signature_iter (&sigiter, is_client); -      g_array_append_val (ret, curtype); -      dbus_signature_iter_next (&sigiter); -    } -  return ret; +    return _dbus_gtype_to_signature (gtype);  } -  static gboolean  demarshal_basic (DBusGValueMarshalCtx      *context,  		 DBusMessageIter           *iter, @@ -681,12 +520,12 @@ demarshal_static_variant (DBusGValueMarshalCtx    *context,    dbus_message_iter_recurse (iter, &subiter);    sig = dbus_message_iter_get_signature (&subiter); -  variant_type = dbus_gtype_from_signature (sig, context->proxy != NULL); +  variant_type = _dbus_gtype_from_signature (sig, context->proxy != NULL);    if (variant_type != G_TYPE_INVALID)      {        g_value_init (value, variant_type); -      if (!dbus_gvalue_demarshal (context, &subiter, value, error)) +      if (!_dbus_gvalue_demarshal (context, &subiter, value, error))  	{  	  dbus_free (sig);  	  return FALSE; @@ -898,7 +737,7 @@ demarshal_valuearray (DBusGValueMarshalCtx    *context,        val = g_value_array_get_nth (ret, ret->n_values - 1);        current_sig = dbus_message_iter_get_signature (&subiter); -      elt_type = dbus_gtype_from_signature (current_sig, TRUE); +      elt_type = _dbus_gtype_from_signature (current_sig, TRUE);        g_free (current_sig);        if (elt_type == G_TYPE_INVALID) @@ -913,7 +752,7 @@ demarshal_valuearray (DBusGValueMarshalCtx    *context,        g_value_init (val, elt_type); -      if (!dbus_gvalue_demarshal (context, &subiter, val, error)) +      if (!_dbus_gvalue_demarshal (context, &subiter, val, error))  	{  	  g_value_array_free (ret);  	  return FALSE; @@ -986,7 +825,7 @@ demarshal_map (DBusGValueMarshalCtx    *context,        dbus_message_iter_recurse (&subiter, &entry_iter);        g_value_init (&key_value, key_gtype); -      if (!dbus_gvalue_demarshal (context, +      if (!_dbus_gvalue_demarshal (context,  				  &entry_iter,  				  &key_value,  				  error)) @@ -995,7 +834,7 @@ demarshal_map (DBusGValueMarshalCtx    *context,        dbus_message_iter_next (&entry_iter);        g_value_init (&value_value, value_gtype); -      if (!dbus_gvalue_demarshal (context, +      if (!_dbus_gvalue_demarshal (context,  				  &entry_iter,  				  &value_value,  				  error)) @@ -1044,7 +883,7 @@ demarshal_collection (DBusGValueMarshalCtx    *context,    coltype = G_VALUE_TYPE (value);    subtype = dbus_g_type_get_collection_specialization (coltype); -  if (dbus_g_type_is_fixed (subtype)) +  if (_dbus_g_type_is_fixed (subtype))      return demarshal_collection_array (context, iter, value, error);    else      return demarshal_collection_ptrarray (context, iter, value, error); @@ -1136,9 +975,9 @@ demarshal_collection_array (DBusGValueMarshalCtx    *context,    elt_gtype = dbus_g_type_get_collection_specialization (G_VALUE_TYPE (value));    g_assert (elt_gtype != G_TYPE_INVALID); -  g_assert (dbus_g_type_is_fixed (elt_gtype)); +  g_assert (_dbus_g_type_is_fixed (elt_gtype)); -  elt_size = dbus_g_type_fixed_get_size (elt_gtype); +  elt_size = _dbus_g_type_fixed_get_size (elt_gtype);    ret = g_array_new (FALSE, TRUE, elt_size); @@ -1156,7 +995,7 @@ demarshal_collection_array (DBusGValueMarshalCtx    *context,  }  gboolean -dbus_gvalue_demarshal (DBusGValueMarshalCtx    *context, +_dbus_gvalue_demarshal (DBusGValueMarshalCtx    *context,  		       DBusMessageIter         *iter,  		       GValue                  *value,  		       GError                 **error) @@ -1182,7 +1021,7 @@ dbus_gvalue_demarshal (DBusGValueMarshalCtx    *context,  }  gboolean -dbus_gvalue_demarshal_variant (DBusGValueMarshalCtx    *context, +_dbus_gvalue_demarshal_variant (DBusGValueMarshalCtx    *context,  			       DBusMessageIter         *iter,  			       GValue                  *value,  			       GError                 **error) @@ -1191,7 +1030,7 @@ dbus_gvalue_demarshal_variant (DBusGValueMarshalCtx    *context,  }  GValueArray * -dbus_gvalue_demarshal_message  (DBusGValueMarshalCtx    *context, +_dbus_gvalue_demarshal_message  (DBusGValueMarshalCtx    *context,  				DBusMessage             *message,  				guint                    n_types,  				const GType             *types, @@ -1225,7 +1064,7 @@ dbus_gvalue_demarshal_message  (DBusGValueMarshalCtx    *context,        gtype = types[index];         g_value_init (value, gtype); -      if (!dbus_gvalue_demarshal (context, &iter, value, error)) +      if (!_dbus_gvalue_demarshal (context, &iter, value, error))  	goto lose;        dbus_message_iter_next (&iter);        index++; @@ -1433,7 +1272,7 @@ marshal_valuearray (DBusMessageIter   *iter,    for (i = 0; i < array->n_values; i++)      { -      if (!dbus_gvalue_marshal (&subiter, g_value_array_get_nth (array, i))) +      if (!_dbus_gvalue_marshal (&subiter, g_value_array_get_nth (array, i)))  	return FALSE;      } @@ -1527,10 +1366,10 @@ marshal_map_entry (const GValue *key,  					 &subiter))      goto lose; -  if (!dbus_gvalue_marshal (&subiter, key)) +  if (!_dbus_gvalue_marshal (&subiter, key))      goto lose; -  if (!dbus_gvalue_marshal (&subiter, value)) +  if (!_dbus_gvalue_marshal (&subiter, value))      goto lose;    if (!dbus_message_iter_close_container (hashdata->iter, &subiter)) @@ -1561,17 +1400,17 @@ marshal_map (DBusMessageIter   *iter,    ret = FALSE;    key_type = dbus_g_type_get_map_key_specialization (gtype); -  g_assert (dbus_gtype_is_valid_hash_key (key_type)); +  g_assert (_dbus_gtype_is_valid_hash_key (key_type));    value_type = dbus_g_type_get_map_value_specialization (gtype); -  g_assert (dbus_gtype_is_valid_hash_value (value_type)); +  g_assert (_dbus_gtype_is_valid_hash_value (value_type)); -  key_sig = dbus_gtype_to_signature (key_type); +  key_sig = _dbus_gtype_to_signature (key_type);    if (!key_sig)      {        g_warning ("Cannot marshal type \"%s\" in map\n", g_type_name (key_type));        return FALSE;      } -  value_sig = dbus_gtype_to_signature (value_type); +  value_sig = _dbus_gtype_to_signature (value_type);    if (!value_sig)      {        g_free (key_sig); @@ -1701,7 +1540,7 @@ marshal_collection (DBusMessageIter         *iter,    coltype = G_VALUE_TYPE (value);    subtype = dbus_g_type_get_collection_specialization (coltype); -  if (dbus_g_type_is_fixed (subtype)) +  if (_dbus_g_type_is_fixed (subtype))      return marshal_collection_array (iter, value);    else      return marshal_collection_ptrarray (iter, value); @@ -1723,7 +1562,7 @@ marshal_collection_ptrarray (DBusMessageIter         *iter,    if (!data.marshaller)      return FALSE; -  elt_sig = dbus_gtype_to_signature (elt_gtype); +  elt_sig = _dbus_gtype_to_signature (elt_gtype);    if (!elt_sig)      {        g_warning ("Cannot marshal type \"%s\" in collection\n", g_type_name (elt_gtype)); @@ -1765,15 +1604,15 @@ marshal_collection_array (DBusMessageIter   *iter,    char *subsignature_str;    elt_gtype = dbus_g_type_get_collection_specialization (G_VALUE_TYPE (value)); -  g_assert (dbus_g_type_is_fixed (elt_gtype)); -  subsignature_str = dbus_gtype_to_signature (elt_gtype); +  g_assert (_dbus_g_type_is_fixed (elt_gtype)); +  subsignature_str = _dbus_gtype_to_signature (elt_gtype);    if (!subsignature_str)      {        g_warning ("Cannot marshal type \"%s\" in collection\n", g_type_name (elt_gtype));        return FALSE;      } -  elt_size = dbus_g_type_fixed_get_size (elt_gtype); +  elt_size = _dbus_g_type_fixed_get_size (elt_gtype);    array = g_value_get_boxed (value); @@ -1803,7 +1642,7 @@ marshal_collection_array (DBusMessageIter   *iter,  }  gboolean -dbus_gvalue_marshal (DBusMessageIter         *iter, +_dbus_gvalue_marshal (DBusMessageIter         *iter,  		     const GValue       *value)  {    GType gtype; @@ -1823,7 +1662,7 @@ static void  assert_type_maps_to (GType gtype, const char *expected_sig)  {    char *sig; -  sig = dbus_gtype_to_signature (gtype); +  sig = _dbus_gtype_to_signature (gtype);    g_assert (sig != NULL);    g_assert (!strcmp (expected_sig, sig));    g_free (sig); @@ -1832,7 +1671,7 @@ assert_type_maps_to (GType gtype, const char *expected_sig)  static void  assert_signature_maps_to (const char *sig, GType expected_gtype)  { -  g_assert (dbus_gtype_from_signature (sig, TRUE) == expected_gtype); +  g_assert (_dbus_gtype_from_signature (sig, TRUE) == expected_gtype);  }  static void @@ -1850,7 +1689,7 @@ assert_bidirectional_mapping (GType gtype, const char *expected_sig)  gboolean  _dbus_gvalue_test (const char *test_data_dir)  { -  dbus_g_value_types_init (); +  _dbus_g_value_types_init ();    assert_bidirectional_mapping (G_TYPE_STRING, DBUS_TYPE_STRING_AS_STRING);    assert_bidirectional_mapping (G_TYPE_UCHAR, DBUS_TYPE_BYTE_AS_STRING);  | 
