Add internal facility to checkpoint and roll back the command line.
authorRichard Jones <rjones@redhat.com>
Tue, 9 Nov 2010 18:50:57 +0000 (18:50 +0000)
committerRichard W.M. Jones <rjones@redhat.com>
Wed, 10 Nov 2010 10:52:12 +0000 (10:52 +0000)
This internal interface can be used to ensure that certain
operations are atomic.

src/guestfs-internal.h
src/launch.c

index 067251c..f8b3e94 100644 (file)
@@ -234,6 +234,8 @@ extern int guestfs___match2 (guestfs_h *g, const char *str, const pcre *re, char
 #endif
 extern int guestfs___feature_available (guestfs_h *g, const char *feature);
 extern void guestfs___free_string_list (char **);
+extern int guestfs___checkpoint_cmdline (guestfs_h *g);
+extern void guestfs___rollback_cmdline (guestfs_h *g, int pos);
 
 #define error(g,...) guestfs_error_errno((g),0,__VA_ARGS__)
 #define perrorf guestfs_perrorf
index e5bca56..48ddb8d 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,25 @@ 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;
+}
+
+int
 guestfs__config (guestfs_h *g,
                  const char *qemu_param, const char *qemu_value)
 {