diff options
author | Richard W.M. Jones <rjones@redhat.com> | 2012-11-19 15:43:52 +0000 |
---|---|---|
committer | Richard W.M. Jones <rjones@redhat.com> | 2012-11-20 10:44:10 +0000 |
commit | 3454cfb73c74b4fd3fba9d834c13685b166d9d3f (patch) | |
tree | 11beddc079737f8ee54f91e7fb0407fac1042a8c /daemon | |
parent | b5b475ab827b862cce07ab095e4cb8b4ab1a954a (diff) | |
download | libguestfs-3454cfb73c74b4fd3fba9d834c13685b166d9d3f.tar.gz libguestfs-3454cfb73c74b4fd3fba9d834c13685b166d9d3f.tar.xz libguestfs-3454cfb73c74b4fd3fba9d834c13685b166d9d3f.zip |
daemon: wipefs: Use --force option if available.
See https://bugzilla.redhat.com/show_bug.cgi?id=872831
and https://bugzilla.redhat.com/show_bug.cgi?id=865961
Diffstat (limited to 'daemon')
-rw-r--r-- | daemon/zero.c | 42 |
1 files changed, 40 insertions, 2 deletions
diff --git a/daemon/zero.c b/daemon/zero.c index 1a668812..4997583c 100644 --- a/daemon/zero.c +++ b/daemon/zero.c @@ -82,14 +82,52 @@ optgroup_wipefs_available (void) return prog_exists (str_wipefs); } +/* See RHBZ#872831 */ +static int +wipefs_has_force_option (void) +{ + static int flag = -1; + int r; + char *out, *err; + + if (flag == -1) { + r = command (&out, &err, "wipefs", "--help", NULL); + if (r == -1) { + reply_with_error ("%s", err); + free (out); + free (err); + return -1; + } + free (err); + flag = strstr (out, "--force") != NULL; + free (out); + } + + return flag; +} + int do_wipefs (const char *device) { + int force; int r; char *err = NULL; + const size_t MAX_ARGS = 16; + const char *argv[MAX_ARGS]; + size_t i = 0; + + force = wipefs_has_force_option (); + if (force == -1) + return -1; + + ADD_ARG (argv, i, str_wipefs); + ADD_ARG (argv, i, "-a"); + if (force) + ADD_ARG (argv, i, "--force"); + ADD_ARG (argv, i, device); + ADD_ARG (argv, i, NULL); - const char *wipefs[] = {str_wipefs, "-a", device, NULL}; - r = commandv (NULL, &err, wipefs); + r = commandv (NULL, &err, argv); if (r == -1) { reply_with_error ("%s", err); free (err); |