+
+/* Takes optional arguments, consult optargs_bitmask. */
+int
+do_ntfsresize_opts (const char *device, int64_t size, int force)
+{
+ char *err;
+ int r;
+ const char *argv[MAX_ARGS];
+ size_t i = 0;
+ char size_str[32];
+
+ ADD_ARG (argv, i, "ntfsresize");
+ ADD_ARG (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);
+ ADD_ARG (argv, i, "--size");
+ ADD_ARG (argv, i, size_str);
+ }
+
+ if (optargs_bitmask & GUESTFS_NTFSRESIZE_OPTS_FORCE_BITMASK && force)
+ ADD_ARG (argv, i, "--force");
+
+ ADD_ARG (argv, i, device);
+ ADD_ARG (argv, i, NULL);
+
+ r = commandv (NULL, &err, argv);
+ if (r == -1) {
+ reply_with_error ("%s: %s", device, err);
+ free (err);
+ return -1;
+ }
+
+ free (err);
+ 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)
+{
+ optargs_bitmask = GUESTFS_NTFSRESIZE_OPTS_SIZE_BITMASK;
+ return do_ntfsresize_opts (device, size, 0);
+}