[libvirt] [PATCH] build: allow virObject to have no parent

Daniel P. Berrange berrange at redhat.com
Tue Jan 22 17:23:16 UTC 2013


On Tue, Jan 22, 2013 at 10:15:20AM -0700, Eric Blake wrote:
> When building with static analysis enabled, we turn on attribute
> nonnull checking.  However, this caused the build to fail with:
> 
> ../../src/util/virobject.c: In function 'virObjectOnceInit':
> ../../src/util/virobject.c:55:40: error: null argument where non-null required (argument 1) [-Werror=nonnull]
> 
> Creation of the virObject class is the one instance where the
> parent class is allowed to be NULL, so making things conditional
> will let us keep static analysis checking for all other callers,
> without breaking the build on the one exception.
> 
> * src/util/virobject.c: Define witness.
> * src/util/virobject.h (virClassNew): Use it to force most callers
> to pass non-null parameter.
> ---
> 
> I couldn't bring myself to push this under the build breaker rule,
> so I'll wait for a review.
> 
>  src/util/virobject.c | 3 ++-
>  src/util/virobject.h | 9 +++++++--
>  2 files changed, 9 insertions(+), 3 deletions(-)
> 
> diff --git a/src/util/virobject.c b/src/util/virobject.c
> index 7f08a11..3102e5e 100644
> --- a/src/util/virobject.c
> +++ b/src/util/virobject.c
> @@ -1,7 +1,7 @@
>  /*
>   * virobject.c: libvirt reference counted object
>   *
> - * Copyright (C) 2012 Red Hat, Inc.
> + * Copyright (C) 2012-2013 Red Hat, Inc.
>   *
>   * This library is free software; you can redistribute it and/or
>   * modify it under the terms of the GNU Lesser General Public
> @@ -21,6 +21,7 @@
> 
>  #include <config.h>
> 
> +#define VIR_OBJECT_C
>  #include "virobject.h"
>  #include "virthread.h"
>  #include "viralloc.h"
> diff --git a/src/util/virobject.h b/src/util/virobject.h
> index bb72a25..02c409f 100644
> --- a/src/util/virobject.h
> +++ b/src/util/virobject.h
> @@ -1,7 +1,7 @@
>  /*
>   * virobject.h: libvirt reference counted object
>   *
> - * Copyright (C) 2012 Red Hat, Inc.
> + * Copyright (C) 2012-2013 Red Hat, Inc.
>   *
>   * This library is free software; you can redistribute it and/or
>   * modify it under the terms of the GNU Lesser General Public
> @@ -51,11 +51,16 @@ struct _virObjectLockable {
>  virClassPtr virClassForObject(void);
>  virClassPtr virClassForObjectLockable(void);
> 
> +#ifndef VIR_OBJECT_C
> +# define VIR_PARENT_REQUIRED ATTRIBUTE_NONNULL(1)
> +#else
> +# define VIR_PARENT_REQUIRED /* empty */
> +#endif
>  virClassPtr virClassNew(virClassPtr parent,
>                          const char *name,
>                          size_t objectSize,
>                          virObjectDisposeCallback dispose)
> -    ATTRIBUTE_NONNULL(1);
> +    VIR_PARENT_REQUIRED;
> 
>  const char *virClassName(virClassPtr klass)
>      ATTRIBUTE_NONNULL(1);

ACK


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