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; + } + if (qemu_chr_replay(s) && replay_mode == REPLAY_MODE_RECORD) { replay_char_write_event_save(res, offset); } -- 2.51.0
