The 'int virInterfaceIsActive()' method was directly returning the value of the 'int active:1' bitfield in virIntefaceDefPtr. A bitfield with a signed integer, will hold the values 0 and -1, not 0 and +1 as might be expected. This meant that virInterfaceIsActive() was always returning -1 when the interface was active, not +1 & thus all callers thought an error had occurred. To protect against this kind of mistake again, change all bitfields to be unsigned ints * daemon/libvirtd.h, src/conf/domain_conf.h, src/conf/interface_conf.h, src/conf/network_conf.h: Change bitfields to unsigned int. --- daemon/libvirtd.h | 14 +++++++------- src/conf/domain_conf.h | 14 +++++++------- src/conf/interface_conf.h | 2 +- src/conf/network_conf.h | 2 +- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/daemon/libvirtd.h b/daemon/libvirtd.h index 2f647f3..a7591fc 100644 --- a/daemon/libvirtd.h +++ b/daemon/libvirtd.h @@ -175,9 +175,9 @@ struct qemud_client { int fd; int watch; - int readonly:1; - int closing:1; - int domain_events_registered:1; + unsigned int readonly :1; + unsigned int closing :1; + unsigned int domain_events_registered :1; struct sockaddr_storage addr; socklen_t addrlen; @@ -185,7 +185,7 @@ struct qemud_client { int type; /* qemud_sock_type */ gnutls_session_t tlssession; int auth; - int handshake : 1; /* If we're in progress for TLS handshake */ + unsigned int handshake :1; /* If we're in progress for TLS handshake */ #if HAVE_SASL sasl_conn_t *saslconn; int saslSSF; @@ -244,9 +244,9 @@ struct qemud_socket { struct qemud_worker { pthread_t thread; - int hasThread :1; - int processingCall :1; - int quitRequest : 1; + unsigned int hasThread :1; + unsigned int processingCall :1; + unsigned int quitRequest :1; /* back-pointer to our server */ struct qemud_server *server; diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 1413273..7be090d 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -400,8 +400,8 @@ enum virDomainVideoType { typedef struct _virDomainVideoAccelDef virDomainVideoAccelDef; typedef virDomainVideoAccelDef *virDomainVideoAccelDefPtr; struct _virDomainVideoAccelDef { - int support3d : 1; - int support2d : 1; + unsigned int support3d :1; + unsigned int support2d :1; }; @@ -432,7 +432,7 @@ struct _virDomainGraphicsDef { union { struct { int port; - int autoport : 1; + unsigned int autoport :1; char *listenAddr; char *keymap; char *passwd; @@ -445,13 +445,13 @@ struct _virDomainGraphicsDef { struct { int port; char *listenAddr; - int autoport : 1; - int replaceUser : 1; - int multiUser : 1; + unsigned int autoport :1; + unsigned int replaceUser :1; + unsigned int multiUser :1; } rdp; struct { char *display; - int fullscreen : 1; + unsigned int fullscreen :1; } desktop; } data; }; diff --git a/src/conf/interface_conf.h b/src/conf/interface_conf.h index 2683eee..5b201d3 100644 --- a/src/conf/interface_conf.h +++ b/src/conf/interface_conf.h @@ -170,7 +170,7 @@ typedef virInterfaceObj *virInterfaceObjPtr; struct _virInterfaceObj { virMutex lock; - int active:1; /* 1 if interface is active (up) */ + unsigned int active:1; /* 1 if interface is active (up) */ virInterfaceDefPtr def; /* The interface definition */ }; diff --git a/src/conf/network_conf.h b/src/conf/network_conf.h index 0214d1a..9e50659 100644 --- a/src/conf/network_conf.h +++ b/src/conf/network_conf.h @@ -65,7 +65,7 @@ struct _virNetworkDef { char *bridge; /* Name of bridge device */ char *domain; unsigned long delay; /* Bridge forward delay (ms) */ - int stp : 1; /* Spanning tree protocol */ + unsigned int stp :1; /* Spanning tree protocol */ int forwardType; /* One of virNetworkForwardType constants */ char *forwardDev; /* Destination device for forwarding */ -- 1.6.5.2 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list