[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