X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=src%2Fguestfs.c;h=027e08c9237e222db458d5bbae2c71d2fce677cc;hb=72324580801f2c0e2b702b430b90eb141618c7f4;hp=d68f12b92286ee07a321f3c31bb2b88bf6d23217;hpb=8a9f2ca65521d093ac14307aca4370d9497ac840;p=libguestfs.git diff --git a/src/guestfs.c b/src/guestfs.c index d68f12b..027e08c 100644 --- a/src/guestfs.c +++ b/src/guestfs.c @@ -128,9 +128,9 @@ static int qemu_supports (guestfs_h *g, const char *option); * typical Linux configurations of libguestfs, guestfwd is not * actually used any more. */ -#define NETWORK "10.0.2.0/8" -#define ROUTER "10.0.2.2" -#define GUESTFWD_ADDR "10.0.2.4" +#define NETWORK "169.254.0.0/16" +#define ROUTER "169.254.2.2" +#define GUESTFWD_ADDR "169.254.2.4" #define GUESTFWD_PORT "6666" /* GuestFS handle and connection. */ @@ -948,9 +948,21 @@ guestfs__launch (guestfs_h *g) char unixsock[256]; struct sockaddr_un addr; + /* Configured? */ + if (!g->cmdline) { + error (g, _("you must call guestfs_add_drive before guestfs_launch")); + return -1; + } + + if (g->state != CONFIG) { + error (g, _("the libguestfs handle has already been launched")); + return -1; + } + /* Start the clock ... */ gettimeofday (&g->launch_t, NULL); + /* Make the temporary directory. */ #ifdef P_tmpdir tmpdir = P_tmpdir; #else @@ -960,18 +972,6 @@ guestfs__launch (guestfs_h *g) tmpdir = getenv ("TMPDIR") ? : tmpdir; snprintf (dir_template, sizeof dir_template, "%s/libguestfsXXXXXX", tmpdir); - /* Configured? */ - if (!g->cmdline) { - error (g, _("you must call guestfs_add_drive before guestfs_launch")); - return -1; - } - - if (g->state != CONFIG) { - error (g, _("qemu has already been launched")); - return -1; - } - - /* Make the temporary directory. */ if (!g->tmpdir) { g->tmpdir = safe_strdup (g, dir_template); if (mkdtemp (g->tmpdir) == NULL) { @@ -2038,7 +2038,7 @@ child_cleanup (guestfs_h *g) } static int -read_log_message_or_eof (guestfs_h *g, int fd) +read_log_message_or_eof (guestfs_h *g, int fd, int error_if_eof) { char buf[BUFSIZ]; int n; @@ -2059,6 +2059,13 @@ read_log_message_or_eof (guestfs_h *g, int fd) if (n == 0) { /* Hopefully this indicates the qemu child process has died. */ child_cleanup (g); + + if (error_if_eof) { + /* We weren't expecting eof here (called from launch) so place + * something in the error buffer. RHBZ#588851. + */ + error (g, "child process died unexpectedly"); + } return -1; } @@ -2166,7 +2173,7 @@ send_to_daemon (guestfs_h *g, const void *v_buf, size_t n) } if (FD_ISSET (g->fd[1], &rset2)) { - if (read_log_message_or_eof (g, g->fd[1]) == -1) + if (read_log_message_or_eof (g, g->fd[1], 0) == -1) return -1; } if (FD_ISSET (g->sock, &rset2)) { @@ -2249,7 +2256,7 @@ recv_from_daemon (guestfs_h *g, uint32_t *size_rtn, void **buf_rtn) } if (FD_ISSET (g->fd[1], &rset2)) { - if (read_log_message_or_eof (g, g->fd[1]) == -1) { + if (read_log_message_or_eof (g, g->fd[1], 0) == -1) { free (*buf_rtn); *buf_rtn = NULL; return -1; @@ -2404,7 +2411,7 @@ accept_from_daemon (guestfs_h *g) } if (FD_ISSET (g->fd[1], &rset2)) { - if (read_log_message_or_eof (g, g->fd[1]) == -1) + if (read_log_message_or_eof (g, g->fd[1], 1) == -1) return -1; } if (FD_ISSET (g->sock, &rset2)) {