1
0
mirror of https://git.yoctoproject.org/poky synced 2026-05-31 00:39:46 +00:00

qemu_2.11.1.bb: support mingw build

The patch chardev-connect-socket-to-a-spawned-command.patch calls
"socketpair". This function is missing in mingw, so the patch
needs to be modified accordingly (by conditional compilation using
_WIN32 macro where appropriate), otherwise we end up with a broken
mingw build.

While it is possible to simply remove the whole patch for mingw build
(via a .bbappend file in meta-mingw), it makes more sense to modify
the patch itself.

(From OE-Core rev: 2d955bb53a8ee36c0a648c23293139612f33f97b)

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Juro Bystricky
2018-04-13 11:11:03 -07:00
committed by Richard Purdie
parent 6eaf321296
commit 2a3e8ad0b9
@@ -54,10 +54,11 @@ diff --git a/chardev/char-socket.c b/chardev/char-socket.c
index 53eda8ef00..f566107c35 100644 index 53eda8ef00..f566107c35 100644
--- a/chardev/char-socket.c --- a/chardev/char-socket.c
+++ b/chardev/char-socket.c +++ b/chardev/char-socket.c
@@ -852,6 +852,66 @@ static gboolean socket_reconnect_timeout(gpointer opaque) @@ -852,6 +852,68 @@ static gboolean socket_reconnect_timeout(gpointer opaque)
return false; return false;
} }
+#ifndef _WIN32
+static void chardev_open_socket_cmd(Chardev *chr, +static void chardev_open_socket_cmd(Chardev *chr,
+ const char *cmd, + const char *cmd,
+ Error **errp) + Error **errp)
@@ -117,42 +118,49 @@ index 53eda8ef00..f566107c35 100644
+ object_unref(OBJECT(sioc)); + object_unref(OBJECT(sioc));
+ } + }
+} +}
+#endif
+ +
static void qmp_chardev_open_socket(Chardev *chr, static void qmp_chardev_open_socket(Chardev *chr,
ChardevBackend *backend, ChardevBackend *backend,
bool *be_opened, bool *be_opened,
@@ -859,6 +919,7 @@ static void qmp_chardev_open_socket(Chardev *chr, @@ -859,6 +921,9 @@
{ {
SocketChardev *s = SOCKET_CHARDEV(chr); SocketChardev *s = SOCKET_CHARDEV(chr);
ChardevSocket *sock = backend->u.socket.data; ChardevSocket *sock = backend->u.socket.data;
+#ifndef _WIN32
+ const char *cmd = sock->cmd; + const char *cmd = sock->cmd;
+#endif
bool do_nodelay = sock->has_nodelay ? sock->nodelay : false; bool do_nodelay = sock->has_nodelay ? sock->nodelay : false;
bool is_listen = sock->has_server ? sock->server : true; bool is_listen = sock->has_server ? sock->server : true;
bool is_telnet = sock->has_telnet ? sock->telnet : false; bool is_telnet = sock->has_telnet ? sock->telnet : false;
@@ -926,7 +987,12 @@ static void qmp_chardev_open_socket(Chardev *chr, @@ -925,7 +990,14 @@
} else if (reconnect > 0) {
s->reconnect_time = reconnect; s->reconnect_time = reconnect;
} }
-
- if (s->reconnect_time) { +#ifndef _WIN32
+ if (cmd) { + if (cmd) {
+ chardev_open_socket_cmd(chr, cmd, errp); + chardev_open_socket_cmd(chr, cmd, errp);
+ +
+ /* everything ready (or failed permanently) before we return */ + /* everything ready (or failed permanently) before we return */
+ *be_opened = true; + *be_opened = true;
+ } else if (s->reconnect_time) { + } else
+#endif
if (s->reconnect_time) {
sioc = qio_channel_socket_new(); sioc = qio_channel_socket_new();
tcp_chr_set_client_ioc_name(chr, sioc); tcp_chr_set_client_ioc_name(chr, sioc);
qio_channel_socket_connect_async(sioc, s->addr, @@ -985,10 +1057,26 @@
@@ -985,11 +1051,22 @@ static void qemu_chr_parse_socket(QemuOpts *opts, ChardevBackend *backend,
const char *host = qemu_opt_get(opts, "host"); const char *host = qemu_opt_get(opts, "host");
const char *port = qemu_opt_get(opts, "port"); const char *port = qemu_opt_get(opts, "port");
const char *tls_creds = qemu_opt_get(opts, "tls-creds"); const char *tls_creds = qemu_opt_get(opts, "tls-creds");
+#ifndef _WIN32
+ const char *cmd = qemu_opt_get(opts, "cmd"); + const char *cmd = qemu_opt_get(opts, "cmd");
+#endif
SocketAddressLegacy *addr; SocketAddressLegacy *addr;
ChardevSocket *sock; ChardevSocket *sock;
backend->type = CHARDEV_BACKEND_KIND_SOCKET; backend->type = CHARDEV_BACKEND_KIND_SOCKET;
- if (!path) { +#ifndef _WIN32
+ if (cmd) { + if (cmd) {
+ /* + /*
+ * Here we have to ensure that no options are set which are incompatible with + * Here we have to ensure that no options are set which are incompatible with
@@ -163,24 +171,33 @@ index 53eda8ef00..f566107c35 100644
+ error_setg(errp, "chardev: socket: cmd does not support any additional options"); + error_setg(errp, "chardev: socket: cmd does not support any additional options");
+ return; + return;
+ } + }
+ } else if (!path) { + } else
+#endif
if (!path) {
if (!host) { if (!host) {
error_setg(errp, "chardev: socket: no host given"); error_setg(errp, "chardev: socket: no host given");
return; @@ -1021,13 +1109,24 @@
@@ -1021,13 +1098,14 @@ static void qemu_chr_parse_socket(QemuOpts *opts, ChardevBackend *backend,
sock->has_reconnect = true; sock->has_reconnect = true;
sock->reconnect = reconnect; sock->reconnect = reconnect;
sock->tls_creds = g_strdup(tls_creds); sock->tls_creds = g_strdup(tls_creds);
+#ifndef _WIN32
+ sock->cmd = g_strdup(cmd); + sock->cmd = g_strdup(cmd);
+#endif
addr = g_new0(SocketAddressLegacy, 1); addr = g_new0(SocketAddressLegacy, 1);
- if (path) { +#ifndef _WIN32
+ if (path || cmd) { + if (path || cmd) {
+#else
if (path) {
+#endif
UnixSocketAddress *q_unix; UnixSocketAddress *q_unix;
addr->type = SOCKET_ADDRESS_LEGACY_KIND_UNIX; addr->type = SOCKET_ADDRESS_LEGACY_KIND_UNIX;
q_unix = addr->u.q_unix.data = g_new0(UnixSocketAddress, 1); q_unix = addr->u.q_unix.data = g_new0(UnixSocketAddress, 1);
- q_unix->path = g_strdup(path); +#ifndef _WIN32
+ q_unix->path = cmd ? g_strdup_printf("cmd:%s", cmd) : g_strdup(path); + q_unix->path = cmd ? g_strdup_printf("cmd:%s", cmd) : g_strdup(path);
+#else
q_unix->path = g_strdup(path);
+#endif
} else { } else {
addr->type = SOCKET_ADDRESS_LEGACY_KIND_INET; addr->type = SOCKET_ADDRESS_LEGACY_KIND_INET;
addr->u.inet.data = g_new(InetSocketAddress, 1); addr->u.inet.data = g_new(InetSocketAddress, 1);
@@ -223,4 +240,3 @@ index ae19dcd1ed..6de0f29bcd 100644
'*wait' : 'bool', '*wait' : 'bool',
-- --
2.14.1 2.14.1