[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v5 04/20] qtest: add qtest_server_send abstraction
From: |
Oleinik, Alexander |
Subject: |
[PATCH v5 04/20] qtest: add qtest_server_send abstraction |
Date: |
Wed, 13 Nov 2019 22:50:44 +0000 |
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>
---
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 8b50e2783e..58d7e2a6fb 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
- [PATCH v5 20/20] fuzz: add documentation to docs/devel/, (continued)
- [PATCH v5 20/20] fuzz: add documentation to docs/devel/, Oleinik, Alexander, 2019/11/13
- [PATCH v5 08/20] tests: provide test variables to other targets, Oleinik, Alexander, 2019/11/13
- [PATCH v5 11/20] libqtest: make bufwrite rely on the TransportOps, Oleinik, Alexander, 2019/11/13
- [PATCH v5 14/20] fuzz: Add target/fuzz makefile rules, Oleinik, Alexander, 2019/11/13
- [PATCH v5 10/20] libqos: move useful qos-test funcs to qos_external, Oleinik, Alexander, 2019/11/13
- [PATCH v5 18/20] fuzz: add i440fx fuzz targets, Oleinik, Alexander, 2019/11/13
- [PATCH v5 17/20] fuzz: add support for qos-assisted fuzz targets, Oleinik, Alexander, 2019/11/13
- [PATCH v5 19/20] fuzz: add virtio-net fuzz target, Oleinik, Alexander, 2019/11/13
- [PATCH v5 07/20] qtest: add in-process incoming command handler, Oleinik, Alexander, 2019/11/13
- [PATCH v5 02/20] libqos: Rename i2c_send and i2c_recv, Oleinik, Alexander, 2019/11/13
- [PATCH v5 04/20] qtest: add qtest_server_send abstraction,
Oleinik, Alexander <=
- [PATCH v5 12/20] libqtest: add in-process qtest.c tx/rx handlers, Oleinik, Alexander, 2019/11/13
- [PATCH v5 16/20] fuzz: add support for fork-based fuzzing., Oleinik, Alexander, 2019/11/13
- Re: [PATCH v5 00/20] Add virtual device fuzzing support, Darren Kenny, 2019/11/14