qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v8 04/21] qtest: add qtest_server_send abstraction


From: Darren Kenny
Subject: Re: [PATCH v8 04/21] qtest: add qtest_server_send abstraction
Date: Wed, 5 Feb 2020 11:30:43 +0000
User-agent: NeoMutt/20180716

On Wed, Jan 29, 2020 at 05:34:14AM +0000, Bulekov, Alexander wrote:
qtest_server_send is a function pointer specifying the handler used to
transmit data to the qtest client. In the standard configuration, this
calls the CharBackend handler, but now it is possible for other types of
handlers, e.g direct-function calls if the qtest client and server
exist within the same process (inproc)

Signed-off-by: Alexander Bulekov <address@hidden>
Reviewed-by: Stefan Hajnoczi <address@hidden>

Reviewed-by: Darren Kenny <address@hidden>

Acked-by: Thomas Huth <address@hidden>
---
include/sysemu/qtest.h |  3 +++
qtest.c                | 18 ++++++++++++++++--
2 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/include/sysemu/qtest.h b/include/sysemu/qtest.h
index 5ed09c80b1..e2f1047fd7 100644
--- a/include/sysemu/qtest.h
+++ b/include/sysemu/qtest.h
@@ -26,4 +26,7 @@ bool qtest_driver(void);

void qtest_server_init(const char *qtest_chrdev, const char *qtest_log, Error 
**errp);

+void qtest_server_set_send_handler(void (*send)(void *, const char *),
+                                 void *opaque);
+
#endif
diff --git a/qtest.c b/qtest.c
index 12432f99cf..938c3746d6 100644
--- a/qtest.c
+++ b/qtest.c
@@ -42,6 +42,8 @@ static GString *inbuf;
static int irq_levels[MAX_IRQ];
static qemu_timeval start_time;
static bool qtest_opened;
+static void (*qtest_server_send)(void*, const char*);
+static void *qtest_server_send_opaque;

#define FMT_timeval "%ld.%06ld"

@@ -228,8 +230,10 @@ static void GCC_FMT_ATTR(1, 2) qtest_log_send(const char 
*fmt, ...)
    va_end(ap);
}

-static void do_qtest_send(CharBackend *chr, const char *str, size_t len)
+static void qtest_server_char_be_send(void *opaque, const char *str)
{
+    size_t len = strlen(str);
+    CharBackend* chr = (CharBackend *)opaque;
    qemu_chr_fe_write_all(chr, (uint8_t *)str, len);
    if (qtest_log_fp && qtest_opened) {
        fprintf(qtest_log_fp, "%s", str);
@@ -238,7 +242,7 @@ static void do_qtest_send(CharBackend *chr, const char 
*str, size_t len)

static void qtest_send(CharBackend *chr, const char *str)
{
-    do_qtest_send(chr, str, strlen(str));
+    qtest_server_send(qtest_server_send_opaque, str);
}

static void GCC_FMT_ATTR(2, 3) qtest_sendf(CharBackend *chr,
@@ -783,6 +787,16 @@ void qtest_server_init(const char *qtest_chrdev, const 
char *qtest_log, Error **
    qemu_chr_fe_set_echo(&qtest_chr, true);

    inbuf = g_string_new("");
+
+    if (!qtest_server_send) {
+        qtest_server_set_send_handler(qtest_server_char_be_send, &qtest_chr);
+    }
+}
+
+void qtest_server_set_send_handler(void (*send)(void*, const char*), void 
*opaque)
+{
+    qtest_server_send = send;
+    qtest_server_send_opaque = opaque;
}

bool qtest_driver(void)
--
2.23.0





reply via email to

[Prev in Thread] Current Thread [Next in Thread]