From: Nick Bowler Date: Sun, 20 May 2012 19:54:24 +0000 (-0400) Subject: uobject: Make logging more generic. X-Git-Url: http://git.draconx.ca/gitweb/upkg.git/commitdiff_plain/687c74b6b8cc9eb6015c279a0c757ca3c0047697?ds=sidebyside uobject: Make logging more generic. The logging functions can now be used on any GObject, not just UObject subclasses. In particular, it should be possible to call it on UPkg instances which do not derive from UObject. --- diff --git a/src/uobject/uobject.c b/src/uobject/uobject.c index 331b8ae..360dd31 100644 --- a/src/uobject/uobject.c +++ b/src/uobject/uobject.c @@ -612,18 +612,20 @@ static char *prepend_fmt(const char *prefix, const char *fmt) /* Logging helpers that automatically prepend the UObject class information. */ void u_vlog_full(GObject *o, GLogLevelFlags level, const char *fmt, va_list ap) { - g_return_if_fail(IS_U_OBJECT(o)); - UObject *uo = U_OBJECT(o); - char *new_fmt = NULL; - - if (uo->pkg_name) { - new_fmt = prepend_fmt(uo->pkg_name, fmt); - if (!new_fmt) { - g_log(G_OBJECT_TYPE_NAME(o), level, "%s", - uo->pkg_file->name); - } else { + char *new_fmt = NULL, *obj_prefix = NULL; + + if (IS_U_OBJECT(o)) { + obj_prefix = U_OBJECT(o)->pkg_name; + } else if (G_IS_TYPE_MODULE(o)) { + obj_prefix = G_TYPE_MODULE(o)->name; + } + + if (obj_prefix) { + new_fmt = prepend_fmt(obj_prefix, fmt); + if (!new_fmt) + g_log(G_OBJECT_TYPE_NAME(o), level, "%s", obj_prefix); + else fmt = new_fmt; - } } g_logv(G_OBJECT_TYPE_NAME(o), level, fmt, ap);