[Libvir] PATCH: 5/10: public auth callback API
Daniel Veillard
veillard at redhat.com
Tue Dec 4 16:10:43 UTC 2007
On Tue, Dec 04, 2007 at 03:50:46PM +0000, Richard W.M. Jones wrote:
> Daniel Veillard wrote:
> >On Tue, Dec 04, 2007 at 12:57:39PM +0000, Richard W.M. Jones wrote:
> >>Daniel P. Berrange wrote:
> >>>virConnectPtr virConnectOpenAuth (const char *name,
> >>> virConnectAuthPtr auth,
> >>> int flags);
> >>I'm a fan of callers passing in the size of the structure (as they see
> >>it). Allows the structure to be expanded in future, and if done right
> >>can allow both forwards and backwards compatibility.
> >>
> >>cf:
> >>http://www.libvirt.org/html/libvirt-libvirt.html#virDomainInterfaceStats
> >
> > Hum, honnestly, that's not my preferred way. If you really think there
> >should be room for expansion, I would either:
> > - add a version number to the structure and allocator/destructor
> > functions as part of the API (prefered)
>
> Hmmm ... what if they forget to set it? Now we need an init function
> for the structure.
yes that's why I suggested an allocator, it would set the version.
> > - add padding at tyhe end of the structure which could allow
> > a future growth
>
> This incurs an unnecessary memory penalty always, and limits us to a
> particular maximum size which we must choose now when we don't know what
> extra fields we might add.
I don't like this much either, but I think the GNOME guys did this
for libxml2 I usually provide allocator/deallocators.
> >adding the size of the structure as the argument moves the complexity away
> >from the library implementor to the library user,
>
> Well, it means they must append "sizeof (*auth)" to their list of
> arguments, which is hardly a lot of complexity. There _is_ much more
until they just add a numeric value ... and that will break just as
well. trying to minimize the cases where the API user can do the wrong
thing is an important goal :-) . There that's something which seems to
work but will break later, that's why I prefer an allocator if we plan to
change sizes.
> Remember also the need for forwards compatibility: program which was
> compiled against an old version of the library, dynamically links to a
> new version of the library. If the structure has increased in size in
> the meantime, then having the caller pass the size means that the
> library can do the right thing and only fill in the first fields.
The version + allocator have that property too, except it's the library
code which takes care of things.
Daniel
--
Red Hat Virtualization group http://redhat.com/virtualization/
Daniel Veillard | virtualization library http://libvirt.org/
veillard at redhat.com | libxml GNOME XML XSLT toolkit http://xmlsoft.org/
http://veillard.com/ | Rpmfind RPM search engine http://rpmfind.net/
More information about the libvir-list
mailing list