Parses return values and returned errors properly.
[libguestfs.git] / src / guestfs.c
index 6de631f..47af20a 100644 (file)
@@ -497,7 +497,8 @@ guestfs_launch (guestfs_h *g)
              "console=ttyS0 guestfs=%s:%d", VMCHANNEL_ADDR, VMCHANNEL_PORT);
 
     add_cmdline (g, "-m");
-    add_cmdline (g, "384");    /* XXX Choose best size. */
+    add_cmdline (g, "384");      /* XXX Choose best size. */
+    add_cmdline (g, "-no-kqemu"); /* Avoids a warning. */
     add_cmdline (g, "-kernel");
     add_cmdline (g, (char *) kernel);
     add_cmdline (g, "-initrd");
@@ -1052,6 +1053,38 @@ dispatch (guestfs_h *g, int proc_nr, xdrproc_t xdrp, char *args)
   return -1;
 }
 
+/* Check the return message from a call for validity. */
+static int
+check_reply_header (guestfs_h *g,
+                   const struct guestfs_message_header *hdr,
+                   int proc_nr, int serial)
+{
+  if (hdr->prog != GUESTFS_PROGRAM) {
+    error (g, "wrong program (%d/%d)", hdr->prog, GUESTFS_PROGRAM);
+    return -1;
+  }
+  if (hdr->vers != GUESTFS_PROTOCOL_VERSION) {
+    error (g, "wrong protocol version (%d/%d)",
+          hdr->vers, GUESTFS_PROTOCOL_VERSION);
+    return -1;
+  }
+  if (hdr->direction != GUESTFS_DIRECTION_REPLY) {
+    error (g, "unexpected message direction (%d/%d)",
+          hdr->direction, GUESTFS_DIRECTION_REPLY);
+    return -1;
+  }
+  if (hdr->proc != proc_nr) {
+    error (g, "unexpected procedure number (%d/%d)", hdr->proc, proc_nr);
+    return -1;
+  }
+  if (hdr->serial != serial) {
+    error (g, "unexpected serial (%d/%d)", hdr->serial, serial);
+    return -1;
+  }
+
+  return 0;
+}
+
 /* The high-level actions are autogenerated by generator.ml.  Include
  * them here.
  */