mkfs-opts: Add optional "features" parameter.
[libguestfs.git] / src / launch.c
index e5bca56..a7a86b9 100644 (file)
@@ -34,6 +34,7 @@
 #include <sys/select.h>
 #include <dirent.h>
 #include <signal.h>
+#include <assert.h>
 
 #include <rpc/types.h>
 #include <rpc/xdr.h>
@@ -101,6 +102,49 @@ add_cmdline (guestfs_h *g, const char *str)
 }
 
 int
+guestfs___checkpoint_cmdline (guestfs_h *g)
+{
+  return g->cmdline_size;
+}
+
+void
+guestfs___rollback_cmdline (guestfs_h *g, int pos)
+{
+  int i;
+
+  assert (g->cmdline_size >= pos);
+
+  for (i = g->cmdline_size - 1; i >= pos; --i)
+    free (g->cmdline[i]);
+
+  g->cmdline_size = pos;
+}
+
+/* Internal command to return the command line. */
+char **
+guestfs__debug_cmdline (guestfs_h *g)
+{
+  int i;
+  char **r;
+
+  if (g->cmdline == NULL) {
+    r = safe_malloc (g, sizeof (char *) * 1);
+    r[0] = NULL;
+    return r;
+  }
+
+  r = safe_malloc (g, sizeof (char *) * (g->cmdline_size + 1));
+  r[0] = safe_strdup (g, g->qemu); /* g->cmdline[0] is always NULL */
+
+  for (i = 1; i < g->cmdline_size; ++i)
+    r[i] = safe_strdup (g, g->cmdline[i]);
+
+  r[g->cmdline_size] = NULL;
+
+  return r;                     /* caller frees */
+}
+
+int
 guestfs__config (guestfs_h *g,
                  const char *qemu_param, const char *qemu_value)
 {
@@ -308,7 +352,6 @@ guestfs__launch (guestfs_h *g)
 {
   int r;
   int wfd[2], rfd[2];
-  int tries;
   char unixsock[256];
   struct sockaddr_un addr;
 
@@ -727,6 +770,7 @@ guestfs__launch (guestfs_h *g)
 
 /* Return the location of the tmpdir (eg. "/tmp") and allow users
  * to override it at runtime using $TMPDIR.
+ * http://www.pathname.com/fhs/pub/fhs-2.3.html#TMPTEMPORARYFILES
  */
 const char *
 guestfs_tmpdir (void)
@@ -745,6 +789,23 @@ guestfs_tmpdir (void)
   return tmpdir;
 }
 
+/* Return the location of the persistent tmpdir (eg. "/var/tmp") and
+ * allow users to override it at runtime using $TMPDIR.
+ * http://www.pathname.com/fhs/pub/fhs-2.3.html#VARTMPTEMPORARYFILESPRESERVEDBETWEE
+ */
+const char *
+guestfs___persistent_tmpdir (void)
+{
+  const char *tmpdir;
+
+  tmpdir = "/var/tmp";
+
+  const char *t = getenv ("TMPDIR");
+  if (t) tmpdir = t;
+
+  return tmpdir;
+}
+
 /* Compute Y - X and return the result in milliseconds.
  * Approximately the same as this code:
  * http://www.mpp.mpg.de/~huber/util/timevaldiff.c