From: "John Berberian, Jr" <jeb.study@gmail.com>
To: qemu-devel@nongnu.org
Cc: Stefan Weil <sw@weilnetz.de>,
"John Berberian, Jr" <jeb.study@gmail.com>,
Juan Quintela <quintela@redhat.com>,
"Dr. David Alan Gilbert" <dgilbert@redhat.com>
Subject: [PATCH v2] Fix exec migration on Windows (w32+w64).
Date: Sun, 15 Jan 2023 20:34:21 -0500 [thread overview]
Message-ID: <20230116013421.3149183-1-jeb.study@gmail.com> (raw)
* Use cmd instead of /bin/sh on Windows.
* Try to auto-detect cmd.exe's path, but default to a hard-coded path.
Note that this will require that gspawn-win[32|64]-helper.exe and
gspawn-win[32|64]-helper-console.exe are included in the Windows binary
distributions (cc: Stefan Weil).
Signed-off-by: "John Berberian, Jr" <jeb.study@gmail.com>
---
Whoops, forgot a header. Here's a revised patch.
migration/exec.c | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/migration/exec.c b/migration/exec.c
index 375d2e1b54..38604d73a6 100644
--- a/migration/exec.c
+++ b/migration/exec.c
@@ -23,12 +23,31 @@
#include "migration.h"
#include "io/channel-command.h"
#include "trace.h"
+#include "qemu/cutils.h"
+#ifdef WIN32
+const char *exec_get_cmd_path(void);
+const char *exec_get_cmd_path(void)
+{
+ g_autofree char *detected_path = g_new(char, MAX_PATH);
+ if (GetSystemDirectoryA(detected_path, MAX_PATH) == 0) {
+ warn_report("Could not detect cmd.exe path, using default.");
+ return "C:\\Windows\\System32\\cmd.exe";
+ }
+ pstrcat(detected_path, MAX_PATH, "\\cmd.exe");
+ return g_steal_pointer(&detected_path);
+}
+#endif
void exec_start_outgoing_migration(MigrationState *s, const char *command, Error **errp)
{
QIOChannel *ioc;
+
+#ifdef WIN32
+ const char *argv[] = { exec_get_cmd_path(), "/c", command, NULL };
+#else
const char *argv[] = { "/bin/sh", "-c", command, NULL };
+#endif
trace_migration_exec_outgoing(command);
ioc = QIO_CHANNEL(qio_channel_command_new_spawn(argv,
@@ -55,7 +74,12 @@ static gboolean exec_accept_incoming_migration(QIOChannel *ioc,
void exec_start_incoming_migration(const char *command, Error **errp)
{
QIOChannel *ioc;
+
+#ifdef WIN32
+ const char *argv[] = { exec_get_cmd_path(), "/c", command, NULL };
+#else
const char *argv[] = { "/bin/sh", "-c", command, NULL };
+#endif
trace_migration_exec_incoming(command);
ioc = QIO_CHANNEL(qio_channel_command_new_spawn(argv,
--
2.39.0
next reply other threads:[~2023-01-16 1:35 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-16 1:34 John Berberian, Jr [this message]
2023-01-16 7:17 ` [PATCH v2] Fix exec migration on Windows (w32+w64) Marc-André Lureau
2023-01-16 9:22 ` Daniel P. Berrangé
2023-01-17 17:07 ` John Berberian, Jr
2023-01-31 4:50 ` John Berberian, Jr.
2023-01-31 10:01 ` Marc-André Lureau
2023-02-18 2:00 ` John Berberian, Jr
2023-02-28 11:11 ` Juan Quintela
2023-02-28 11:24 ` Daniel P. Berrangé
2023-02-28 11:35 ` Juan Quintela
2023-02-28 11:43 ` Daniel P. Berrangé
2023-02-28 12:51 ` Juan Quintela
2023-02-28 11:22 ` Daniel P. Berrangé
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230116013421.3149183-1-jeb.study@gmail.com \
--to=jeb.study@gmail.com \
--cc=dgilbert@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
--cc=sw@weilnetz.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.