/* libguestfs - the guestfsd daemon
- * Copyright (C) 2009 Red Hat Inc.
+ * Copyright (C) 2009-2010 Red Hat Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include <config.h>
#include "actions.h"
#include "optgroups.h"
+#define MAX_ARGS 64
+
int
optgroup_ntfs3g_available (void)
{
- int r = access ("/bin/ntfs-3g.probe", X_OK);
- if (r == 0)
- return 1;
- /* On Debian: */
- r = access ("/usr/bin/ntfs-3g.probe", X_OK);
- return (r == 0);
+ return prog_exists ("ntfs-3g.probe");
}
int
optgroup_ntfsprogs_available (void)
{
- int r = access ("/usr/sbin/ntfsresize", X_OK);
- return r == 0;
+ return prog_exists ("ntfsresize");
}
int
return -1;
}
+ free (err);
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[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);
+ }
- r = command (NULL, &err, "ntfsresize", "-P", device, NULL);
+ 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_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);
+}
- 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);
}