diff options
author | Richard W.M. Jones <rjones@redhat.com> | 2011-07-12 18:16:40 +0100 |
---|---|---|
committer | Richard W.M. Jones <rjones@redhat.com> | 2011-07-12 18:44:46 +0100 |
commit | edd747a09060dd191277f1bcae827a94939cfb9d (patch) | |
tree | e32c4fb35b581e8ce5c0e9cef7ed192b9a26c675 /daemon | |
parent | 2ba2ddf2113db7bb2afe3f739dc3cbaa5416a4ba (diff) | |
download | libguestfs-edd747a09060dd191277f1bcae827a94939cfb9d.tar.gz libguestfs-edd747a09060dd191277f1bcae827a94939cfb9d.tar.xz libguestfs-edd747a09060dd191277f1bcae827a94939cfb9d.zip |
New API: ntfsresize-opts (RHBZ#685009).
This is a more comprehensive fix for RHBZ#685009. Add a new API which
allows the --force flag to be passed, allowing multiple NTFS resize
operations in a single session.
Diffstat (limited to 'daemon')
-rw-r--r-- | daemon/ntfs.c | 52 |
1 files changed, 34 insertions, 18 deletions
diff --git a/daemon/ntfs.c b/daemon/ntfs.c index 909ea18b..58912636 100644 --- a/daemon/ntfs.c +++ b/daemon/ntfs.c @@ -60,13 +60,37 @@ do_ntfs_3g_probe (int rw, const char *device) return r; } +/* Takes optional arguments, consult optargs_bitmask. */ int -do_ntfsresize (const char *device) +do_ntfsresize_opts (const char *device, int64_t size, int force) { char *err; int r; + const char *argv[16]; + size_t i = 0; + char size_str[32]; + + argv[i++] = "ntfsresize"; + argv[i++] = "-P"; + + if (optargs_bitmask & GUESTFS_NTFSRESIZE_OPTS_SIZE_BITMASK) { + if (size <= 0) { + reply_with_error ("size is zero or negative"); + return -1; + } + + snprintf (size_str, sizeof size_str, "%" PRIi64, size); + argv[i++] = "--size"; + argv[i++] = size_str; + } + + if (optargs_bitmask & GUESTFS_NTFSRESIZE_OPTS_FORCE_BITMASK && force) + argv[i++] = "--force"; - r = command (NULL, &err, "ntfsresize", "-P", device, NULL); + argv[i++] = device; + argv[i++] = NULL; + + r = commandv (NULL, &err, argv); if (r == -1) { reply_with_error ("%s: %s", device, err); free (err); @@ -78,22 +102,14 @@ do_ntfsresize (const char *device) } int -do_ntfsresize_size (const char *device, int64_t size) +do_ntfsresize (const char *device) { - char *err; - int r; - - char buf[32]; - snprintf (buf, sizeof buf, "%" PRIi64, size); - - r = command (NULL, &err, "ntfsresize", "-P", "--size", buf, - device, NULL); - if (r == -1) { - reply_with_error ("%s: %s", device, err); - free (err); - return -1; - } + return do_ntfsresize_opts (device, 0, 0); +} - free (err); - return 0; +int +do_ntfsresize_size (const char *device, int64_t size) +{ + optargs_bitmask = GUESTFS_NTFSRESIZE_OPTS_SIZE_BITMASK; + return do_ntfsresize_opts (device, size, 0); } |