launch: Add qemu_supports_re function.
authorRichard W.M. Jones <rjones@redhat.com>
Mon, 25 Jul 2011 10:12:48 +0000 (11:12 +0100)
committerRichard W.M. Jones <rjones@redhat.com>
Tue, 26 Jul 2011 11:48:49 +0000 (12:48 +0100)
This function is like qemu_supports, but allows us to grep
the help text using regular expressions.

Note the function is not used yet.

src/launch.c

index c89c69f..56aa288 100644 (file)
@@ -63,6 +63,7 @@
 #include <netinet/in.h>
 
 #include "c-ctype.h"
+#include "ignore-value.h"
 #include "glthread/lock.h"
 
 #include "guestfs.h"
@@ -75,6 +76,34 @@ static int64_t timeval_diff (const struct timeval *x, const struct timeval *y);
 static int connect_unix_socket (guestfs_h *g, const char *sock);
 static int qemu_supports (guestfs_h *g, const char *option);
 
+#if 0
+static int qemu_supports_re (guestfs_h *g, const pcre *option_regex);
+
+static void compile_regexps (void) __attribute__((constructor));
+static void free_regexps (void) __attribute__((destructor));
+
+static void
+compile_regexps (void)
+{
+  const char *err;
+  int offset;
+
+#define COMPILE(re,pattern,options)                                     \
+  do {                                                                  \
+    re = pcre_compile ((pattern), (options), &err, &offset, NULL);      \
+    if (re == NULL) {                                                   \
+      ignore_value (write (2, err, strlen (err)));                      \
+      abort ();                                                         \
+    }                                                                   \
+  } while (0)
+}
+
+static void
+free_regexps (void)
+{
+}
+#endif
+
 /* Add a string to the current command line. */
 static void
 incr_cmdline_size (guestfs_h *g)
@@ -1130,6 +1159,20 @@ qemu_supports (guestfs_h *g, const char *option)
   return strstr (g->qemu_help, option) != NULL;
 }
 
+#if 0
+/* As above but using a regex instead of a fixed string. */
+static int
+qemu_supports_re (guestfs_h *g, const pcre *option_regex)
+{
+  if (!g->qemu_help) {
+    if (test_qemu (g) == -1)
+      return -1;
+  }
+
+  return match (g, g->qemu_help, option_regex);
+}
+#endif
+
 /* Check if a file can be opened. */
 static int
 is_openable (guestfs_h *g, const char *path, int flags)