From: Frediano Ziglio <fziglio@xxxxxxxxxx> --- server/spicevmc.c | 85 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 44 insertions(+), 41 deletions(-) diff --git a/server/spicevmc.c b/server/spicevmc.c index be924df..f2b3be3 100644 --- a/server/spicevmc.c +++ b/server/spicevmc.c @@ -120,7 +120,8 @@ static void spicevmc_red_channel_release_msg_rcv_buf(RedChannelClient *rcc, uint32_t size, uint8_t *msg); -static RedVmcPipeItem* try_compress_lz4(SpiceVmcState *state, int n, RedVmcPipeItem *msg_item) { +static RedVmcPipeItem* try_compress_lz4(SpiceVmcState *state, int n, RedVmcPipeItem *msg_item) +{ RedVmcPipeItem *msg_item_compressed; int bound, compressed_data_count; @@ -154,7 +155,9 @@ static RedVmcPipeItem* try_compress_lz4(SpiceVmcState *state, int n, RedVmcPipeI msg_item_compressed->buf_used = compressed_data_count; free(msg_item); return msg_item_compressed; - }/* LZ4 compression failed-fallback a non-compressed data is to be sent */ + } + + /* LZ4 compression failed-fallback a non-compressed data is to be sent */ spice_warning("Compress Error"); free(msg_item_compressed); return NULL; @@ -193,8 +196,8 @@ static RedPipeItem *spicevmc_chardev_read_msg_from_dev(SpiceCharDeviceInstance * msg_item_compressed = try_compress_lz4(state, n, msg_item); if (msg_item_compressed != NULL) { - return (RedPipeItem *)msg_item_compressed; - } + return &msg_item_compressed->base; + } #endif msg_item->uncompressed_data_size = n; msg_item->buf_used = n; @@ -340,52 +343,53 @@ static int spicevmc_channel_client_handle_migrate_data(RedChannelClient *rcc, return red_char_device_restore(state->chardev, &mig_data->base); } -static int try_handle_compressed_msg(RedChannelClient *rcc, SpiceMsgCompressedData *compressed_data_msg) { - /*NOTE: *decompressed is free by the char-device */ +static int try_handle_compressed_msg(RedChannelClient *rcc, SpiceMsgCompressedData *compressed_data_msg) +{ + /* NOTE: *decompressed is free by the char-device */ SpiceVmcState *state; int decompressed_size; - char *decompressed; + uint8_t *decompressed; state = spicevmc_red_channel_client_get_state(rcc); - decompressed = (char*)spicevmc_red_channel_alloc_msg_rcv_buf(rcc,SPICE_MSGC_SPICEVMC_DATA, - compressed_data_msg->uncompressed_size); + decompressed = spicevmc_red_channel_alloc_msg_rcv_buf(rcc,SPICE_MSGC_SPICEVMC_DATA, + compressed_data_msg->uncompressed_size); switch (compressed_data_msg->type) { #ifdef USE_LZ4 case SPICE_DATA_COMPRESSION_TYPE_LZ4: - decompressed_size = LZ4_decompress_safe ((char*)compressed_data_msg->compressed_data, - decompressed, + decompressed_size = LZ4_decompress_safe ((char *)compressed_data_msg->compressed_data, + (char *)decompressed, compressed_data_msg->compressed_size, compressed_data_msg->uncompressed_size); break; #endif - default: - spice_warning("Invalid Compression Type"); - spicevmc_red_channel_release_msg_rcv_buf(rcc,SPICE_MSGC_SPICEVMC_DATA, - compressed_data_msg->uncompressed_size, - (uint8_t*)decompressed); - return FALSE; - } - if (decompressed_size != compressed_data_msg->uncompressed_size) { - spice_warning("Decompression Error"); - spicevmc_red_channel_release_msg_rcv_buf(rcc, SPICE_MSGC_SPICEVMC_DATA, - compressed_data_msg->uncompressed_size, - (uint8_t*)decompressed); - return FALSE; - } - spice_assert(state->recv_from_client_buf->buf == (uint8_t*)decompressed); - state->recv_from_client_buf->buf_used = decompressed_size; - red_char_device_write_buffer_add(state->chardev, state->recv_from_client_buf); - state->recv_from_client_buf = NULL; - return TRUE; - + default: + spice_warning("Invalid Compression Type"); + spicevmc_red_channel_release_msg_rcv_buf(rcc,SPICE_MSGC_SPICEVMC_DATA, + compressed_data_msg->uncompressed_size, + decompressed); + return FALSE; + } + if (decompressed_size != compressed_data_msg->uncompressed_size) { + spice_warning("Decompression Error"); + spicevmc_red_channel_release_msg_rcv_buf(rcc, SPICE_MSGC_SPICEVMC_DATA, + compressed_data_msg->uncompressed_size, + decompressed); + return FALSE; + } + spice_assert(state->recv_from_client_buf->buf == decompressed); + state->recv_from_client_buf->buf_used = decompressed_size; + red_char_device_write_buffer_add(state->chardev, state->recv_from_client_buf); + state->recv_from_client_buf = NULL; + return TRUE; } static int spicevmc_red_channel_client_handle_message_parsed(RedChannelClient *rcc, - uint32_t size, - uint16_t type, - void *msg) -{ /*NOTE: *msg free by free() (when cb to spicevmc_red_channel_release_msg_rcv_buf - *with the compressed msg type)*/ + uint32_t size, + uint16_t type, + void *msg) +{ + /* NOTE: *msg free by free() (when cb to spicevmc_red_channel_release_msg_rcv_buf + * with the compressed msg type) */ SpiceVmcState *state; SpiceCharDeviceInterface *sif; @@ -399,12 +403,11 @@ static int spicevmc_red_channel_client_handle_message_parsed(RedChannelClient *r red_char_device_write_buffer_add(state->chardev, state->recv_from_client_buf); state->recv_from_client_buf = NULL; break; - case SPICE_MSGC_SPICEVMC_COMPRESSED_DATA: { + case SPICE_MSGC_SPICEVMC_COMPRESSED_DATA: if (!try_handle_compressed_msg(rcc, (SpiceMsgCompressedData*)msg)) { return FALSE; - } - break; - } + } + break; case SPICE_MSGC_PORT_EVENT: if (size != sizeof(uint8_t)) { spice_warning("bad port event message size"); @@ -472,7 +475,7 @@ static void spicevmc_red_channel_send_data(RedChannelClient *rcc, { RedVmcPipeItem *i = SPICE_UPCAST(RedVmcPipeItem, item); - switch (i->type){ + switch (i->type) { case SPICE_DATA_COMPRESSION_TYPE_NONE: red_channel_client_init_send_data(rcc, SPICE_MSG_SPICEVMC_DATA, item); spice_marshaller_add_ref(m, i->buf, i->buf_used); -- 2.5.5 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel