a7b9285
From 4f88dd44aa288f1ded954850a9a222f4ecdf00b8 Mon Sep 17 00:00:00 2001
Alon Levy 408bdb5
From: Paolo Bonzini <pbonzini@redhat.com>
Alon Levy 408bdb5
Date: Fri, 22 Feb 2013 17:36:36 +0100
a7b9285
Subject: [PATCH] migration: merge qemu_popen_cmd with qemu_popen
Alon Levy 408bdb5
Alon Levy 408bdb5
There is no reason for outgoing exec migration to do popen manually
Alon Levy 408bdb5
anymore (the reason used to be that we needed the FILE* to make it
Alon Levy 408bdb5
non-blocking).  Use qemu_popen_cmd.
Alon Levy 408bdb5
Alon Levy 408bdb5
Reviewed-by: Orit Wasserman <owasserm@redhat.com>
Alon Levy 408bdb5
Reviewed-by: Juan Quintela <quintela@redhat.com>
Alon Levy 408bdb5
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Alon Levy 408bdb5
Signed-off-by: Juan Quintela <quintela@redhat.com>
a7b9285
(cherry picked from commit 817b9ed5eb300dbb434d752da416441028539a96)
Alon Levy 408bdb5
---
Alon Levy 408bdb5
 include/migration/qemu-file.h |  1 -
Alon Levy 408bdb5
 migration-exec.c              | 10 ++++------
Alon Levy 408bdb5
 savevm.c                      | 22 ++++++++--------------
Alon Levy 408bdb5
 3 files changed, 12 insertions(+), 21 deletions(-)
Alon Levy 408bdb5
Alon Levy 408bdb5
diff --git a/include/migration/qemu-file.h b/include/migration/qemu-file.h
Alon Levy 408bdb5
index 46fc11d..987e719 100644
Alon Levy 408bdb5
--- a/include/migration/qemu-file.h
Alon Levy 408bdb5
+++ b/include/migration/qemu-file.h
Alon Levy 408bdb5
@@ -77,7 +77,6 @@ QEMUFile *qemu_fopen_ops(void *opaque, const QEMUFileOps *ops);
Alon Levy 408bdb5
 QEMUFile *qemu_fopen(const char *filename, const char *mode);
Alon Levy 408bdb5
 QEMUFile *qemu_fdopen(int fd, const char *mode);
Alon Levy 408bdb5
 QEMUFile *qemu_fopen_socket(int fd);
Alon Levy 408bdb5
-QEMUFile *qemu_popen(FILE *popen_file, const char *mode);
Alon Levy 408bdb5
 QEMUFile *qemu_popen_cmd(const char *command, const char *mode);
Alon Levy 408bdb5
 int qemu_get_fd(QEMUFile *f);
Alon Levy 408bdb5
 int qemu_fclose(QEMUFile *f);
Alon Levy 408bdb5
diff --git a/migration-exec.c b/migration-exec.c
Alon Levy 408bdb5
index a051a6e..5dc7313 100644
Alon Levy 408bdb5
--- a/migration-exec.c
Alon Levy 408bdb5
+++ b/migration-exec.c
Alon Levy 408bdb5
@@ -59,19 +59,17 @@ static int exec_close(MigrationState *s)
Alon Levy 408bdb5
 
Alon Levy 408bdb5
 void exec_start_outgoing_migration(MigrationState *s, const char *command, Error **errp)
Alon Levy 408bdb5
 {
Alon Levy 408bdb5
-    FILE *f;
Alon Levy 408bdb5
-
Alon Levy 408bdb5
-    f = popen(command, "w");
Alon Levy 408bdb5
+    QEMUFile *f;
Alon Levy 408bdb5
+    f = qemu_popen_cmd(command, "w");
Alon Levy 408bdb5
     if (f == NULL) {
Alon Levy 408bdb5
         error_setg_errno(errp, errno, "failed to popen the migration target");
Alon Levy 408bdb5
         return;
Alon Levy 408bdb5
     }
Alon Levy 408bdb5
 
Alon Levy 408bdb5
-    s->fd = fileno(f);
Alon Levy 408bdb5
+    s->opaque = f;
Alon Levy 408bdb5
+    s->fd = qemu_get_fd(f);
Alon Levy 408bdb5
     assert(s->fd != -1);
Alon Levy 408bdb5
 
Alon Levy 408bdb5
-    s->opaque = qemu_popen(f, "w");
Alon Levy 408bdb5
-
Alon Levy 408bdb5
     s->close = exec_close;
Alon Levy 408bdb5
     s->get_error = file_errno;
Alon Levy 408bdb5
     s->write = file_write;
Alon Levy 408bdb5
diff --git a/savevm.c b/savevm.c
Alon Levy 408bdb5
index fef2ab9..38699de 100644
Alon Levy 408bdb5
--- a/savevm.c
Alon Levy 408bdb5
+++ b/savevm.c
Alon Levy 408bdb5
@@ -275,11 +275,17 @@ static const QEMUFileOps stdio_pipe_write_ops = {
Alon Levy 408bdb5
     .close =      stdio_pclose
Alon Levy 408bdb5
 };
Alon Levy 408bdb5
 
Alon Levy 408bdb5
-QEMUFile *qemu_popen(FILE *stdio_file, const char *mode)
Alon Levy 408bdb5
+QEMUFile *qemu_popen_cmd(const char *command, const char *mode)
Alon Levy 408bdb5
 {
Alon Levy 408bdb5
+    FILE *stdio_file;
Alon Levy 408bdb5
     QEMUFileStdio *s;
Alon Levy 408bdb5
 
Alon Levy 408bdb5
-    if (stdio_file == NULL || mode == NULL || (mode[0] != 'r' && mode[0] != 'w') || mode[1] != 0) {
Alon Levy 408bdb5
+    stdio_file = popen(command, mode);
Alon Levy 408bdb5
+    if (stdio_file == NULL) {
Alon Levy 408bdb5
+        return NULL;
Alon Levy 408bdb5
+    }
Alon Levy 408bdb5
+
Alon Levy 408bdb5
+    if (mode == NULL || (mode[0] != 'r' && mode[0] != 'w') || mode[1] != 0) {
Alon Levy 408bdb5
         fprintf(stderr, "qemu_popen: Argument validity check failed\n");
Alon Levy 408bdb5
         return NULL;
Alon Levy 408bdb5
     }
Alon Levy 408bdb5
@@ -296,18 +302,6 @@ QEMUFile *qemu_popen(FILE *stdio_file, const char *mode)
Alon Levy 408bdb5
     return s->file;
Alon Levy 408bdb5
 }
Alon Levy 408bdb5
 
Alon Levy 408bdb5
-QEMUFile *qemu_popen_cmd(const char *command, const char *mode)
Alon Levy 408bdb5
-{
Alon Levy 408bdb5
-    FILE *popen_file;
Alon Levy 408bdb5
-
Alon Levy 408bdb5
-    popen_file = popen(command, mode);
Alon Levy 408bdb5
-    if(popen_file == NULL) {
Alon Levy 408bdb5
-        return NULL;
Alon Levy 408bdb5
-    }
Alon Levy 408bdb5
-
Alon Levy 408bdb5
-    return qemu_popen(popen_file, mode);
Alon Levy 408bdb5
-}
Alon Levy 408bdb5
-
Alon Levy 408bdb5
 static const QEMUFileOps stdio_file_read_ops = {
Alon Levy 408bdb5
     .get_fd =     stdio_get_fd,
Alon Levy 408bdb5
     .get_buffer = stdio_get_buffer,