Commit 61420f1415 for qemu.org
commit 61420f141562810d542bdb90f20a2b1371ddbf6a
Author: Marc-André Lureau <marcandre.lureau@redhat.com>
Date: Thu Feb 19 22:18:01 2026 +0100
ui/console-vc: extract vt100_input() from vc_chr_write()
Move the VT100 input processing logic out of vc_chr_write() into a new
vt100_input() function that operates on QemuVT100 directly, rather than
going through the Chardev/VCChardev layers. This continues the effort
to decouple the VT100 emulation from the chardev backend, making the
VT100 layer self-contained and reusable.
vc_chr_write() becomes a thin wrapper that extracts the QemuVT100 from
the chardev and delegates to vt100_input().
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
diff --git a/ui/console-vc.c b/ui/console-vc.c
index cf1adfc3c7..024ab277e0 100644
--- a/ui/console-vc.c
+++ b/ui/console-vc.c
@@ -1059,29 +1059,35 @@ static void vt100_putchar(QemuVT100 *vt, int ch)
DECLARE_INSTANCE_CHECKER(VCChardev, VC_CHARDEV,
TYPE_CHARDEV_VC)
-static int vc_chr_write(Chardev *chr, const uint8_t *buf, int len)
+static size_t vt100_input(QemuVT100 *vt, const uint8_t *buf, size_t len)
{
- VCChardev *drv = VC_CHARDEV(chr);
- QemuTextConsole *s = drv->console;
int i;
- s->vt.update_x0 = s->vt.width * FONT_WIDTH;
- s->vt.update_y0 = s->vt.height * FONT_HEIGHT;
- s->vt.update_x1 = 0;
- s->vt.update_y1 = 0;
- vt100_show_cursor(&s->vt, 0);
+ vt->update_x0 = vt->width * FONT_WIDTH;
+ vt->update_y0 = vt->height * FONT_HEIGHT;
+ vt->update_x1 = 0;
+ vt->update_y1 = 0;
+ vt100_show_cursor(vt, 0);
for(i = 0; i < len; i++) {
- vt100_putchar(&s->vt, buf[i]);
+ vt100_putchar(vt, buf[i]);
}
- vt100_show_cursor(&s->vt, 1);
- if (s->vt.update_x0 < s->vt.update_x1) {
- vt100_image_update(&s->vt, s->vt.update_x0, s->vt.update_y0,
- s->vt.update_x1 - s->vt.update_x0,
- s->vt.update_y1 - s->vt.update_y0);
+ vt100_show_cursor(vt, 1);
+ if (vt->update_x0 < vt->update_x1) {
+ vt100_image_update(vt, vt->update_x0, vt->update_y0,
+ vt->update_x1 - vt->update_x0,
+ vt->update_y1 - vt->update_y0);
}
return len;
}
+static int vc_chr_write(Chardev *chr, const uint8_t *buf, int len)
+{
+ VCChardev *drv = VC_CHARDEV(chr);
+ QemuTextConsole *s = drv->console;
+
+ return vt100_input(&s->vt, buf, len);
+}
+
void vt100_update_cursor(void)
{
QemuVT100 *vt;