On Fri, 2018-02-16 at 17:15 +0100, Christophe de Dinechin wrote: > From: Christophe de Dinechin <dinechin@xxxxxxxxxx> > > Signed-off-by: Christophe de Dinechin <dinechin@xxxxxxxxxx> > --- > src/spice-streaming-agent.cpp | 47 ++++++++++++++++++++++++++----------------- > 1 file changed, 28 insertions(+), 19 deletions(-) > > diff --git a/src/spice-streaming-agent.cpp b/src/spice-streaming-agent.cpp > index 69c27a3..1e19e43 100644 > --- a/src/spice-streaming-agent.cpp > +++ b/src/spice-streaming-agent.cpp > @@ -181,19 +181,24 @@ write_all(int fd, const void *buf, const size_t len) > return written; > } > > -static int spice_stream_send_format(int streamfd, unsigned w, unsigned h, unsigned c) > +static int spice_stream_send_format(int streamfd, unsigned w, unsigned h, uint8_t c) > { > - > - SpiceStreamFormatMessage msg; > - const size_t msgsize = sizeof(msg); > - const size_t hdrsize = sizeof(msg.hdr); > - memset(&msg, 0, msgsize); > - msg.hdr.protocol_version = STREAM_DEVICE_PROTOCOL; > - msg.hdr.type = STREAM_TYPE_FORMAT; > - msg.hdr.size = msgsize - hdrsize; /* includes only the body? */ > - msg.msg.width = w; > - msg.msg.height = h; > - msg.msg.codec = c; > + const size_t msgsize = sizeof(SpiceStreamFormatMessage); > + const size_t hdrsize = sizeof(StreamDevHeader); > + SpiceStreamFormatMessage msg = { > + .hdr = { > + .protocol_version = STREAM_DEVICE_PROTOCOL, > + .padding = 0, // Workaround GCC "not implemented" bug > + .type = STREAM_TYPE_FORMAT, > + .size = msgsize - hdrsize > + }, > + .msg = { > + .width = w, > + .height = h, > + .codec = c, > + .padding1 = { } > + } > + }; > syslog(LOG_DEBUG, "writing format\n"); > std::lock_guard<std::mutex> stream_guard(stream_mtx); > if (write_all(streamfd, &msg, msgsize) != msgsize) { > @@ -204,14 +209,18 @@ static int spice_stream_send_format(int streamfd, unsigned w, unsigned h, unsign > > static int spice_stream_send_frame(int streamfd, const void *buf, const unsigned size) > { > - SpiceStreamDataMessage msg; > - const size_t msgsize = sizeof(msg); > ssize_t n; > + const size_t msgsize = sizeof(SpiceStreamFormatMessage); > + SpiceStreamDataMessage msg = { > + .hdr = { > + .protocol_version = STREAM_DEVICE_PROTOCOL, > + .padding = 0, // Workaround GCC "not implemented" bug > + .type = STREAM_TYPE_DATA, > + .size = size /* includes only the body? */ > + }, > + .msg = {} > + }; So, someone should find out if we can use the designated initializers, I suppose it depends on the compilers on all platforms we care about supporting them? I wasn't able to find much useful information so far. Anyone knows in which version of gcc it was introduced? Lukas > - memset(&msg, 0, msgsize); > - msg.hdr.protocol_version = STREAM_DEVICE_PROTOCOL; > - msg.hdr.type = STREAM_TYPE_DATA; > - msg.hdr.size = size; /* includes only the body? */ > std::lock_guard<std::mutex> stream_guard(stream_mtx); > n = write_all(streamfd, &msg, msgsize); > syslog(LOG_DEBUG, > @@ -379,7 +388,7 @@ do_capture(int streamfd, const char *streamport, FILE *f_log) > > if (frame.stream_start) { > unsigned width, height; > - unsigned char codec; > + uint8_t codec; > > width = frame.size.width; > height = frame.size.height; _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel