On Friday, 21 September 2018 11:53:52 CEST Richard W.M. Jones wrote:
 +/**
 + * 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'");
This may match something else in future, in case some other command of
qemu-img gets another option with "info" in it...
TBH this is something we have already, and precisely in the qemu_data
struct, which is memoized.  One downside is that using it would mean
memoizing the qemu help/schema in advance, even if the appliance is not
started; so code like `guestfish disk-format foo` will be slower.
OTOH, the upside is that there is no need to "reprobe" qemu-img for
something that we detect already from the QMP schema.
One possible idea can be to cache the qemu_data struct in the handle,
so the direct backend would not get a performance regression (since
either one of the info commands already preloaded a qemu_data, or
launch would do that).
-- 
Pino Toscano