[Spice-devel] [PATCH 06/22] Get rid of C-style memset initializations, use C++ style aggregates
Frediano Ziglio
fziglio at redhat.com
Wed Mar 7 10:50:12 UTC 2018
> > On 6 Mar 2018, at 17:15, Christophe Fergeau <cfergeau at redhat.com> wrote:
> >
> > On Thu, Mar 01, 2018 at 09:01:37PM +0100, Christophe de Dinechin wrote:
> >>> On 28 Feb 2018, at 17:36, Christophe Fergeau <cfergeau at redhat.com> wrote:
> >>>
> >>> My understanding is that the previous iteration was quite controversial,
> >>> I would just drop it from the series unless you get acks from everyone
> >>> involved this time.
> >>
> >> It’s a bit difficult to drop that from the series, as it is a core element
> >> of the next steps if you look carefully.
> >
> > I only looked at the code with the full series applied, but it really seems
> > like both way would
> > be possible?
> >
> > diff --git a/src/concrete-agent.cpp b/src/concrete-agent.cpp
> > index fe8564f..2e1472a 100644
> > --- a/src/concrete-agent.cpp
> > +++ b/src/concrete-agent.cpp
> > @@ -140,7 +140,10 @@ public:
> > }
> > void write_message_body(Stream &stream, unsigned w, unsigned h, uint8_t
> > c)
> > {
> > - StreamMsgFormat msg = { .width = w, .height = h, .codec = c,
> > .padding1 = {} };
> > + StreamMsgFormat msg;
> > + msg.width = w;
> > + msg.height = h;
> > + msg.codec = c;
> > stream.write_all("format", &msg, sizeof(msg));
> > }
> > };
> > diff --git a/src/message.hpp b/src/message.hpp
> > index fd69033..674e122 100644
> > --- a/src/message.hpp
> > +++ b/src/message.hpp
> > @@ -21,13 +21,12 @@ class Message
> > public:
> > template <typename ...PayloadArgs>
> > Message(PayloadArgs... payload_args)
> > - : hdr(StreamDevHeader {
> > - .protocol_version = STREAM_DEVICE_PROTOCOL,
> > - .padding = 0, // Workaround GCC bug "sorry: not
> > implemented"
> > - .type = Type,
> > - .size = (uint32_t) Info::size(payload_args...)
> > - })
> > - { }
> > + {
> > + hdr.protocol_version = STREAM_DEVICE_PROTOCOL;
> > + hdr.padding = 0;
> > + hdr.type = Type;
> > + hdr.size = (uint32_t) Info::size(payload_args...);
> > + }
> > void write_header(Stream &stream)
> > {
> > stream.write_all("header", &hdr, sizeof(hdr));
> >
> > Not strongly advocating for that change to be made just now, I was just
> > a bit surprised by how you dismissed this ;)
>
> I did not dismiss it, and I regret you interpreted it that way ;-)
>
> The meaning I gave to “core element of the next steps” was that practically
> every patch touches that part in one way or another. So changing it and
> keeping it consistent essentially means redoing a good fraction of the whole
> series by hand. That’s a lot of churn.
>
> I could do it if I saw value in doing the change. But I feel like I replied
> to Frediano’s objections on this topic, as well as to yours. I also believe
> that the code is significantly simpler, more type-safe and more readable the
> way I wrote it, for example because we get a warning or an error if we
> forget a field.
>
I confirm, the problem of the paddings and security was discussed
and agreed is not a problem.
> Does that address your objection?
>
> >
> > Christophe
>
There are however still some issues:
- the syntax is using C++20 while we state we use C++11 syntax, this
is basically using C compatibility extensions. I just tried and for
instance this code is not accepted on Visual C++ 2015 (not an issue
at the moment);
- the "Also note that GCC is a bit picky and will generate strange
"unsupported" or "not implemented" errors if the fields are not all
initialized in exact declaration order." is wrong, this is not a
GCC errors, just that GCC is respecting C++. Fields are required
to be initialized in the correct order in C++ (this differs from
C99);
- the "Writing this patch also highlighted an inconsistency between the
type of a 'codec' local variable and the type used in the actual data
type." is misleading, the protocol is defined that way not for
inconsistency but being a C file is subject to C limits and
you cannot portably specify a binary size for enumerations.
As I said previously if the problem is the time that take to
do the change to the patch I can do it.
Frediano
More information about the Spice-devel
mailing list