Hi

On Wed, Nov 12, 2025 at 5:42 PM Philippe Mathieu-Daudé <[email protected]>
wrote:

> If qemu_chr_write_buffer() returned an error, but could
> write some characters, return the number of character
> written. Otherwise frontends able to recover and resume
> writes re-write the partial chars already written.
>
> Cc: [email protected]
> Suggested-by: Alex Bennée <[email protected]>
> Signed-off-by: Philippe Mathieu-Daudé <[email protected]>
> ---
>  chardev/char.c | 5 +++++
>  1 file changed, 5 insertions(+)
>
> diff --git a/chardev/char.c b/chardev/char.c
> index 105b0d53184..7931f4e0832 100644
> --- a/chardev/char.c
> +++ b/chardev/char.c
> @@ -186,6 +186,11 @@ int qemu_chr_write(Chardev *s, const uint8_t *buf,
> int len, bool write_all)
>
>      res = qemu_chr_write_buffer(s, buf, len, &offset, write_all);
>
> +    if (!write_all && res < 0 && offset == 0) {
> +        /* Allow partial writes */
> +        return res;
> +    }
> +
>

I don't understand this, as below it has:
    if (res < 0) {
        return res;
    }

Is it just the final return value that should be changed? "offset &&
!write_all ? offset : res" ?

     if (qemu_chr_replay(s) && replay_mode == REPLAY_MODE_RECORD) {
>          replay_char_write_event_save(res, offset);
>      }
> --
> 2.51.0
>
>

Reply via email to