[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[Libguestfs] [PATCH 1/2] New internal function guestfs___print_timestamped_argv



This function generalises the existing print_cmdline used to output the qemu
command line to output any given command line, and exports it to other modules.
It also adds a timestamp to the old print_cmdline output for consistency with
guestfs___print_timestamped_message.
---
 src/guestfs-internal.h |    1 +
 src/launch.c           |   48 ++++++++++++++++++++++++------------------------
 2 files changed, 25 insertions(+), 24 deletions(-)

diff --git a/src/guestfs-internal.h b/src/guestfs-internal.h
index 212006d..3d9c7c6 100644
--- a/src/guestfs-internal.h
+++ b/src/guestfs-internal.h
@@ -200,6 +200,7 @@ extern void *guestfs_safe_realloc (guestfs_h *g, void *ptr, int nbytes);
 extern char *guestfs_safe_strdup (guestfs_h *g, const char *str);
 extern char *guestfs_safe_strndup (guestfs_h *g, const char *str, size_t n);
 extern void *guestfs_safe_memdup (guestfs_h *g, void *ptr, size_t size);
+extern void guestfs___print_timestamped_argv (guestfs_h *g, const char *argv[]);
 extern void guestfs___print_timestamped_message (guestfs_h *g, const char *fs, ...);
 extern void guestfs___free_inspect_info (guestfs_h *g);
 extern int guestfs___set_busy (guestfs_h *g);
diff --git a/src/launch.c b/src/launch.c
index f9d8329..9a7d484 100644
--- a/src/launch.c
+++ b/src/launch.c
@@ -222,7 +222,6 @@ guestfs__add_cdrom (guestfs_h *g, const char *filename)
 }
 
 static int is_openable (guestfs_h *g, const char *path, int flags);
-static void print_cmdline (guestfs_h *g);
 
 int
 guestfs__launch (guestfs_h *g)
@@ -466,7 +465,7 @@ guestfs__launch (guestfs_h *g)
     g->cmdline[g->cmdline_size-1] = NULL;
 
     if (g->verbose)
-      print_cmdline (g);
+      guestfs___print_timestamped_argv (g, (const char **)g->cmdline);
 
     if (!g->direct) {
       /* Set up stdin, stdout. */
@@ -666,26 +665,41 @@ guestfs_tmpdir (void)
   return tmpdir;
 }
 
-/* This function is used to print the qemu command line before it gets
- * executed, when in verbose mode.
+/* Compute Y - X and return the result in milliseconds.
+ * Approximately the same as this code:
+ * http://www.mpp.mpg.de/~huber/util/timevaldiff.c
  */
-static void
-print_cmdline (guestfs_h *g)
+static int64_t
+timeval_diff (const struct timeval *x, const struct timeval *y)
+{
+  int64_t msec;
+
+  msec = (y->tv_sec - x->tv_sec) * 1000;
+  msec += (y->tv_usec - x->tv_usec) / 1000;
+  return msec;
+}
+
+void
+guestfs___print_timestamped_argv (guestfs_h *g, const char * argv[])
 {
   int i = 0;
   int needs_quote;
 
-  while (g->cmdline[i]) {
-    if (g->cmdline[i][0] == '-') /* -option starts a new line */
+  struct timeval tv;
+  gettimeofday (&tv, NULL);
+  fprintf (stderr, "[%05" PRIi64 "ms] ", timeval_diff (&g->launch_t, &tv));
+
+  while (argv[i]) {
+    if (argv[i][0] == '-') /* -option starts a new line */
       fprintf (stderr, " \\\n   ");
 
     if (i > 0) fputc (' ', stderr);
 
     /* Does it need shell quoting?  This only deals with simple cases. */
-    needs_quote = strcspn (g->cmdline[i], " ") != strlen (g->cmdline[i]);
+    needs_quote = strcspn (argv[i], " ") != strlen (argv[i]);
 
     if (needs_quote) fputc ('\'', stderr);
-    fprintf (stderr, "%s", g->cmdline[i]);
+    fprintf (stderr, "%s", argv[i]);
     if (needs_quote) fputc ('\'', stderr);
     i++;
   }
@@ -693,20 +707,6 @@ print_cmdline (guestfs_h *g)
   fputc ('\n', stderr);
 }
 
-/* Compute Y - X and return the result in milliseconds.
- * Approximately the same as this code:
- * http://www.mpp.mpg.de/~huber/util/timevaldiff.c
- */
-static int64_t
-timeval_diff (const struct timeval *x, const struct timeval *y)
-{
-  int64_t msec;
-
-  msec = (y->tv_sec - x->tv_sec) * 1000;
-  msec += (y->tv_usec - x->tv_usec) / 1000;
-  return msec;
-}
-
 void
 guestfs___print_timestamped_message (guestfs_h *g, const char *fs, ...)
 {

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]