[libvirt] [PATCH] Introduce gvir_set_error (and friends) & convert all code

Daniel P. Berrange berrange at redhat.com
Mon Dec 5 13:31:03 UTC 2011


On Mon, Dec 05, 2011 at 12:59:36PM +0100, Christophe Fergeau wrote:
> On Mon, Dec 05, 2011 at 11:25:31AM +0000, Daniel P. Berrange wrote:
> > From: "Daniel P. Berrange" <berrange at redhat.com>
> > 
> > The pattern
> > 
> >     GError **error;
> >     ....
> >     *err = gvir_error_new(...)
> > 
> > is dangerous because 'err' could be NULL, and it is tedious
> > to expect everyone to check. Introduce a new set of APIs
> > for setting errors
> > 
> >     gvir_set_error(err, ...)
> > 
> > and convert all callers to this new pattern
> > ---
> >  libvirt-gconfig/libvirt-gconfig-helpers-private.h  |    7 +-
> >  libvirt-gconfig/libvirt-gconfig-helpers.c          |   48 +++++++---
> >  libvirt-gconfig/libvirt-gconfig-object.c           |   15 ++-
> >  libvirt-glib/libvirt-glib-error.c                  |   91 +++++++++++++++++++
> >  libvirt-glib/libvirt-glib-error.h                  |   18 ++++
> >  libvirt-glib/libvirt-glib.sym                      |    3 +
> >  libvirt-gobject/libvirt-gobject-connection.c       |   88 ++++++++----------
> >  libvirt-gobject/libvirt-gobject-domain-disk.c      |    7 +-
> >  libvirt-gobject/libvirt-gobject-domain-interface.c |    7 +-
> >  libvirt-gobject/libvirt-gobject-domain-snapshot.c  |    6 +-
> >  libvirt-gobject/libvirt-gobject-domain.c           |   95 +++++++++-----------
> >  libvirt-gobject/libvirt-gobject-interface.c        |    7 +-
> >  libvirt-gobject/libvirt-gobject-network-filter.c   |    7 +-
> >  libvirt-gobject/libvirt-gobject-network.c          |    7 +-
> >  libvirt-gobject/libvirt-gobject-node-device.c      |    7 +-
> >  libvirt-gobject/libvirt-gobject-secret.c           |    7 +-
> >  libvirt-gobject/libvirt-gobject-storage-pool.c     |   47 +++++------
> >  libvirt-gobject/libvirt-gobject-storage-vol.c      |    7 +-
> >  libvirt-gobject/libvirt-gobject-stream.c           |   14 ++--
> >  19 files changed, 295 insertions(+), 193 deletions(-)
> > 
> > diff --git a/libvirt-gconfig/libvirt-gconfig-helpers-private.h b/libvirt-gconfig/libvirt-gconfig-helpers-private.h
> > index 6277cbd..087085e 100644
> > --- a/libvirt-gconfig/libvirt-gconfig-helpers-private.h
> > +++ b/libvirt-gconfig/libvirt-gconfig-helpers-private.h
> > @@ -30,8 +30,11 @@
> >  
> >  G_BEGIN_DECLS
> >  
> > -GError *gvir_xml_error_new(GQuark domain, gint code,
> > -                           const gchar *format, ...);
> > +GError *gvir_config_xml_error_new(GQuark domain, gint code,
> > +                                  const gchar *format, ...);
> 
> If we rename these, I'd go with gvir_config_error_new

Ok, changed that.

> >  xmlNodePtr
> >  gvir_config_xml_parse(const char *xml, const char *root_node, GError **err)
> >  {
> > @@ -94,17 +115,18 @@ gvir_config_xml_parse(const char *xml, const char *root_node, GError **err)
> >  
> >      doc = xmlParseMemory(xml, strlen(xml));
> >      if (!doc) {
> > -        *err = gvir_xml_error_new(GVIR_CONFIG_OBJECT_ERROR,
> > +        gvir_config_set_xml_error(err, GVIR_CONFIG_OBJECT_ERROR,
> >                                    0,
> >                                    "%s",
> >                                    "Unable to parse configuration");
> 
> This "%s", msg pattern occurs several time, it will be worth adding a
> _set_error_literal variant some day

Good point, I've introduced that API now, and also a 'va_list' variant
for completeness.


Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list