+1 LGTM. Thanks Richard. On Fri, Sep 21, 2018 at 12:53 PM Richard W.M. Jones <rjo...@redhat.com> wrote:
> https://bugs.launchpad.net/qemu/+bug/1740364 > --- > lib/guestfs-internal.h | 3 +++ > lib/handle.c | 2 ++ > lib/info.c | 39 +++++++++++++++++++++++++++++++++++++++ > 3 files changed, 44 insertions(+) > > diff --git a/lib/guestfs-internal.h b/lib/guestfs-internal.h > index adeb9478a..c66c55e70 100644 > --- a/lib/guestfs-internal.h > +++ b/lib/guestfs-internal.h > @@ -510,6 +510,9 @@ struct guestfs_h { > /* Cached features. */ > struct cached_feature *features; > size_t nr_features; > + > + /* Used by lib/info.c. -1 = not tested or error; else 0 or 1. */ > + int qemu_img_supports_U_option; > }; > > /** > diff --git a/lib/handle.c b/lib/handle.c > index a47aaafab..297ff6d67 100644 > --- a/lib/handle.c > +++ b/lib/handle.c > @@ -101,6 +101,8 @@ guestfs_create_flags (unsigned flags, ...) > > g->memsize = DEFAULT_MEMSIZE; > > + g->qemu_img_supports_U_option = -1; /* not tested, see lib/info.c */ > + > /* Start with large serial numbers so they are easy to spot > * inside the protocol. > */ > diff --git a/lib/info.c b/lib/info.c > index 2eadc1c11..74e4424b8 100644 > --- a/lib/info.c > +++ b/lib/info.c > @@ -57,6 +57,7 @@ cleanup_json_t_decref (void *ptr) > #endif > > static json_t *get_json_output (guestfs_h *g, const char *filename); > +static int qemu_img_supports_U_option (guestfs_h *g); > static void set_child_rlimits (struct command *); > > char * > @@ -149,6 +150,11 @@ get_json_output (guestfs_h *g, const char *filename) > > guestfs_int_cmd_add_arg (cmd, "qemu-img"); > guestfs_int_cmd_add_arg (cmd, "info"); > + switch (qemu_img_supports_U_option (g)) { > + case -1: return NULL; > + case 0: break; > + default: guestfs_int_cmd_add_arg (cmd, "-U"); > + } > guestfs_int_cmd_add_arg (cmd, "--output"); > guestfs_int_cmd_add_arg (cmd, "json"); > if (filename[0] == '/') > @@ -218,3 +224,36 @@ set_child_rlimits (struct command *cmd) > guestfs_int_cmd_set_child_rlimit (cmd, RLIMIT_CPU, 10 /* seconds */); > #endif > } > + > +/** > + * Test if the qemu-img info command supports the C<-U> option to > + * disable locking. The result is memoized in the handle. > + * > + * Note this option was added in qemu 2.11. We can remove this test > + * when we can assume everyone is using qemu >= 2.11. > + */ > +static int > +qemu_img_supports_U_option (guestfs_h *g) > +{ > + if (g->qemu_img_supports_U_option >= 0) > + return g->qemu_img_supports_U_option; > + > + CLEANUP_CMD_CLOSE struct command *cmd = guestfs_int_new_command (g); > + int r; > + > + guestfs_int_cmd_add_string_unquoted (cmd, > + "qemu-img info --help | " > + "grep -sq -- 'info.*-U'"); > + r = guestfs_int_cmd_run (cmd); > + if (r == -1) > + return -1; > + if (!WIFEXITED (r)) { > + guestfs_int_external_command_failed (g, r, > + "qemu-img info -U option test", > + NULL); > + return -1; > + } > + > + g->qemu_img_supports_U_option = WEXITSTATUS (r) == 0; > + return g->qemu_img_supports_U_option; > +} > -- > 2.19.0.rc0 > > -- *GAL bEN HAIM* RHV DEVOPS
_______________________________________________ Libguestfs mailing list Libguestfs@redhat.com https://www.redhat.com/mailman/listinfo/libguestfs