[libvirt] [PATCH] virDomainDiskDef: Turn @device into enum

Daniel P. Berrange berrange at redhat.com
Mon Sep 28 16:57:36 UTC 2015

On Mon, Sep 28, 2015 at 12:35:31PM -0400, Laine Stump wrote:
> On 09/17/2015 11:37 AM, Michal Privoznik wrote:
> >It's used as enum everywhere, so why store its value in an int?
> There are a lot of these. I *think* the only reason this was done anywhere
> in the first place was because the size of an enum isn't guaranteed to be
> the same across different platforms, so you can't use an enum type in any
> wire protocol (e.g. libvirt client to server), and somehow this usage leaked
> over into the internal-only data structures; after that  the general "that
> works! Copy it!" cargo cult generation of new code meant that we now have
> lots of instances of this (there may also be cases where someone chose to
> use -1 to indicate "not specified" rather than 0/the first enum value).
> Or it could be there's some other reason for using int instead of an enum
> type in the internal config objects that I've forgotten.

IIRC, it was because enum fields can be unsigned & we use -1 as the error
code for virEnumFromString(). So if you have

    enum foo;

    if ((foo = virEnumFromString("blah")) < 0)
        ...error handling...

your error handling would not get run, as the -1 would get turned into a
high positive value.

|: 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