[libvirt] [PATCH 1/7] libvirt.h: consolidate typed parameter handling

Daniel Veillard veillard at redhat.com
Wed May 18 08:11:39 UTC 2011


On Wed, May 18, 2011 at 07:52:43AM +0200, Matthias Bolte wrote:
> 2011/5/18 Hu Tao <hutao at cn.fujitsu.com>:
> > On Tue, May 17, 2011 at 04:42:09PM -0600, Eric Blake wrote:
> >> * include/libvirt/libvirt.h.in (virTypedParameterType)
> >> (VIR_TYPED_PARAM_FIELD_LENGTH, _virTypedParameter): New enum,
> >> macro, and type.
> >> (virSchedParameter, virBlkioParameter, virMemoryParameter):
> >> Rewrite in terms of a common type, while keeping all old public
> >> names for backwards compatibility.
> >> (struct _virSchedParameter, struct _virBlkioParameter)
> >> (struct _virMemoryParameter): Delete - these are private names.
> >> * python/generator.py (enum): Cope with the refactoring.
> >> ---
> >>  include/libvirt/libvirt.h.in |  144 +++++++++++++++++++++++------------------
> >>  python/generator.py          |   12 ++++
> >>  2 files changed, 93 insertions(+), 63 deletions(-)
> >>
> >> +/**
> >> + * virTypedParameter:
> >> + *
> >> + * A named parameter, including a type and value.
> >> + */
> >> +typedef struct _virTypedParameter virTypedParameter;
> >> +
> >> +struct _virTypedParameter {
> >> +    char field[VIR_TYPED_PARAM_FIELD_LENGTH];  /* parameter name */
> >> +    int type;   /* parameter type, virTypedParameterType */
> >
> > virTypedParameterType type; ?
> 
> We typically use int even for enum values. There is probably a reason
> for that but I'm not aware of it right now.

  enum don't have a fixed size defined by the C standard. So we avoid
using then for any API either in function signature or within public
structure because we can't guarantee that the resulting ABI will be
stable from one compiler to another.

> In this case we might need to stick to int for ABI compatibility,
> because the old structs used int. Assuming that enum is not guaranteed
> to be the same size as int by the C standard, but I don't know.

  yes we must keep int.

> >> +    union {
> >> +        int i;                      /* type is INT */
> >> +        unsigned int ui;            /* type is UINT */
> >> +        long long int l;            /* type is LLONG */
> >> +        unsigned long long int ul;  /* type is ULLONG */
> >> +        double d;                   /* type is DOUBLE */
> >> +        char b;                     /* type is BOOLEAN */
> >> +    } value; /* parameter value */
> >> +};
> >> +
> >> +/**
> >> + * virTypedParameterPtr:
> >> + *
> >> + * a pointer to a virTypedParameter structure.
> >> + */
> >> +typedef virTypedParameter *virTypedParameterPtr;
> >> +
> >> +/* Management of scheduler parameters */
> >> +
> >>  /**
> >>   * virDomainSchedParameterType:
> >>   *
> >>   * A scheduler parameter field type
> >>   */
> >>  typedef enum {
> >> -    VIR_DOMAIN_SCHED_FIELD_INT     = 1, /* integer case */
> >> -    VIR_DOMAIN_SCHED_FIELD_UINT    = 2, /* unsigned integer case */
> >> -    VIR_DOMAIN_SCHED_FIELD_LLONG   = 3, /* long long case */
> >> -    VIR_DOMAIN_SCHED_FIELD_ULLONG  = 4, /* unsigned long long case */
> >> -    VIR_DOMAIN_SCHED_FIELD_DOUBLE  = 5, /* double case */
> >> -    VIR_DOMAIN_SCHED_FIELD_BOOLEAN = 6  /* boolean(character) case */
> >> +    VIR_DOMAIN_SCHED_FIELD_INT     = VIR_TYPED_PARAM_INT,
> >> +    VIR_DOMAIN_SCHED_FIELD_UINT    = VIR_TYPED_PARAM_UINT,
> >> +    VIR_DOMAIN_SCHED_FIELD_LLONG   = VIR_TYPED_PARAM_LLONG,
> >> +    VIR_DOMAIN_SCHED_FIELD_ULLONG  = VIR_TYPED_PARAM_ULLONG,
> >> +    VIR_DOMAIN_SCHED_FIELD_DOUBLE  = VIR_TYPED_PARAM_DOUBLE,
> >> +    VIR_DOMAIN_SCHED_FIELD_BOOLEAN = VIR_TYPED_PARAM_BOOLEAN,
> >>  } virSchedParameterType;
> >
> > Can we remove VIR_DOMAIN_SCHED_FIELD_XXX and use VIR_TYPED_PARAM_XXX
> > directly since parameter types are basically types like int, long, ...
> > and don't depend on what parameters are?
> >
> > Likewise for other PARAMs in this patch.
> 
> We cannot, because the old symbols are part of the released API so we
> cannot remove them without breaking backwards compatibility.

  Agreed.
Patch looks fine to me, and we should do that cleanup before the next
release !

 ACK,

Daniel

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/




More information about the libvir-list mailing list