mirror of
https://github.com/libguestfs/libguestfs.git
synced 2026-03-21 22:53:37 +00:00
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.
This commit is contained in:
@@ -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];
|
||||
|
||||
r = command (NULL, &err, "ntfsresize", "-P", device, NULL);
|
||||
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";
|
||||
|
||||
argv[i++] = device;
|
||||
argv[i++] = NULL;
|
||||
|
||||
r = commandv (NULL, &err, argv);
|
||||
if (r == -1) {
|
||||
reply_with_error ("%s: %s", device, err);
|
||||
free (err);
|
||||
@@ -77,23 +101,15 @@ do_ntfsresize (const char *device)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
do_ntfsresize (const char *device)
|
||||
{
|
||||
return do_ntfsresize_opts (device, 0, 0);
|
||||
}
|
||||
|
||||
int
|
||||
do_ntfsresize_size (const char *device, int64_t size)
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
free (err);
|
||||
return 0;
|
||||
optargs_bitmask = GUESTFS_NTFSRESIZE_OPTS_SIZE_BITMASK;
|
||||
return do_ntfsresize_opts (device, size, 0);
|
||||
}
|
||||
|
||||
@@ -5218,7 +5218,7 @@ I<xz compressed> tar file) into C<directory>.");
|
||||
This command packs the contents of C<directory> and downloads
|
||||
it to local file C<tarball> (as an xz compressed tar archive).");
|
||||
|
||||
("ntfsresize", (RErr, [Device "device"], []), 231, [Optional "ntfsprogs"],
|
||||
("ntfsresize", (RErr, [Device "device"], []), 231, [Optional "ntfsprogs"; DeprecatedBy "ntfsresize_opts"],
|
||||
[],
|
||||
"resize an NTFS filesystem",
|
||||
"\
|
||||
@@ -5456,7 +5456,7 @@ allows you to specify the new size (in bytes) explicitly.");
|
||||
This command is the same as C<guestfs_pvresize> except that it
|
||||
allows you to specify the new size (in bytes) explicitly.");
|
||||
|
||||
("ntfsresize_size", (RErr, [Device "device"; Int64 "size"], []), 250, [Optional "ntfsprogs"],
|
||||
("ntfsresize_size", (RErr, [Device "device"; Int64 "size"], []), 250, [Optional "ntfsprogs"; DeprecatedBy "ntfsresize_opts"],
|
||||
[],
|
||||
"resize an NTFS filesystem (with size)",
|
||||
"\
|
||||
@@ -6011,6 +6011,38 @@ Device mapper devices which correspond to logical volumes are I<not>
|
||||
returned in this list. Call C<guestfs_lvs> if you want to list logical
|
||||
volumes.");
|
||||
|
||||
("ntfsresize_opts", (RErr, [Device "device"], [Int64 "size"; Bool "force"]), 288, [Optional "ntfsprogs"],
|
||||
[],
|
||||
"resize an NTFS filesystem",
|
||||
"\
|
||||
This command resizes an NTFS filesystem, expanding or
|
||||
shrinking it to the size of the underlying device.
|
||||
|
||||
The optional parameters are:
|
||||
|
||||
=over 4
|
||||
|
||||
=item C<size>
|
||||
|
||||
The new size (in bytes) of the filesystem. If omitted, the filesystem
|
||||
is resized to fit the container (eg. partition).
|
||||
|
||||
=item C<force>
|
||||
|
||||
If this option is true, then force the resize of the filesystem
|
||||
even if the filesystem is marked as requiring a consistency check.
|
||||
|
||||
After the resize operation, the filesystem is always marked
|
||||
as requiring a consistency check (for safety). You have to boot
|
||||
into Windows to perform this check and clear this condition.
|
||||
If you I<don't> set the C<force> option then it is not
|
||||
possible to call C<guestfs_ntfsresize_opts> multiple times on a
|
||||
single filesystem without booting into Windows between each resize.
|
||||
|
||||
=back
|
||||
|
||||
See also L<ntfsresize(8)>.");
|
||||
|
||||
]
|
||||
|
||||
let all_functions = non_daemon_functions @ daemon_functions
|
||||
|
||||
@@ -1 +1 @@
|
||||
287
|
||||
288
|
||||
|
||||
Reference in New Issue
Block a user