+ if (alloc_disk (argv[0], argv[1], 1, 0) == -1)
+ return -1;
+
+ return 0;
+}
+
+int
+do_sparse (const char *cmd, int argc, char *argv[])
+{
+ if (argc != 2) {
+ fprintf (stderr, _("use 'sparse file size' to create a sparse image\n"));
+ return -1;
+ }
+
+ if (alloc_disk (argv[0], argv[1], 1, 1) == -1)
+ return -1;
+
+ return 0;
+}
+
+static int parse_size (const char *str, off_t *size_rtn);
+
+/* This is the underlying allocation function. It's called from
+ * a few other places in guestfish.
+ */
+int
+alloc_disk (const char *filename, const char *size_str, int add, int sparse)
+{
+ off_t size;
+ int fd;
+ char c = 0;
+
+ if (parse_size (size_str, &size) == -1)