summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@src.gnome.org>2003-03-16 18:32:37 +0000
committerAnders Carlsson <andersca@src.gnome.org>2003-03-16 18:32:37 +0000
commit891a7807e57066efb77679754a8e5a3691409d6e (patch)
tree909c8c1047216fb6631a7155fe726010177a05aa
parentb9a522e8eaf6bf9cc2085ea3e25cd18de935b49a (diff)
downloadgconf-891a7807e57066efb77679754a8e5a3691409d6e.tar.gz
Start making the CORBA dep optional
-rw-r--r--configure.in33
-rw-r--r--gconf/Makefile.am4
-rw-r--r--gconf/gconf-internals.c912
-rw-r--r--gconf/gconf-internals.h24
-rw-r--r--gconf/gconf.c414
-rw-r--r--gconf/gconfd-corba.c769
-rw-r--r--gconf/gconfd-corba.h17
-rw-r--r--gconf/gconfd-dbus.c5
8 files changed, 834 insertions, 1344 deletions
diff --git a/configure.in b/configure.in
index 1d66804c..a26387c0 100644
--- a/configure.in
+++ b/configure.in
@@ -170,13 +170,41 @@ if test x$enable_gtk_doc = xauto ; then
fi
fi
+AC_ARG_ENABLE(orbit, [ --enable-orbit enable ORBit support in the daemon],enable_orbit=$enableval,enable_orbit=auto)
+
+# ORBit detection
+PKG_CHECK_MODULES(GCONF_ORBIT, ORBit-2.0 >= 2.4.0 linc >= 0.5.0, have_orbit=yes, have_orbit=no)
+
+if test x$have_orbit = xno ; then
+ AC_MSG_WARN([ORBit development libraries not found])
+fi
+
+if test x$enable_orbit = xyes; then
+ if test x$have_orbit = xno; then
+ AC_MSG_ERROR([ORBit explicitly required, and ORBit development libraries not found])
+ fi
+ ORBIT_IDL="`$PKG_CONFIG --variable=orbit_idl ORBit-2.0`"
+ AC_SUBST(ORBIT_IDL)
+ AC_DEFINE(HAVE_ORBIT,1,ORBit support in the daemon)
+fi
+
+if test x$enable_orbit = xno; then
+ have_orbit=no;
+fi
+
+AM_CONDITIONAL(HAVE_ORBIT, test x$have_orbit = xyes)
+
+dnl GLib flags
+AC_SUBST(GCONF_ORBIT_CFLAGS)
+AC_SUBST(GCONF_ORBIT_LIBS)
+
dnl NOTE: We need to use a separate automake conditional for this
dnl to make this work with the tarballs.
AM_CONDITIONAL(ENABLE_GTK_DOC, test x$enable_gtk_doc = xyes)
-PKGCONFIG_MODULES='gmodule-2.0 >= 2.2.0 gobject-2.0 >= 2.2.0 ORBit-2.0 >= 2.4.0 linc >= 0.5.0 dbus-glib-1.0 >= 0.5'
+PKGCONFIG_MODULES='gmodule-2.0 >= 2.2.0 gobject-2.0 >= 2.2.0 dbus-glib-1.0 >= 0.5'
PKGCONFIG_MODULES_WITH_XML="$PKGCONFIG_MODULES libxml-2.0"
PKGCONFIG_MODULES_WITH_GTK=" $PKGCONFIG_MODULES gtk+-2.0 >= 2.0.0"
PKGCONFIG_MODULES_WITH_XML_AND_GTK=" $PKGCONFIG_MODULES gtk+-2.0 libxml-2.0"
@@ -274,9 +302,6 @@ AM_CONDITIONAL(BDB, test -n "$BDB_LIBS")
AC_SUBST(BDB_LIBS)
AC_SUBST(BDB_CFLAGS)
-ORBIT_IDL="`$PKG_CONFIG --variable=orbit_idl ORBit-2.0`"
-AC_SUBST(ORBIT_IDL)
-
AC_CHECK_LIB(popt, poptGetArg, POPT_LIBS=-lpopt,
[AC_CHECK_HEADER(popt.h, , AC_MSG_ERROR([[
*** Couldn't find popt. Please download and install from
diff --git a/gconf/Makefile.am b/gconf/Makefile.am
index 9febd027..67d9b8ec 100644
--- a/gconf/Makefile.am
+++ b/gconf/Makefile.am
@@ -33,7 +33,11 @@ lib_LTLIBRARIES = libgconf-2.la
bin_PROGRAMS = gconftool-2
libexec_PROGRAMS = gconfd-2 $(SANITY_CHECK)
+if HAVE_ORBIT
CORBA_SOURCECODE = GConfX-common.c GConfX-skels.c GConfX-stubs.c GConfX.h
+else
+CORBA_SOURCECODE =
+endif
noinst_PROGRAMS = simple-test
## not BUILT_SOURCES which seems to make a mess. fix with automake 1.5?
diff --git a/gconf/gconf-internals.c b/gconf/gconf-internals.c
index 189beb66..eabbaa34 100644
--- a/gconf/gconf-internals.c
+++ b/gconf/gconf-internals.c
@@ -149,487 +149,6 @@ gconf_file_test(const gchar* filename, int test)
return TRUE;
}
-GConfValue*
-gconf_value_from_corba_value(const ConfigValue* value)
-{
- GConfValue* gval;
- GConfValueType type = GCONF_VALUE_INVALID;
-
- switch (value->_d)
- {
- case InvalidVal:
- return NULL;
- break;
- case IntVal:
- type = GCONF_VALUE_INT;
- break;
- case StringVal:
- type = GCONF_VALUE_STRING;
- break;
- case FloatVal:
- type = GCONF_VALUE_FLOAT;
- break;
- case BoolVal:
- type = GCONF_VALUE_BOOL;
- break;
- case SchemaVal:
- type = GCONF_VALUE_SCHEMA;
- break;
- case ListVal:
- type = GCONF_VALUE_LIST;
- break;
- case PairVal:
- type = GCONF_VALUE_PAIR;
- break;
- default:
- gconf_log(GCL_DEBUG, "Invalid type in %s", G_GNUC_FUNCTION);
- return NULL;
- }
-
- g_assert(GCONF_VALUE_TYPE_VALID(type));
-
- gval = gconf_value_new(type);
-
- switch (gval->type)
- {
- case GCONF_VALUE_INT:
- gconf_value_set_int(gval, value->_u.int_value);
- break;
- case GCONF_VALUE_STRING:
- if (!g_utf8_validate (value->_u.string_value, -1, NULL))
- {
- gconf_log (GCL_ERR, _("Invalid UTF-8 in string value in '%s'"),
- value->_u.string_value);
- }
- else
- {
- gconf_value_set_string(gval, value->_u.string_value);
- }
- break;
- case GCONF_VALUE_FLOAT:
- gconf_value_set_float(gval, value->_u.float_value);
- break;
- case GCONF_VALUE_BOOL:
- gconf_value_set_bool(gval, value->_u.bool_value);
- break;
- case GCONF_VALUE_SCHEMA:
- gconf_value_set_schema_nocopy(gval,
- gconf_schema_from_corba_schema(&(value->_u.schema_value)));
- break;
- case GCONF_VALUE_LIST:
- {
- GSList* list = NULL;
- guint i = 0;
-
- switch (value->_u.list_value.list_type)
- {
- case BIntVal:
- gconf_value_set_list_type(gval, GCONF_VALUE_INT);
- break;
- case BBoolVal:
- gconf_value_set_list_type(gval, GCONF_VALUE_BOOL);
- break;
- case BFloatVal:
- gconf_value_set_list_type(gval, GCONF_VALUE_FLOAT);
- break;
- case BStringVal:
- gconf_value_set_list_type(gval, GCONF_VALUE_STRING);
- break;
- case BInvalidVal:
- break;
- default:
- g_warning("Bizarre list type in %s", G_GNUC_FUNCTION);
- break;
- }
-
- if (gconf_value_get_list_type(gval) != GCONF_VALUE_INVALID)
- {
- i = 0;
- while (i < value->_u.list_value.seq._length)
- {
- GConfValue* val;
-
- /* This is a bit dubious; we cast a ConfigBasicValue to ConfigValue
- because they have the same initial members, but by the time
- the CORBA and C specs kick in, not sure we are guaranteed
- to be able to do this.
- */
- val = gconf_value_from_corba_value((ConfigValue*)&value->_u.list_value.seq._buffer[i]);
-
- if (val == NULL)
- gconf_log(GCL_ERR, _("Couldn't interpret CORBA value for list element"));
- else if (val->type != gconf_value_get_list_type(gval))
- gconf_log(GCL_ERR, _("Incorrect type for list element in %s"), G_GNUC_FUNCTION);
- else
- list = g_slist_prepend(list, val);
-
- ++i;
- }
-
- list = g_slist_reverse(list);
-
- gconf_value_set_list_nocopy(gval, list);
- }
- else
- {
- gconf_log(GCL_ERR, _("Received list from gconfd with a bad list type"));
- }
- }
- break;
- case GCONF_VALUE_PAIR:
- {
- g_return_val_if_fail(value->_u.pair_value._length == 2, gval);
-
- gconf_value_set_car_nocopy(gval,
- gconf_value_from_corba_value((ConfigValue*)&value->_u.list_value.seq._buffer[0]));
-
- gconf_value_set_cdr_nocopy(gval,
- gconf_value_from_corba_value((ConfigValue*)&value->_u.list_value.seq._buffer[1]));
- }
- break;
- default:
- g_assert_not_reached();
- break;
- }
-
- return gval;
-}
-
-void
-gconf_fill_corba_value_from_gconf_value(const GConfValue *value,
- ConfigValue *cv)
-{
- if (value == NULL)
- {
- cv->_d = InvalidVal;
- return;
- }
-
- switch (value->type)
- {
- case GCONF_VALUE_INT:
- cv->_d = IntVal;
- cv->_u.int_value = gconf_value_get_int(value);
- break;
- case GCONF_VALUE_STRING:
- cv->_d = StringVal;
- cv->_u.string_value = CORBA_string_dup((char*)gconf_value_get_string(value));
- break;
- case GCONF_VALUE_FLOAT:
- cv->_d = FloatVal;
- cv->_u.float_value = gconf_value_get_float(value);
- break;
- case GCONF_VALUE_BOOL:
- cv->_d = BoolVal;
- cv->_u.bool_value = gconf_value_get_bool(value);
- break;
- case GCONF_VALUE_SCHEMA:
- cv->_d = SchemaVal;
- gconf_fill_corba_schema_from_gconf_schema (gconf_value_get_schema(value),
- &cv->_u.schema_value);
- break;
- case GCONF_VALUE_LIST:
- {
- guint n, i;
- GSList* list;
-
- cv->_d = ListVal;
-
- list = gconf_value_get_list(value);
-
- n = g_slist_length(list);
-
- cv->_u.list_value.seq._buffer =
- CORBA_sequence_ConfigBasicValue_allocbuf(n);
- cv->_u.list_value.seq._length = n;
- cv->_u.list_value.seq._maximum = n;
- CORBA_sequence_set_release(&cv->_u.list_value.seq, TRUE);
-
- switch (gconf_value_get_list_type(value))
- {
- case GCONF_VALUE_INT:
- cv->_u.list_value.list_type = BIntVal;
- break;
-
- case GCONF_VALUE_BOOL:
- cv->_u.list_value.list_type = BBoolVal;
- break;
-
- case GCONF_VALUE_STRING:
- cv->_u.list_value.list_type = BStringVal;
- break;
-
- case GCONF_VALUE_FLOAT:
- cv->_u.list_value.list_type = BFloatVal;
- break;
-
- case GCONF_VALUE_SCHEMA:
- cv->_u.list_value.list_type = BSchemaVal;
- break;
-
- default:
- cv->_u.list_value.list_type = BInvalidVal;
- gconf_log(GCL_DEBUG, "Invalid list type in %s", G_GNUC_FUNCTION);
- break;
- }
-
- i= 0;
- while (list != NULL)
- {
- /* That dubious ConfigBasicValue->ConfigValue cast again */
- gconf_fill_corba_value_from_gconf_value((GConfValue*)list->data,
- (ConfigValue*)&cv->_u.list_value.seq._buffer[i]);
-
- list = g_slist_next(list);
- ++i;
- }
- }
- break;
- case GCONF_VALUE_PAIR:
- {
- cv->_d = PairVal;
-
- cv->_u.pair_value._buffer =
- CORBA_sequence_ConfigBasicValue_allocbuf(2);
- cv->_u.pair_value._length = 2;
- cv->_u.pair_value._maximum = 2;
- CORBA_sequence_set_release(&cv->_u.pair_value, TRUE);
-
- /* dubious cast */
- gconf_fill_corba_value_from_gconf_value (gconf_value_get_car(value),
- (ConfigValue*)&cv->_u.pair_value._buffer[0]);
- gconf_fill_corba_value_from_gconf_value(gconf_value_get_cdr(value),
- (ConfigValue*)&cv->_u.pair_value._buffer[1]);
- }
- break;
-
- case GCONF_VALUE_INVALID:
- cv->_d = InvalidVal;
- break;
- default:
- cv->_d = InvalidVal;
- gconf_log(GCL_DEBUG, "Unknown type in %s", G_GNUC_FUNCTION);
- break;
- }
-}
-
-ConfigValue*
-gconf_corba_value_from_gconf_value (const GConfValue* value)
-{
- ConfigValue* cv;
-
- cv = ConfigValue__alloc();
-
- gconf_fill_corba_value_from_gconf_value(value, cv);
-
- return cv;
-}
-
-ConfigValue*
-gconf_invalid_corba_value ()
-{
- ConfigValue* cv;
-
- cv = ConfigValue__alloc();
-
- cv->_d = InvalidVal;
-
- return cv;
-}
-
-gchar*
-gconf_object_to_string (CORBA_Object obj,
- GError **err)
-{
- CORBA_Environment ev;
- gchar *ior;
- gchar *retval;
-
- CORBA_exception_init (&ev);
-
- ior = CORBA_ORB_object_to_string (gconf_orb_get (), obj, &ev);
-
- if (ior == NULL)
- {
- gconf_set_error (err,
- GCONF_ERROR_FAILED,
- _("Failed to convert object to IOR"));
-
- return NULL;
- }
-
- retval = g_strdup (ior);
-
- CORBA_free (ior);
-
- return retval;
-}
-
-static ConfigValueType
-corba_type_from_gconf_type(GConfValueType type)
-{
- switch (type)
- {
- case GCONF_VALUE_INT:
- return IntVal;
- case GCONF_VALUE_BOOL:
- return BoolVal;
- case GCONF_VALUE_FLOAT:
- return FloatVal;
- case GCONF_VALUE_INVALID:
- return InvalidVal;
- case GCONF_VALUE_STRING:
- return StringVal;
- case GCONF_VALUE_SCHEMA:
- return SchemaVal;
- case GCONF_VALUE_LIST:
- return ListVal;
- case GCONF_VALUE_PAIR:
- return PairVal;
- default:
- g_assert_not_reached();
- return InvalidVal;
- }
-}
-
-static GConfValueType
-gconf_type_from_corba_type(ConfigValueType type)
-{
- switch (type)
- {
- case InvalidVal:
- return GCONF_VALUE_INVALID;
- case StringVal:
- return GCONF_VALUE_STRING;
- case IntVal:
- return GCONF_VALUE_INT;
- case FloatVal:
- return GCONF_VALUE_FLOAT;
- case SchemaVal:
- return GCONF_VALUE_SCHEMA;
- case BoolVal:
- return GCONF_VALUE_BOOL;
- case ListVal:
- return GCONF_VALUE_LIST;
- case PairVal:
- return GCONF_VALUE_PAIR;
- default:
- g_assert_not_reached();
- return GCONF_VALUE_INVALID;
- }
-}
-
-void
-gconf_fill_corba_schema_from_gconf_schema(const GConfSchema *sc,
- ConfigSchema *cs)
-{
- cs->value_type = corba_type_from_gconf_type (gconf_schema_get_type (sc));
- cs->value_list_type = corba_type_from_gconf_type (gconf_schema_get_list_type (sc));
- cs->value_car_type = corba_type_from_gconf_type (gconf_schema_get_car_type (sc));
- cs->value_cdr_type = corba_type_from_gconf_type (gconf_schema_get_cdr_type (sc));
-
- cs->locale = CORBA_string_dup (gconf_schema_get_locale (sc) ? gconf_schema_get_locale (sc) : "");
- cs->short_desc = CORBA_string_dup (gconf_schema_get_short_desc (sc) ? gconf_schema_get_short_desc (sc) : "");
- cs->long_desc = CORBA_string_dup (gconf_schema_get_long_desc (sc) ? gconf_schema_get_long_desc (sc) : "");
- cs->owner = CORBA_string_dup (gconf_schema_get_owner (sc) ? gconf_schema_get_owner (sc) : "");
-
- {
- gchar* encoded;
- GConfValue* default_val;
-
- default_val = gconf_schema_get_default_value (sc);
-
- if (default_val)
- {
- encoded = gconf_value_encode (default_val);
-
- g_assert (encoded != NULL);
-
- cs->encoded_default_value = CORBA_string_dup (encoded);
-
- g_free (encoded);
- }
- else
- cs->encoded_default_value = CORBA_string_dup ("");
- }
-}
-
-ConfigSchema*
-gconf_corba_schema_from_gconf_schema (const GConfSchema* sc)
-{
- ConfigSchema* cs;
-
- cs = ConfigSchema__alloc ();
-
- gconf_fill_corba_schema_from_gconf_schema (sc, cs);
-
- return cs;
-}
-
-GConfSchema*
-gconf_schema_from_corba_schema(const ConfigSchema* cs)
-{
- GConfSchema* sc;
- GConfValueType type = GCONF_VALUE_INVALID;
- GConfValueType list_type = GCONF_VALUE_INVALID;
- GConfValueType car_type = GCONF_VALUE_INVALID;
- GConfValueType cdr_type = GCONF_VALUE_INVALID;
-
- type = gconf_type_from_corba_type(cs->value_type);
- list_type = gconf_type_from_corba_type(cs->value_list_type);
- car_type = gconf_type_from_corba_type(cs->value_car_type);
- cdr_type = gconf_type_from_corba_type(cs->value_cdr_type);
-
- sc = gconf_schema_new();
-
- gconf_schema_set_type(sc, type);
- gconf_schema_set_list_type(sc, list_type);
- gconf_schema_set_car_type(sc, car_type);
- gconf_schema_set_cdr_type(sc, cdr_type);
-
- if (*cs->locale != '\0')
- {
- if (!g_utf8_validate (cs->locale, -1, NULL))
- gconf_log (GCL_ERR, _("Invalid UTF-8 in locale for schema"));
- else
- gconf_schema_set_locale(sc, cs->locale);
- }
-
- if (*cs->short_desc != '\0')
- {
- if (!g_utf8_validate (cs->short_desc, -1, NULL))
- gconf_log (GCL_ERR, _("Invalid UTF-8 in short description for schema"));
- else
- gconf_schema_set_short_desc(sc, cs->short_desc);
- }
-
- if (*cs->long_desc != '\0')
- {
- if (!g_utf8_validate (cs->long_desc, -1, NULL))
- gconf_log (GCL_ERR, _("Invalid UTF-8 in long description for schema"));
- else
- gconf_schema_set_long_desc(sc, cs->long_desc);
- }
-
- if (*cs->owner != '\0')
- {
- if (!g_utf8_validate (cs->owner, -1, NULL))
- gconf_log (GCL_ERR, _("Invalid UTF-8 in owner for schema"));
- else
- gconf_schema_set_owner(sc, cs->owner);
- }
-
- {
- GConfValue* val;
-
- val = gconf_value_decode(cs->encoded_default_value);
-
- if (val)
- gconf_schema_set_default_value_nocopy(sc, val);
- }
-
- return sc;
-}
const gchar*
gconf_value_type_to_string(GConfValueType type)
@@ -2387,197 +1906,6 @@ open_empty_locked_file (const gchar *directory,
return fd;
}
-static ConfigServer
-read_current_server_and_set_warning (const gchar *iorfile,
- GString *warning)
-{
- FILE *fp;
-
- fp = fopen (iorfile, "r");
-
- if (fp == NULL)
- {
- if (warning)
- g_string_append_printf (warning,
- _("IOR file '%s' not opened successfully, no gconfd located: %s"),
- iorfile, g_strerror (errno));
-
- return CORBA_OBJECT_NIL;
- }
- else /* successfully opened IOR file */
- {
- char buf[2048] = { '\0' };
- const char *str = NULL;
-
- fgets (buf, sizeof (buf) - 2, fp);
- fclose (fp);
-
- /* The lockfile format is <pid>:<ior> for gconfd
- * or <pid>:none for gconftool
- */
- str = buf;
- while (isdigit(*str))
- ++str;
-
- if (*str == ':')
- ++str;
-
- if (str[0] == 'n' &&
- str[1] == 'o' &&
- str[2] == 'n' &&
- str[3] == 'e')
- {
- if (warning)
- g_string_append_printf (warning,
- _("gconftool or other non-gconfd process has the lock file '%s'"),
- iorfile);
- }
- else /* file contains daemon IOR */
- {
- CORBA_ORB orb;
- CORBA_Environment ev;
- ConfigServer server;
-
- CORBA_exception_init (&ev);
-
- orb = gconf_orb_get ();
-
- if (orb == NULL)
- {
- if (warning)
- g_string_append_printf (warning,
- _("couldn't contact ORB to resolve existing gconfd object reference"));
- return CORBA_OBJECT_NIL;
- }
-
- server = CORBA_ORB_string_to_object (orb, (char*) str, &ev);
- CORBA_exception_free (&ev);
-
- if (server == CORBA_OBJECT_NIL &&
- warning)
- g_string_append_printf (warning,
- _("Failed to convert IOR '%s' to an object reference"),
- str);
-
- return server;
- }
-
- return CORBA_OBJECT_NIL;
- }
-}
-
-static ConfigServer
-read_current_server (const gchar *iorfile,
- gboolean warn_if_fail)
-{
- GString *warning;
- ConfigServer server;
-
- if (warn_if_fail)
- warning = g_string_new (NULL);
- else
- warning = NULL;
-
- server = read_current_server_and_set_warning (iorfile, warning);
-
- if (warning->len > 0)
- gconf_log (GCL_WARNING, "%s", warning->str);
-
- g_string_free (warning, TRUE);
-
- return server;
-}
-
-GConfLock*
-gconf_get_lock_or_current_holder (const gchar *lock_directory,
- ConfigServer *current_server,
- GError **err)
-{
- ConfigServer server;
- GConfLock* lock;
-
- g_return_val_if_fail(lock_directory != NULL, NULL);
-
- if (current_server)
- *current_server = CORBA_OBJECT_NIL;
-
- if (mkdir (lock_directory, 0700) < 0 &&
- errno != EEXIST)
- {
- gconf_set_error (err,
- GCONF_ERROR_LOCK_FAILED,
- _("couldn't create directory `%s': %s"),
- lock_directory, g_strerror (errno));
-
- return NULL;
- }
-
- server = CORBA_OBJECT_NIL;
-
- lock = g_new0 (GConfLock, 1);
-
- lock->lock_directory = g_strdup (lock_directory);
-
- lock->iorfile = g_strconcat (lock->lock_directory, "/ior", NULL);
-
- /* Check the current IOR file and ping its daemon */
-
- lock->lock_fd = open_empty_locked_file (lock->lock_directory,
- lock->iorfile,
- err);
-
- if (lock->lock_fd < 0)
- {
- /* We didn't get the lock. Read the old server, and provide
- * it to the caller. Error is already set.
- */
- if (current_server)
- *current_server = read_current_server (lock->iorfile, TRUE);
-
- gconf_lock_destroy (lock);
-
- return NULL;
- }
- else
- {
- /* Write IOR to lockfile */
- const gchar* ior;
- int retval;
- gchar* s;
-
- s = g_strdup_printf ("%u:", (guint) getpid ());
-
- retval = write (lock->lock_fd, s, strlen (s));
-
- g_free (s);
-
- if (retval >= 0)
- {
- ior = gconf_get_daemon_ior();
-
- if (ior == NULL)
- retval = write (lock->lock_fd, "none", 4);
- else
- retval = write (lock->lock_fd, ior, strlen (ior));
- }
-
- if (retval < 0)
- {
- gconf_set_error (err,
- GCONF_ERROR_LOCK_FAILED,
- _("Can't write to file `%s': %s"),
- lock->iorfile, g_strerror (errno));
-
- unlink (lock->iorfile);
- gconf_lock_destroy (lock);
-
- return NULL;
- }
- }
-
- return lock;
-}
-
GConfLock*
gconf_get_lock (const gchar *lock_directory,
GError **err)
@@ -2687,73 +2015,6 @@ gconf_release_lock (GConfLock *lock,
return retval;
}
-/* This function doesn't try to see if the lock is valid or anything
- * of the sort; it just reads it. It does do the object_to_string
- */
-ConfigServer
-gconf_get_current_lock_holder (const gchar *lock_directory,
- GString *failure_log)
-{
- char *iorfile;
- ConfigServer server;
-
- iorfile = g_strconcat (lock_directory, "/ior", NULL);
- server = read_current_server_and_set_warning (iorfile, failure_log);
- g_free (iorfile);
- return server;
-}
-
-static CORBA_ORB gconf_orb = CORBA_OBJECT_NIL;
-
-CORBA_ORB
-gconf_orb_get (void)
-{
- if (gconf_orb == CORBA_OBJECT_NIL)
- {
- CORBA_Environment ev;
- int argc = 1;
- char *argv[] = { "gconf", NULL };
-
- _gconf_init_i18n ();
-
- CORBA_exception_init (&ev);
-
- gconf_orb = CORBA_ORB_init (&argc, argv, "orbit-local-orb", &ev);
- g_assert (ev._major == CORBA_NO_EXCEPTION);
-
- CORBA_exception_free (&ev);
- }
-
- return gconf_orb;
-}
-
-int
-gconf_orb_release (void)
-{
- int ret = 0;
-
- if (gconf_orb != CORBA_OBJECT_NIL)
- {
- CORBA_ORB orb = gconf_orb;
- CORBA_Environment ev;
-
- gconf_orb = CORBA_OBJECT_NIL;
-
- CORBA_exception_init (&ev);
-
- CORBA_ORB_destroy (orb, &ev);
- CORBA_Object_release ((CORBA_Object)orb, &ev);
-
- if (ev._major != CORBA_NO_EXCEPTION)
- {
- ret = 1;
- }
- CORBA_exception_free (&ev);
- }
-
- return ret;
-}
-
char*
gconf_get_daemon_dir (void)
{
@@ -2773,29 +2034,6 @@ gconf_get_lock_dir (void)
return lock_dir;
}
-static void
-set_cloexec (gint fd)
-{
- fcntl (fd, F_SETFD, FD_CLOEXEC);
-}
-
-static void
-close_fd_func (gpointer data)
-{
- int *pipes = data;
-
- gint open_max;
- gint i;
-
- open_max = sysconf (_SC_OPEN_MAX);
- for (i = 3; i < open_max; i++)
- {
- /* don't close our write pipe */
- if (i != pipes[1])
- set_cloexec (i);
- }
-}
-
gboolean
gconf_activate_server (DBusConnection *connection,
gboolean start_if_not_found,
@@ -2812,8 +2050,6 @@ gconf_activate_server (DBusConnection *connection,
if (!dbus_message_get_is_error (reply))
return TRUE;
- printf ("woohoo: %d\n", start_if_not_found);
-
if (start_if_not_found)
{
message = dbus_message_new (DBUS_SERVICE_DBUS,
@@ -2849,154 +2085,6 @@ gconf_activate_server (DBusConnection *connection,
}
return FALSE;
-
-#ifdef GCONF_CORBA_BROKEN
- ConfigServer server;
- int p[2] = { -1, -1 };
- char buf[1];
- GError *tmp_err;
- char *argv[3];
- char *gconfd_dir;
- char *lock_dir;
- GString *failure_log;
- CORBA_Environment ev;
-
- 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);
-
- 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);
-
- if (!CORBA_Object_is_nil (server, &ev))
- {
- ConfigServer_ping (server, &ev);
-
- if (ev._major != CORBA_NO_EXCEPTION)
- {
- server = CORBA_OBJECT_NIL;
-
- g_string_append_printf (failure_log,
- _("Server ping error: %s"),
- CORBA_exception_id (&ev));
- }
- }
-
- CORBA_exception_free (&ev);
-
- if (server != CORBA_OBJECT_NIL)
- {
- g_string_free (failure_log, TRUE);
- return server;
- }
-
- if (start_if_not_found)
- {
- /* Spawn server */
- if (pipe (p) < 0)
- {
- g_set_error (error,
- GCONF_ERROR,
- GCONF_ERROR_NO_SERVER,
- _("Failed to create pipe for communicating with spawned gconf daemon: %s\n"),
- g_strerror (errno));
- goto out;
- }
-
- argv[0] = g_strconcat (GCONF_SERVERDIR, "/" GCONFD, NULL);
- argv[1] = g_strdup_printf ("%d", p[1]);
- argv[2] = NULL;
-
- tmp_err = NULL;
- if (!g_spawn_async (NULL,
- argv,
- NULL,
- G_SPAWN_LEAVE_DESCRIPTORS_OPEN,
- close_fd_func,
- p,
- NULL,
- &tmp_err))
- {
- g_free (argv[0]);
- g_free (argv[1]);
- g_set_error (error,
- GCONF_ERROR,
- GCONF_ERROR_NO_SERVER,
- _("Failed to launch configuration server: %s\n"),
- tmp_err->message);
- g_error_free (tmp_err);
- goto out;
- }
-
- g_free (argv[0]);
- g_free (argv[1]);
-
- /* Block until server starts up */
- read (p[0], buf, 1);
-
- g_string_append (failure_log, " 2: ");
- lock_dir = gconf_get_lock_dir ();
- server = gconf_get_current_lock_holder (lock_dir, failure_log);
- g_free (lock_dir);
- }
-
- out:
- if (server == CORBA_OBJECT_NIL &&
- error &&
- *error == NULL)
- g_set_error (error,
- GCONF_ERROR,
- GCONF_ERROR_NO_SERVER,
- _("Failed to contact configuration server; some possible causes are that you need to enable TCP/IP networking for ORBit, or you have stale NFS locks due to a system crash. See http://www.gnome.org/projects/gconf/ for information. (Details - %s)"),
- failure_log->len > 0 ? failure_log->str : _("none"));
-
- g_string_free (failure_log, TRUE);
-
- close (p[0]);
- close (p[1]);
-
- return server;
-#endif
-}
-
-gboolean
-gconf_CORBA_Object_equal (gconstpointer a, gconstpointer b)
-{
- CORBA_Environment ev;
- CORBA_Object _obj_a = (gpointer)a;
- CORBA_Object _obj_b = (gpointer)b;
- gboolean retval;
-
- CORBA_exception_init (&ev);
- retval = CORBA_Object_is_equivalent(_obj_a, _obj_b, &ev);
- CORBA_exception_free (&ev);
-
- return retval;
-}
-
-guint
-gconf_CORBA_Object_hash (gconstpointer key)
-{
- CORBA_Environment ev;
- CORBA_Object _obj = (gpointer)key;
- CORBA_unsigned_long retval;
-
- CORBA_exception_init (&ev);
- retval = CORBA_Object_hash(_obj, G_MAXUINT, &ev);
- CORBA_exception_free (&ev);
-
- return retval;
}
void
diff --git a/gconf/gconf-internals.h b/gconf/gconf-internals.h
index 8fe2dc81..f72f3ecf 100644
--- a/gconf/gconf-internals.h
+++ b/gconf/gconf-internals.h
@@ -37,8 +37,8 @@
#include "gconf-value.h"
#include "gconf-engine.h"
#include "gconf-sources.h"
-#include "GConfX.h"
#include "gconf-dbus.h"
+
gchar* gconf_key_directory (const gchar* key);
const gchar* gconf_key_key (const gchar* key);
@@ -53,20 +53,6 @@ enum {
gboolean gconf_file_test (const gchar* filename, int test);
gboolean gconf_file_exists (const gchar* filename);
-GConfValue* gconf_value_from_corba_value (const ConfigValue *value);
-ConfigValue* gconf_corba_value_from_gconf_value (const GConfValue *value);
-void gconf_fill_corba_value_from_gconf_value (const GConfValue *value,
- ConfigValue *dest);
-ConfigValue* gconf_invalid_corba_value (void);
-
-void gconf_fill_corba_schema_from_gconf_schema (const GConfSchema *sc,
- ConfigSchema *dest);
-ConfigSchema* gconf_corba_schema_from_gconf_schema (const GConfSchema *sc);
-GConfSchema* gconf_schema_from_corba_schema (const ConfigSchema *cs);
-
-gchar* gconf_object_to_string (CORBA_Object obj,
- GError **err);
-
const gchar* gconf_value_type_to_string (GConfValueType type);
GConfValueType gconf_value_type_from_string (const gchar *str);
@@ -173,9 +159,6 @@ gboolean gconf_in_daemon_mode (void);
void gconf_set_daemon_ior (const gchar *ior);
const gchar* gconf_get_daemon_ior (void);
-/* Returns TRUE if there was an error, frees exception, sets err */
-gboolean gconf_handle_oaf_exception (CORBA_Environment* ev, GError** err);
-
void gconf_nanosleep (gulong useconds);
typedef struct _GConfLock GConfLock;
@@ -184,12 +167,13 @@ GConfLock* gconf_get_lock (const gchar *lock_directory,
GError **err);
gboolean gconf_release_lock (GConfLock *lock,
GError **err);
+#if 0
GConfLock* gconf_get_lock_or_current_holder (const gchar *lock_directory,
ConfigServer *current_server,
GError **err);
ConfigServer gconf_get_current_lock_holder (const gchar *lock_directory,
GString *failure_log);
-
+#endif
GError* gconf_error_new (GConfError en,
const gchar* format, ...) G_GNUC_PRINTF (2, 3);
@@ -200,8 +184,6 @@ void gconf_set_error (GError** err,
/* merge two errors into a single message */
GError* gconf_compose_errors (GError* err1, GError* err2);
-CORBA_ORB gconf_orb_get (void);
-
gboolean gconf_activate_server (DBusConnection *connection,
gboolean start_if_not_found,
GError **error);
diff --git a/gconf/gconf.c b/gconf/gconf.c
index 00fc8c10..c77cc555 100644
--- a/gconf/gconf.c
+++ b/gconf/gconf.c
@@ -18,7 +18,6 @@
*/
#include <popt.h>
-#include "GConfX.h"
#include "gconf.h"
#include "gconf-dbus.h"
#include "gconf-internals.h"
@@ -117,7 +116,7 @@ static GConfEngine *default_engine = NULL;
static GConfCnxn* gconf_cnxn_new (GConfEngine *conf,
const gchar *namespace_section,
- CORBA_unsigned_long server_id,
+ guint server_id,
GConfNotifyFunc func,
gpointer user_data);
static void gconf_cnxn_destroy (GConfCnxn *cnxn);
@@ -128,10 +127,6 @@ static void gconf_cnxn_notify (GConfCnxn *cnxn,
static gboolean gconf_get_config_server (gboolean start_if_not_found,
GError **err);
-/* Forget our current server object reference, so the next call to
- gconf_get_config_server will have to try to respawn the server */
-static ConfigListener gconf_get_config_listener (void);
-
static void gconf_engine_detach (GConfEngine *conf);
static gboolean gconf_engine_connect (GConfEngine *conf,
gboolean start_if_not_found,
@@ -536,9 +531,6 @@ gconf_engine_unref(GConfEngine* conf)
/* Remove all connections associated with this GConf */
GSList* removed;
GSList* tmp;
- CORBA_Environment ev;
-
- CORBA_exception_init(&ev);
/* FIXME CnxnTable only has entries for this GConfEngine now,
* it used to be global and shared among GConfEngine objects.
@@ -2124,7 +2116,7 @@ gconf_engine_key_is_writable (GConfEngine *conf,
static GConfCnxn*
gconf_cnxn_new(GConfEngine* conf,
const gchar* namespace_section,
- CORBA_unsigned_long server_id,
+ guint server_id,
GConfNotifyFunc func,
gpointer user_data)
{
@@ -2161,12 +2153,6 @@ gconf_cnxn_notify(GConfCnxn* cnxn,
cnxn->user_data);
}
-/*
- * CORBA glue
- */
-
-static ConfigServer server = CORBA_OBJECT_NIL;
-
/* errors in here should be GCONF_ERROR_NO_SERVER */
static gboolean
try_to_contact_server (gboolean start_if_not_found,
@@ -2176,36 +2162,10 @@ try_to_contact_server (gboolean start_if_not_found,
daemon_running = gconf_activate_server (dbus_conn, start_if_not_found,
err);
-#ifdef GCONF_CORBA_BROKEN
- /* Try to ping server, by adding ourselves as a client */
- CORBA_exception_init (&ev);
-
-
- if (!CORBA_Object_is_nil (server, &ev))
- {
- ConfigServer_add_client (server,
- gconf_get_config_listener (),
- &ev);
- if (ev._major != CORBA_NO_EXCEPTION)
- {
- g_set_error (err,
- GCONF_ERROR,
- GCONF_ERROR_NO_SERVER,
- _("Adding client to server's list failed, CORBA error: %s"),
- CORBA_exception_id (&ev));
-
- CORBA_Object_release (server, &ev);
- server = CORBA_OBJECT_NIL;
- CORBA_exception_free(&ev);
- }
- }
-
#ifdef GCONF_ENABLE_DEBUG
if (!daemon_running && start_if_not_found)
g_return_val_if_fail (err == NULL || *err != NULL, daemon_running);
#endif
-
-#endif
return daemon_running;
}
@@ -2215,8 +2175,6 @@ try_to_contact_server (gboolean start_if_not_found,
static gboolean
gconf_get_config_server(gboolean start_if_not_found, GError** err)
{
- gboolean retval;
-
g_return_val_if_fail(err == NULL || *err == NULL, daemon_running);
if (daemon_running)
@@ -2227,36 +2185,9 @@ gconf_get_config_server(gboolean start_if_not_found, GError** err)
return daemon_running; /* return what we have */
}
-ConfigListener listener = CORBA_OBJECT_NIL;
-
void
gconf_detach_config_server(void)
{
- CORBA_Environment ev;
-
- CORBA_exception_init(&ev);
-
- if (listener != CORBA_OBJECT_NIL)
- {
- CORBA_Object_release(listener, &ev);
- listener = CORBA_OBJECT_NIL;
- }
-
- if (server != CORBA_OBJECT_NIL)
- {
- CORBA_Object_release(server, &ev);
-
- if (ev._major != CORBA_NO_EXCEPTION)
- {
- g_warning("Exception releasing gconfd server object: %s",
- CORBA_exception_id(&ev));
- }
-
- server = CORBA_OBJECT_NIL;
- }
-
- CORBA_exception_free(&ev);
-
if (engines_by_db != NULL)
{
g_hash_table_destroy (engines_by_db);
@@ -2276,225 +2207,9 @@ gconf_debug_shutdown (void)
{
gconf_detach_config_server ();
- return gconf_orb_release ();
-}
-
-#ifdef GCONF_CORBA_BROKEN
-static void notify (PortableServer_Servant servant,
- ConfigDatabase db,
- CORBA_unsigned_long cnxn,
- const CORBA_char *key,
- const ConfigValue *value,
- CORBA_boolean is_default,
- CORBA_boolean is_writable,
- CORBA_Environment *ev);
-static void ping (PortableServer_Servant _servant,
- CORBA_Environment *ev);
-static void update_listener (PortableServer_Servant _servant,
- ConfigDatabase db,
- const CORBA_char *address,
- const CORBA_unsigned_long old_cnxn,
- const CORBA_char *key,
- const CORBA_unsigned_long new_cnxn,
- CORBA_Environment *ev);
-static void invalidate_cached_values(PortableServer_Servant _servant,
- ConfigDatabase database,
- const ConfigListener_KeyList *keys,
- CORBA_Environment *ev);
-static void drop_all_caches (PortableServer_Servant _servant,
- CORBA_Environment *ev);
-
-
-
-static PortableServer_ServantBase__epv base_epv = {
- NULL,
- NULL,
- NULL
-};
-
-static POA_ConfigListener__epv listener_epv = {
- NULL,
- notify,
- ping,
- update_listener,
- invalidate_cached_values,
- drop_all_caches
-};
-
-static POA_ConfigListener__vepv poa_listener_vepv = { &base_epv, &listener_epv };
-static POA_ConfigListener poa_listener_servant = { NULL, &poa_listener_vepv };
-
-static void
-notify(PortableServer_Servant servant,
- ConfigDatabase db,
- CORBA_unsigned_long server_id,
- const CORBA_char* key,
- const ConfigValue* value,
- CORBA_boolean is_default,
- CORBA_boolean is_writable,
- CORBA_Environment *ev)
-{
- GConfCnxn* cnxn;
- GConfValue* gvalue;
- GConfEngine* conf;
- GConfEntry* entry;
-
- conf = lookup_engine_by_database (db);
-
- if (conf == NULL)
- {
-#ifdef GCONF_ENABLE_DEBUG
- g_warning ("Client received notify for unknown database object");
-#endif
- return;
- }
-
- cnxn = ctable_lookup_by_server_id(conf->ctable, server_id);
-
- if (cnxn == NULL)
- {
-#ifdef GCONF_ENABLE_DEBUG
- g_warning("Client received notify for unknown connection ID %u",
- (guint)server_id);
-#endif
- return;
- }
-
- gvalue = gconf_value_from_corba_value(value);
-
- entry = gconf_entry_new_nocopy (g_strdup (key),
- gvalue);
- gconf_entry_set_is_default (entry, is_default);
- gconf_entry_set_is_writable (entry, is_writable);
-
- gconf_cnxn_notify(cnxn, entry);
-
- gconf_entry_free (entry);
-}
-
-static void
-ping (PortableServer_Servant _servant, CORBA_Environment * ev)
-{
- /* This one is easy :-) */
-
- return;
-}
-
-static void
-update_listener (PortableServer_Servant _servant,
- ConfigDatabase db,
- const CORBA_char *address,
- const CORBA_unsigned_long old_cnxn_id,
- const CORBA_char *key,
- const CORBA_unsigned_long new_cnxn_id,
- CORBA_Environment *ev_ignored)
-{
- GConfCnxn* cnxn;
- GConfEngine* conf;
- CORBA_Environment ev;
-
- conf = lookup_engine_by_database (db);
-
- /* See if we have an old engine with a now-invalid object
- reference, and update its reference. */
- if (conf == NULL)
- {
- CORBA_exception_init (&ev);
-
- if (strcmp (address, "def") == 0)
- conf = default_engine;
- else
- conf = lookup_engine (address);
-
- if (conf)
- gconf_engine_set_database (conf,
- CORBA_Object_duplicate (db, &ev));
- }
-
- if (conf == NULL)
- {
-#ifdef GCONF_ENABLE_DEBUG
- g_warning("Client received listener update for unknown database "
- "(this is not a big deal, this warning only appears if GConf is compiled with debugging)");
-#endif
- return;
- }
-
- cnxn = ctable_lookup_by_server_id (conf->ctable, old_cnxn_id);
-
- if (cnxn == NULL)
- {
-#ifdef GCONF_ENABLE_DEBUG
- g_warning("Client received listener update for unknown listener ID %u "
- "(this is not a big deal, this warning only appears if GConf is compiled with debugging)",
- (guint)old_cnxn_id);
-#endif
- return;
- }
-
- ctable_reinstall (conf->ctable, cnxn, old_cnxn_id, new_cnxn_id);
+ return 1;
}
-static void
-invalidate_cached_values (PortableServer_Servant _servant,
- ConfigDatabase database,
- const ConfigListener_KeyList *keys,
- CORBA_Environment *ev)
-{
-#if 0
- g_warning ("FIXME process %d received request to invalidate some cached GConf values from the server, but right now we don't know how to do that (not implemented).", (int) getpid());
-#endif
-}
-
-static void
-drop_all_caches (PortableServer_Servant _servant,
- CORBA_Environment *ev)
-{
-#if 0
- g_warning ("FIXME process %d received request to invalidate all cached GConf values from the server, but right now we don't know how to do that (not implemented).", (int) getpid());
-#endif
-}
-
-static ConfigListener
-gconf_get_config_listener(void)
-{
- if (listener == CORBA_OBJECT_NIL)
- {
- CORBA_Environment ev;
- PortableServer_POA poa;
- PortableServer_POAManager poa_mgr;
-
- CORBA_exception_init (&ev);
- POA_ConfigListener__init (&poa_listener_servant, &ev);
-
- g_assert (ev._major == CORBA_NO_EXCEPTION);
-
- poa =
- (PortableServer_POA) CORBA_ORB_resolve_initial_references (gconf_orb_get (),
- "RootPOA", &ev);
-
- g_assert (ev._major == CORBA_NO_EXCEPTION);
-
- poa_mgr = PortableServer_POA__get_the_POAManager (poa, &ev);
- PortableServer_POAManager_activate (poa_mgr, &ev);
-
- g_assert (ev._major == CORBA_NO_EXCEPTION);
-
- listener = PortableServer_POA_servant_to_reference(poa,
- &poa_listener_servant,
- &ev);
-
- CORBA_Object_release ((CORBA_Object) poa_mgr, &ev);
- CORBA_Object_release ((CORBA_Object) poa, &ev);
-
- g_assert (listener != CORBA_OBJECT_NIL);
- g_assert (ev._major == CORBA_NO_EXCEPTION);
- }
-
- return listener;
-}
-#endif
-
static const char *config_listener_messages[] =
{
GCONF_DBUS_CONFIG_LISTENER_NOTIFY
@@ -2623,6 +2338,9 @@ gconf_lifecycle_handler (DBusMessageHandler *handler,
if (strcmp (name, GCONF_DBUS_CONFIG_SERVER) == 0)
{
+ /* Ping the server so we'll be added to the list */
+ gconf_ping_daemon ();
+
restore_listeners ();
daemon_running = TRUE;
}
@@ -3122,12 +2840,9 @@ void
gconf_shutdown_daemon (GError** err)
{
DBusMessage *message;
+ gboolean retval;
-#ifdef GCONF_CORBA_BROKEN
- CORBA_Environment ev;
- ConfigServer cs;
-
- cs = gconf_get_config_server (FALSE, err); /* Don't want to spawn it if it's already down */
+ retval = gconf_get_config_server (FALSE, err);
if (err && *err && (*err)->code == GCONF_ERROR_NO_SERVER)
{
@@ -3135,30 +2850,13 @@ gconf_shutdown_daemon (GError** err)
g_error_free (*err);
*err = NULL;
}
-
- if (cs == CORBA_OBJECT_NIL)
- {
-
- return;
- }
- CORBA_exception_init (&ev);
-#endif
+ if (!retval)
+ return;
message = dbus_message_new (GCONF_DBUS_CONFIG_SERVER, GCONF_DBUS_CONFIG_SERVER_SHUTDOWN);
dbus_connection_send (dbus_conn, message, NULL);
dbus_connection_flush (dbus_conn);
-
-#if GCONF_CORBA_BROKEN
- if (ev._major != CORBA_NO_EXCEPTION)
- {
- if (err)
- *err = gconf_error_new (GCONF_ERROR_FAILED, _("Failure shutting down config server: %s"),
- CORBA_exception_id (&ev));
-
- CORBA_exception_free(&ev);
- }
-#endif
}
gboolean
@@ -3614,62 +3312,6 @@ gconf_engine_set_pair (GConfEngine* conf, const gchar* key,
return error_checked_set(conf, key, pair, err);
}
-/* CORBA Util */
-
-/* Set GConfError from an exception, free exception, etc. */
-
-static GConfError
-corba_errno_to_gconf_errno(ConfigErrorType corba_err)
-{
- switch (corba_err)
- {
- case ConfigFailed:
- return GCONF_ERROR_FAILED;
- break;
- case ConfigNoPermission:
- return GCONF_ERROR_NO_PERMISSION;
- break;
- case ConfigBadAddress:
- return GCONF_ERROR_BAD_ADDRESS;
- break;
- case ConfigBadKey:
- return GCONF_ERROR_BAD_KEY;
- break;
- case ConfigParseError:
- return GCONF_ERROR_PARSE_ERROR;
- break;
- case ConfigCorrupt:
- return GCONF_ERROR_CORRUPT;
- break;
- case ConfigTypeMismatch:
- return GCONF_ERROR_TYPE_MISMATCH;
- break;
- case ConfigIsDir:
- return GCONF_ERROR_IS_DIR;
- break;
- case ConfigIsKey:
- return GCONF_ERROR_IS_KEY;
- break;
- case ConfigOverridden:
- return GCONF_ERROR_OVERRIDDEN;
- break;
- case ConfigLockFailed:
- return GCONF_ERROR_LOCK_FAILED;
- break;
- case ConfigNoWritableDatabase:
- return GCONF_ERROR_NO_WRITABLE_DATABASE;
- break;
- case ConfigInShutdown:
- return GCONF_ERROR_IN_SHUTDOWN;
- break;
- default:
- g_assert_not_reached();
- return GCONF_ERROR_SUCCESS; /* warnings */
- break;
- }
-}
-
-
static GConfError
dbus_error_name_to_gconf_errno (const char *name)
{
@@ -3777,42 +3419,6 @@ gconf_handle_dbus_exception (DBusMessage *message, DBusError *dbus_error,
return TRUE;
}
-static gboolean
-gconf_handle_corba_exception(CORBA_Environment* ev, GError** err)
-{
- switch (ev->_major)
- {
- case CORBA_NO_EXCEPTION:
- CORBA_exception_free (ev);
- return FALSE;
- break;
- case CORBA_SYSTEM_EXCEPTION:
- if (err)
- *err = gconf_error_new (GCONF_ERROR_NO_SERVER, _("CORBA error: %s"),
- CORBA_exception_id (ev));
- CORBA_exception_free (ev);
- return TRUE;
- break;
- case CORBA_USER_EXCEPTION:
- {
- ConfigException* ce;
-
- ce = CORBA_exception_value (ev);
-
- if (err)
- *err = gconf_error_new (corba_errno_to_gconf_errno (ce->err_no),
- ce->message);
- CORBA_exception_free (ev);
- return TRUE;
- }
- break;
- default:
- g_assert_not_reached();
- return TRUE;
- break;
- }
-}
-
/*
* Enumeration conversions
*/
diff --git a/gconf/gconfd-corba.c b/gconf/gconfd-corba.c
index 7904460e..1792484a 100644
--- a/gconf/gconfd-corba.c
+++ b/gconf/gconfd-corba.c
@@ -1526,4 +1526,773 @@ gconfd_corba_check_in_shutdown (CORBA_Environment *ev)
return FALSE;
}
+gboolean
+gconf_CORBA_Object_equal (gconstpointer a, gconstpointer b)
+{
+ CORBA_Environment ev;
+ CORBA_Object _obj_a = (gpointer)a;
+ CORBA_Object _obj_b = (gpointer)b;
+ gboolean retval;
+
+ CORBA_exception_init (&ev);
+ retval = CORBA_Object_is_equivalent(_obj_a, _obj_b, &ev);
+ CORBA_exception_free (&ev);
+
+ return retval;
+}
+
+guint
+gconf_CORBA_Object_hash (gconstpointer key)
+{
+ CORBA_Environment ev;
+ CORBA_Object _obj = (gpointer)key;
+ CORBA_unsigned_long retval;
+
+ CORBA_exception_init (&ev);
+ retval = CORBA_Object_hash(_obj, G_MAXUINT, &ev);
+ CORBA_exception_free (&ev);
+
+ return retval;
+}
+
+GConfValue*
+gconf_value_from_corba_value(const ConfigValue* value)
+{
+ GConfValue* gval;
+ GConfValueType type = GCONF_VALUE_INVALID;
+
+ switch (value->_d)
+ {
+ case InvalidVal:
+ return NULL;
+ break;
+ case IntVal:
+ type = GCONF_VALUE_INT;
+ break;
+ case StringVal:
+ type = GCONF_VALUE_STRING;
+ break;
+ case FloatVal:
+ type = GCONF_VALUE_FLOAT;
+ break;
+ case BoolVal:
+ type = GCONF_VALUE_BOOL;
+ break;
+ case SchemaVal:
+ type = GCONF_VALUE_SCHEMA;
+ break;
+ case ListVal:
+ type = GCONF_VALUE_LIST;
+ break;
+ case PairVal:
+ type = GCONF_VALUE_PAIR;
+ break;
+ default:
+ gconf_log(GCL_DEBUG, "Invalid type in %s", G_GNUC_FUNCTION);
+ return NULL;
+ }
+
+ g_assert(GCONF_VALUE_TYPE_VALID(type));
+
+ gval = gconf_value_new(type);
+
+ switch (gval->type)
+ {
+ case GCONF_VALUE_INT:
+ gconf_value_set_int(gval, value->_u.int_value);
+ break;
+ case GCONF_VALUE_STRING:
+ if (!g_utf8_validate (value->_u.string_value, -1, NULL))
+ {
+ gconf_log (GCL_ERR, _("Invalid UTF-8 in string value in '%s'"),
+ value->_u.string_value);
+ }
+ else
+ {
+ gconf_value_set_string(gval, value->_u.string_value);
+ }
+ break;
+ case GCONF_VALUE_FLOAT:
+ gconf_value_set_float(gval, value->_u.float_value);
+ break;
+ case GCONF_VALUE_BOOL:
+ gconf_value_set_bool(gval, value->_u.bool_value);
+ break;
+ case GCONF_VALUE_SCHEMA:
+ gconf_value_set_schema_nocopy(gval,
+ gconf_schema_from_corba_schema(&(value->_u.schema_value)));
+ break;
+ case GCONF_VALUE_LIST:
+ {
+ GSList* list = NULL;
+ guint i = 0;
+
+ switch (value->_u.list_value.list_type)
+ {
+ case BIntVal:
+ gconf_value_set_list_type(gval, GCONF_VALUE_INT);
+ break;
+ case BBoolVal:
+ gconf_value_set_list_type(gval, GCONF_VALUE_BOOL);
+ break;
+ case BFloatVal:
+ gconf_value_set_list_type(gval, GCONF_VALUE_FLOAT);
+ break;
+ case BStringVal:
+ gconf_value_set_list_type(gval, GCONF_VALUE_STRING);
+ break;
+ case BInvalidVal:
+ break;
+ default:
+ g_warning("Bizarre list type in %s", G_GNUC_FUNCTION);
+ break;
+ }
+
+ if (gconf_value_get_list_type(gval) != GCONF_VALUE_INVALID)
+ {
+ i = 0;
+ while (i < value->_u.list_value.seq._length)
+ {
+ GConfValue* val;
+
+ /* This is a bit dubious; we cast a ConfigBasicValue to ConfigValue
+ because they have the same initial members, but by the time
+ the CORBA and C specs kick in, not sure we are guaranteed
+ to be able to do this.
+ */
+ val = gconf_value_from_corba_value((ConfigValue*)&value->_u.list_value.seq._buffer[i]);
+
+ if (val == NULL)
+ gconf_log(GCL_ERR, _("Couldn't interpret CORBA value for list element"));
+ else if (val->type != gconf_value_get_list_type(gval))
+ gconf_log(GCL_ERR, _("Incorrect type for list element in %s"), G_GNUC_FUNCTION);
+ else
+ list = g_slist_prepend(list, val);
+
+ ++i;
+ }
+
+ list = g_slist_reverse(list);
+
+ gconf_value_set_list_nocopy(gval, list);
+ }
+ else
+ {
+ gconf_log(GCL_ERR, _("Received list from gconfd with a bad list type"));
+ }
+ }
+ break;
+ case GCONF_VALUE_PAIR:
+ {
+ g_return_val_if_fail(value->_u.pair_value._length == 2, gval);
+
+ gconf_value_set_car_nocopy(gval,
+ gconf_value_from_corba_value((ConfigValue*)&value->_u.list_value.seq._buffer[0]));
+
+ gconf_value_set_cdr_nocopy(gval,
+ gconf_value_from_corba_value((ConfigValue*)&value->_u.list_value.seq._buffer[1]));
+ }
+ break;
+ default:
+ g_assert_not_reached();
+ break;
+ }
+
+ return gval;
+}
+
+void
+gconf_fill_corba_value_from_gconf_value(const GConfValue *value,
+ ConfigValue *cv)
+{
+ if (value == NULL)
+ {
+ cv->_d = InvalidVal;
+ return;
+ }
+
+ switch (value->type)
+ {
+ case GCONF_VALUE_INT:
+ cv->_d = IntVal;
+ cv->_u.int_value = gconf_value_get_int(value);
+ break;
+ case GCONF_VALUE_STRING:
+ cv->_d = StringVal;
+ cv->_u.string_value = CORBA_string_dup((char*)gconf_value_get_string(value));
+ break;
+ case GCONF_VALUE_FLOAT:
+ cv->_d = FloatVal;
+ cv->_u.float_value = gconf_value_get_float(value);
+ break;
+ case GCONF_VALUE_BOOL:
+ cv->_d = BoolVal;
+ cv->_u.bool_value = gconf_value_get_bool(value);
+ break;
+ case GCONF_VALUE_SCHEMA:
+ cv->_d = SchemaVal;
+ gconf_fill_corba_schema_from_gconf_schema (gconf_value_get_schema(value),
+ &cv->_u.schema_value);
+ break;
+ case GCONF_VALUE_LIST:
+ {
+ guint n, i;
+ GSList* list;
+
+ cv->_d = ListVal;
+
+ list = gconf_value_get_list(value);
+
+ n = g_slist_length(list);
+
+ cv->_u.list_value.seq._buffer =
+ CORBA_sequence_ConfigBasicValue_allocbuf(n);
+ cv->_u.list_value.seq._length = n;
+ cv->_u.list_value.seq._maximum = n;
+ CORBA_sequence_set_release(&cv->_u.list_value.seq, TRUE);
+
+ switch (gconf_value_get_list_type(value))
+ {
+ case GCONF_VALUE_INT:
+ cv->_u.list_value.list_type = BIntVal;
+ break;
+
+ case GCONF_VALUE_BOOL:
+ cv->_u.list_value.list_type = BBoolVal;
+ break;
+
+ case GCONF_VALUE_STRING:
+ cv->_u.list_value.list_type = BStringVal;
+ break;
+
+ case GCONF_VALUE_FLOAT:
+ cv->_u.list_value.list_type = BFloatVal;
+ break;
+
+ case GCONF_VALUE_SCHEMA:
+ cv->_u.list_value.list_type = BSchemaVal;
+ break;
+
+ default:
+ cv->_u.list_value.list_type = BInvalidVal;
+ gconf_log(GCL_DEBUG, "Invalid list type in %s", G_GNUC_FUNCTION);
+ break;
+ }
+
+ i= 0;
+ while (list != NULL)
+ {
+ /* That dubious ConfigBasicValue->ConfigValue cast again */
+ gconf_fill_corba_value_from_gconf_value((GConfValue*)list->data,
+ (ConfigValue*)&cv->_u.list_value.seq._buffer[i]);
+
+ list = g_slist_next(list);
+ ++i;
+ }
+ }
+ break;
+ case GCONF_VALUE_PAIR:
+ {
+ cv->_d = PairVal;
+
+ cv->_u.pair_value._buffer =
+ CORBA_sequence_ConfigBasicValue_allocbuf(2);
+ cv->_u.pair_value._length = 2;
+ cv->_u.pair_value._maximum = 2;
+ CORBA_sequence_set_release(&cv->_u.pair_value, TRUE);
+
+ /* dubious cast */
+ gconf_fill_corba_value_from_gconf_value (gconf_value_get_car(value),
+ (ConfigValue*)&cv->_u.pair_value._buffer[0]);
+ gconf_fill_corba_value_from_gconf_value(gconf_value_get_cdr(value),
+ (ConfigValue*)&cv->_u.pair_value._buffer[1]);
+ }
+ break;
+
+ case GCONF_VALUE_INVALID:
+ cv->_d = InvalidVal;
+ break;
+ default:
+ cv->_d = InvalidVal;
+ gconf_log(GCL_DEBUG, "Unknown type in %s", G_GNUC_FUNCTION);
+ break;
+ }
+}
+
+ConfigValue*
+gconf_corba_value_from_gconf_value (const GConfValue* value)
+{
+ ConfigValue* cv;
+
+ cv = ConfigValue__alloc();
+
+ gconf_fill_corba_value_from_gconf_value(value, cv);
+
+ return cv;
+}
+
+ConfigValue*
+gconf_invalid_corba_value ()
+{
+ ConfigValue* cv;
+
+ cv = ConfigValue__alloc();
+
+ cv->_d = InvalidVal;
+
+ return cv;
+}
+
+gchar*
+gconf_object_to_string (CORBA_Object obj,
+ GError **err)
+{
+ CORBA_Environment ev;
+ gchar *ior;
+ gchar *retval;
+
+ CORBA_exception_init (&ev);
+
+ ior = CORBA_ORB_object_to_string (gconf_orb_get (), obj, &ev);
+
+ if (ior == NULL)
+ {
+ gconf_set_error (err,
+ GCONF_ERROR_FAILED,
+ _("Failed to convert object to IOR"));
+
+ return NULL;
+ }
+
+ retval = g_strdup (ior);
+
+ CORBA_free (ior);
+
+ return retval;
+}
+
+static ConfigValueType
+corba_type_from_gconf_type(GConfValueType type)
+{
+ switch (type)
+ {
+ case GCONF_VALUE_INT:
+ return IntVal;
+ case GCONF_VALUE_BOOL:
+ return BoolVal;
+ case GCONF_VALUE_FLOAT:
+ return FloatVal;
+ case GCONF_VALUE_INVALID:
+ return InvalidVal;
+ case GCONF_VALUE_STRING:
+ return StringVal;
+ case GCONF_VALUE_SCHEMA:
+ return SchemaVal;
+ case GCONF_VALUE_LIST:
+ return ListVal;
+ case GCONF_VALUE_PAIR:
+ return PairVal;
+ default:
+ g_assert_not_reached();
+ return InvalidVal;
+ }
+}
+
+static GConfValueType
+gconf_type_from_corba_type(ConfigValueType type)
+{
+ switch (type)
+ {
+ case InvalidVal:
+ return GCONF_VALUE_INVALID;
+ case StringVal:
+ return GCONF_VALUE_STRING;
+ case IntVal:
+ return GCONF_VALUE_INT;
+ case FloatVal:
+ return GCONF_VALUE_FLOAT;
+ case SchemaVal:
+ return GCONF_VALUE_SCHEMA;
+ case BoolVal:
+ return GCONF_VALUE_BOOL;
+ case ListVal:
+ return GCONF_VALUE_LIST;
+ case PairVal:
+ return GCONF_VALUE_PAIR;
+ default:
+ g_assert_not_reached();
+ return GCONF_VALUE_INVALID;
+ }
+}
+
+void
+gconf_fill_corba_schema_from_gconf_schema(const GConfSchema *sc,
+ ConfigSchema *cs)
+{
+ cs->value_type = corba_type_from_gconf_type (gconf_schema_get_type (sc));
+ cs->value_list_type = corba_type_from_gconf_type (gconf_schema_get_list_type (sc));
+ cs->value_car_type = corba_type_from_gconf_type (gconf_schema_get_car_type (sc));
+ cs->value_cdr_type = corba_type_from_gconf_type (gconf_schema_get_cdr_type (sc));
+
+ cs->locale = CORBA_string_dup (gconf_schema_get_locale (sc) ? gconf_schema_get_locale (sc) : "");
+ cs->short_desc = CORBA_string_dup (gconf_schema_get_short_desc (sc) ? gconf_schema_get_short_desc (sc) : "");
+ cs->long_desc = CORBA_string_dup (gconf_schema_get_long_desc (sc) ? gconf_schema_get_long_desc (sc) : "");
+ cs->owner = CORBA_string_dup (gconf_schema_get_owner (sc) ? gconf_schema_get_owner (sc) : "");
+
+ {
+ gchar* encoded;
+ GConfValue* default_val;
+
+ default_val = gconf_schema_get_default_value (sc);
+
+ if (default_val)
+ {
+ encoded = gconf_value_encode (default_val);
+
+ g_assert (encoded != NULL);
+
+ cs->encoded_default_value = CORBA_string_dup (encoded);
+
+ g_free (encoded);
+ }
+ else
+ cs->encoded_default_value = CORBA_string_dup ("");
+ }
+}
+
+ConfigSchema*
+gconf_corba_schema_from_gconf_schema (const GConfSchema* sc)
+{
+ ConfigSchema* cs;
+
+ cs = ConfigSchema__alloc ();
+
+ gconf_fill_corba_schema_from_gconf_schema (sc, cs);
+
+ return cs;
+}
+
+GConfSchema*
+gconf_schema_from_corba_schema(const ConfigSchema* cs)
+{
+ GConfSchema* sc;
+ GConfValueType type = GCONF_VALUE_INVALID;
+ GConfValueType list_type = GCONF_VALUE_INVALID;
+ GConfValueType car_type = GCONF_VALUE_INVALID;
+ GConfValueType cdr_type = GCONF_VALUE_INVALID;
+
+ type = gconf_type_from_corba_type(cs->value_type);
+ list_type = gconf_type_from_corba_type(cs->value_list_type);
+ car_type = gconf_type_from_corba_type(cs->value_car_type);
+ cdr_type = gconf_type_from_corba_type(cs->value_cdr_type);
+
+ sc = gconf_schema_new();
+
+ gconf_schema_set_type(sc, type);
+ gconf_schema_set_list_type(sc, list_type);
+ gconf_schema_set_car_type(sc, car_type);
+ gconf_schema_set_cdr_type(sc, cdr_type);
+
+ if (*cs->locale != '\0')
+ {
+ if (!g_utf8_validate (cs->locale, -1, NULL))
+ gconf_log (GCL_ERR, _("Invalid UTF-8 in locale for schema"));
+ else
+ gconf_schema_set_locale(sc, cs->locale);
+ }
+
+ if (*cs->short_desc != '\0')
+ {
+ if (!g_utf8_validate (cs->short_desc, -1, NULL))
+ gconf_log (GCL_ERR, _("Invalid UTF-8 in short description for schema"));
+ else
+ gconf_schema_set_short_desc(sc, cs->short_desc);
+ }
+
+ if (*cs->long_desc != '\0')
+ {
+ if (!g_utf8_validate (cs->long_desc, -1, NULL))
+ gconf_log (GCL_ERR, _("Invalid UTF-8 in long description for schema"));
+ else
+ gconf_schema_set_long_desc(sc, cs->long_desc);
+ }
+
+ if (*cs->owner != '\0')
+ {
+ if (!g_utf8_validate (cs->owner, -1, NULL))
+ gconf_log (GCL_ERR, _("Invalid UTF-8 in owner for schema"));
+ else
+ gconf_schema_set_owner(sc, cs->owner);
+ }
+
+ {
+ GConfValue* val;
+
+ val = gconf_value_decode(cs->encoded_default_value);
+
+ if (val)
+ gconf_schema_set_default_value_nocopy(sc, val);
+ }
+
+ return sc;
+}
+
+static ConfigServer
+read_current_server_and_set_warning (const gchar *iorfile,
+ GString *warning)
+{
+ FILE *fp;
+
+ fp = fopen (iorfile, "r");
+
+ if (fp == NULL)
+ {
+ if (warning)
+ g_string_append_printf (warning,
+ _("IOR file '%s' not opened successfully, no gconfd located: %s"),
+ iorfile, g_strerror (errno));
+
+ return CORBA_OBJECT_NIL;
+ }
+ else /* successfully opened IOR file */
+ {
+ char buf[2048] = { '\0' };
+ const char *str = NULL;
+
+ fgets (buf, sizeof (buf) - 2, fp);
+ fclose (fp);
+
+ /* The lockfile format is <pid>:<ior> for gconfd
+ * or <pid>:none for gconftool
+ */
+ str = buf;
+ while (isdigit(*str))
+ ++str;
+
+ if (*str == ':')
+ ++str;
+
+ if (str[0] == 'n' &&
+ str[1] == 'o' &&
+ str[2] == 'n' &&
+ str[3] == 'e')
+ {
+ if (warning)
+ g_string_append_printf (warning,
+ _("gconftool or other non-gconfd process has the lock file '%s'"),
+ iorfile);
+ }
+ else /* file contains daemon IOR */
+ {
+ CORBA_ORB orb;
+ CORBA_Environment ev;
+ ConfigServer server;
+
+ CORBA_exception_init (&ev);
+
+ orb = gconf_orb_get ();
+
+ if (orb == NULL)
+ {
+ if (warning)
+ g_string_append_printf (warning,
+ _("couldn't contact ORB to resolve existing gconfd object reference"));
+ return CORBA_OBJECT_NIL;
+ }
+
+ server = CORBA_ORB_string_to_object (orb, (char*) str, &ev);
+ CORBA_exception_free (&ev);
+
+ if (server == CORBA_OBJECT_NIL &&
+ warning)
+ g_string_append_printf (warning,
+ _("Failed to convert IOR '%s' to an object reference"),
+ str);
+
+ return server;
+ }
+
+ return CORBA_OBJECT_NIL;
+ }
+}
+
+static ConfigServer
+read_current_server (const gchar *iorfile,
+ gboolean warn_if_fail)
+{
+ GString *warning;
+ ConfigServer server;
+
+ if (warn_if_fail)
+ warning = g_string_new (NULL);
+ else
+ warning = NULL;
+
+ server = read_current_server_and_set_warning (iorfile, warning);
+
+ if (warning->len > 0)
+ gconf_log (GCL_WARNING, "%s", warning->str);
+
+ g_string_free (warning, TRUE);
+
+ return server;
+}
+
+GConfLock*
+gconf_get_lock_or_current_holder (const gchar *lock_directory,
+ ConfigServer *current_server,
+ GError **err)
+{
+ ConfigServer server;
+ GConfLock* lock;
+
+ g_return_val_if_fail(lock_directory != NULL, NULL);
+
+ if (current_server)
+ *current_server = CORBA_OBJECT_NIL;
+
+ if (mkdir (lock_directory, 0700) < 0 &&
+ errno != EEXIST)
+ {
+ gconf_set_error (err,
+ GCONF_ERROR_LOCK_FAILED,
+ _("couldn't create directory `%s': %s"),
+ lock_directory, g_strerror (errno));
+
+ return NULL;
+ }
+
+ server = CORBA_OBJECT_NIL;
+
+ lock = g_new0 (GConfLock, 1);
+
+ lock->lock_directory = g_strdup (lock_directory);
+
+ lock->iorfile = g_strconcat (lock->lock_directory, "/ior", NULL);
+
+ /* Check the current IOR file and ping its daemon */
+
+ lock->lock_fd = open_empty_locked_file (lock->lock_directory,
+ lock->iorfile,
+ err);
+
+ if (lock->lock_fd < 0)
+ {
+ /* We didn't get the lock. Read the old server, and provide
+ * it to the caller. Error is already set.
+ */
+ if (current_server)
+ *current_server = read_current_server (lock->iorfile, TRUE);
+
+ gconf_lock_destroy (lock);
+
+ return NULL;
+ }
+ else
+ {
+ /* Write IOR to lockfile */
+ const gchar* ior;
+ int retval;
+ gchar* s;
+
+ s = g_strdup_printf ("%u:", (guint) getpid ());
+
+ retval = write (lock->lock_fd, s, strlen (s));
+
+ g_free (s);
+
+ if (retval >= 0)
+ {
+ ior = gconf_get_daemon_ior();
+
+ if (ior == NULL)
+ retval = write (lock->lock_fd, "none", 4);
+ else
+ retval = write (lock->lock_fd, ior, strlen (ior));
+ }
+
+ if (retval < 0)
+ {
+ gconf_set_error (err,
+ GCONF_ERROR_LOCK_FAILED,
+ _("Can't write to file `%s': %s"),
+ lock->iorfile, g_strerror (errno));
+
+ unlink (lock->iorfile);
+ gconf_lock_destroy (lock);
+
+ return NULL;
+ }
+ }
+
+ return lock;
+}
+
+/* This function doesn't try to see if the lock is valid or anything
+ * of the sort; it just reads it. It does do the object_to_string
+ */
+ConfigServer
+gconf_get_current_lock_holder (const gchar *lock_directory,
+ GString *failure_log)
+{
+ char *iorfile;
+ ConfigServer server;
+
+ iorfile = g_strconcat (lock_directory, "/ior", NULL);
+ server = read_current_server_and_set_warning (iorfile, failure_log);
+ g_free (iorfile);
+ return server;
+}
+
+static CORBA_ORB gconf_orb = CORBA_OBJECT_NIL;
+
+CORBA_ORB
+gconf_orb_get (void)
+{
+ if (gconf_orb == CORBA_OBJECT_NIL)
+ {
+ CORBA_Environment ev;
+ int argc = 1;
+ char *argv[] = { "gconf", NULL };
+
+ _gconf_init_i18n ();
+
+ CORBA_exception_init (&ev);
+
+ gconf_orb = CORBA_ORB_init (&argc, argv, "orbit-local-orb", &ev);
+ g_assert (ev._major == CORBA_NO_EXCEPTION);
+
+ CORBA_exception_free (&ev);
+ }
+
+ return gconf_orb;
+}
+
+int
+gconf_orb_release (void)
+{
+ int ret = 0;
+
+ if (gconf_orb != CORBA_OBJECT_NIL)
+ {
+ CORBA_ORB orb = gconf_orb;
+ CORBA_Environment ev;
+
+ gconf_orb = CORBA_OBJECT_NIL;
+
+ CORBA_exception_init (&ev);
+
+ CORBA_ORB_destroy (orb, &ev);
+ CORBA_Object_release ((CORBA_Object)orb, &ev);
+
+ if (ev._major != CORBA_NO_EXCEPTION)
+ {
+ ret = 1;
+ }
+ CORBA_exception_free (&ev);
+ }
+
+ return ret;
+}
+
diff --git a/gconf/gconfd-corba.h b/gconf/gconfd-corba.h
index 7f14f5b9..842ded09 100644
--- a/gconf/gconfd-corba.h
+++ b/gconf/gconfd-corba.h
@@ -27,6 +27,23 @@ gboolean gconfd_corba_init (void);
PortableServer_POA gconf_corba_get_poa ();
+GConfValue* gconf_value_from_corba_value (const ConfigValue *value);
+ConfigValue* gconf_corba_value_from_gconf_value (const GConfValue *value);
+void gconf_fill_corba_value_from_gconf_value (const GConfValue *value,
+ ConfigValue *dest);
+ConfigValue* gconf_invalid_corba_value (void);
+
+void gconf_fill_corba_schema_from_gconf_schema (const GConfSchema *sc,
+ ConfigSchema *dest);
+ConfigSchema* gconf_corba_schema_from_gconf_schema (const GConfSchema *sc);
+GConfSchema* gconf_schema_from_corba_schema (const ConfigSchema *cs);
+
+gchar* gconf_object_to_string (CORBA_Object obj,
+ GError **err);
+
+CORBA_ORB gconf_orb_get (void);
+
+
void gconfd_corba_logfile_save (void);
void gconfd_corba_logfile_read (void);
void gconfd_corba_log_client_add (const ConfigListener client);
diff --git a/gconf/gconfd-dbus.c b/gconf/gconfd-dbus.c
index cdb1bc58..8fce617f 100644
--- a/gconf/gconfd-dbus.c
+++ b/gconf/gconfd-dbus.c
@@ -652,7 +652,6 @@ gconfd_config_database_add_listener (DBusConnection *connection,
dbus_dict_get_string (dict, "name", &name);
cnxn = gconf_database_dbus_add_listener (db, dbus_message_get_sender (message), name, dir);
- printf ("added listener from %s, %s. Result is %d\n", dbus_message_get_sender (message), dir, cnxn);
reply = dbus_message_new_reply (message);
dbus_message_append_uint32 (reply, cnxn);
@@ -683,7 +682,7 @@ gconfd_config_database_remove_listener (DBusConnection *connection,
return;
- /* FIXME: Remove the listener */
+ gconf_listeners_remove (db->listeners, cnxn);
reply = dbus_message_new_reply (message);
dbus_connection_send (connection, reply, NULL);
@@ -725,6 +724,7 @@ gconfd_config_database_set (DBusConnection *connection,
dbus_message_iter_unref (iter);
gconf_database_set (db, key, value, &error);
+ dbus_free (key);
gconf_value_free (value);
if (gconf_dbus_set_exception (connection, message, &error))
@@ -990,7 +990,6 @@ remove_listener_predicate (const gchar* location,
if (strcmp (l->who, name) == 0)
{
- printf ("removing listener!\n");
return FALSE;
}
else