diff options
Diffstat (limited to 'gconf/gconf-corba-utils.c')
-rw-r--r-- | gconf/gconf-corba-utils.c | 69 |
1 files changed, 39 insertions, 30 deletions
diff --git a/gconf/gconf-corba-utils.c b/gconf/gconf-corba-utils.c index d87644e7..0738d2e2 100644 --- a/gconf/gconf-corba-utils.c +++ b/gconf/gconf-corba-utils.c @@ -192,7 +192,7 @@ ConfigServer gconf_activate_server (gboolean start_if_not_found, GError **error) { - ConfigServer server; + ConfigServer server = CORBA_OBJECT_NIL; int p[2] = { -1, -1 }; char buf[1]; GError *tmp_err; @@ -200,47 +200,56 @@ gconf_activate_server (gboolean start_if_not_found, char *gconfd_dir; char *lock_dir; GString *failure_log; + struct stat statbuf; CORBA_Environment ev; + gboolean dir_accessible; failure_log = g_string_new (NULL); gconfd_dir = gconf_get_daemon_dir (); - - if (mkdir (gconfd_dir, 0700) < 0 && errno != EEXIST) - gconf_log (GCL_WARNING, _("Failed to create %s: %s"), - gconfd_dir, g_strerror (errno)); - g_free (gconfd_dir); + dir_accessible = stat (gconfd_dir, &statbuf) >= 0; + + if (!dir_accessible && errno != ENOENT) + { + server = CORBA_OBJECT_NIL; + gconf_log (GCL_WARNING, _("Failed to stat %s: %s"), + gconfd_dir, g_strerror (errno)); + } + else if (dir_accessible) + { + g_string_append (failure_log, " 1: "); + lock_dir = gconf_get_lock_dir (); + server = gconf_get_current_lock_holder (lock_dir, failure_log); + g_free (lock_dir); + + /* Confirm server exists */ + CORBA_exception_init (&ev); - g_string_append (failure_log, " 1: "); - lock_dir = gconf_get_lock_dir (); - server = gconf_get_current_lock_holder (lock_dir, failure_log); - g_free (lock_dir); + if (!CORBA_Object_is_nil (server, &ev)) + { + ConfigServer_ping (server, &ev); + + if (ev._major != CORBA_NO_EXCEPTION) + { + server = CORBA_OBJECT_NIL; - /* Confirm server exists */ - CORBA_exception_init (&ev); + g_string_append_printf (failure_log, + _("Server ping error: %s"), + CORBA_exception_id (&ev)); + } + } - if (!CORBA_Object_is_nil (server, &ev)) - { - ConfigServer_ping (server, &ev); - - if (ev._major != CORBA_NO_EXCEPTION) - { - server = CORBA_OBJECT_NIL; + CORBA_exception_free (&ev); - g_string_append_printf (failure_log, - _("Server ping error: %s"), - CORBA_exception_id (&ev)); - } + if (server != CORBA_OBJECT_NIL) + { + g_string_free (failure_log, TRUE); + return server; + } } - - CORBA_exception_free (&ev); - if (server != CORBA_OBJECT_NIL) - { - g_string_free (failure_log, TRUE); - return server; - } + g_free (gconfd_dir); if (start_if_not_found) { |