qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] bug with io/channel-socket.c - variable-sized object ma


From: Daniel P. Berrange
Subject: Re: [Qemu-devel] bug with io/channel-socket.c - variable-sized object may not be initialized
Date: Mon, 18 Jan 2016 09:54:04 +0000
User-agent: Mutt/1.5.24 (2015-08-30)

On Fri, Jan 15, 2016 at 04:56:33PM -0700, Eric Blake wrote:
> On 01/13/2016 02:19 PM, Programmingkid wrote:
> > This code causes an error to occur during compiling: 
> > 
> > char control[CMSG_SPACE(sizeof(int) * SOCKET_MAX_FDS)] = { 0 };
> > 
> > It is located at line 496 in io/channel-socket.c. 
> > 
> > Here is the full error message:
> > io/channel-socket.c: In function 'qio_channel_socket_writev':
> > io/channel-socket.c:496:18: error: variable-sized object may not be 
> > initialized
> >      char control[CMSG_SPACE(sizeof(int) * SOCKET_MAX_FDS)] = { 0 };
> > 
> > This is from gcc 4.9 running on Mac OS 10.6.8. 
> 
> Uggh. That sounds like a bug in the Mac OS headers, for making
> CMSG_SPACE() not be a compile-time constant.  We do NOT want to be using
> variable-sized objects here, so we need a compile-time constant for the
> array size, even if we have to work around your platform's borked headers.

Note it only seems to be complaining about the initialization, not
the actual declaration. We already have similar code in QEMU elsewhere
eg

  qemu-char.c:        char control[CMSG_SPACE(sizeof(int) * TCP_MAX_FDS)];

which presumably works on OS-X

So the simple fix is to remove the '{ 0 }' initialization and just
memset instead eg

  memset(control, 0, CMSG_SPACE(sizeof(int) * SOCKET_MAX_FDS));


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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]