RFC: do we want/need the "Ptr" typedefs for internal code ?

Daniel P. Berrangé berrange at redhat.com
Tue Mar 9 17:44:16 UTC 2021


One of the conventions we have had since the early days of libvirt is
that every struct typedef, has a corresponding "Ptr" typedef too.

For example

    typedef struct _virDomainDef virDomainDef;
    typedef virDomainDef *virDomainDefPtr;

Periodically someone has questioned what the purpose of these Ptr
typedefs is, and we've not had an compelling answer, other than
that's what we've always done.

There are a few things that make me question the status quo

 - If we want a const pointer, we can't use

       const virDomainDefPtr def

   because that expands to "struct _virDomainDef * const", which
   is not what we need semantically. Instead we must write

       const virDomainDef *def

   It is not at all obvious why these two are different, but
   none the less they are, which is confusing to contributors

   To me this a compelling reason to consider the "Ptr" typedefs
   a waste of time, if not actively harmful.

   Please don't suggest adding virDomainDefConstPtr too !


 - Writing 'virDomainDefPtr' is actually two characters more
   typing than 'virDomainDef *'.

   IOW these "Ptr" typedefs aren't saving us time when writing
   code.


 - This convention of having "Ptr" typedefs is atypical among
   C projects I've worked on.

   Anything that is peculiar to libvirt is another item that
   new contributors need to learn, so has a cost to the
   project that must be weighed against its benefit.


We can't do anything about the use "Ptr" in the include/ files because
that is public ABI. We can potentially eliminate "Ptr" types everywhere
else in the codebase, even the src/libvirt*.c files corresponding to
the public includes.

Does anyone have suggestions for how these "Ptr" typedefs are
benefiting libvirt ? Would anyone miss them ?

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|




More information about the libvir-list mailing list