Updating branch refs/heads/master to 0aa4faca0929d45902e878fd859aba37c35d04e7 (commit) from 86cfde6cddef120622d91af606ecaf417186a678 (commit)
commit 0aa4faca0929d45902e878fd859aba37c35d04e7 Author: Brian J. Tarricone <br...@tarricone.org> Date: Sun Aug 23 01:20:39 2009 -0700 fix detection of channel/property not found error when setting props dbus-glib's GError registration/mapping is crap. instead of doing something actually useful and mapping the error returned by dbus (e.g. "org.xfce.Xfconf.Error.PropertyNotFound") back into the correct GError domain (XFCONF_ERROR) and GError code (XFCONF_ERROR_PROPERTY_NOT_FOUND), it instead uselessly uses DBUS_GERROR and DBUS_GERROR_REMOTE_EXCEPTION, and then tacks the raw error string onto the end of GError::message, "hiding" it with a NUL byte. useless. xfconf/xfconf-cache.c | 21 ++++++++++++++++++--- 1 files changed, 18 insertions(+), 3 deletions(-) diff --git a/xfconf/xfconf-cache.c b/xfconf/xfconf-cache.c index 674bdef..049436c 100644 --- a/xfconf/xfconf-cache.c +++ b/xfconf/xfconf-cache.c @@ -711,9 +711,24 @@ xfconf_cache_set(XfconfCache *cache, GError *tmp_error = NULL; if(!xfconf_cache_lookup_locked(cache, property, &tmp_val, &tmp_error)) { - if(G_UNLIKELY(tmp_error->domain != XFCONF_ERROR - || (tmp_error->code != XFCONF_ERROR_CHANNEL_NOT_FOUND - && tmp_error->code != XFCONF_ERROR_PROPERTY_NOT_FOUND))) + /* this is just another example of dbus-glib's brain-deadedness. + * instead of remapping the remote error back into the local + * domain and code, it uses DBUS_GERROR as the domain, + * DBUS_GERROR_REMOTE_EXCEPTION as the code, and then "hides" + * the full string ("org.xfce.Xfconf.Error.Whatever") in + * GError::message after a NUL byte. so stupid. */ + const gchar *dbus_error_name = NULL; + + if(G_LIKELY(tmp_error->domain == DBUS_GERROR + && tmp_error->code == DBUS_GERROR_REMOTE_EXCEPTION)) + { + dbus_error_name = dbus_g_error_get_name(tmp_error); + } + + if(G_UNLIKELY(!dbus_error_name + || strncmp(dbus_error_name, "org.xfce.Xfconf.Error.", 22) + || (strcmp(dbus_error_name+22, "PropertyNotFound") + && strcmp(dbus_error_name+22, "ChannelNotFound")))) { /* this is bad... */ g_propagate_error(error, tmp_error); _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org http://foo-projects.org/mailman/listinfo/xfce4-commits