On Mon, 23 Jan 2017 16:58:14 +0100 Michal Suchánek <msuchanek@xxxxxxx> wrote: > On Mon, 23 Jan 2017 15:40:57 +0100 > Christophe de Dinechin <dinechin@xxxxxxxxxx> wrote: > > > On 23/01/2017 14:53, Michal Suchanek wrote: > > > This allows running big endian and little endian guest side by > > > side using cut & paste between them. > > > > > > There is a general design idea that swapping should come as close > > > to virtio_read/virtio_write as possible. In particular, the > > > protocol between vdagent and vdagentd is guest-specific and in > > > native endian. With muliple layers of headers this is a bit > > > tricky. A few message types have to be swapped fully before > > > passing through vdagentd. > > > > > > Signed-off-by: Michal Suchanek <msuchanek@xxxxxxx> > > > Signed-off-by: Victor Toso <me@xxxxxxxxxxxxxx> > > > --- > > > v2: > > > - introduce helper functions to swap (a portion of) a message > > > wholesale > > > - pollute fewer places with swapping sometimes at the cost of > > > slightly more verbose code > > > v3: > > > - use glib byteswap macros in place of endian.h byteswap macros > > > - move variable declaration out of case statement > > > - reuse more of existing clipboard code > > > v4: > > > - also use glib byteswap for 64bit swaps > > > - use file xfer message structure for swapping size > > > v5: > > > - rebase on top of vdagentd: early return on bad message size > > > --- > > > src/vdagentd/vdagentd.c | 125 > > > +++++++++++++++++++++++++++++++++++---------- > > > src/vdagentd/virtio-port.c | 36 ++++++++----- 2 files changed, > > > 121 insertions(+), 40 deletions(-) > > > > > > diff --git a/src/vdagentd/vdagentd.c b/src/vdagentd/vdagentd.c > > > index 7e16cd2..f8de1e7 100644 > > > --- a/src/vdagentd/vdagentd.c > > > +++ b/src/vdagentd/vdagentd.c > > > @@ -78,6 +78,34 @@ static int client_connected = 0; > > > static int max_clipboard = -1; > > > > > > /* utility functions */ > > > +static void virtio_msg_uint32_to_le(uint8_t *_msg, uint32_t size, > > > uint32_t offset) > > If we are converting uint32 messages, shouln't this take a uint32_t > > *msg as input? See [1] below > > Technically we can. The to_le message swap will likely get the native > pointer width, unlike the from_le message swaps. Actually, the function is used twice, once with uint32_t pointer and once with uint8_t pointer. So it does not matter either way. Thanks Michal _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel