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.
Regards,
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 :|