[libvirt] [PATCH] Make all bitfields unsigned ints to avoid unexpected values in casts
Daniel Veillard
veillard at redhat.com
Tue Jan 19 12:38:33 UTC 2010
On Tue, Jan 19, 2010 at 12:10:24PM +0000, Daniel P. Berrange wrote:
> 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 */
ACK, one checking point to keep in mind, good idea !
Daniel
--
Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/
daniel at veillard.com | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library http://libvirt.org/
More information about the libvir-list
mailing list