summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Hult <rhult@src.gnome.org>2003-11-26 14:56:20 +0000
committerRichard Hult <rhult@src.gnome.org>2003-11-26 14:56:20 +0000
commit5c777e6400e22037bb34d723b245e01ba4a9aba7 (patch)
tree736a99dd8d2ff2e31b920e08371bc99f116d1c94
parent598bbac9d901fa166c55f1a3faa17377faf39c03 (diff)
downloadgconf-5c777e6400e22037bb34d723b245e01ba4a9aba7.tar.gz
Improve error handling some more.
-rw-r--r--gconf/gconf-dbus-utils.c18
-rw-r--r--gconf/gconf-dbus.c51
2 files changed, 53 insertions, 16 deletions
diff --git a/gconf/gconf-dbus-utils.c b/gconf/gconf-dbus-utils.c
index 8810eb55..2f13ca0b 100644
--- a/gconf/gconf-dbus-utils.c
+++ b/gconf/gconf-dbus-utils.c
@@ -708,13 +708,20 @@ gconf_dbus_get_entry_values_from_message_iter (DBusMessageIter *iter,
gchar *name;
name = dbus_message_iter_get_dict_key (&dict);
+
if (!name)
return FALSE;
- if (strcmp (name, "key") == 0)
- *key = dbus_message_iter_get_string (&dict);
- else if (strcmp (name, "value") == 0)
- *value = gconf_dbus_create_gconf_value_from_message_iter (&dict);
+ if (strcmp (name, "key") == 0)
+ {
+ if (key)
+ *key = dbus_message_iter_get_string (&dict);
+ }
+ else if (strcmp (name, "value") == 0)
+ {
+ if (value)
+ *value = gconf_dbus_create_gconf_value_from_message_iter (&dict);
+ }
else if (strcmp (name, "is_default") == 0)
{
if (is_default)
@@ -732,6 +739,9 @@ gconf_dbus_get_entry_values_from_message_iter (DBusMessageIter *iter,
}
else
g_assert_not_reached ();
+
+ if (!dbus_message_iter_next (&dict))
+ break;
}
return TRUE;
diff --git a/gconf/gconf-dbus.c b/gconf/gconf-dbus.c
index e96a7331..be0d2312 100644
--- a/gconf/gconf-dbus.c
+++ b/gconf/gconf-dbus.c
@@ -174,6 +174,7 @@ gconf_server_broken (DBusMessage *message)
if (!message)
{
/* FIXME: should listen to the signal instead, daemon_running = FALSE; */
+ d(g_print ("server broken!\n"));
return TRUE;
}
@@ -193,7 +194,7 @@ gconf_server_broken (DBusMessage *message)
return FALSE;
}
-/* Returns TRUE if there was an error and sets err. */
+/* Returns TRUE if there was an error and sets err. Also frees derr. */
static gboolean
gconf_handle_dbus_exception (DBusMessage *message, DBusError *derr, GError **gerr)
{
@@ -208,14 +209,18 @@ gconf_handle_dbus_exception (DBusMessage *message, DBusError *derr, GError **ger
{
/* FIXME: what error num should we use here? and what string */
- *gerr = gconf_error_new (GCONF_ERROR_NO_SERVER, _("error: %s"),
+ *gerr = gconf_error_new (GCONF_ERROR_NO_SERVER, _("D-BUS error: %s"),
derr->message);
}
}
else
{
- /* FIXME: set gerr here? */
+ if (gerr)
+ *gerr = gconf_error_new (GCONF_ERROR_FAILED, _("Unknown error"));
}
+
+ if (derr)
+ dbus_error_free (derr);
return TRUE;
}
@@ -242,7 +247,6 @@ gconf_handle_dbus_exception (DBusMessage *message, DBusError *derr, GError **ger
GConfError en;
en = dbus_error_name_to_gconf_errno (name);
-
*gerr = gconf_error_new (en, error_string);
}
}
@@ -391,6 +395,8 @@ gconf_engine_connect (GConfEngine *conf,
if (conf->is_default)
{
+ d(g_print ("get default db, %s\n", cs));
+
message = dbus_message_new_method_call (GCONF_DBUS_SERVICE,
cs,
GCONF_DBUS_SERVER_INTERFACE,
@@ -413,6 +419,8 @@ gconf_engine_connect (GConfEngine *conf,
reply = dbus_connection_send_with_reply_and_block (connection, message, -1, &error);
}
+ d(g_print ("got reply from get_db/get_default_db %p\n", reply));
+
dbus_message_unref (message);
if (gconf_server_broken (reply))
@@ -442,7 +450,6 @@ gconf_engine_connect (GConfEngine *conf,
d(g_print ("db = %s\n", db));
-
if (db == NULL)
{
if (err)
@@ -832,7 +839,7 @@ gconf_engine_get_fuller (GConfEngine *conf,
d(g_print ("* try to get value\n"));
success = gconf_dbus_get_entry_values_from_message_iter (&iter,
- NULL, /*key*/
+ NULL,
&val,
&is_default,
&is_writable,
@@ -1893,16 +1900,12 @@ gconf_activate_service (gboolean start_if_not_found,
dbus_error_init (&error);
- d(g_print ("* activate_service\n"));
-
if (dbus_bus_service_exists (connection, GCONF_DBUS_SERVICE, &error))
{
d(g_print ("* activate_service, already active\n"));
return TRUE;
}
- d(g_print ("* activate_service, activating\n"));
-
if (dbus_error_is_set (&error))
{
g_set_error (err, GCONF_ERROR,
@@ -1916,6 +1919,8 @@ gconf_activate_service (gboolean start_if_not_found,
if (start_if_not_found)
{
+ d(g_print ("* activate_service, activating\n"));
+
message = dbus_message_new_method_call (DBUS_SERVICE_ORG_FREEDESKTOP_DBUS,
DBUS_PATH_ORG_FREEDESKTOP_DBUS,
DBUS_INTERFACE_ORG_FREEDESKTOP_DBUS,
@@ -1927,8 +1932,30 @@ gconf_activate_service (gboolean start_if_not_found,
0);
reply = dbus_connection_send_with_reply_and_block (connection,
- message, -1, NULL);
+ message, -1, &error);
dbus_message_unref (message);
+
+ if (reply == NULL)
+ {
+ const gchar *msg;
+
+ g_print ("ERROR\n");
+
+ if (dbus_error_is_set (&error))
+ msg = error.message;
+ else
+ msg = _("Unknown error");
+
+ g_set_error (err, GCONF_ERROR,
+ GCONF_ERROR_NO_SERVER,
+ _("Failed to activate configuration server: %s\n"),
+ msg);
+
+ if (dbus_error_is_set (&error))
+ dbus_error_free (&error);
+
+ return FALSE;
+ }
if (dbus_message_get_type (reply) == DBUS_MESSAGE_TYPE_ERROR)
{
@@ -1965,7 +1992,7 @@ gconf_get_config_server (gboolean start_if_not_found, GError** err)
/* FIXME: check if we're connected and reconnect if not */
- d(g_print ("* get_config_server\n"));
+ d(g_print ("* get_config_server %s\n", server));
if (server != NULL)
return server;