Generated code for mknod, mkfifo, mknod_b, mknod_c, umask.
[libguestfs.git] / fish / cmds.c
1 /* libguestfs generated file
2  * WARNING: THIS FILE IS GENERATED BY 'src/generator.ml'.
3  * ANY CHANGES YOU MAKE TO THIS FILE WILL BE LOST.
4  *
5  * Copyright (C) 2009 Red Hat Inc.
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License along
18  * with this program; if not, write to the Free Software Foundation, Inc.,
19  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20  */
21
22 #include <stdio.h>
23 #include <stdlib.h>
24 #include <string.h>
25 #include <inttypes.h>
26
27 #include <guestfs.h>
28 #include "fish.h"
29
30 void list_commands (void)
31 {
32   printf ("    %-16s     %s\n", "Command", "Description");
33   list_builtin_commands ();
34   printf ("%-20s %s\n", "add-cdrom", "add a CD-ROM disk image to examine");
35   printf ("%-20s %s\n", "add-drive", "add an image to examine or modify");
36   printf ("%-20s %s\n", "add-drive-ro", "add a drive in snapshot mode (read-only)");
37   printf ("%-20s %s\n", "aug-close", "close the current Augeas handle");
38   printf ("%-20s %s\n", "aug-defnode", "define an Augeas node");
39   printf ("%-20s %s\n", "aug-defvar", "define an Augeas variable");
40   printf ("%-20s %s\n", "aug-get", "look up the value of an Augeas path");
41   printf ("%-20s %s\n", "aug-init", "create a new Augeas handle");
42   printf ("%-20s %s\n", "aug-insert", "insert a sibling Augeas node");
43   printf ("%-20s %s\n", "aug-load", "load files into the tree");
44   printf ("%-20s %s\n", "aug-ls", "list Augeas nodes under a path");
45   printf ("%-20s %s\n", "aug-match", "return Augeas nodes which match path");
46   printf ("%-20s %s\n", "aug-mv", "move Augeas node");
47   printf ("%-20s %s\n", "aug-rm", "remove an Augeas path");
48   printf ("%-20s %s\n", "aug-save", "write all pending Augeas changes to disk");
49   printf ("%-20s %s\n", "aug-set", "set Augeas path to value");
50   printf ("%-20s %s\n", "blockdev-flushbufs", "flush device buffers");
51   printf ("%-20s %s\n", "blockdev-getbsz", "get blocksize of block device");
52   printf ("%-20s %s\n", "blockdev-getro", "is block device set to read-only");
53   printf ("%-20s %s\n", "blockdev-getsize64", "get total size of device in bytes");
54   printf ("%-20s %s\n", "blockdev-getss", "get sectorsize of block device");
55   printf ("%-20s %s\n", "blockdev-getsz", "get total size of device in 512-byte sectors");
56   printf ("%-20s %s\n", "blockdev-rereadpt", "reread partition table");
57   printf ("%-20s %s\n", "blockdev-setbsz", "set blocksize of block device");
58   printf ("%-20s %s\n", "blockdev-setro", "set block device to read-only");
59   printf ("%-20s %s\n", "blockdev-setrw", "set block device to read-write");
60   printf ("%-20s %s\n", "cat", "list the contents of a file");
61   printf ("%-20s %s\n", "checksum", "compute MD5, SHAx or CRC checksum of file");
62   printf ("%-20s %s\n", "chmod", "change file mode");
63   printf ("%-20s %s\n", "chown", "change file owner and group");
64   printf ("%-20s %s\n", "command", "run a command from the guest filesystem");
65   printf ("%-20s %s\n", "command-lines", "run a command, returning lines");
66   printf ("%-20s %s\n", "config", "add qemu parameters");
67   printf ("%-20s %s\n", "cp", "copy a file");
68   printf ("%-20s %s\n", "cp-a", "copy a file or directory recursively");
69   printf ("%-20s %s\n", "debug", "debugging and internals");
70   printf ("%-20s %s\n", "df", "report file system disk space usage");
71   printf ("%-20s %s\n", "df-h", "report file system disk space usage (human readable)");
72   printf ("%-20s %s\n", "dmesg", "return kernel messages");
73   printf ("%-20s %s\n", "download", "download a file to the local machine");
74   printf ("%-20s %s\n", "drop-caches", "drop kernel page cache, dentries and inodes");
75   printf ("%-20s %s\n", "du", "estimate file space usage");
76   printf ("%-20s %s\n", "e2fsck-f", "check an ext2/ext3 filesystem");
77   printf ("%-20s %s\n", "equal", "test if two files have equal contents");
78   printf ("%-20s %s\n", "exists", "test if file or directory exists");
79   printf ("%-20s %s\n", "file", "determine file type");
80   printf ("%-20s %s\n", "find", "find all files and directories");
81   printf ("%-20s %s\n", "fsck", "run the filesystem checker");
82   printf ("%-20s %s\n", "get-append", "get the additional kernel options");
83   printf ("%-20s %s\n", "get-autosync", "get autosync mode");
84   printf ("%-20s %s\n", "get-e2label", "get the ext2/3/4 filesystem label");
85   printf ("%-20s %s\n", "get-e2uuid", "get the ext2/3/4 filesystem UUID");
86   printf ("%-20s %s\n", "get-memsize", "get memory allocated to the qemu subprocess");
87   printf ("%-20s %s\n", "get-path", "get the search path");
88   printf ("%-20s %s\n", "get-qemu", "get the qemu binary");
89   printf ("%-20s %s\n", "get-state", "get the current state");
90   printf ("%-20s %s\n", "get-verbose", "get verbose mode");
91   printf ("%-20s %s\n", "glob-expand", "expand a wildcard path");
92   printf ("%-20s %s\n", "grub-install", "install GRUB");
93   printf ("%-20s %s\n", "head", "return first 10 lines of a file");
94   printf ("%-20s %s\n", "head-n", "return first N lines of a file");
95   printf ("%-20s %s\n", "hexdump", "dump a file in hexadecimal");
96   printf ("%-20s %s\n", "initrd-list", "list files in an initrd");
97   printf ("%-20s %s\n", "is-busy", "is busy processing a command");
98   printf ("%-20s %s\n", "is-config", "is in configuration state");
99   printf ("%-20s %s\n", "is-dir", "test if file exists");
100   printf ("%-20s %s\n", "is-file", "test if file exists");
101   printf ("%-20s %s\n", "is-launching", "is launching subprocess");
102   printf ("%-20s %s\n", "is-ready", "is ready to accept commands");
103   printf ("%-20s %s\n", "kill-subprocess", "kill the qemu subprocess");
104   printf ("%-20s %s\n", "launch", "launch the qemu subprocess");
105   printf ("%-20s %s\n", "list-devices", "list the block devices");
106   printf ("%-20s %s\n", "list-partitions", "list the partitions");
107   printf ("%-20s %s\n", "ll", "list the files in a directory (long format)");
108   printf ("%-20s %s\n", "ls", "list the files in a directory");
109   printf ("%-20s %s\n", "lstat", "get file information for a symbolic link");
110   printf ("%-20s %s\n", "lvcreate", "create an LVM volume group");
111   printf ("%-20s %s\n", "lvm-remove-all", "remove all LVM LVs, VGs and PVs");
112   printf ("%-20s %s\n", "lvremove", "remove an LVM logical volume");
113   printf ("%-20s %s\n", "lvresize", "resize an LVM logical volume");
114   printf ("%-20s %s\n", "lvs", "list the LVM logical volumes (LVs)");
115   printf ("%-20s %s\n", "lvs-full", "list the LVM logical volumes (LVs)");
116   printf ("%-20s %s\n", "mkdir", "create a directory");
117   printf ("%-20s %s\n", "mkdir-p", "create a directory and parents");
118   printf ("%-20s %s\n", "mkdtemp", "create a temporary directory");
119   printf ("%-20s %s\n", "mkfifo", "make FIFO (named pipe)");
120   printf ("%-20s %s\n", "mkfs", "make a filesystem");
121   printf ("%-20s %s\n", "mknod", "make block, character or FIFO devices");
122   printf ("%-20s %s\n", "mknod-b", "make block device node");
123   printf ("%-20s %s\n", "mknod-c", "make char device node");
124   printf ("%-20s %s\n", "mkswap", "create a swap partition");
125   printf ("%-20s %s\n", "mkswap-L", "create a swap partition with a label");
126   printf ("%-20s %s\n", "mkswap-U", "create a swap partition with an explicit UUID");
127   printf ("%-20s %s\n", "mount", "mount a guest disk at a position in the filesystem");
128   printf ("%-20s %s\n", "mount-loop", "mount a file using the loop device");
129   printf ("%-20s %s\n", "mount-options", "mount a guest disk with mount options");
130   printf ("%-20s %s\n", "mount-ro", "mount a guest disk, read-only");
131   printf ("%-20s %s\n", "mount-vfs", "mount a guest disk with mount options and vfstype");
132   printf ("%-20s %s\n", "mounts", "show mounted filesystems");
133   printf ("%-20s %s\n", "mv", "move a file");
134   printf ("%-20s %s\n", "ntfs-3g-probe", "probe NTFS volume");
135   printf ("%-20s %s\n", "ping-daemon", "ping the guest daemon");
136   printf ("%-20s %s\n", "pvcreate", "create an LVM physical volume");
137   printf ("%-20s %s\n", "pvremove", "remove an LVM physical volume");
138   printf ("%-20s %s\n", "pvresize", "resize an LVM physical volume");
139   printf ("%-20s %s\n", "pvs", "list the LVM physical volumes (PVs)");
140   printf ("%-20s %s\n", "pvs-full", "list the LVM physical volumes (PVs)");
141   printf ("%-20s %s\n", "read-lines", "read file as lines");
142   printf ("%-20s %s\n", "resize2fs", "resize an ext2/ext3 filesystem");
143   printf ("%-20s %s\n", "rm", "remove a file");
144   printf ("%-20s %s\n", "rm-rf", "remove a file or directory recursively");
145   printf ("%-20s %s\n", "rmdir", "remove a directory");
146   printf ("%-20s %s\n", "scrub-device", "scrub (securely wipe) a device");
147   printf ("%-20s %s\n", "scrub-file", "scrub (securely wipe) a file");
148   printf ("%-20s %s\n", "scrub-freespace", "scrub (securely wipe) free space");
149   printf ("%-20s %s\n", "set-append", "add options to kernel command line");
150   printf ("%-20s %s\n", "set-autosync", "set autosync mode");
151   printf ("%-20s %s\n", "set-e2label", "set the ext2/3/4 filesystem label");
152   printf ("%-20s %s\n", "set-e2uuid", "set the ext2/3/4 filesystem UUID");
153   printf ("%-20s %s\n", "set-memsize", "set memory allocated to the qemu subprocess");
154   printf ("%-20s %s\n", "set-path", "set the search path");
155   printf ("%-20s %s\n", "set-qemu", "set the qemu binary");
156   printf ("%-20s %s\n", "set-verbose", "set verbose mode");
157   printf ("%-20s %s\n", "sfdisk", "create partitions on a block device");
158   printf ("%-20s %s\n", "sfdisk-N", "modify a single partition on a block device");
159   printf ("%-20s %s\n", "sfdisk-disk-geometry", "display the disk geometry from the partition table");
160   printf ("%-20s %s\n", "sfdisk-kernel-geometry", "display the kernel geometry");
161   printf ("%-20s %s\n", "sfdisk-l", "display the partition table");
162   printf ("%-20s %s\n", "sh", "run a command via the shell");
163   printf ("%-20s %s\n", "sh-lines", "run a command via the shell returning lines");
164   printf ("%-20s %s\n", "sleep", "sleep for some seconds");
165   printf ("%-20s %s\n", "stat", "get file information");
166   printf ("%-20s %s\n", "statvfs", "get file system statistics");
167   printf ("%-20s %s\n", "strings", "print the printable strings in a file");
168   printf ("%-20s %s\n", "strings-e", "print the printable strings in a file");
169   printf ("%-20s %s\n", "sync", "sync disks, writes are flushed through to the disk image");
170   printf ("%-20s %s\n", "tail", "return last 10 lines of a file");
171   printf ("%-20s %s\n", "tail-n", "return last N lines of a file");
172   printf ("%-20s %s\n", "tar-in", "unpack tarfile to directory");
173   printf ("%-20s %s\n", "tar-out", "pack directory into tarfile");
174   printf ("%-20s %s\n", "tgz-in", "unpack compressed tarball to directory");
175   printf ("%-20s %s\n", "tgz-out", "pack directory into compressed tarball");
176   printf ("%-20s %s\n", "touch", "update file timestamps or create a new file");
177   printf ("%-20s %s\n", "tune2fs-l", "get ext2/ext3/ext4 superblock details");
178   printf ("%-20s %s\n", "umask", "set file mode creation mask (umask)");
179   printf ("%-20s %s\n", "umount", "unmount a filesystem");
180   printf ("%-20s %s\n", "umount-all", "unmount all filesystems");
181   printf ("%-20s %s\n", "upload", "upload a file from the local machine");
182   printf ("%-20s %s\n", "vg-activate", "activate or deactivate some volume groups");
183   printf ("%-20s %s\n", "vg-activate-all", "activate or deactivate all volume groups");
184   printf ("%-20s %s\n", "vgcreate", "create an LVM volume group");
185   printf ("%-20s %s\n", "vgremove", "remove an LVM volume group");
186   printf ("%-20s %s\n", "vgs", "list the LVM volume groups (VGs)");
187   printf ("%-20s %s\n", "vgs-full", "list the LVM volume groups (VGs)");
188   printf ("%-20s %s\n", "wc-c", "count characters in a file");
189   printf ("%-20s %s\n", "wc-l", "count lines in a file");
190   printf ("%-20s %s\n", "wc-w", "count words in a file");
191   printf ("%-20s %s\n", "write-file", "create a file");
192   printf ("%-20s %s\n", "zero", "write zeroes to the device");
193   printf ("%-20s %s\n", "zerofree", "zero unused inodes and disk blocks on ext2/3 filesystem");
194   printf ("    Use -h <cmd> / help <cmd> to show detailed help for a command.\n");
195 }
196
197 void display_command (const char *cmd)
198 {
199   if (strcasecmp (cmd, "launch") == 0 || strcasecmp (cmd, "run") == 0)
200     pod2text ("launch - launch the qemu subprocess", " launch\n\nInternally libguestfs is implemented by running a virtual machine\nusing L<qemu(1)>.\n\nYou should call this after configuring the handle\n(eg. adding drives) but before performing any actions.\n\nYou can use 'run' as an alias for this command.");
201   else
202   if (strcasecmp (cmd, "kill_subprocess") == 0 || strcasecmp (cmd, "kill-subprocess") == 0)
203     pod2text ("kill-subprocess - kill the qemu subprocess", " kill-subprocess\n\nThis kills the qemu subprocess.  You should never need to call this.");
204   else
205   if (strcasecmp (cmd, "add_drive") == 0 || strcasecmp (cmd, "add-drive") == 0 || strcasecmp (cmd, "add") == 0)
206     pod2text ("add-drive - add an image to examine or modify", " add-drive <filename>\n\nThis function adds a virtual machine disk image C<filename> to the\nguest.  The first time you call this function, the disk appears as IDE\ndisk 0 (C</dev/sda>) in the guest, the second time as C</dev/sdb>, and\nso on.\n\nYou don't necessarily need to be root when using libguestfs.  However\nyou obviously do need sufficient permissions to access the filename\nfor whatever operations you want to perform (ie. read access if you\njust want to read the image or write access if you want to modify the\nimage).\n\nThis is equivalent to the qemu parameter C<-drive file=filename,cache=off>.\n\nNote that this call checks for the existence of C<filename>.  This\nstops you from specifying other types of drive which are supported\nby qemu such as C<nbd:> and C<http:> URLs.  To specify those, use\nthe general C<config> call instead.\n\nYou can use 'add' as an alias for this command.");
207   else
208   if (strcasecmp (cmd, "add_cdrom") == 0 || strcasecmp (cmd, "add-cdrom") == 0 || strcasecmp (cmd, "cdrom") == 0)
209     pod2text ("add-cdrom - add a CD-ROM disk image to examine", " add-cdrom <filename>\n\nThis function adds a virtual CD-ROM disk image to the guest.\n\nThis is equivalent to the qemu parameter C<-cdrom filename>.\n\nNote that this call checks for the existence of C<filename>.  This\nstops you from specifying other types of drive which are supported\nby qemu such as C<nbd:> and C<http:> URLs.  To specify those, use\nthe general C<config> call instead.\n\nYou can use 'cdrom' as an alias for this command.");
210   else
211   if (strcasecmp (cmd, "add_drive_ro") == 0 || strcasecmp (cmd, "add-drive-ro") == 0 || strcasecmp (cmd, "add-ro") == 0)
212     pod2text ("add-drive-ro - add a drive in snapshot mode (read-only)", " add-drive-ro <filename>\n\nThis adds a drive in snapshot mode, making it effectively\nread-only.\n\nNote that writes to the device are allowed, and will be seen for\nthe duration of the guestfs handle, but they are written\nto a temporary file which is discarded as soon as the guestfs\nhandle is closed.  We don't currently have any method to enable\nchanges to be committed, although qemu can support this.\n\nThis is equivalent to the qemu parameter\nC<-drive file=filename,snapshot=on>.\n\nNote that this call checks for the existence of C<filename>.  This\nstops you from specifying other types of drive which are supported\nby qemu such as C<nbd:> and C<http:> URLs.  To specify those, use\nthe general C<config> call instead.\n\nYou can use 'add-ro' as an alias for this command.");
213   else
214   if (strcasecmp (cmd, "config") == 0)
215     pod2text ("config - add qemu parameters", " config <qemuparam> <qemuvalue>\n\nThis can be used to add arbitrary qemu command line parameters\nof the form C<-param value>.  Actually it's not quite arbitrary - we\nprevent you from setting some parameters which would interfere with\nparameters that we use.\n\nThe first character of C<param> string must be a C<-> (dash).\n\nC<value> can be NULL.");
216   else
217   if (strcasecmp (cmd, "set_qemu") == 0 || strcasecmp (cmd, "set-qemu") == 0 || strcasecmp (cmd, "qemu") == 0)
218     pod2text ("set-qemu - set the qemu binary", " set-qemu <qemu>\n\nSet the qemu binary that we will use.\n\nThe default is chosen when the library was compiled by the\nconfigure script.\n\nYou can also override this by setting the C<LIBGUESTFS_QEMU>\nenvironment variable.\n\nSetting C<qemu> to C<NULL> restores the default qemu binary.\n\nYou can use 'qemu' as an alias for this command.");
219   else
220   if (strcasecmp (cmd, "get_qemu") == 0 || strcasecmp (cmd, "get-qemu") == 0)
221     pod2text ("get-qemu - get the qemu binary", " get-qemu\n\nReturn the current qemu binary.\n\nThis is always non-NULL.  If it wasn't set already, then this will\nreturn the default qemu binary name.");
222   else
223   if (strcasecmp (cmd, "set_path") == 0 || strcasecmp (cmd, "set-path") == 0 || strcasecmp (cmd, "path") == 0)
224     pod2text ("set-path - set the search path", " set-path <path>\n\nSet the path that libguestfs searches for kernel and initrd.img.\n\nThe default is C<$libdir/guestfs> unless overridden by setting\nC<LIBGUESTFS_PATH> environment variable.\n\nSetting C<path> to C<NULL> restores the default path.\n\nYou can use 'path' as an alias for this command.");
225   else
226   if (strcasecmp (cmd, "get_path") == 0 || strcasecmp (cmd, "get-path") == 0)
227     pod2text ("get-path - get the search path", " get-path\n\nReturn the current search path.\n\nThis is always non-NULL.  If it wasn't set already, then this will\nreturn the default path.");
228   else
229   if (strcasecmp (cmd, "set_append") == 0 || strcasecmp (cmd, "set-append") == 0 || strcasecmp (cmd, "append") == 0)
230     pod2text ("set-append - add options to kernel command line", " set-append <append>\n\nThis function is used to add additional options to the\nguest kernel command line.\n\nThe default is C<NULL> unless overridden by setting\nC<LIBGUESTFS_APPEND> environment variable.\n\nSetting C<append> to C<NULL> means I<no> additional options\nare passed (libguestfs always adds a few of its own).\n\nYou can use 'append' as an alias for this command.");
231   else
232   if (strcasecmp (cmd, "get_append") == 0 || strcasecmp (cmd, "get-append") == 0)
233     pod2text ("get-append - get the additional kernel options", " get-append\n\nReturn the additional kernel options which are added to the\nguest kernel command line.\n\nIf C<NULL> then no options are added.");
234   else
235   if (strcasecmp (cmd, "set_autosync") == 0 || strcasecmp (cmd, "set-autosync") == 0 || strcasecmp (cmd, "autosync") == 0)
236     pod2text ("set-autosync - set autosync mode", " set-autosync <autosync>\n\nIf C<autosync> is true, this enables autosync.  Libguestfs will make a\nbest effort attempt to run C<umount_all> followed by\nC<sync> when the handle is closed\n(also if the program exits without closing handles).\n\nThis is disabled by default (except in guestfish where it is\nenabled by default).\n\nYou can use 'autosync' as an alias for this command.");
237   else
238   if (strcasecmp (cmd, "get_autosync") == 0 || strcasecmp (cmd, "get-autosync") == 0)
239     pod2text ("get-autosync - get autosync mode", " get-autosync\n\nGet the autosync flag.");
240   else
241   if (strcasecmp (cmd, "set_verbose") == 0 || strcasecmp (cmd, "set-verbose") == 0 || strcasecmp (cmd, "verbose") == 0)
242     pod2text ("set-verbose - set verbose mode", " set-verbose <verbose>\n\nIf C<verbose> is true, this turns on verbose messages (to C<stderr>).\n\nVerbose messages are disabled unless the environment variable\nC<LIBGUESTFS_DEBUG> is defined and set to C<1>.\n\nYou can use 'verbose' as an alias for this command.");
243   else
244   if (strcasecmp (cmd, "get_verbose") == 0 || strcasecmp (cmd, "get-verbose") == 0)
245     pod2text ("get-verbose - get verbose mode", " get-verbose\n\nThis returns the verbose messages flag.");
246   else
247   if (strcasecmp (cmd, "is_ready") == 0 || strcasecmp (cmd, "is-ready") == 0)
248     pod2text ("is-ready - is ready to accept commands", " is-ready\n\nThis returns true iff this handle is ready to accept commands\n(in the C<READY> state).\n\nFor more information on states, see L<guestfs(3)>.");
249   else
250   if (strcasecmp (cmd, "is_config") == 0 || strcasecmp (cmd, "is-config") == 0)
251     pod2text ("is-config - is in configuration state", " is-config\n\nThis returns true iff this handle is being configured\n(in the C<CONFIG> state).\n\nFor more information on states, see L<guestfs(3)>.");
252   else
253   if (strcasecmp (cmd, "is_launching") == 0 || strcasecmp (cmd, "is-launching") == 0)
254     pod2text ("is-launching - is launching subprocess", " is-launching\n\nThis returns true iff this handle is launching the subprocess\n(in the C<LAUNCHING> state).\n\nFor more information on states, see L<guestfs(3)>.");
255   else
256   if (strcasecmp (cmd, "is_busy") == 0 || strcasecmp (cmd, "is-busy") == 0)
257     pod2text ("is-busy - is busy processing a command", " is-busy\n\nThis returns true iff this handle is busy processing a command\n(in the C<BUSY> state).\n\nFor more information on states, see L<guestfs(3)>.");
258   else
259   if (strcasecmp (cmd, "get_state") == 0 || strcasecmp (cmd, "get-state") == 0)
260     pod2text ("get-state - get the current state", " get-state\n\nThis returns the current state as an opaque integer.  This is\nonly useful for printing debug and internal error messages.\n\nFor more information on states, see L<guestfs(3)>.");
261   else
262   if (strcasecmp (cmd, "set_memsize") == 0 || strcasecmp (cmd, "set-memsize") == 0 || strcasecmp (cmd, "memsize") == 0)
263     pod2text ("set-memsize - set memory allocated to the qemu subprocess", " set-memsize <memsize>\n\nThis sets the memory size in megabytes allocated to the\nqemu subprocess.  This only has any effect if called before\nC<launch>.\n\nYou can also change this by setting the environment\nvariable C<LIBGUESTFS_MEMSIZE> before the handle is\ncreated.\n\nFor more information on the architecture of libguestfs,\nsee L<guestfs(3)>.\n\nYou can use 'memsize' as an alias for this command.");
264   else
265   if (strcasecmp (cmd, "get_memsize") == 0 || strcasecmp (cmd, "get-memsize") == 0)
266     pod2text ("get-memsize - get memory allocated to the qemu subprocess", " get-memsize\n\nThis gets the memory size in megabytes allocated to the\nqemu subprocess.\n\nIf C<set_memsize> was not called\non this handle, and if C<LIBGUESTFS_MEMSIZE> was not set,\nthen this returns the compiled-in default value for memsize.\n\nFor more information on the architecture of libguestfs,\nsee L<guestfs(3)>.");
267   else
268   if (strcasecmp (cmd, "mount") == 0)
269     pod2text ("mount - mount a guest disk at a position in the filesystem", " mount <device> <mountpoint>\n\nMount a guest disk at a position in the filesystem.  Block devices\nare named C</dev/sda>, C</dev/sdb> and so on, as they were added to\nthe guest.  If those block devices contain partitions, they will have\nthe usual names (eg. C</dev/sda1>).  Also LVM C</dev/VG/LV>-style\nnames can be used.\n\nThe rules are the same as for L<mount(2)>:  A filesystem must\nfirst be mounted on C</> before others can be mounted.  Other\nfilesystems can only be mounted on directories which already\nexist.\n\nThe mounted filesystem is writable, if we have sufficient permissions\non the underlying device.\n\nThe filesystem options C<sync> and C<noatime> are set with this\ncall, in order to improve reliability.");
270   else
271   if (strcasecmp (cmd, "sync") == 0)
272     pod2text ("sync - sync disks, writes are flushed through to the disk image", " sync\n\nThis syncs the disk, so that any writes are flushed through to the\nunderlying disk image.\n\nYou should always call this if you have modified a disk image, before\nclosing the handle.");
273   else
274   if (strcasecmp (cmd, "touch") == 0)
275     pod2text ("touch - update file timestamps or create a new file", " touch <path>\n\nTouch acts like the L<touch(1)> command.  It can be used to\nupdate the timestamps on a file, or, if the file does not exist,\nto create a new zero-length file.");
276   else
277   if (strcasecmp (cmd, "cat") == 0)
278     pod2text ("cat - list the contents of a file", " cat <path>\n\nReturn the contents of the file named C<path>.\n\nNote that this function cannot correctly handle binary files\n(specifically, files containing C<\\0> character which is treated\nas end of string).  For those you need to use the C<download>\nfunction which has a more complex interface.\n\nBecause of the message protocol, there is a transfer limit \nof somewhere between 2MB and 4MB.  To transfer large files you should use\nFTP.");
279   else
280   if (strcasecmp (cmd, "ll") == 0)
281     pod2text ("ll - list the files in a directory (long format)", " ll <directory>\n\nList the files in C<directory> (relative to the root directory,\nthere is no cwd) in the format of 'ls -la'.\n\nThis command is mostly useful for interactive sessions.  It\nis I<not> intended that you try to parse the output string.");
282   else
283   if (strcasecmp (cmd, "ls") == 0)
284     pod2text ("ls - list the files in a directory", " ls <directory>\n\nList the files in C<directory> (relative to the root directory,\nthere is no cwd).  The '.' and '..' entries are not returned, but\nhidden files are shown.\n\nThis command is mostly useful for interactive sessions.  Programs\nshould probably use C<readdir> instead.");
285   else
286   if (strcasecmp (cmd, "list_devices") == 0 || strcasecmp (cmd, "list-devices") == 0)
287     pod2text ("list-devices - list the block devices", " list-devices\n\nList all the block devices.\n\nThe full block device names are returned, eg. C</dev/sda>");
288   else
289   if (strcasecmp (cmd, "list_partitions") == 0 || strcasecmp (cmd, "list-partitions") == 0)
290     pod2text ("list-partitions - list the partitions", " list-partitions\n\nList all the partitions detected on all block devices.\n\nThe full partition device names are returned, eg. C</dev/sda1>\n\nThis does not return logical volumes.  For that you will need to\ncall C<lvs>.");
291   else
292   if (strcasecmp (cmd, "pvs") == 0)
293     pod2text ("pvs - list the LVM physical volumes (PVs)", " pvs\n\nList all the physical volumes detected.  This is the equivalent\nof the L<pvs(8)> command.\n\nThis returns a list of just the device names that contain\nPVs (eg. C</dev/sda2>).\n\nSee also C<pvs_full>.");
294   else
295   if (strcasecmp (cmd, "vgs") == 0)
296     pod2text ("vgs - list the LVM volume groups (VGs)", " vgs\n\nList all the volumes groups detected.  This is the equivalent\nof the L<vgs(8)> command.\n\nThis returns a list of just the volume group names that were\ndetected (eg. C<VolGroup00>).\n\nSee also C<vgs_full>.");
297   else
298   if (strcasecmp (cmd, "lvs") == 0)
299     pod2text ("lvs - list the LVM logical volumes (LVs)", " lvs\n\nList all the logical volumes detected.  This is the equivalent\nof the L<lvs(8)> command.\n\nThis returns a list of the logical volume device names\n(eg. C</dev/VolGroup00/LogVol00>).\n\nSee also C<lvs_full>.");
300   else
301   if (strcasecmp (cmd, "pvs_full") == 0 || strcasecmp (cmd, "pvs-full") == 0)
302     pod2text ("pvs-full - list the LVM physical volumes (PVs)", " pvs-full\n\nList all the physical volumes detected.  This is the equivalent\nof the L<pvs(8)> command.  The \"full\" version includes all fields.");
303   else
304   if (strcasecmp (cmd, "vgs_full") == 0 || strcasecmp (cmd, "vgs-full") == 0)
305     pod2text ("vgs-full - list the LVM volume groups (VGs)", " vgs-full\n\nList all the volumes groups detected.  This is the equivalent\nof the L<vgs(8)> command.  The \"full\" version includes all fields.");
306   else
307   if (strcasecmp (cmd, "lvs_full") == 0 || strcasecmp (cmd, "lvs-full") == 0)
308     pod2text ("lvs-full - list the LVM logical volumes (LVs)", " lvs-full\n\nList all the logical volumes detected.  This is the equivalent\nof the L<lvs(8)> command.  The \"full\" version includes all fields.");
309   else
310   if (strcasecmp (cmd, "read_lines") == 0 || strcasecmp (cmd, "read-lines") == 0)
311     pod2text ("read-lines - read file as lines", " read-lines <path>\n\nReturn the contents of the file named C<path>.\n\nThe file contents are returned as a list of lines.  Trailing\nC<LF> and C<CRLF> character sequences are I<not> returned.\n\nNote that this function cannot correctly handle binary files\n(specifically, files containing C<\\0> character which is treated\nas end of line).  For those you need to use the C<read_file>\nfunction which has a more complex interface.");
312   else
313   if (strcasecmp (cmd, "aug_init") == 0 || strcasecmp (cmd, "aug-init") == 0)
314     pod2text ("aug-init - create a new Augeas handle", " aug-init <root> <flags>\n\nCreate a new Augeas handle for editing configuration files.\nIf there was any previous Augeas handle associated with this\nguestfs session, then it is closed.\n\nYou must call this before using any other C<aug_*>\ncommands.\n\nC<root> is the filesystem root.  C<root> must not be NULL,\nuse C</> instead.\n\nThe flags are the same as the flags defined in\nE<lt>augeas.hE<gt>, the logical I<or> of the following\nintegers:\n\n=over 4\n\n=item C<AUG_SAVE_BACKUP> = 1\n\nKeep the original file with a C<.augsave> extension.\n\n=item C<AUG_SAVE_NEWFILE> = 2\n\nSave changes into a file with extension C<.augnew>, and\ndo not overwrite original.  Overrides C<AUG_SAVE_BACKUP>.\n\n=item C<AUG_TYPE_CHECK> = 4\n\nTypecheck lenses (can be expensive).\n\n=item C<AUG_NO_STDINC> = 8\n\nDo not use standard load path for modules.\n\n=item C<AUG_SAVE_NOOP> = 16\n\nMake save a no-op, just record what would have been changed.\n\n=item C<AUG_NO_LOAD> = 32\n\nDo not load the tree in C<aug_init>.\n\n=back\n\nTo close the handle, you can call C<aug_close>.\n\nTo find out more about Augeas, see L<http://augeas.net/>.");
315   else
316   if (strcasecmp (cmd, "aug_close") == 0 || strcasecmp (cmd, "aug-close") == 0)
317     pod2text ("aug-close - close the current Augeas handle", " aug-close\n\nClose the current Augeas handle and free up any resources\nused by it.  After calling this, you have to call\nC<aug_init> again before you can use any other\nAugeas functions.");
318   else
319   if (strcasecmp (cmd, "aug_defvar") == 0 || strcasecmp (cmd, "aug-defvar") == 0)
320     pod2text ("aug-defvar - define an Augeas variable", " aug-defvar <name> <expr>\n\nDefines an Augeas variable C<name> whose value is the result\nof evaluating C<expr>.  If C<expr> is NULL, then C<name> is\nundefined.\n\nOn success this returns the number of nodes in C<expr>, or\nC<0> if C<expr> evaluates to something which is not a nodeset.");
321   else
322   if (strcasecmp (cmd, "aug_defnode") == 0 || strcasecmp (cmd, "aug-defnode") == 0)
323     pod2text ("aug-defnode - define an Augeas node", " aug-defnode <name> <expr> <val>\n\nDefines a variable C<name> whose value is the result of\nevaluating C<expr>.\n\nIf C<expr> evaluates to an empty nodeset, a node is created,\nequivalent to calling C<aug_set> C<expr>, C<value>.\nC<name> will be the nodeset containing that single node.\n\nOn success this returns a pair containing the\nnumber of nodes in the nodeset, and a boolean flag\nif a node was created.");
324   else
325   if (strcasecmp (cmd, "aug_get") == 0 || strcasecmp (cmd, "aug-get") == 0)
326     pod2text ("aug-get - look up the value of an Augeas path", " aug-get <path>\n\nLook up the value associated with C<path>.  If C<path>\nmatches exactly one node, the C<value> is returned.");
327   else
328   if (strcasecmp (cmd, "aug_set") == 0 || strcasecmp (cmd, "aug-set") == 0)
329     pod2text ("aug-set - set Augeas path to value", " aug-set <path> <val>\n\nSet the value associated with C<path> to C<value>.");
330   else
331   if (strcasecmp (cmd, "aug_insert") == 0 || strcasecmp (cmd, "aug-insert") == 0)
332     pod2text ("aug-insert - insert a sibling Augeas node", " aug-insert <path> <label> <before>\n\nCreate a new sibling C<label> for C<path>, inserting it into\nthe tree before or after C<path> (depending on the boolean\nflag C<before>).\n\nC<path> must match exactly one existing node in the tree, and\nC<label> must be a label, ie. not contain C</>, C<*> or end\nwith a bracketed index C<[N]>.");
333   else
334   if (strcasecmp (cmd, "aug_rm") == 0 || strcasecmp (cmd, "aug-rm") == 0)
335     pod2text ("aug-rm - remove an Augeas path", " aug-rm <path>\n\nRemove C<path> and all of its children.\n\nOn success this returns the number of entries which were removed.");
336   else
337   if (strcasecmp (cmd, "aug_mv") == 0 || strcasecmp (cmd, "aug-mv") == 0)
338     pod2text ("aug-mv - move Augeas node", " aug-mv <src> <dest>\n\nMove the node C<src> to C<dest>.  C<src> must match exactly\none node.  C<dest> is overwritten if it exists.");
339   else
340   if (strcasecmp (cmd, "aug_match") == 0 || strcasecmp (cmd, "aug-match") == 0)
341     pod2text ("aug-match - return Augeas nodes which match path", " aug-match <path>\n\nReturns a list of paths which match the path expression C<path>.\nThe returned paths are sufficiently qualified so that they match\nexactly one node in the current tree.");
342   else
343   if (strcasecmp (cmd, "aug_save") == 0 || strcasecmp (cmd, "aug-save") == 0)
344     pod2text ("aug-save - write all pending Augeas changes to disk", " aug-save\n\nThis writes all pending changes to disk.\n\nThe flags which were passed to C<aug_init> affect exactly\nhow files are saved.");
345   else
346   if (strcasecmp (cmd, "aug_load") == 0 || strcasecmp (cmd, "aug-load") == 0)
347     pod2text ("aug-load - load files into the tree", " aug-load\n\nLoad files into the tree.\n\nSee C<aug_load> in the Augeas documentation for the full gory\ndetails.");
348   else
349   if (strcasecmp (cmd, "aug_ls") == 0 || strcasecmp (cmd, "aug-ls") == 0)
350     pod2text ("aug-ls - list Augeas nodes under a path", " aug-ls <path>\n\nThis is just a shortcut for listing C<aug_match>\nC<path/*> and sorting the resulting nodes into alphabetical order.");
351   else
352   if (strcasecmp (cmd, "rm") == 0)
353     pod2text ("rm - remove a file", " rm <path>\n\nRemove the single file C<path>.");
354   else
355   if (strcasecmp (cmd, "rmdir") == 0)
356     pod2text ("rmdir - remove a directory", " rmdir <path>\n\nRemove the single directory C<path>.");
357   else
358   if (strcasecmp (cmd, "rm_rf") == 0 || strcasecmp (cmd, "rm-rf") == 0)
359     pod2text ("rm-rf - remove a file or directory recursively", " rm-rf <path>\n\nRemove the file or directory C<path>, recursively removing the\ncontents if its a directory.  This is like the C<rm -rf> shell\ncommand.");
360   else
361   if (strcasecmp (cmd, "mkdir") == 0)
362     pod2text ("mkdir - create a directory", " mkdir <path>\n\nCreate a directory named C<path>.");
363   else
364   if (strcasecmp (cmd, "mkdir_p") == 0 || strcasecmp (cmd, "mkdir-p") == 0)
365     pod2text ("mkdir-p - create a directory and parents", " mkdir-p <path>\n\nCreate a directory named C<path>, creating any parent directories\nas necessary.  This is like the C<mkdir -p> shell command.");
366   else
367   if (strcasecmp (cmd, "chmod") == 0)
368     pod2text ("chmod - change file mode", " chmod <mode> <path>\n\nChange the mode (permissions) of C<path> to C<mode>.  Only\nnumeric modes are supported.");
369   else
370   if (strcasecmp (cmd, "chown") == 0)
371     pod2text ("chown - change file owner and group", " chown <owner> <group> <path>\n\nChange the file owner to C<owner> and group to C<group>.\n\nOnly numeric uid and gid are supported.  If you want to use\nnames, you will need to locate and parse the password file\nyourself (Augeas support makes this relatively easy).");
372   else
373   if (strcasecmp (cmd, "exists") == 0)
374     pod2text ("exists - test if file or directory exists", " exists <path>\n\nThis returns C<true> if and only if there is a file, directory\n(or anything) with the given C<path> name.\n\nSee also C<is_file>, C<is_dir>, C<stat>.");
375   else
376   if (strcasecmp (cmd, "is_file") == 0 || strcasecmp (cmd, "is-file") == 0)
377     pod2text ("is-file - test if file exists", " is-file <path>\n\nThis returns C<true> if and only if there is a file\nwith the given C<path> name.  Note that it returns false for\nother objects like directories.\n\nSee also C<stat>.");
378   else
379   if (strcasecmp (cmd, "is_dir") == 0 || strcasecmp (cmd, "is-dir") == 0)
380     pod2text ("is-dir - test if file exists", " is-dir <path>\n\nThis returns C<true> if and only if there is a directory\nwith the given C<path> name.  Note that it returns false for\nother objects like files.\n\nSee also C<stat>.");
381   else
382   if (strcasecmp (cmd, "pvcreate") == 0)
383     pod2text ("pvcreate - create an LVM physical volume", " pvcreate <device>\n\nThis creates an LVM physical volume on the named C<device>,\nwhere C<device> should usually be a partition name such\nas C</dev/sda1>.");
384   else
385   if (strcasecmp (cmd, "vgcreate") == 0)
386     pod2text ("vgcreate - create an LVM volume group", " vgcreate <volgroup> <physvols>\n\nThis creates an LVM volume group called C<volgroup>\nfrom the non-empty list of physical volumes C<physvols>.");
387   else
388   if (strcasecmp (cmd, "lvcreate") == 0)
389     pod2text ("lvcreate - create an LVM volume group", " lvcreate <logvol> <volgroup> <mbytes>\n\nThis creates an LVM volume group called C<logvol>\non the volume group C<volgroup>, with C<size> megabytes.");
390   else
391   if (strcasecmp (cmd, "mkfs") == 0)
392     pod2text ("mkfs - make a filesystem", " mkfs <fstype> <device>\n\nThis creates a filesystem on C<device> (usually a partition\nor LVM logical volume).  The filesystem type is C<fstype>, for\nexample C<ext3>.");
393   else
394   if (strcasecmp (cmd, "sfdisk") == 0)
395     pod2text ("sfdisk - create partitions on a block device", " sfdisk <device> <cyls> <heads> <sectors> <lines>\n\nThis is a direct interface to the L<sfdisk(8)> program for creating\npartitions on block devices.\n\nC<device> should be a block device, for example C</dev/sda>.\n\nC<cyls>, C<heads> and C<sectors> are the number of cylinders, heads\nand sectors on the device, which are passed directly to sfdisk as\nthe I<-C>, I<-H> and I<-S> parameters.  If you pass C<0> for any\nof these, then the corresponding parameter is omitted.  Usually for\n'large' disks, you can just pass C<0> for these, but for small\n(floppy-sized) disks, sfdisk (or rather, the kernel) cannot work\nout the right geometry and you will need to tell it.\n\nC<lines> is a list of lines that we feed to C<sfdisk>.  For more\ninformation refer to the L<sfdisk(8)> manpage.\n\nTo create a single partition occupying the whole disk, you would\npass C<lines> as a single element list, when the single element being\nthe string C<,> (comma).\n\nSee also: C<sfdisk_l>, C<sfdisk_N>\n\nB<This command is dangerous.  Without careful use you\ncan easily destroy all your data>.");
396   else
397   if (strcasecmp (cmd, "write_file") == 0 || strcasecmp (cmd, "write-file") == 0)
398     pod2text ("write-file - create a file", " write-file <path> <content> <size>\n\nThis call creates a file called C<path>.  The contents of the\nfile is the string C<content> (which can contain any 8 bit data),\nwith length C<size>.\n\nAs a special case, if C<size> is C<0>\nthen the length is calculated using C<strlen> (so in this case\nthe content cannot contain embedded ASCII NULs).\n\nI<NB.> Owing to a bug, writing content containing ASCII NUL\ncharacters does I<not> work, even if the length is specified.\nWe hope to resolve this bug in a future version.  In the meantime\nuse C<upload>.\n\nBecause of the message protocol, there is a transfer limit \nof somewhere between 2MB and 4MB.  To transfer large files you should use\nFTP.");
399   else
400   if (strcasecmp (cmd, "umount") == 0 || strcasecmp (cmd, "unmount") == 0)
401     pod2text ("umount - unmount a filesystem", " umount <pathordevice>\n\nThis unmounts the given filesystem.  The filesystem may be\nspecified either by its mountpoint (path) or the device which\ncontains the filesystem.\n\nYou can use 'unmount' as an alias for this command.");
402   else
403   if (strcasecmp (cmd, "mounts") == 0)
404     pod2text ("mounts - show mounted filesystems", " mounts\n\nThis returns the list of currently mounted filesystems.  It returns\nthe list of devices (eg. C</dev/sda1>, C</dev/VG/LV>).\n\nSome internal mounts are not shown.");
405   else
406   if (strcasecmp (cmd, "umount_all") == 0 || strcasecmp (cmd, "umount-all") == 0 || strcasecmp (cmd, "unmount-all") == 0)
407     pod2text ("umount-all - unmount all filesystems", " umount-all\n\nThis unmounts all mounted filesystems.\n\nSome internal mounts are not unmounted by this call.\n\nYou can use 'unmount-all' as an alias for this command.");
408   else
409   if (strcasecmp (cmd, "lvm_remove_all") == 0 || strcasecmp (cmd, "lvm-remove-all") == 0)
410     pod2text ("lvm-remove-all - remove all LVM LVs, VGs and PVs", " lvm-remove-all\n\nThis command removes all LVM logical volumes, volume groups\nand physical volumes.\n\nB<This command is dangerous.  Without careful use you\ncan easily destroy all your data>.");
411   else
412   if (strcasecmp (cmd, "file") == 0)
413     pod2text ("file - determine file type", " file <path>\n\nThis call uses the standard L<file(1)> command to determine\nthe type or contents of the file.  This also works on devices,\nfor example to find out whether a partition contains a filesystem.\n\nThe exact command which runs is C<file -bsL path>.  Note in\nparticular that the filename is not prepended to the output\n(the C<-b> option).");
414   else
415   if (strcasecmp (cmd, "command") == 0)
416     pod2text ("command - run a command from the guest filesystem", " command <arguments>\n\nThis call runs a command from the guest filesystem.  The\nfilesystem must be mounted, and must contain a compatible\noperating system (ie. something Linux, with the same\nor compatible processor architecture).\n\nThe single parameter is an argv-style list of arguments.\nThe first element is the name of the program to run.\nSubsequent elements are parameters.  The list must be\nnon-empty (ie. must contain a program name).  Note that\nthe command runs directly, and is I<not> invoked via\nthe shell (see C<sh>).\n\nThe return value is anything printed to I<stdout> by\nthe command.\n\nIf the command returns a non-zero exit status, then\nthis function returns an error message.  The error message\nstring is the content of I<stderr> from the command.\n\nThe C<$PATH> environment variable will contain at least\nC</usr/bin> and C</bin>.  If you require a program from\nanother location, you should provide the full path in the\nfirst parameter.\n\nShared libraries and data files required by the program\nmust be available on filesystems which are mounted in the\ncorrect places.  It is the caller's responsibility to ensure\nall filesystems that are needed are mounted at the right\nlocations.\n\nBecause of the message protocol, there is a transfer limit \nof somewhere between 2MB and 4MB.  To transfer large files you should use\nFTP.");
417   else
418   if (strcasecmp (cmd, "command_lines") == 0 || strcasecmp (cmd, "command-lines") == 0)
419     pod2text ("command-lines - run a command, returning lines", " command-lines <arguments>\n\nThis is the same as C<command>, but splits the\nresult into a list of lines.\n\nSee also: C<sh_lines>\n\nBecause of the message protocol, there is a transfer limit \nof somewhere between 2MB and 4MB.  To transfer large files you should use\nFTP.");
420   else
421   if (strcasecmp (cmd, "stat") == 0)
422     pod2text ("stat - get file information", " stat <path>\n\nReturns file information for the given C<path>.\n\nThis is the same as the C<stat(2)> system call.");
423   else
424   if (strcasecmp (cmd, "lstat") == 0)
425     pod2text ("lstat - get file information for a symbolic link", " lstat <path>\n\nReturns file information for the given C<path>.\n\nThis is the same as C<stat> except that if C<path>\nis a symbolic link, then the link is stat-ed, not the file it\nrefers to.\n\nThis is the same as the C<lstat(2)> system call.");
426   else
427   if (strcasecmp (cmd, "statvfs") == 0)
428     pod2text ("statvfs - get file system statistics", " statvfs <path>\n\nReturns file system statistics for any mounted file system.\nC<path> should be a file or directory in the mounted file system\n(typically it is the mount point itself, but it doesn't need to be).\n\nThis is the same as the C<statvfs(2)> system call.");
429   else
430   if (strcasecmp (cmd, "tune2fs_l") == 0 || strcasecmp (cmd, "tune2fs-l") == 0)
431     pod2text ("tune2fs-l - get ext2/ext3/ext4 superblock details", " tune2fs-l <device>\n\nThis returns the contents of the ext2, ext3 or ext4 filesystem\nsuperblock on C<device>.\n\nIt is the same as running C<tune2fs -l device>.  See L<tune2fs(8)>\nmanpage for more details.  The list of fields returned isn't\nclearly defined, and depends on both the version of C<tune2fs>\nthat libguestfs was built against, and the filesystem itself.");
432   else
433   if (strcasecmp (cmd, "blockdev_setro") == 0 || strcasecmp (cmd, "blockdev-setro") == 0)
434     pod2text ("blockdev-setro - set block device to read-only", " blockdev-setro <device>\n\nSets the block device named C<device> to read-only.\n\nThis uses the L<blockdev(8)> command.");
435   else
436   if (strcasecmp (cmd, "blockdev_setrw") == 0 || strcasecmp (cmd, "blockdev-setrw") == 0)
437     pod2text ("blockdev-setrw - set block device to read-write", " blockdev-setrw <device>\n\nSets the block device named C<device> to read-write.\n\nThis uses the L<blockdev(8)> command.");
438   else
439   if (strcasecmp (cmd, "blockdev_getro") == 0 || strcasecmp (cmd, "blockdev-getro") == 0)
440     pod2text ("blockdev-getro - is block device set to read-only", " blockdev-getro <device>\n\nReturns a boolean indicating if the block device is read-only\n(true if read-only, false if not).\n\nThis uses the L<blockdev(8)> command.");
441   else
442   if (strcasecmp (cmd, "blockdev_getss") == 0 || strcasecmp (cmd, "blockdev-getss") == 0)
443     pod2text ("blockdev-getss - get sectorsize of block device", " blockdev-getss <device>\n\nThis returns the size of sectors on a block device.\nUsually 512, but can be larger for modern devices.\n\n(Note, this is not the size in sectors, use C<blockdev_getsz>\nfor that).\n\nThis uses the L<blockdev(8)> command.");
444   else
445   if (strcasecmp (cmd, "blockdev_getbsz") == 0 || strcasecmp (cmd, "blockdev-getbsz") == 0)
446     pod2text ("blockdev-getbsz - get blocksize of block device", " blockdev-getbsz <device>\n\nThis returns the block size of a device.\n\n(Note this is different from both I<size in blocks> and\nI<filesystem block size>).\n\nThis uses the L<blockdev(8)> command.");
447   else
448   if (strcasecmp (cmd, "blockdev_setbsz") == 0 || strcasecmp (cmd, "blockdev-setbsz") == 0)
449     pod2text ("blockdev-setbsz - set blocksize of block device", " blockdev-setbsz <device> <blocksize>\n\nThis sets the block size of a device.\n\n(Note this is different from both I<size in blocks> and\nI<filesystem block size>).\n\nThis uses the L<blockdev(8)> command.");
450   else
451   if (strcasecmp (cmd, "blockdev_getsz") == 0 || strcasecmp (cmd, "blockdev-getsz") == 0)
452     pod2text ("blockdev-getsz - get total size of device in 512-byte sectors", " blockdev-getsz <device>\n\nThis returns the size of the device in units of 512-byte sectors\n(even if the sectorsize isn't 512 bytes ... weird).\n\nSee also C<blockdev_getss> for the real sector size of\nthe device, and C<blockdev_getsize64> for the more\nuseful I<size in bytes>.\n\nThis uses the L<blockdev(8)> command.");
453   else
454   if (strcasecmp (cmd, "blockdev_getsize64") == 0 || strcasecmp (cmd, "blockdev-getsize64") == 0)
455     pod2text ("blockdev-getsize64 - get total size of device in bytes", " blockdev-getsize64 <device>\n\nThis returns the size of the device in bytes.\n\nSee also C<blockdev_getsz>.\n\nThis uses the L<blockdev(8)> command.");
456   else
457   if (strcasecmp (cmd, "blockdev_flushbufs") == 0 || strcasecmp (cmd, "blockdev-flushbufs") == 0)
458     pod2text ("blockdev-flushbufs - flush device buffers", " blockdev-flushbufs <device>\n\nThis tells the kernel to flush internal buffers associated\nwith C<device>.\n\nThis uses the L<blockdev(8)> command.");
459   else
460   if (strcasecmp (cmd, "blockdev_rereadpt") == 0 || strcasecmp (cmd, "blockdev-rereadpt") == 0)
461     pod2text ("blockdev-rereadpt - reread partition table", " blockdev-rereadpt <device>\n\nReread the partition table on C<device>.\n\nThis uses the L<blockdev(8)> command.");
462   else
463   if (strcasecmp (cmd, "upload") == 0)
464     pod2text ("upload - upload a file from the local machine", " upload <filename> <remotefilename>\n\nUpload local file C<filename> to C<remotefilename> on the\nfilesystem.\n\nC<filename> can also be a named pipe.\n\nSee also C<download>.");
465   else
466   if (strcasecmp (cmd, "download") == 0)
467     pod2text ("download - download a file to the local machine", " download <remotefilename> <filename>\n\nDownload file C<remotefilename> and save it as C<filename>\non the local machine.\n\nC<filename> can also be a named pipe.\n\nSee also C<upload>, C<cat>.");
468   else
469   if (strcasecmp (cmd, "checksum") == 0)
470     pod2text ("checksum - compute MD5, SHAx or CRC checksum of file", " checksum <csumtype> <path>\n\nThis call computes the MD5, SHAx or CRC checksum of the\nfile named C<path>.\n\nThe type of checksum to compute is given by the C<csumtype>\nparameter which must have one of the following values:\n\n=over 4\n\n=item C<crc>\n\nCompute the cyclic redundancy check (CRC) specified by POSIX\nfor the C<cksum> command.\n\n=item C<md5>\n\nCompute the MD5 hash (using the C<md5sum> program).\n\n=item C<sha1>\n\nCompute the SHA1 hash (using the C<sha1sum> program).\n\n=item C<sha224>\n\nCompute the SHA224 hash (using the C<sha224sum> program).\n\n=item C<sha256>\n\nCompute the SHA256 hash (using the C<sha256sum> program).\n\n=item C<sha384>\n\nCompute the SHA384 hash (using the C<sha384sum> program).\n\n=item C<sha512>\n\nCompute the SHA512 hash (using the C<sha512sum> program).\n\n=back\n\nThe checksum is returned as a printable string.");
471   else
472   if (strcasecmp (cmd, "tar_in") == 0 || strcasecmp (cmd, "tar-in") == 0)
473     pod2text ("tar-in - unpack tarfile to directory", " tar-in <tarfile> <directory>\n\nThis command uploads and unpacks local file C<tarfile> (an\nI<uncompressed> tar file) into C<directory>.\n\nTo upload a compressed tarball, use C<tgz_in>.");
474   else
475   if (strcasecmp (cmd, "tar_out") == 0 || strcasecmp (cmd, "tar-out") == 0)
476     pod2text ("tar-out - pack directory into tarfile", " tar-out <directory> <tarfile>\n\nThis command packs the contents of C<directory> and downloads\nit to local file C<tarfile>.\n\nTo download a compressed tarball, use C<tgz_out>.");
477   else
478   if (strcasecmp (cmd, "tgz_in") == 0 || strcasecmp (cmd, "tgz-in") == 0)
479     pod2text ("tgz-in - unpack compressed tarball to directory", " tgz-in <tarball> <directory>\n\nThis command uploads and unpacks local file C<tarball> (a\nI<gzip compressed> tar file) into C<directory>.\n\nTo upload an uncompressed tarball, use C<tar_in>.");
480   else
481   if (strcasecmp (cmd, "tgz_out") == 0 || strcasecmp (cmd, "tgz-out") == 0)
482     pod2text ("tgz-out - pack directory into compressed tarball", " tgz-out <directory> <tarball>\n\nThis command packs the contents of C<directory> and downloads\nit to local file C<tarball>.\n\nTo download an uncompressed tarball, use C<tar_out>.");
483   else
484   if (strcasecmp (cmd, "mount_ro") == 0 || strcasecmp (cmd, "mount-ro") == 0)
485     pod2text ("mount-ro - mount a guest disk, read-only", " mount-ro <device> <mountpoint>\n\nThis is the same as the C<mount> command, but it\nmounts the filesystem with the read-only (I<-o ro>) flag.");
486   else
487   if (strcasecmp (cmd, "mount_options") == 0 || strcasecmp (cmd, "mount-options") == 0)
488     pod2text ("mount-options - mount a guest disk with mount options", " mount-options <options> <device> <mountpoint>\n\nThis is the same as the C<mount> command, but it\nallows you to set the mount options as for the\nL<mount(8)> I<-o> flag.");
489   else
490   if (strcasecmp (cmd, "mount_vfs") == 0 || strcasecmp (cmd, "mount-vfs") == 0)
491     pod2text ("mount-vfs - mount a guest disk with mount options and vfstype", " mount-vfs <options> <vfstype> <device> <mountpoint>\n\nThis is the same as the C<mount> command, but it\nallows you to set both the mount options and the vfstype\nas for the L<mount(8)> I<-o> and I<-t> flags.");
492   else
493   if (strcasecmp (cmd, "debug") == 0)
494     pod2text ("debug - debugging and internals", " debug <subcmd> <extraargs>\n\nThe C<debug> command exposes some internals of\nC<guestfsd> (the guestfs daemon) that runs inside the\nqemu subprocess.\n\nThere is no comprehensive help for this command.  You have\nto look at the file C<daemon/debug.c> in the libguestfs source\nto find out what you can do.");
495   else
496   if (strcasecmp (cmd, "lvremove") == 0)
497     pod2text ("lvremove - remove an LVM logical volume", " lvremove <device>\n\nRemove an LVM logical volume C<device>, where C<device> is\nthe path to the LV, such as C</dev/VG/LV>.\n\nYou can also remove all LVs in a volume group by specifying\nthe VG name, C</dev/VG>.");
498   else
499   if (strcasecmp (cmd, "vgremove") == 0)
500     pod2text ("vgremove - remove an LVM volume group", " vgremove <vgname>\n\nRemove an LVM volume group C<vgname>, (for example C<VG>).\n\nThis also forcibly removes all logical volumes in the volume\ngroup (if any).");
501   else
502   if (strcasecmp (cmd, "pvremove") == 0)
503     pod2text ("pvremove - remove an LVM physical volume", " pvremove <device>\n\nThis wipes a physical volume C<device> so that LVM will no longer\nrecognise it.\n\nThe implementation uses the C<pvremove> command which refuses to\nwipe physical volumes that contain any volume groups, so you have\nto remove those first.");
504   else
505   if (strcasecmp (cmd, "set_e2label") == 0 || strcasecmp (cmd, "set-e2label") == 0)
506     pod2text ("set-e2label - set the ext2/3/4 filesystem label", " set-e2label <device> <label>\n\nThis sets the ext2/3/4 filesystem label of the filesystem on\nC<device> to C<label>.  Filesystem labels are limited to\n16 characters.\n\nYou can use either C<tune2fs_l> or C<get_e2label>\nto return the existing label on a filesystem.");
507   else
508   if (strcasecmp (cmd, "get_e2label") == 0 || strcasecmp (cmd, "get-e2label") == 0)
509     pod2text ("get-e2label - get the ext2/3/4 filesystem label", " get-e2label <device>\n\nThis returns the ext2/3/4 filesystem label of the filesystem on\nC<device>.");
510   else
511   if (strcasecmp (cmd, "set_e2uuid") == 0 || strcasecmp (cmd, "set-e2uuid") == 0)
512     pod2text ("set-e2uuid - set the ext2/3/4 filesystem UUID", " set-e2uuid <device> <uuid>\n\nThis sets the ext2/3/4 filesystem UUID of the filesystem on\nC<device> to C<uuid>.  The format of the UUID and alternatives\nsuch as C<clear>, C<random> and C<time> are described in the\nL<tune2fs(8)> manpage.\n\nYou can use either C<tune2fs_l> or C<get_e2uuid>\nto return the existing UUID of a filesystem.");
513   else
514   if (strcasecmp (cmd, "get_e2uuid") == 0 || strcasecmp (cmd, "get-e2uuid") == 0)
515     pod2text ("get-e2uuid - get the ext2/3/4 filesystem UUID", " get-e2uuid <device>\n\nThis returns the ext2/3/4 filesystem UUID of the filesystem on\nC<device>.");
516   else
517   if (strcasecmp (cmd, "fsck") == 0)
518     pod2text ("fsck - run the filesystem checker", " fsck <fstype> <device>\n\nThis runs the filesystem checker (fsck) on C<device> which\nshould have filesystem type C<fstype>.\n\nThe returned integer is the status.  See L<fsck(8)> for the\nlist of status codes from C<fsck>.\n\nNotes:\n\n=over 4\n\n=item *\n\nMultiple status codes can be summed together.\n\n=item *\n\nA non-zero return code can mean \"success\", for example if\nerrors have been corrected on the filesystem.\n\n=item *\n\nChecking or repairing NTFS volumes is not supported\n(by linux-ntfs).\n\n=back\n\nThis command is entirely equivalent to running C<fsck -a -t fstype device>.");
519   else
520   if (strcasecmp (cmd, "zero") == 0)
521     pod2text ("zero - write zeroes to the device", " zero <device>\n\nThis command writes zeroes over the first few blocks of C<device>.\n\nHow many blocks are zeroed isn't specified (but it's I<not> enough\nto securely wipe the device).  It should be sufficient to remove\nany partition tables, filesystem superblocks and so on.\n\nSee also: C<scrub_device>.");
522   else
523   if (strcasecmp (cmd, "grub_install") == 0 || strcasecmp (cmd, "grub-install") == 0)
524     pod2text ("grub-install - install GRUB", " grub-install <root> <device>\n\nThis command installs GRUB (the Grand Unified Bootloader) on\nC<device>, with the root directory being C<root>.");
525   else
526   if (strcasecmp (cmd, "cp") == 0)
527     pod2text ("cp - copy a file", " cp <src> <dest>\n\nThis copies a file from C<src> to C<dest> where C<dest> is\neither a destination filename or destination directory.");
528   else
529   if (strcasecmp (cmd, "cp_a") == 0 || strcasecmp (cmd, "cp-a") == 0)
530     pod2text ("cp-a - copy a file or directory recursively", " cp-a <src> <dest>\n\nThis copies a file or directory from C<src> to C<dest>\nrecursively using the C<cp -a> command.");
531   else
532   if (strcasecmp (cmd, "mv") == 0)
533     pod2text ("mv - move a file", " mv <src> <dest>\n\nThis moves a file from C<src> to C<dest> where C<dest> is\neither a destination filename or destination directory.");
534   else
535   if (strcasecmp (cmd, "drop_caches") == 0 || strcasecmp (cmd, "drop-caches") == 0)
536     pod2text ("drop-caches - drop kernel page cache, dentries and inodes", " drop-caches <whattodrop>\n\nThis instructs the guest kernel to drop its page cache,\nand/or dentries and inode caches.  The parameter C<whattodrop>\ntells the kernel what precisely to drop, see\nL<http://linux-mm.org/Drop_Caches>\n\nSetting C<whattodrop> to 3 should drop everything.\n\nThis automatically calls L<sync(2)> before the operation,\nso that the maximum guest memory is freed.");
537   else
538   if (strcasecmp (cmd, "dmesg") == 0)
539     pod2text ("dmesg - return kernel messages", " dmesg\n\nThis returns the kernel messages (C<dmesg> output) from\nthe guest kernel.  This is sometimes useful for extended\ndebugging of problems.\n\nAnother way to get the same information is to enable\nverbose messages with C<set_verbose> or by setting\nthe environment variable C<LIBGUESTFS_DEBUG=1> before\nrunning the program.");
540   else
541   if (strcasecmp (cmd, "ping_daemon") == 0 || strcasecmp (cmd, "ping-daemon") == 0)
542     pod2text ("ping-daemon - ping the guest daemon", " ping-daemon\n\nThis is a test probe into the guestfs daemon running inside\nthe qemu subprocess.  Calling this function checks that the\ndaemon responds to the ping message, without affecting the daemon\nor attached block device(s) in any other way.");
543   else
544   if (strcasecmp (cmd, "equal") == 0)
545     pod2text ("equal - test if two files have equal contents", " equal <file1> <file2>\n\nThis compares the two files C<file1> and C<file2> and returns\ntrue if their content is exactly equal, or false otherwise.\n\nThe external L<cmp(1)> program is used for the comparison.");
546   else
547   if (strcasecmp (cmd, "strings") == 0)
548     pod2text ("strings - print the printable strings in a file", " strings <path>\n\nThis runs the L<strings(1)> command on a file and returns\nthe list of printable strings found.\n\nBecause of the message protocol, there is a transfer limit \nof somewhere between 2MB and 4MB.  To transfer large files you should use\nFTP.");
549   else
550   if (strcasecmp (cmd, "strings_e") == 0 || strcasecmp (cmd, "strings-e") == 0)
551     pod2text ("strings-e - print the printable strings in a file", " strings-e <encoding> <path>\n\nThis is like the C<strings> command, but allows you to\nspecify the encoding.\n\nSee the L<strings(1)> manpage for the full list of encodings.\n\nCommonly useful encodings are C<l> (lower case L) which will\nshow strings inside Windows/x86 files.\n\nThe returned strings are transcoded to UTF-8.\n\nBecause of the message protocol, there is a transfer limit \nof somewhere between 2MB and 4MB.  To transfer large files you should use\nFTP.");
552   else
553   if (strcasecmp (cmd, "hexdump") == 0)
554     pod2text ("hexdump - dump a file in hexadecimal", " hexdump <path>\n\nThis runs C<hexdump -C> on the given C<path>.  The result is\nthe human-readable, canonical hex dump of the file.\n\nBecause of the message protocol, there is a transfer limit \nof somewhere between 2MB and 4MB.  To transfer large files you should use\nFTP.");
555   else
556   if (strcasecmp (cmd, "zerofree") == 0)
557     pod2text ("zerofree - zero unused inodes and disk blocks on ext2/3 filesystem", " zerofree <device>\n\nThis runs the I<zerofree> program on C<device>.  This program\nclaims to zero unused inodes and disk blocks on an ext2/3\nfilesystem, thus making it possible to compress the filesystem\nmore effectively.\n\nYou should B<not> run this program if the filesystem is\nmounted.\n\nIt is possible that using this program can damage the filesystem\nor data on the filesystem.");
558   else
559   if (strcasecmp (cmd, "pvresize") == 0)
560     pod2text ("pvresize - resize an LVM physical volume", " pvresize <device>\n\nThis resizes (expands or shrinks) an existing LVM physical\nvolume to match the new size of the underlying device.");
561   else
562   if (strcasecmp (cmd, "sfdisk_N") == 0 || strcasecmp (cmd, "sfdisk-N") == 0)
563     pod2text ("sfdisk-N - modify a single partition on a block device", " sfdisk-N <device> <partnum> <cyls> <heads> <sectors> <line>\n\nThis runs L<sfdisk(8)> option to modify just the single\npartition C<n> (note: C<n> counts from 1).\n\nFor other parameters, see C<sfdisk>.  You should usually\npass C<0> for the cyls/heads/sectors parameters.\n\nB<This command is dangerous.  Without careful use you\ncan easily destroy all your data>.");
564   else
565   if (strcasecmp (cmd, "sfdisk_l") == 0 || strcasecmp (cmd, "sfdisk-l") == 0)
566     pod2text ("sfdisk-l - display the partition table", " sfdisk-l <device>\n\nThis displays the partition table on C<device>, in the\nhuman-readable output of the L<sfdisk(8)> command.  It is\nnot intended to be parsed.");
567   else
568   if (strcasecmp (cmd, "sfdisk_kernel_geometry") == 0 || strcasecmp (cmd, "sfdisk-kernel-geometry") == 0)
569     pod2text ("sfdisk-kernel-geometry - display the kernel geometry", " sfdisk-kernel-geometry <device>\n\nThis displays the kernel's idea of the geometry of C<device>.\n\nThe result is in human-readable format, and not designed to\nbe parsed.");
570   else
571   if (strcasecmp (cmd, "sfdisk_disk_geometry") == 0 || strcasecmp (cmd, "sfdisk-disk-geometry") == 0)
572     pod2text ("sfdisk-disk-geometry - display the disk geometry from the partition table", " sfdisk-disk-geometry <device>\n\nThis displays the disk geometry of C<device> read from the\npartition table.  Especially in the case where the underlying\nblock device has been resized, this can be different from the\nkernel's idea of the geometry (see C<sfdisk_kernel_geometry>).\n\nThe result is in human-readable format, and not designed to\nbe parsed.");
573   else
574   if (strcasecmp (cmd, "vg_activate_all") == 0 || strcasecmp (cmd, "vg-activate-all") == 0)
575     pod2text ("vg-activate-all - activate or deactivate all volume groups", " vg-activate-all <activate>\n\nThis command activates or (if C<activate> is false) deactivates\nall logical volumes in all volume groups.\nIf activated, then they are made known to the\nkernel, ie. they appear as C</dev/mapper> devices.  If deactivated,\nthen those devices disappear.\n\nThis command is the same as running C<vgchange -a y|n>");
576   else
577   if (strcasecmp (cmd, "vg_activate") == 0 || strcasecmp (cmd, "vg-activate") == 0)
578     pod2text ("vg-activate - activate or deactivate some volume groups", " vg-activate <activate> <volgroups>\n\nThis command activates or (if C<activate> is false) deactivates\nall logical volumes in the listed volume groups C<volgroups>.\nIf activated, then they are made known to the\nkernel, ie. they appear as C</dev/mapper> devices.  If deactivated,\nthen those devices disappear.\n\nThis command is the same as running C<vgchange -a y|n volgroups...>\n\nNote that if C<volgroups> is an empty list then B<all> volume groups\nare activated or deactivated.");
579   else
580   if (strcasecmp (cmd, "lvresize") == 0)
581     pod2text ("lvresize - resize an LVM logical volume", " lvresize <device> <mbytes>\n\nThis resizes (expands or shrinks) an existing LVM logical\nvolume to C<mbytes>.  When reducing, data in the reduced part\nis lost.");
582   else
583   if (strcasecmp (cmd, "resize2fs") == 0)
584     pod2text ("resize2fs - resize an ext2/ext3 filesystem", " resize2fs <device>\n\nThis resizes an ext2 or ext3 filesystem to match the size of\nthe underlying device.\n\nI<Note:> It is sometimes required that you run C<e2fsck_f>\non the C<device> before calling this command.  For unknown reasons\nC<resize2fs> sometimes gives an error about this and sometimes not.\nIn any case, it is always safe to call C<e2fsck_f> before\ncalling this function.");
585   else
586   if (strcasecmp (cmd, "find") == 0)
587     pod2text ("find - find all files and directories", " find <directory>\n\nThis command lists out all files and directories, recursively,\nstarting at C<directory>.  It is essentially equivalent to\nrunning the shell command C<find directory -print> but some\npost-processing happens on the output, described below.\n\nThis returns a list of strings I<without any prefix>.  Thus\nif the directory structure was:\n\n /tmp/a\n /tmp/b\n /tmp/c/d\n\nthen the returned list from C<find> C</tmp> would be\n4 elements:\n\n a\n b\n c\n c/d\n\nIf C<directory> is not a directory, then this command returns\nan error.\n\nThe returned list is sorted.");
588   else
589   if (strcasecmp (cmd, "e2fsck_f") == 0 || strcasecmp (cmd, "e2fsck-f") == 0)
590     pod2text ("e2fsck-f - check an ext2/ext3 filesystem", " e2fsck-f <device>\n\nThis runs C<e2fsck -p -f device>, ie. runs the ext2/ext3\nfilesystem checker on C<device>, noninteractively (C<-p>),\neven if the filesystem appears to be clean (C<-f>).\n\nThis command is only needed because of C<resize2fs>\n(q.v.).  Normally you should use C<fsck>.");
591   else
592   if (strcasecmp (cmd, "sleep") == 0)
593     pod2text ("sleep - sleep for some seconds", " sleep <secs>\n\nSleep for C<secs> seconds.");
594   else
595   if (strcasecmp (cmd, "ntfs_3g_probe") == 0 || strcasecmp (cmd, "ntfs-3g-probe") == 0)
596     pod2text ("ntfs-3g-probe - probe NTFS volume", " ntfs-3g-probe <rw> <device>\n\nThis command runs the L<ntfs-3g.probe(8)> command which probes\nan NTFS C<device> for mountability.  (Not all NTFS volumes can\nbe mounted read-write, and some cannot be mounted at all).\n\nC<rw> is a boolean flag.  Set it to true if you want to test\nif the volume can be mounted read-write.  Set it to false if\nyou want to test if the volume can be mounted read-only.\n\nThe return value is an integer which C<0> if the operation\nwould succeed, or some non-zero value documented in the\nL<ntfs-3g.probe(8)> manual page.");
597   else
598   if (strcasecmp (cmd, "sh") == 0)
599     pod2text ("sh - run a command via the shell", " sh <command>\n\nThis call runs a command from the guest filesystem via the\nguest's C</bin/sh>.\n\nThis is like C<command>, but passes the command to:\n\n /bin/sh -c \"command\"\n\nDepending on the guest's shell, this usually results in\nwildcards being expanded, shell expressions being interpolated\nand so on.\n\nAll the provisos about C<command> apply to this call.");
600   else
601   if (strcasecmp (cmd, "sh_lines") == 0 || strcasecmp (cmd, "sh-lines") == 0)
602     pod2text ("sh-lines - run a command via the shell returning lines", " sh-lines <command>\n\nThis is the same as C<sh>, but splits the result\ninto a list of lines.\n\nSee also: C<command_lines>");
603   else
604   if (strcasecmp (cmd, "glob_expand") == 0 || strcasecmp (cmd, "glob-expand") == 0)
605     pod2text ("glob-expand - expand a wildcard path", " glob-expand <pattern>\n\nThis command searches for all the pathnames matching\nC<pattern> according to the wildcard expansion rules\nused by the shell.\n\nIf no paths match, then this returns an empty list\n(note: not an error).\n\nIt is just a wrapper around the C L<glob(3)> function\nwith flags C<GLOB_MARK|GLOB_BRACE>.\nSee that manual page for more details.");
606   else
607   if (strcasecmp (cmd, "scrub_device") == 0 || strcasecmp (cmd, "scrub-device") == 0)
608     pod2text ("scrub-device - scrub (securely wipe) a device", " scrub-device <device>\n\nThis command writes patterns over C<device> to make data retrieval\nmore difficult.\n\nIt is an interface to the L<scrub(1)> program.  See that\nmanual page for more details.\n\nB<This command is dangerous.  Without careful use you\ncan easily destroy all your data>.");
609   else
610   if (strcasecmp (cmd, "scrub_file") == 0 || strcasecmp (cmd, "scrub-file") == 0)
611     pod2text ("scrub-file - scrub (securely wipe) a file", " scrub-file <file>\n\nThis command writes patterns over a file to make data retrieval\nmore difficult.\n\nThe file is I<removed> after scrubbing.\n\nIt is an interface to the L<scrub(1)> program.  See that\nmanual page for more details.");
612   else
613   if (strcasecmp (cmd, "scrub_freespace") == 0 || strcasecmp (cmd, "scrub-freespace") == 0)
614     pod2text ("scrub-freespace - scrub (securely wipe) free space", " scrub-freespace <dir>\n\nThis command creates the directory C<dir> and then fills it\nwith files until the filesystem is full, and scrubs the files\nas for C<scrub_file>, and deletes them.\nThe intention is to scrub any free space on the partition\ncontaining C<dir>.\n\nIt is an interface to the L<scrub(1)> program.  See that\nmanual page for more details.");
615   else
616   if (strcasecmp (cmd, "mkdtemp") == 0)
617     pod2text ("mkdtemp - create a temporary directory", " mkdtemp <template>\n\nThis command creates a temporary directory.  The\nC<template> parameter should be a full pathname for the\ntemporary directory name with the final six characters being\n\"XXXXXX\".\n\nFor example: \"/tmp/myprogXXXXXX\" or \"/Temp/myprogXXXXXX\",\nthe second one being suitable for Windows filesystems.\n\nThe name of the temporary directory that was created\nis returned.\n\nThe temporary directory is created with mode 0700\nand is owned by root.\n\nThe caller is responsible for deleting the temporary\ndirectory and its contents after use.\n\nSee also: L<mkdtemp(3)>");
618   else
619   if (strcasecmp (cmd, "wc_l") == 0 || strcasecmp (cmd, "wc-l") == 0)
620     pod2text ("wc-l - count lines in a file", " wc-l <path>\n\nThis command counts the lines in a file, using the\nC<wc -l> external command.");
621   else
622   if (strcasecmp (cmd, "wc_w") == 0 || strcasecmp (cmd, "wc-w") == 0)
623     pod2text ("wc-w - count words in a file", " wc-w <path>\n\nThis command counts the words in a file, using the\nC<wc -w> external command.");
624   else
625   if (strcasecmp (cmd, "wc_c") == 0 || strcasecmp (cmd, "wc-c") == 0)
626     pod2text ("wc-c - count characters in a file", " wc-c <path>\n\nThis command counts the characters in a file, using the\nC<wc -c> external command.");
627   else
628   if (strcasecmp (cmd, "head") == 0)
629     pod2text ("head - return first 10 lines of a file", " head <path>\n\nThis command returns up to the first 10 lines of a file as\na list of strings.\n\nBecause of the message protocol, there is a transfer limit \nof somewhere between 2MB and 4MB.  To transfer large files you should use\nFTP.");
630   else
631   if (strcasecmp (cmd, "head_n") == 0 || strcasecmp (cmd, "head-n") == 0)
632     pod2text ("head-n - return first N lines of a file", " head-n <nrlines> <path>\n\nIf the parameter C<nrlines> is a positive number, this returns the first\nC<nrlines> lines of the file C<path>.\n\nIf the parameter C<nrlines> is a negative number, this returns lines\nfrom the file C<path>, excluding the last C<nrlines> lines.\n\nIf the parameter C<nrlines> is zero, this returns an empty list.\n\nBecause of the message protocol, there is a transfer limit \nof somewhere between 2MB and 4MB.  To transfer large files you should use\nFTP.");
633   else
634   if (strcasecmp (cmd, "tail") == 0)
635     pod2text ("tail - return last 10 lines of a file", " tail <path>\n\nThis command returns up to the last 10 lines of a file as\na list of strings.\n\nBecause of the message protocol, there is a transfer limit \nof somewhere between 2MB and 4MB.  To transfer large files you should use\nFTP.");
636   else
637   if (strcasecmp (cmd, "tail_n") == 0 || strcasecmp (cmd, "tail-n") == 0)
638     pod2text ("tail-n - return last N lines of a file", " tail-n <nrlines> <path>\n\nIf the parameter C<nrlines> is a positive number, this returns the last\nC<nrlines> lines of the file C<path>.\n\nIf the parameter C<nrlines> is a negative number, this returns lines\nfrom the file C<path>, starting with the C<-nrlines>th line.\n\nIf the parameter C<nrlines> is zero, this returns an empty list.\n\nBecause of the message protocol, there is a transfer limit \nof somewhere between 2MB and 4MB.  To transfer large files you should use\nFTP.");
639   else
640   if (strcasecmp (cmd, "df") == 0)
641     pod2text ("df - report file system disk space usage", " df\n\nThis command runs the C<df> command to report disk space used.\n\nThis command is mostly useful for interactive sessions.  It\nis I<not> intended that you try to parse the output string.\nUse C<statvfs> from programs.");
642   else
643   if (strcasecmp (cmd, "df_h") == 0 || strcasecmp (cmd, "df-h") == 0)
644     pod2text ("df-h - report file system disk space usage (human readable)", " df-h\n\nThis command runs the C<df -h> command to report disk space used\nin human-readable format.\n\nThis command is mostly useful for interactive sessions.  It\nis I<not> intended that you try to parse the output string.\nUse C<statvfs> from programs.");
645   else
646   if (strcasecmp (cmd, "du") == 0)
647     pod2text ("du - estimate file space usage", " du <path>\n\nThis command runs the C<du -s> command to estimate file space\nusage for C<path>.\n\nC<path> can be a file or a directory.  If C<path> is a directory\nthen the estimate includes the contents of the directory and all\nsubdirectories (recursively).\n\nThe result is the estimated size in I<kilobytes>\n(ie. units of 1024 bytes).");
648   else
649   if (strcasecmp (cmd, "initrd_list") == 0 || strcasecmp (cmd, "initrd-list") == 0)
650     pod2text ("initrd-list - list files in an initrd", " initrd-list <path>\n\nThis command lists out files contained in an initrd.\n\nThe files are listed without any initial C</> character.  The\nfiles are listed in the order they appear (not necessarily\nalphabetical).  Directory names are listed as separate items.\n\nOld Linux kernels (2.4 and earlier) used a compressed ext2\nfilesystem as initrd.  We I<only> support the newer initramfs\nformat (compressed cpio files).");
651   else
652   if (strcasecmp (cmd, "mount_loop") == 0 || strcasecmp (cmd, "mount-loop") == 0)
653     pod2text ("mount-loop - mount a file using the loop device", " mount-loop <file> <mountpoint>\n\nThis command lets you mount C<file> (a filesystem image\nin a file) on a mount point.  It is entirely equivalent to\nthe command C<mount -o loop file mountpoint>.");
654   else
655   if (strcasecmp (cmd, "mkswap") == 0)
656     pod2text ("mkswap - create a swap partition", " mkswap <device>\n\nCreate a swap partition on C<device>.");
657   else
658   if (strcasecmp (cmd, "mkswap_L") == 0 || strcasecmp (cmd, "mkswap-L") == 0)
659     pod2text ("mkswap-L - create a swap partition with a label", " mkswap-L <label> <device>\n\nCreate a swap partition on C<device> with label C<label>.");
660   else
661   if (strcasecmp (cmd, "mkswap_U") == 0 || strcasecmp (cmd, "mkswap-U") == 0)
662     pod2text ("mkswap-U - create a swap partition with an explicit UUID", " mkswap-U <uuid> <device>\n\nCreate a swap partition on C<device> with UUID C<uuid>.");
663   else
664   if (strcasecmp (cmd, "mknod") == 0)
665     pod2text ("mknod - make block, character or FIFO devices", " mknod <mode> <devmajor> <devminor> <path>\n\nThis call creates block or character special devices, or\nnamed pipes (FIFOs).\n\nThe C<mode> parameter should be the mode, using the standard\nconstants.  C<devmajor> and C<devminor> are the\ndevice major and minor numbers, only used when creating block\nand character special devices.");
666   else
667   if (strcasecmp (cmd, "mkfifo") == 0)
668     pod2text ("mkfifo - make FIFO (named pipe)", " mkfifo <mode> <path>\n\nThis call creates a FIFO (named pipe) called C<path> with\nmode C<mode>.  It is just a convenient wrapper around\nC<mknod>.");
669   else
670   if (strcasecmp (cmd, "mknod_b") == 0 || strcasecmp (cmd, "mknod-b") == 0)
671     pod2text ("mknod-b - make block device node", " mknod-b <mode> <devmajor> <devminor> <path>\n\nThis call creates a block device node called C<path> with\nmode C<mode> and device major/minor C<devmajor> and C<devminor>.\nIt is just a convenient wrapper around C<mknod>.");
672   else
673   if (strcasecmp (cmd, "mknod_c") == 0 || strcasecmp (cmd, "mknod-c") == 0)
674     pod2text ("mknod-c - make char device node", " mknod-c <mode> <devmajor> <devminor> <path>\n\nThis call creates a char device node called C<path> with\nmode C<mode> and device major/minor C<devmajor> and C<devminor>.\nIt is just a convenient wrapper around C<mknod>.");
675   else
676   if (strcasecmp (cmd, "umask") == 0)
677     pod2text ("umask - set file mode creation mask (umask)", " umask <mask>\n\nThis function sets the mask used for creating new files and\ndevice nodes to C<mask & 0777>.\n\nTypical umask values would be C<022> which creates new files\nwith permissions like \"-rw-r--r--\" or \"-rwxr-xr-x\", and\nC<002> which creates new files with permissions like\n\"-rw-rw-r--\" or \"-rwxrwxr-x\".\n\nSee also L<umask(2)>, C<mknod>, C<mkdir>.\n\nThis call returns the previous umask.");
678   else
679     display_builtin_command (cmd);
680 }
681
682 static void print_pv (struct guestfs_lvm_pv *pv)
683 {
684   int i;
685
686   printf ("pv_name: %s\n", pv->pv_name);
687   printf ("pv_uuid: ");
688   for (i = 0; i < 32; ++i)
689     printf ("%c", pv->pv_uuid[i]);
690   printf ("\n");
691   printf ("pv_fmt: %s\n", pv->pv_fmt);
692   printf ("pv_size: %" PRIu64 "\n", pv->pv_size);
693   printf ("dev_size: %" PRIu64 "\n", pv->dev_size);
694   printf ("pv_free: %" PRIu64 "\n", pv->pv_free);
695   printf ("pv_used: %" PRIu64 "\n", pv->pv_used);
696   printf ("pv_attr: %s\n", pv->pv_attr);
697   printf ("pv_pe_count: %" PRIi64 "\n", pv->pv_pe_count);
698   printf ("pv_pe_alloc_count: %" PRIi64 "\n", pv->pv_pe_alloc_count);
699   printf ("pv_tags: %s\n", pv->pv_tags);
700   printf ("pe_start: %" PRIu64 "\n", pv->pe_start);
701   printf ("pv_mda_count: %" PRIi64 "\n", pv->pv_mda_count);
702   printf ("pv_mda_free: %" PRIu64 "\n", pv->pv_mda_free);
703 }
704
705 static void print_pv_list (struct guestfs_lvm_pv_list *pvs)
706 {
707   int i;
708
709   for (i = 0; i < pvs->len; ++i)
710     print_pv (&pvs->val[i]);
711 }
712
713 static void print_vg (struct guestfs_lvm_vg *vg)
714 {
715   int i;
716
717   printf ("vg_name: %s\n", vg->vg_name);
718   printf ("vg_uuid: ");
719   for (i = 0; i < 32; ++i)
720     printf ("%c", vg->vg_uuid[i]);
721   printf ("\n");
722   printf ("vg_fmt: %s\n", vg->vg_fmt);
723   printf ("vg_attr: %s\n", vg->vg_attr);
724   printf ("vg_size: %" PRIu64 "\n", vg->vg_size);
725   printf ("vg_free: %" PRIu64 "\n", vg->vg_free);
726   printf ("vg_sysid: %s\n", vg->vg_sysid);
727   printf ("vg_extent_size: %" PRIu64 "\n", vg->vg_extent_size);
728   printf ("vg_extent_count: %" PRIi64 "\n", vg->vg_extent_count);
729   printf ("vg_free_count: %" PRIi64 "\n", vg->vg_free_count);
730   printf ("max_lv: %" PRIi64 "\n", vg->max_lv);
731   printf ("max_pv: %" PRIi64 "\n", vg->max_pv);
732   printf ("pv_count: %" PRIi64 "\n", vg->pv_count);
733   printf ("lv_count: %" PRIi64 "\n", vg->lv_count);
734   printf ("snap_count: %" PRIi64 "\n", vg->snap_count);
735   printf ("vg_seqno: %" PRIi64 "\n", vg->vg_seqno);
736   printf ("vg_tags: %s\n", vg->vg_tags);
737   printf ("vg_mda_count: %" PRIi64 "\n", vg->vg_mda_count);
738   printf ("vg_mda_free: %" PRIu64 "\n", vg->vg_mda_free);
739 }
740
741 static void print_vg_list (struct guestfs_lvm_vg_list *vgs)
742 {
743   int i;
744
745   for (i = 0; i < vgs->len; ++i)
746     print_vg (&vgs->val[i]);
747 }
748
749 static void print_lv (struct guestfs_lvm_lv *lv)
750 {
751   int i;
752
753   printf ("lv_name: %s\n", lv->lv_name);
754   printf ("lv_uuid: ");
755   for (i = 0; i < 32; ++i)
756     printf ("%c", lv->lv_uuid[i]);
757   printf ("\n");
758   printf ("lv_attr: %s\n", lv->lv_attr);
759   printf ("lv_major: %" PRIi64 "\n", lv->lv_major);
760   printf ("lv_minor: %" PRIi64 "\n", lv->lv_minor);
761   printf ("lv_kernel_major: %" PRIi64 "\n", lv->lv_kernel_major);
762   printf ("lv_kernel_minor: %" PRIi64 "\n", lv->lv_kernel_minor);
763   printf ("lv_size: %" PRIu64 "\n", lv->lv_size);
764   printf ("seg_count: %" PRIi64 "\n", lv->seg_count);
765   printf ("origin: %s\n", lv->origin);
766   if (lv->snap_percent >= 0) printf ("snap_percent: %g %%\n", lv->snap_percent);
767   else printf ("snap_percent: \n");
768   if (lv->copy_percent >= 0) printf ("copy_percent: %g %%\n", lv->copy_percent);
769   else printf ("copy_percent: \n");
770   printf ("move_pv: %s\n", lv->move_pv);
771   printf ("lv_tags: %s\n", lv->lv_tags);
772   printf ("mirror_log: %s\n", lv->mirror_log);
773   printf ("modules: %s\n", lv->modules);
774 }
775
776 static void print_lv_list (struct guestfs_lvm_lv_list *lvs)
777 {
778   int i;
779
780   for (i = 0; i < lvs->len; ++i)
781     print_lv (&lvs->val[i]);
782 }
783
784 static void print_stat (struct guestfs_stat *stat)
785 {
786   printf ("dev: %" PRIi64 "\n", stat->dev);
787   printf ("ino: %" PRIi64 "\n", stat->ino);
788   printf ("mode: %" PRIi64 "\n", stat->mode);
789   printf ("nlink: %" PRIi64 "\n", stat->nlink);
790   printf ("uid: %" PRIi64 "\n", stat->uid);
791   printf ("gid: %" PRIi64 "\n", stat->gid);
792   printf ("rdev: %" PRIi64 "\n", stat->rdev);
793   printf ("size: %" PRIi64 "\n", stat->size);
794   printf ("blksize: %" PRIi64 "\n", stat->blksize);
795   printf ("blocks: %" PRIi64 "\n", stat->blocks);
796   printf ("atime: %" PRIi64 "\n", stat->atime);
797   printf ("mtime: %" PRIi64 "\n", stat->mtime);
798   printf ("ctime: %" PRIi64 "\n", stat->ctime);
799 }
800
801 static void print_statvfs (struct guestfs_statvfs *statvfs)
802 {
803   printf ("bsize: %" PRIi64 "\n", statvfs->bsize);
804   printf ("frsize: %" PRIi64 "\n", statvfs->frsize);
805   printf ("blocks: %" PRIi64 "\n", statvfs->blocks);
806   printf ("bfree: %" PRIi64 "\n", statvfs->bfree);
807   printf ("bavail: %" PRIi64 "\n", statvfs->bavail);
808   printf ("files: %" PRIi64 "\n", statvfs->files);
809   printf ("ffree: %" PRIi64 "\n", statvfs->ffree);
810   printf ("favail: %" PRIi64 "\n", statvfs->favail);
811   printf ("fsid: %" PRIi64 "\n", statvfs->fsid);
812   printf ("flag: %" PRIi64 "\n", statvfs->flag);
813   printf ("namemax: %" PRIi64 "\n", statvfs->namemax);
814 }
815
816 static int run_launch (const char *cmd, int argc, char *argv[])
817 {
818   int r;
819   if (argc != 0) {
820     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
821     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
822     return -1;
823   }
824   r = launch (g);
825   return r;
826 }
827
828 static int run_kill_subprocess (const char *cmd, int argc, char *argv[])
829 {
830   int r;
831   if (argc != 0) {
832     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
833     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
834     return -1;
835   }
836   r = guestfs_kill_subprocess (g);
837   return r;
838 }
839
840 static int run_add_drive (const char *cmd, int argc, char *argv[])
841 {
842   int r;
843   const char *filename;
844   if (argc != 1) {
845     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
846     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
847     return -1;
848   }
849   filename = argv[0];
850   r = guestfs_add_drive (g, filename);
851   return r;
852 }
853
854 static int run_add_cdrom (const char *cmd, int argc, char *argv[])
855 {
856   int r;
857   const char *filename;
858   if (argc != 1) {
859     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
860     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
861     return -1;
862   }
863   filename = argv[0];
864   r = guestfs_add_cdrom (g, filename);
865   return r;
866 }
867
868 static int run_add_drive_ro (const char *cmd, int argc, char *argv[])
869 {
870   int r;
871   const char *filename;
872   if (argc != 1) {
873     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
874     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
875     return -1;
876   }
877   filename = argv[0];
878   r = guestfs_add_drive_ro (g, filename);
879   return r;
880 }
881
882 static int run_config (const char *cmd, int argc, char *argv[])
883 {
884   int r;
885   const char *qemuparam;
886   const char *qemuvalue;
887   if (argc != 2) {
888     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
889     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
890     return -1;
891   }
892   qemuparam = argv[0];
893   qemuvalue = strcmp (argv[1], "") != 0 ? argv[1] : NULL;
894   r = guestfs_config (g, qemuparam, qemuvalue);
895   return r;
896 }
897
898 static int run_set_qemu (const char *cmd, int argc, char *argv[])
899 {
900   int r;
901   const char *qemu;
902   if (argc != 1) {
903     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
904     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
905     return -1;
906   }
907   qemu = argv[0];
908   r = guestfs_set_qemu (g, qemu);
909   return r;
910 }
911
912 static int run_get_qemu (const char *cmd, int argc, char *argv[])
913 {
914   const char *r;
915   if (argc != 0) {
916     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
917     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
918     return -1;
919   }
920   r = guestfs_get_qemu (g);
921   if (r == NULL) return -1;
922   printf ("%s\n", r);
923   return 0;
924 }
925
926 static int run_set_path (const char *cmd, int argc, char *argv[])
927 {
928   int r;
929   const char *path;
930   if (argc != 1) {
931     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
932     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
933     return -1;
934   }
935   path = argv[0];
936   r = guestfs_set_path (g, path);
937   return r;
938 }
939
940 static int run_get_path (const char *cmd, int argc, char *argv[])
941 {
942   const char *r;
943   if (argc != 0) {
944     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
945     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
946     return -1;
947   }
948   r = guestfs_get_path (g);
949   if (r == NULL) return -1;
950   printf ("%s\n", r);
951   return 0;
952 }
953
954 static int run_set_append (const char *cmd, int argc, char *argv[])
955 {
956   int r;
957   const char *append;
958   if (argc != 1) {
959     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
960     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
961     return -1;
962   }
963   append = argv[0];
964   r = guestfs_set_append (g, append);
965   return r;
966 }
967
968 static int run_get_append (const char *cmd, int argc, char *argv[])
969 {
970   const char *r;
971   if (argc != 0) {
972     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
973     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
974     return -1;
975   }
976   r = guestfs_get_append (g);
977   if (r == NULL) return -1;
978   printf ("%s\n", r);
979   return 0;
980 }
981
982 static int run_set_autosync (const char *cmd, int argc, char *argv[])
983 {
984   int r;
985   int autosync;
986   if (argc != 1) {
987     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
988     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
989     return -1;
990   }
991   autosync = is_true (argv[0]) ? 1 : 0;
992   r = guestfs_set_autosync (g, autosync);
993   return r;
994 }
995
996 static int run_get_autosync (const char *cmd, int argc, char *argv[])
997 {
998   int r;
999   if (argc != 0) {
1000     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1001     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1002     return -1;
1003   }
1004   r = guestfs_get_autosync (g);
1005   if (r == -1) return -1;
1006   if (r) printf ("true\n"); else printf ("false\n");
1007   return 0;
1008 }
1009
1010 static int run_set_verbose (const char *cmd, int argc, char *argv[])
1011 {
1012   int r;
1013   int verbose;
1014   if (argc != 1) {
1015     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1016     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1017     return -1;
1018   }
1019   verbose = is_true (argv[0]) ? 1 : 0;
1020   r = guestfs_set_verbose (g, verbose);
1021   return r;
1022 }
1023
1024 static int run_get_verbose (const char *cmd, int argc, char *argv[])
1025 {
1026   int r;
1027   if (argc != 0) {
1028     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1029     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1030     return -1;
1031   }
1032   r = guestfs_get_verbose (g);
1033   if (r == -1) return -1;
1034   if (r) printf ("true\n"); else printf ("false\n");
1035   return 0;
1036 }
1037
1038 static int run_is_ready (const char *cmd, int argc, char *argv[])
1039 {
1040   int r;
1041   if (argc != 0) {
1042     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1043     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1044     return -1;
1045   }
1046   r = guestfs_is_ready (g);
1047   if (r == -1) return -1;
1048   if (r) printf ("true\n"); else printf ("false\n");
1049   return 0;
1050 }
1051
1052 static int run_is_config (const char *cmd, int argc, char *argv[])
1053 {
1054   int r;
1055   if (argc != 0) {
1056     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1057     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1058     return -1;
1059   }
1060   r = guestfs_is_config (g);
1061   if (r == -1) return -1;
1062   if (r) printf ("true\n"); else printf ("false\n");
1063   return 0;
1064 }
1065
1066 static int run_is_launching (const char *cmd, int argc, char *argv[])
1067 {
1068   int r;
1069   if (argc != 0) {
1070     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1071     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1072     return -1;
1073   }
1074   r = guestfs_is_launching (g);
1075   if (r == -1) return -1;
1076   if (r) printf ("true\n"); else printf ("false\n");
1077   return 0;
1078 }
1079
1080 static int run_is_busy (const char *cmd, int argc, char *argv[])
1081 {
1082   int r;
1083   if (argc != 0) {
1084     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1085     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1086     return -1;
1087   }
1088   r = guestfs_is_busy (g);
1089   if (r == -1) return -1;
1090   if (r) printf ("true\n"); else printf ("false\n");
1091   return 0;
1092 }
1093
1094 static int run_get_state (const char *cmd, int argc, char *argv[])
1095 {
1096   int r;
1097   if (argc != 0) {
1098     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1099     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1100     return -1;
1101   }
1102   r = guestfs_get_state (g);
1103   if (r == -1) return -1;
1104   printf ("%d\n", r);
1105   return 0;
1106 }
1107
1108 static int run_set_memsize (const char *cmd, int argc, char *argv[])
1109 {
1110   int r;
1111   int memsize;
1112   if (argc != 1) {
1113     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1114     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1115     return -1;
1116   }
1117   memsize = atoi (argv[0]);
1118   r = guestfs_set_memsize (g, memsize);
1119   return r;
1120 }
1121
1122 static int run_get_memsize (const char *cmd, int argc, char *argv[])
1123 {
1124   int r;
1125   if (argc != 0) {
1126     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1127     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1128     return -1;
1129   }
1130   r = guestfs_get_memsize (g);
1131   if (r == -1) return -1;
1132   printf ("%d\n", r);
1133   return 0;
1134 }
1135
1136 static int run_mount (const char *cmd, int argc, char *argv[])
1137 {
1138   int r;
1139   const char *device;
1140   const char *mountpoint;
1141   if (argc != 2) {
1142     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1143     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1144     return -1;
1145   }
1146   device = argv[0];
1147   mountpoint = argv[1];
1148   r = guestfs_mount (g, device, mountpoint);
1149   return r;
1150 }
1151
1152 static int run_sync (const char *cmd, int argc, char *argv[])
1153 {
1154   int r;
1155   if (argc != 0) {
1156     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1157     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1158     return -1;
1159   }
1160   r = guestfs_sync (g);
1161   return r;
1162 }
1163
1164 static int run_touch (const char *cmd, int argc, char *argv[])
1165 {
1166   int r;
1167   const char *path;
1168   if (argc != 1) {
1169     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1170     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1171     return -1;
1172   }
1173   path = argv[0];
1174   r = guestfs_touch (g, path);
1175   return r;
1176 }
1177
1178 static int run_cat (const char *cmd, int argc, char *argv[])
1179 {
1180   char *r;
1181   const char *path;
1182   if (argc != 1) {
1183     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1184     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1185     return -1;
1186   }
1187   path = argv[0];
1188   r = guestfs_cat (g, path);
1189   if (r == NULL) return -1;
1190   printf ("%s\n", r);
1191   free (r);
1192   return 0;
1193 }
1194
1195 static int run_ll (const char *cmd, int argc, char *argv[])
1196 {
1197   char *r;
1198   const char *directory;
1199   if (argc != 1) {
1200     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1201     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1202     return -1;
1203   }
1204   directory = argv[0];
1205   r = guestfs_ll (g, directory);
1206   if (r == NULL) return -1;
1207   printf ("%s\n", r);
1208   free (r);
1209   return 0;
1210 }
1211
1212 static int run_ls (const char *cmd, int argc, char *argv[])
1213 {
1214   char **r;
1215   const char *directory;
1216   if (argc != 1) {
1217     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1218     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1219     return -1;
1220   }
1221   directory = argv[0];
1222   r = guestfs_ls (g, directory);
1223   if (r == NULL) return -1;
1224   print_strings (r);
1225   free_strings (r);
1226   return 0;
1227 }
1228
1229 static int run_list_devices (const char *cmd, int argc, char *argv[])
1230 {
1231   char **r;
1232   if (argc != 0) {
1233     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1234     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1235     return -1;
1236   }
1237   r = guestfs_list_devices (g);
1238   if (r == NULL) return -1;
1239   print_strings (r);
1240   free_strings (r);
1241   return 0;
1242 }
1243
1244 static int run_list_partitions (const char *cmd, int argc, char *argv[])
1245 {
1246   char **r;
1247   if (argc != 0) {
1248     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1249     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1250     return -1;
1251   }
1252   r = guestfs_list_partitions (g);
1253   if (r == NULL) return -1;
1254   print_strings (r);
1255   free_strings (r);
1256   return 0;
1257 }
1258
1259 static int run_pvs (const char *cmd, int argc, char *argv[])
1260 {
1261   char **r;
1262   if (argc != 0) {
1263     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1264     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1265     return -1;
1266   }
1267   r = guestfs_pvs (g);
1268   if (r == NULL) return -1;
1269   print_strings (r);
1270   free_strings (r);
1271   return 0;
1272 }
1273
1274 static int run_vgs (const char *cmd, int argc, char *argv[])
1275 {
1276   char **r;
1277   if (argc != 0) {
1278     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1279     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1280     return -1;
1281   }
1282   r = guestfs_vgs (g);
1283   if (r == NULL) return -1;
1284   print_strings (r);
1285   free_strings (r);
1286   return 0;
1287 }
1288
1289 static int run_lvs (const char *cmd, int argc, char *argv[])
1290 {
1291   char **r;
1292   if (argc != 0) {
1293     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1294     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1295     return -1;
1296   }
1297   r = guestfs_lvs (g);
1298   if (r == NULL) return -1;
1299   print_strings (r);
1300   free_strings (r);
1301   return 0;
1302 }
1303
1304 static int run_pvs_full (const char *cmd, int argc, char *argv[])
1305 {
1306   struct guestfs_lvm_pv_list *r;
1307   if (argc != 0) {
1308     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1309     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1310     return -1;
1311   }
1312   r = guestfs_pvs_full (g);
1313   if (r == NULL) return -1;
1314   print_pv_list (r);
1315   guestfs_free_lvm_pv_list (r);
1316   return 0;
1317 }
1318
1319 static int run_vgs_full (const char *cmd, int argc, char *argv[])
1320 {
1321   struct guestfs_lvm_vg_list *r;
1322   if (argc != 0) {
1323     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1324     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1325     return -1;
1326   }
1327   r = guestfs_vgs_full (g);
1328   if (r == NULL) return -1;
1329   print_vg_list (r);
1330   guestfs_free_lvm_vg_list (r);
1331   return 0;
1332 }
1333
1334 static int run_lvs_full (const char *cmd, int argc, char *argv[])
1335 {
1336   struct guestfs_lvm_lv_list *r;
1337   if (argc != 0) {
1338     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1339     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1340     return -1;
1341   }
1342   r = guestfs_lvs_full (g);
1343   if (r == NULL) return -1;
1344   print_lv_list (r);
1345   guestfs_free_lvm_lv_list (r);
1346   return 0;
1347 }
1348
1349 static int run_read_lines (const char *cmd, int argc, char *argv[])
1350 {
1351   char **r;
1352   const char *path;
1353   if (argc != 1) {
1354     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1355     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1356     return -1;
1357   }
1358   path = argv[0];
1359   r = guestfs_read_lines (g, path);
1360   if (r == NULL) return -1;
1361   print_strings (r);
1362   free_strings (r);
1363   return 0;
1364 }
1365
1366 static int run_aug_init (const char *cmd, int argc, char *argv[])
1367 {
1368   int r;
1369   const char *root;
1370   int flags;
1371   if (argc != 2) {
1372     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1373     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1374     return -1;
1375   }
1376   root = argv[0];
1377   flags = atoi (argv[1]);
1378   r = guestfs_aug_init (g, root, flags);
1379   return r;
1380 }
1381
1382 static int run_aug_close (const char *cmd, int argc, char *argv[])
1383 {
1384   int r;
1385   if (argc != 0) {
1386     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1387     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1388     return -1;
1389   }
1390   r = guestfs_aug_close (g);
1391   return r;
1392 }
1393
1394 static int run_aug_defvar (const char *cmd, int argc, char *argv[])
1395 {
1396   int r;
1397   const char *name;
1398   const char *expr;
1399   if (argc != 2) {
1400     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1401     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1402     return -1;
1403   }
1404   name = argv[0];
1405   expr = strcmp (argv[1], "") != 0 ? argv[1] : NULL;
1406   r = guestfs_aug_defvar (g, name, expr);
1407   if (r == -1) return -1;
1408   printf ("%d\n", r);
1409   return 0;
1410 }
1411
1412 static int run_aug_defnode (const char *cmd, int argc, char *argv[])
1413 {
1414   struct guestfs_int_bool *r;
1415   const char *name;
1416   const char *expr;
1417   const char *val;
1418   if (argc != 3) {
1419     fprintf (stderr, "%s should have 3 parameter(s)\n", cmd);
1420     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1421     return -1;
1422   }
1423   name = argv[0];
1424   expr = argv[1];
1425   val = argv[2];
1426   r = guestfs_aug_defnode (g, name, expr, val);
1427   if (r == NULL) return -1;
1428   printf ("%d, %s\n", r->i,
1429     r->b ? "true" : "false");
1430   guestfs_free_int_bool (r);
1431   return 0;
1432 }
1433
1434 static int run_aug_get (const char *cmd, int argc, char *argv[])
1435 {
1436   char *r;
1437   const char *path;
1438   if (argc != 1) {
1439     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1440     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1441     return -1;
1442   }
1443   path = argv[0];
1444   r = guestfs_aug_get (g, path);
1445   if (r == NULL) return -1;
1446   printf ("%s\n", r);
1447   free (r);
1448   return 0;
1449 }
1450
1451 static int run_aug_set (const char *cmd, int argc, char *argv[])
1452 {
1453   int r;
1454   const char *path;
1455   const char *val;
1456   if (argc != 2) {
1457     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1458     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1459     return -1;
1460   }
1461   path = argv[0];
1462   val = argv[1];
1463   r = guestfs_aug_set (g, path, val);
1464   return r;
1465 }
1466
1467 static int run_aug_insert (const char *cmd, int argc, char *argv[])
1468 {
1469   int r;
1470   const char *path;
1471   const char *label;
1472   int before;
1473   if (argc != 3) {
1474     fprintf (stderr, "%s should have 3 parameter(s)\n", cmd);
1475     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1476     return -1;
1477   }
1478   path = argv[0];
1479   label = argv[1];
1480   before = is_true (argv[2]) ? 1 : 0;
1481   r = guestfs_aug_insert (g, path, label, before);
1482   return r;
1483 }
1484
1485 static int run_aug_rm (const char *cmd, int argc, char *argv[])
1486 {
1487   int r;
1488   const char *path;
1489   if (argc != 1) {
1490     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1491     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1492     return -1;
1493   }
1494   path = argv[0];
1495   r = guestfs_aug_rm (g, path);
1496   if (r == -1) return -1;
1497   printf ("%d\n", r);
1498   return 0;
1499 }
1500
1501 static int run_aug_mv (const char *cmd, int argc, char *argv[])
1502 {
1503   int r;
1504   const char *src;
1505   const char *dest;
1506   if (argc != 2) {
1507     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1508     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1509     return -1;
1510   }
1511   src = argv[0];
1512   dest = argv[1];
1513   r = guestfs_aug_mv (g, src, dest);
1514   return r;
1515 }
1516
1517 static int run_aug_match (const char *cmd, int argc, char *argv[])
1518 {
1519   char **r;
1520   const char *path;
1521   if (argc != 1) {
1522     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1523     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1524     return -1;
1525   }
1526   path = argv[0];
1527   r = guestfs_aug_match (g, path);
1528   if (r == NULL) return -1;
1529   print_strings (r);
1530   free_strings (r);
1531   return 0;
1532 }
1533
1534 static int run_aug_save (const char *cmd, int argc, char *argv[])
1535 {
1536   int r;
1537   if (argc != 0) {
1538     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1539     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1540     return -1;
1541   }
1542   r = guestfs_aug_save (g);
1543   return r;
1544 }
1545
1546 static int run_aug_load (const char *cmd, int argc, char *argv[])
1547 {
1548   int r;
1549   if (argc != 0) {
1550     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1551     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1552     return -1;
1553   }
1554   r = guestfs_aug_load (g);
1555   return r;
1556 }
1557
1558 static int run_aug_ls (const char *cmd, int argc, char *argv[])
1559 {
1560   char **r;
1561   const char *path;
1562   if (argc != 1) {
1563     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1564     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1565     return -1;
1566   }
1567   path = argv[0];
1568   r = guestfs_aug_ls (g, path);
1569   if (r == NULL) return -1;
1570   print_strings (r);
1571   free_strings (r);
1572   return 0;
1573 }
1574
1575 static int run_rm (const char *cmd, int argc, char *argv[])
1576 {
1577   int r;
1578   const char *path;
1579   if (argc != 1) {
1580     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1581     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1582     return -1;
1583   }
1584   path = argv[0];
1585   r = guestfs_rm (g, path);
1586   return r;
1587 }
1588
1589 static int run_rmdir (const char *cmd, int argc, char *argv[])
1590 {
1591   int r;
1592   const char *path;
1593   if (argc != 1) {
1594     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1595     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1596     return -1;
1597   }
1598   path = argv[0];
1599   r = guestfs_rmdir (g, path);
1600   return r;
1601 }
1602
1603 static int run_rm_rf (const char *cmd, int argc, char *argv[])
1604 {
1605   int r;
1606   const char *path;
1607   if (argc != 1) {
1608     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1609     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1610     return -1;
1611   }
1612   path = argv[0];
1613   r = guestfs_rm_rf (g, path);
1614   return r;
1615 }
1616
1617 static int run_mkdir (const char *cmd, int argc, char *argv[])
1618 {
1619   int r;
1620   const char *path;
1621   if (argc != 1) {
1622     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1623     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1624     return -1;
1625   }
1626   path = argv[0];
1627   r = guestfs_mkdir (g, path);
1628   return r;
1629 }
1630
1631 static int run_mkdir_p (const char *cmd, int argc, char *argv[])
1632 {
1633   int r;
1634   const char *path;
1635   if (argc != 1) {
1636     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1637     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1638     return -1;
1639   }
1640   path = argv[0];
1641   r = guestfs_mkdir_p (g, path);
1642   return r;
1643 }
1644
1645 static int run_chmod (const char *cmd, int argc, char *argv[])
1646 {
1647   int r;
1648   int mode;
1649   const char *path;
1650   if (argc != 2) {
1651     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1652     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1653     return -1;
1654   }
1655   mode = atoi (argv[0]);
1656   path = argv[1];
1657   r = guestfs_chmod (g, mode, path);
1658   return r;
1659 }
1660
1661 static int run_chown (const char *cmd, int argc, char *argv[])
1662 {
1663   int r;
1664   int owner;
1665   int group;
1666   const char *path;
1667   if (argc != 3) {
1668     fprintf (stderr, "%s should have 3 parameter(s)\n", cmd);
1669     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1670     return -1;
1671   }
1672   owner = atoi (argv[0]);
1673   group = atoi (argv[1]);
1674   path = argv[2];
1675   r = guestfs_chown (g, owner, group, path);
1676   return r;
1677 }
1678
1679 static int run_exists (const char *cmd, int argc, char *argv[])
1680 {
1681   int r;
1682   const char *path;
1683   if (argc != 1) {
1684     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1685     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1686     return -1;
1687   }
1688   path = argv[0];
1689   r = guestfs_exists (g, path);
1690   if (r == -1) return -1;
1691   if (r) printf ("true\n"); else printf ("false\n");
1692   return 0;
1693 }
1694
1695 static int run_is_file (const char *cmd, int argc, char *argv[])
1696 {
1697   int r;
1698   const char *path;
1699   if (argc != 1) {
1700     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1701     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1702     return -1;
1703   }
1704   path = argv[0];
1705   r = guestfs_is_file (g, path);
1706   if (r == -1) return -1;
1707   if (r) printf ("true\n"); else printf ("false\n");
1708   return 0;
1709 }
1710
1711 static int run_is_dir (const char *cmd, int argc, char *argv[])
1712 {
1713   int r;
1714   const char *path;
1715   if (argc != 1) {
1716     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1717     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1718     return -1;
1719   }
1720   path = argv[0];
1721   r = guestfs_is_dir (g, path);
1722   if (r == -1) return -1;
1723   if (r) printf ("true\n"); else printf ("false\n");
1724   return 0;
1725 }
1726
1727 static int run_pvcreate (const char *cmd, int argc, char *argv[])
1728 {
1729   int r;
1730   const char *device;
1731   if (argc != 1) {
1732     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1733     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1734     return -1;
1735   }
1736   device = argv[0];
1737   r = guestfs_pvcreate (g, device);
1738   return r;
1739 }
1740
1741 static int run_vgcreate (const char *cmd, int argc, char *argv[])
1742 {
1743   int r;
1744   const char *volgroup;
1745   char **physvols;
1746   if (argc != 2) {
1747     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1748     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1749     return -1;
1750   }
1751   volgroup = argv[0];
1752   physvols = parse_string_list (argv[1]);
1753   r = guestfs_vgcreate (g, volgroup, physvols);
1754   return r;
1755 }
1756
1757 static int run_lvcreate (const char *cmd, int argc, char *argv[])
1758 {
1759   int r;
1760   const char *logvol;
1761   const char *volgroup;
1762   int mbytes;
1763   if (argc != 3) {
1764     fprintf (stderr, "%s should have 3 parameter(s)\n", cmd);
1765     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1766     return -1;
1767   }
1768   logvol = argv[0];
1769   volgroup = argv[1];
1770   mbytes = atoi (argv[2]);
1771   r = guestfs_lvcreate (g, logvol, volgroup, mbytes);
1772   return r;
1773 }
1774
1775 static int run_mkfs (const char *cmd, int argc, char *argv[])
1776 {
1777   int r;
1778   const char *fstype;
1779   const char *device;
1780   if (argc != 2) {
1781     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1782     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1783     return -1;
1784   }
1785   fstype = argv[0];
1786   device = argv[1];
1787   r = guestfs_mkfs (g, fstype, device);
1788   return r;
1789 }
1790
1791 static int run_sfdisk (const char *cmd, int argc, char *argv[])
1792 {
1793   int r;
1794   const char *device;
1795   int cyls;
1796   int heads;
1797   int sectors;
1798   char **lines;
1799   if (argc != 5) {
1800     fprintf (stderr, "%s should have 5 parameter(s)\n", cmd);
1801     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1802     return -1;
1803   }
1804   device = argv[0];
1805   cyls = atoi (argv[1]);
1806   heads = atoi (argv[2]);
1807   sectors = atoi (argv[3]);
1808   lines = parse_string_list (argv[4]);
1809   r = guestfs_sfdisk (g, device, cyls, heads, sectors, lines);
1810   return r;
1811 }
1812
1813 static int run_write_file (const char *cmd, int argc, char *argv[])
1814 {
1815   int r;
1816   const char *path;
1817   const char *content;
1818   int size;
1819   if (argc != 3) {
1820     fprintf (stderr, "%s should have 3 parameter(s)\n", cmd);
1821     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1822     return -1;
1823   }
1824   path = argv[0];
1825   content = argv[1];
1826   size = atoi (argv[2]);
1827   r = guestfs_write_file (g, path, content, size);
1828   return r;
1829 }
1830
1831 static int run_umount (const char *cmd, int argc, char *argv[])
1832 {
1833   int r;
1834   const char *pathordevice;
1835   if (argc != 1) {
1836     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1837     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1838     return -1;
1839   }
1840   pathordevice = argv[0];
1841   r = guestfs_umount (g, pathordevice);
1842   return r;
1843 }
1844
1845 static int run_mounts (const char *cmd, int argc, char *argv[])
1846 {
1847   char **r;
1848   if (argc != 0) {
1849     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1850     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1851     return -1;
1852   }
1853   r = guestfs_mounts (g);
1854   if (r == NULL) return -1;
1855   print_strings (r);
1856   free_strings (r);
1857   return 0;
1858 }
1859
1860 static int run_umount_all (const char *cmd, int argc, char *argv[])
1861 {
1862   int r;
1863   if (argc != 0) {
1864     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1865     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1866     return -1;
1867   }
1868   r = guestfs_umount_all (g);
1869   return r;
1870 }
1871
1872 static int run_lvm_remove_all (const char *cmd, int argc, char *argv[])
1873 {
1874   int r;
1875   if (argc != 0) {
1876     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1877     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1878     return -1;
1879   }
1880   r = guestfs_lvm_remove_all (g);
1881   return r;
1882 }
1883
1884 static int run_file (const char *cmd, int argc, char *argv[])
1885 {
1886   char *r;
1887   const char *path;
1888   if (argc != 1) {
1889     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1890     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1891     return -1;
1892   }
1893   path = argv[0];
1894   r = guestfs_file (g, path);
1895   if (r == NULL) return -1;
1896   printf ("%s\n", r);
1897   free (r);
1898   return 0;
1899 }
1900
1901 static int run_command (const char *cmd, int argc, char *argv[])
1902 {
1903   char *r;
1904   char **arguments;
1905   if (argc != 1) {
1906     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1907     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1908     return -1;
1909   }
1910   arguments = parse_string_list (argv[0]);
1911   r = guestfs_command (g, arguments);
1912   if (r == NULL) return -1;
1913   printf ("%s\n", r);
1914   free (r);
1915   return 0;
1916 }
1917
1918 static int run_command_lines (const char *cmd, int argc, char *argv[])
1919 {
1920   char **r;
1921   char **arguments;
1922   if (argc != 1) {
1923     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1924     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1925     return -1;
1926   }
1927   arguments = parse_string_list (argv[0]);
1928   r = guestfs_command_lines (g, arguments);
1929   if (r == NULL) return -1;
1930   print_strings (r);
1931   free_strings (r);
1932   return 0;
1933 }
1934
1935 static int run_stat (const char *cmd, int argc, char *argv[])
1936 {
1937   struct guestfs_stat *r;
1938   const char *path;
1939   if (argc != 1) {
1940     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1941     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1942     return -1;
1943   }
1944   path = argv[0];
1945   r = guestfs_stat (g, path);
1946   if (r == NULL) return -1;
1947   print_stat (r);
1948   free (r);
1949   return 0;
1950 }
1951
1952 static int run_lstat (const char *cmd, int argc, char *argv[])
1953 {
1954   struct guestfs_stat *r;
1955   const char *path;
1956   if (argc != 1) {
1957     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1958     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1959     return -1;
1960   }
1961   path = argv[0];
1962   r = guestfs_lstat (g, path);
1963   if (r == NULL) return -1;
1964   print_stat (r);
1965   free (r);
1966   return 0;
1967 }
1968
1969 static int run_statvfs (const char *cmd, int argc, char *argv[])
1970 {
1971   struct guestfs_statvfs *r;
1972   const char *path;
1973   if (argc != 1) {
1974     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1975     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1976     return -1;
1977   }
1978   path = argv[0];
1979   r = guestfs_statvfs (g, path);
1980   if (r == NULL) return -1;
1981   print_statvfs (r);
1982   free (r);
1983   return 0;
1984 }
1985
1986 static int run_tune2fs_l (const char *cmd, int argc, char *argv[])
1987 {
1988   char **r;
1989   const char *device;
1990   if (argc != 1) {
1991     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1992     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1993     return -1;
1994   }
1995   device = argv[0];
1996   r = guestfs_tune2fs_l (g, device);
1997   if (r == NULL) return -1;
1998   print_table (r);
1999   free_strings (r);
2000   return 0;
2001 }
2002
2003 static int run_blockdev_setro (const char *cmd, int argc, char *argv[])
2004 {
2005   int r;
2006   const char *device;
2007   if (argc != 1) {
2008     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2009     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2010     return -1;
2011   }
2012   device = argv[0];
2013   r = guestfs_blockdev_setro (g, device);
2014   return r;
2015 }
2016
2017 static int run_blockdev_setrw (const char *cmd, int argc, char *argv[])
2018 {
2019   int r;
2020   const char *device;
2021   if (argc != 1) {
2022     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2023     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2024     return -1;
2025   }
2026   device = argv[0];
2027   r = guestfs_blockdev_setrw (g, device);
2028   return r;
2029 }
2030
2031 static int run_blockdev_getro (const char *cmd, int argc, char *argv[])
2032 {
2033   int r;
2034   const char *device;
2035   if (argc != 1) {
2036     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2037     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2038     return -1;
2039   }
2040   device = argv[0];
2041   r = guestfs_blockdev_getro (g, device);
2042   if (r == -1) return -1;
2043   if (r) printf ("true\n"); else printf ("false\n");
2044   return 0;
2045 }
2046
2047 static int run_blockdev_getss (const char *cmd, int argc, char *argv[])
2048 {
2049   int r;
2050   const char *device;
2051   if (argc != 1) {
2052     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2053     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2054     return -1;
2055   }
2056   device = argv[0];
2057   r = guestfs_blockdev_getss (g, device);
2058   if (r == -1) return -1;
2059   printf ("%d\n", r);
2060   return 0;
2061 }
2062
2063 static int run_blockdev_getbsz (const char *cmd, int argc, char *argv[])
2064 {
2065   int r;
2066   const char *device;
2067   if (argc != 1) {
2068     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2069     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2070     return -1;
2071   }
2072   device = argv[0];
2073   r = guestfs_blockdev_getbsz (g, device);
2074   if (r == -1) return -1;
2075   printf ("%d\n", r);
2076   return 0;
2077 }
2078
2079 static int run_blockdev_setbsz (const char *cmd, int argc, char *argv[])
2080 {
2081   int r;
2082   const char *device;
2083   int blocksize;
2084   if (argc != 2) {
2085     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2086     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2087     return -1;
2088   }
2089   device = argv[0];
2090   blocksize = atoi (argv[1]);
2091   r = guestfs_blockdev_setbsz (g, device, blocksize);
2092   return r;
2093 }
2094
2095 static int run_blockdev_getsz (const char *cmd, int argc, char *argv[])
2096 {
2097   int64_t r;
2098   const char *device;
2099   if (argc != 1) {
2100     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2101     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2102     return -1;
2103   }
2104   device = argv[0];
2105   r = guestfs_blockdev_getsz (g, device);
2106   if (r == -1) return -1;
2107   printf ("%" PRIi64 "\n", r);
2108   return 0;
2109 }
2110
2111 static int run_blockdev_getsize64 (const char *cmd, int argc, char *argv[])
2112 {
2113   int64_t r;
2114   const char *device;
2115   if (argc != 1) {
2116     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2117     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2118     return -1;
2119   }
2120   device = argv[0];
2121   r = guestfs_blockdev_getsize64 (g, device);
2122   if (r == -1) return -1;
2123   printf ("%" PRIi64 "\n", r);
2124   return 0;
2125 }
2126
2127 static int run_blockdev_flushbufs (const char *cmd, int argc, char *argv[])
2128 {
2129   int r;
2130   const char *device;
2131   if (argc != 1) {
2132     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2133     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2134     return -1;
2135   }
2136   device = argv[0];
2137   r = guestfs_blockdev_flushbufs (g, device);
2138   return r;
2139 }
2140
2141 static int run_blockdev_rereadpt (const char *cmd, int argc, char *argv[])
2142 {
2143   int r;
2144   const char *device;
2145   if (argc != 1) {
2146     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2147     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2148     return -1;
2149   }
2150   device = argv[0];
2151   r = guestfs_blockdev_rereadpt (g, device);
2152   return r;
2153 }
2154
2155 static int run_upload (const char *cmd, int argc, char *argv[])
2156 {
2157   int r;
2158   const char *filename;
2159   const char *remotefilename;
2160   if (argc != 2) {
2161     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2162     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2163     return -1;
2164   }
2165   filename = strcmp (argv[0], "-") != 0 ? argv[0] : "/dev/stdin";
2166   remotefilename = argv[1];
2167   r = guestfs_upload (g, filename, remotefilename);
2168   return r;
2169 }
2170
2171 static int run_download (const char *cmd, int argc, char *argv[])
2172 {
2173   int r;
2174   const char *remotefilename;
2175   const char *filename;
2176   if (argc != 2) {
2177     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2178     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2179     return -1;
2180   }
2181   remotefilename = argv[0];
2182   filename = strcmp (argv[1], "-") != 0 ? argv[1] : "/dev/stdout";
2183   r = guestfs_download (g, remotefilename, filename);
2184   return r;
2185 }
2186
2187 static int run_checksum (const char *cmd, int argc, char *argv[])
2188 {
2189   char *r;
2190   const char *csumtype;
2191   const char *path;
2192   if (argc != 2) {
2193     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2194     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2195     return -1;
2196   }
2197   csumtype = argv[0];
2198   path = argv[1];
2199   r = guestfs_checksum (g, csumtype, path);
2200   if (r == NULL) return -1;
2201   printf ("%s\n", r);
2202   free (r);
2203   return 0;
2204 }
2205
2206 static int run_tar_in (const char *cmd, int argc, char *argv[])
2207 {
2208   int r;
2209   const char *tarfile;
2210   const char *directory;
2211   if (argc != 2) {
2212     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2213     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2214     return -1;
2215   }
2216   tarfile = strcmp (argv[0], "-") != 0 ? argv[0] : "/dev/stdin";
2217   directory = argv[1];
2218   r = guestfs_tar_in (g, tarfile, directory);
2219   return r;
2220 }
2221
2222 static int run_tar_out (const char *cmd, int argc, char *argv[])
2223 {
2224   int r;
2225   const char *directory;
2226   const char *tarfile;
2227   if (argc != 2) {
2228     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2229     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2230     return -1;
2231   }
2232   directory = argv[0];
2233   tarfile = strcmp (argv[1], "-") != 0 ? argv[1] : "/dev/stdout";
2234   r = guestfs_tar_out (g, directory, tarfile);
2235   return r;
2236 }
2237
2238 static int run_tgz_in (const char *cmd, int argc, char *argv[])
2239 {
2240   int r;
2241   const char *tarball;
2242   const char *directory;
2243   if (argc != 2) {
2244     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2245     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2246     return -1;
2247   }
2248   tarball = strcmp (argv[0], "-") != 0 ? argv[0] : "/dev/stdin";
2249   directory = argv[1];
2250   r = guestfs_tgz_in (g, tarball, directory);
2251   return r;
2252 }
2253
2254 static int run_tgz_out (const char *cmd, int argc, char *argv[])
2255 {
2256   int r;
2257   const char *directory;
2258   const char *tarball;
2259   if (argc != 2) {
2260     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2261     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2262     return -1;
2263   }
2264   directory = argv[0];
2265   tarball = strcmp (argv[1], "-") != 0 ? argv[1] : "/dev/stdout";
2266   r = guestfs_tgz_out (g, directory, tarball);
2267   return r;
2268 }
2269
2270 static int run_mount_ro (const char *cmd, int argc, char *argv[])
2271 {
2272   int r;
2273   const char *device;
2274   const char *mountpoint;
2275   if (argc != 2) {
2276     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2277     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2278     return -1;
2279   }
2280   device = argv[0];
2281   mountpoint = argv[1];
2282   r = guestfs_mount_ro (g, device, mountpoint);
2283   return r;
2284 }
2285
2286 static int run_mount_options (const char *cmd, int argc, char *argv[])
2287 {
2288   int r;
2289   const char *options;
2290   const char *device;
2291   const char *mountpoint;
2292   if (argc != 3) {
2293     fprintf (stderr, "%s should have 3 parameter(s)\n", cmd);
2294     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2295     return -1;
2296   }
2297   options = argv[0];
2298   device = argv[1];
2299   mountpoint = argv[2];
2300   r = guestfs_mount_options (g, options, device, mountpoint);
2301   return r;
2302 }
2303
2304 static int run_mount_vfs (const char *cmd, int argc, char *argv[])
2305 {
2306   int r;
2307   const char *options;
2308   const char *vfstype;
2309   const char *device;
2310   const char *mountpoint;
2311   if (argc != 4) {
2312     fprintf (stderr, "%s should have 4 parameter(s)\n", cmd);
2313     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2314     return -1;
2315   }
2316   options = argv[0];
2317   vfstype = argv[1];
2318   device = argv[2];
2319   mountpoint = argv[3];
2320   r = guestfs_mount_vfs (g, options, vfstype, device, mountpoint);
2321   return r;
2322 }
2323
2324 static int run_debug (const char *cmd, int argc, char *argv[])
2325 {
2326   char *r;
2327   const char *subcmd;
2328   char **extraargs;
2329   if (argc != 2) {
2330     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2331     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2332     return -1;
2333   }
2334   subcmd = argv[0];
2335   extraargs = parse_string_list (argv[1]);
2336   r = guestfs_debug (g, subcmd, extraargs);
2337   if (r == NULL) return -1;
2338   printf ("%s\n", r);
2339   free (r);
2340   return 0;
2341 }
2342
2343 static int run_lvremove (const char *cmd, int argc, char *argv[])
2344 {
2345   int r;
2346   const char *device;
2347   if (argc != 1) {
2348     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2349     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2350     return -1;
2351   }
2352   device = argv[0];
2353   r = guestfs_lvremove (g, device);
2354   return r;
2355 }
2356
2357 static int run_vgremove (const char *cmd, int argc, char *argv[])
2358 {
2359   int r;
2360   const char *vgname;
2361   if (argc != 1) {
2362     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2363     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2364     return -1;
2365   }
2366   vgname = argv[0];
2367   r = guestfs_vgremove (g, vgname);
2368   return r;
2369 }
2370
2371 static int run_pvremove (const char *cmd, int argc, char *argv[])
2372 {
2373   int r;
2374   const char *device;
2375   if (argc != 1) {
2376     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2377     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2378     return -1;
2379   }
2380   device = argv[0];
2381   r = guestfs_pvremove (g, device);
2382   return r;
2383 }
2384
2385 static int run_set_e2label (const char *cmd, int argc, char *argv[])
2386 {
2387   int r;
2388   const char *device;
2389   const char *label;
2390   if (argc != 2) {
2391     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2392     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2393     return -1;
2394   }
2395   device = argv[0];
2396   label = argv[1];
2397   r = guestfs_set_e2label (g, device, label);
2398   return r;
2399 }
2400
2401 static int run_get_e2label (const char *cmd, int argc, char *argv[])
2402 {
2403   char *r;
2404   const char *device;
2405   if (argc != 1) {
2406     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2407     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2408     return -1;
2409   }
2410   device = argv[0];
2411   r = guestfs_get_e2label (g, device);
2412   if (r == NULL) return -1;
2413   printf ("%s\n", r);
2414   free (r);
2415   return 0;
2416 }
2417
2418 static int run_set_e2uuid (const char *cmd, int argc, char *argv[])
2419 {
2420   int r;
2421   const char *device;
2422   const char *uuid;
2423   if (argc != 2) {
2424     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2425     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2426     return -1;
2427   }
2428   device = argv[0];
2429   uuid = argv[1];
2430   r = guestfs_set_e2uuid (g, device, uuid);
2431   return r;
2432 }
2433
2434 static int run_get_e2uuid (const char *cmd, int argc, char *argv[])
2435 {
2436   char *r;
2437   const char *device;
2438   if (argc != 1) {
2439     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2440     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2441     return -1;
2442   }
2443   device = argv[0];
2444   r = guestfs_get_e2uuid (g, device);
2445   if (r == NULL) return -1;
2446   printf ("%s\n", r);
2447   free (r);
2448   return 0;
2449 }
2450
2451 static int run_fsck (const char *cmd, int argc, char *argv[])
2452 {
2453   int r;
2454   const char *fstype;
2455   const char *device;
2456   if (argc != 2) {
2457     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2458     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2459     return -1;
2460   }
2461   fstype = argv[0];
2462   device = argv[1];
2463   r = guestfs_fsck (g, fstype, device);
2464   if (r == -1) return -1;
2465   printf ("%d\n", r);
2466   return 0;
2467 }
2468
2469 static int run_zero (const char *cmd, int argc, char *argv[])
2470 {
2471   int r;
2472   const char *device;
2473   if (argc != 1) {
2474     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2475     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2476     return -1;
2477   }
2478   device = argv[0];
2479   r = guestfs_zero (g, device);
2480   return r;
2481 }
2482
2483 static int run_grub_install (const char *cmd, int argc, char *argv[])
2484 {
2485   int r;
2486   const char *root;
2487   const char *device;
2488   if (argc != 2) {
2489     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2490     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2491     return -1;
2492   }
2493   root = argv[0];
2494   device = argv[1];
2495   r = guestfs_grub_install (g, root, device);
2496   return r;
2497 }
2498
2499 static int run_cp (const char *cmd, int argc, char *argv[])
2500 {
2501   int r;
2502   const char *src;
2503   const char *dest;
2504   if (argc != 2) {
2505     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2506     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2507     return -1;
2508   }
2509   src = argv[0];
2510   dest = argv[1];
2511   r = guestfs_cp (g, src, dest);
2512   return r;
2513 }
2514
2515 static int run_cp_a (const char *cmd, int argc, char *argv[])
2516 {
2517   int r;
2518   const char *src;
2519   const char *dest;
2520   if (argc != 2) {
2521     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2522     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2523     return -1;
2524   }
2525   src = argv[0];
2526   dest = argv[1];
2527   r = guestfs_cp_a (g, src, dest);
2528   return r;
2529 }
2530
2531 static int run_mv (const char *cmd, int argc, char *argv[])
2532 {
2533   int r;
2534   const char *src;
2535   const char *dest;
2536   if (argc != 2) {
2537     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2538     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2539     return -1;
2540   }
2541   src = argv[0];
2542   dest = argv[1];
2543   r = guestfs_mv (g, src, dest);
2544   return r;
2545 }
2546
2547 static int run_drop_caches (const char *cmd, int argc, char *argv[])
2548 {
2549   int r;
2550   int whattodrop;
2551   if (argc != 1) {
2552     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2553     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2554     return -1;
2555   }
2556   whattodrop = atoi (argv[0]);
2557   r = guestfs_drop_caches (g, whattodrop);
2558   return r;
2559 }
2560
2561 static int run_dmesg (const char *cmd, int argc, char *argv[])
2562 {
2563   char *r;
2564   if (argc != 0) {
2565     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
2566     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2567     return -1;
2568   }
2569   r = guestfs_dmesg (g);
2570   if (r == NULL) return -1;
2571   printf ("%s\n", r);
2572   free (r);
2573   return 0;
2574 }
2575
2576 static int run_ping_daemon (const char *cmd, int argc, char *argv[])
2577 {
2578   int r;
2579   if (argc != 0) {
2580     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
2581     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2582     return -1;
2583   }
2584   r = guestfs_ping_daemon (g);
2585   return r;
2586 }
2587
2588 static int run_equal (const char *cmd, int argc, char *argv[])
2589 {
2590   int r;
2591   const char *file1;
2592   const char *file2;
2593   if (argc != 2) {
2594     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2595     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2596     return -1;
2597   }
2598   file1 = argv[0];
2599   file2 = argv[1];
2600   r = guestfs_equal (g, file1, file2);
2601   if (r == -1) return -1;
2602   if (r) printf ("true\n"); else printf ("false\n");
2603   return 0;
2604 }
2605
2606 static int run_strings (const char *cmd, int argc, char *argv[])
2607 {
2608   char **r;
2609   const char *path;
2610   if (argc != 1) {
2611     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2612     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2613     return -1;
2614   }
2615   path = argv[0];
2616   r = guestfs_strings (g, path);
2617   if (r == NULL) return -1;
2618   print_strings (r);
2619   free_strings (r);
2620   return 0;
2621 }
2622
2623 static int run_strings_e (const char *cmd, int argc, char *argv[])
2624 {
2625   char **r;
2626   const char *encoding;
2627   const char *path;
2628   if (argc != 2) {
2629     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2630     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2631     return -1;
2632   }
2633   encoding = argv[0];
2634   path = argv[1];
2635   r = guestfs_strings_e (g, encoding, path);
2636   if (r == NULL) return -1;
2637   print_strings (r);
2638   free_strings (r);
2639   return 0;
2640 }
2641
2642 static int run_hexdump (const char *cmd, int argc, char *argv[])
2643 {
2644   char *r;
2645   const char *path;
2646   if (argc != 1) {
2647     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2648     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2649     return -1;
2650   }
2651   path = argv[0];
2652   r = guestfs_hexdump (g, path);
2653   if (r == NULL) return -1;
2654   printf ("%s\n", r);
2655   free (r);
2656   return 0;
2657 }
2658
2659 static int run_zerofree (const char *cmd, int argc, char *argv[])
2660 {
2661   int r;
2662   const char *device;
2663   if (argc != 1) {
2664     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2665     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2666     return -1;
2667   }
2668   device = argv[0];
2669   r = guestfs_zerofree (g, device);
2670   return r;
2671 }
2672
2673 static int run_pvresize (const char *cmd, int argc, char *argv[])
2674 {
2675   int r;
2676   const char *device;
2677   if (argc != 1) {
2678     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2679     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2680     return -1;
2681   }
2682   device = argv[0];
2683   r = guestfs_pvresize (g, device);
2684   return r;
2685 }
2686
2687 static int run_sfdisk_N (const char *cmd, int argc, char *argv[])
2688 {
2689   int r;
2690   const char *device;
2691   int partnum;
2692   int cyls;
2693   int heads;
2694   int sectors;
2695   const char *line;
2696   if (argc != 6) {
2697     fprintf (stderr, "%s should have 6 parameter(s)\n", cmd);
2698     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2699     return -1;
2700   }
2701   device = argv[0];
2702   partnum = atoi (argv[1]);
2703   cyls = atoi (argv[2]);
2704   heads = atoi (argv[3]);
2705   sectors = atoi (argv[4]);
2706   line = argv[5];
2707   r = guestfs_sfdisk_N (g, device, partnum, cyls, heads, sectors, line);
2708   return r;
2709 }
2710
2711 static int run_sfdisk_l (const char *cmd, int argc, char *argv[])
2712 {
2713   char *r;
2714   const char *device;
2715   if (argc != 1) {
2716     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2717     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2718     return -1;
2719   }
2720   device = argv[0];
2721   r = guestfs_sfdisk_l (g, device);
2722   if (r == NULL) return -1;
2723   printf ("%s\n", r);
2724   free (r);
2725   return 0;
2726 }
2727
2728 static int run_sfdisk_kernel_geometry (const char *cmd, int argc, char *argv[])
2729 {
2730   char *r;
2731   const char *device;
2732   if (argc != 1) {
2733     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2734     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2735     return -1;
2736   }
2737   device = argv[0];
2738   r = guestfs_sfdisk_kernel_geometry (g, device);
2739   if (r == NULL) return -1;
2740   printf ("%s\n", r);
2741   free (r);
2742   return 0;
2743 }
2744
2745 static int run_sfdisk_disk_geometry (const char *cmd, int argc, char *argv[])
2746 {
2747   char *r;
2748   const char *device;
2749   if (argc != 1) {
2750     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2751     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2752     return -1;
2753   }
2754   device = argv[0];
2755   r = guestfs_sfdisk_disk_geometry (g, device);
2756   if (r == NULL) return -1;
2757   printf ("%s\n", r);
2758   free (r);
2759   return 0;
2760 }
2761
2762 static int run_vg_activate_all (const char *cmd, int argc, char *argv[])
2763 {
2764   int r;
2765   int activate;
2766   if (argc != 1) {
2767     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2768     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2769     return -1;
2770   }
2771   activate = is_true (argv[0]) ? 1 : 0;
2772   r = guestfs_vg_activate_all (g, activate);
2773   return r;
2774 }
2775
2776 static int run_vg_activate (const char *cmd, int argc, char *argv[])
2777 {
2778   int r;
2779   int activate;
2780   char **volgroups;
2781   if (argc != 2) {
2782     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2783     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2784     return -1;
2785   }
2786   activate = is_true (argv[0]) ? 1 : 0;
2787   volgroups = parse_string_list (argv[1]);
2788   r = guestfs_vg_activate (g, activate, volgroups);
2789   return r;
2790 }
2791
2792 static int run_lvresize (const char *cmd, int argc, char *argv[])
2793 {
2794   int r;
2795   const char *device;
2796   int mbytes;
2797   if (argc != 2) {
2798     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2799     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2800     return -1;
2801   }
2802   device = argv[0];
2803   mbytes = atoi (argv[1]);
2804   r = guestfs_lvresize (g, device, mbytes);
2805   return r;
2806 }
2807
2808 static int run_resize2fs (const char *cmd, int argc, char *argv[])
2809 {
2810   int r;
2811   const char *device;
2812   if (argc != 1) {
2813     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2814     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2815     return -1;
2816   }
2817   device = argv[0];
2818   r = guestfs_resize2fs (g, device);
2819   return r;
2820 }
2821
2822 static int run_find (const char *cmd, int argc, char *argv[])
2823 {
2824   char **r;
2825   const char *directory;
2826   if (argc != 1) {
2827     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2828     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2829     return -1;
2830   }
2831   directory = argv[0];
2832   r = guestfs_find (g, directory);
2833   if (r == NULL) return -1;
2834   print_strings (r);
2835   free_strings (r);
2836   return 0;
2837 }
2838
2839 static int run_e2fsck_f (const char *cmd, int argc, char *argv[])
2840 {
2841   int r;
2842   const char *device;
2843   if (argc != 1) {
2844     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2845     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2846     return -1;
2847   }
2848   device = argv[0];
2849   r = guestfs_e2fsck_f (g, device);
2850   return r;
2851 }
2852
2853 static int run_sleep (const char *cmd, int argc, char *argv[])
2854 {
2855   int r;
2856   int secs;
2857   if (argc != 1) {
2858     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2859     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2860     return -1;
2861   }
2862   secs = atoi (argv[0]);
2863   r = guestfs_sleep (g, secs);
2864   return r;
2865 }
2866
2867 static int run_ntfs_3g_probe (const char *cmd, int argc, char *argv[])
2868 {
2869   int r;
2870   int rw;
2871   const char *device;
2872   if (argc != 2) {
2873     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2874     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2875     return -1;
2876   }
2877   rw = is_true (argv[0]) ? 1 : 0;
2878   device = argv[1];
2879   r = guestfs_ntfs_3g_probe (g, rw, device);
2880   if (r == -1) return -1;
2881   printf ("%d\n", r);
2882   return 0;
2883 }
2884
2885 static int run_sh (const char *cmd, int argc, char *argv[])
2886 {
2887   char *r;
2888   const char *command;
2889   if (argc != 1) {
2890     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2891     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2892     return -1;
2893   }
2894   command = argv[0];
2895   r = guestfs_sh (g, command);
2896   if (r == NULL) return -1;
2897   printf ("%s\n", r);
2898   free (r);
2899   return 0;
2900 }
2901
2902 static int run_sh_lines (const char *cmd, int argc, char *argv[])
2903 {
2904   char **r;
2905   const char *command;
2906   if (argc != 1) {
2907     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2908     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2909     return -1;
2910   }
2911   command = argv[0];
2912   r = guestfs_sh_lines (g, command);
2913   if (r == NULL) return -1;
2914   print_strings (r);
2915   free_strings (r);
2916   return 0;
2917 }
2918
2919 static int run_glob_expand (const char *cmd, int argc, char *argv[])
2920 {
2921   char **r;
2922   const char *pattern;
2923   if (argc != 1) {
2924     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2925     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2926     return -1;
2927   }
2928   pattern = argv[0];
2929   r = guestfs_glob_expand (g, pattern);
2930   if (r == NULL) return -1;
2931   print_strings (r);
2932   free_strings (r);
2933   return 0;
2934 }
2935
2936 static int run_scrub_device (const char *cmd, int argc, char *argv[])
2937 {
2938   int r;
2939   const char *device;
2940   if (argc != 1) {
2941     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2942     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2943     return -1;
2944   }
2945   device = argv[0];
2946   r = guestfs_scrub_device (g, device);
2947   return r;
2948 }
2949
2950 static int run_scrub_file (const char *cmd, int argc, char *argv[])
2951 {
2952   int r;
2953   const char *file;
2954   if (argc != 1) {
2955     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2956     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2957     return -1;
2958   }
2959   file = argv[0];
2960   r = guestfs_scrub_file (g, file);
2961   return r;
2962 }
2963
2964 static int run_scrub_freespace (const char *cmd, int argc, char *argv[])
2965 {
2966   int r;
2967   const char *dir;
2968   if (argc != 1) {
2969     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2970     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2971     return -1;
2972   }
2973   dir = argv[0];
2974   r = guestfs_scrub_freespace (g, dir);
2975   return r;
2976 }
2977
2978 static int run_mkdtemp (const char *cmd, int argc, char *argv[])
2979 {
2980   char *r;
2981   const char *template;
2982   if (argc != 1) {
2983     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2984     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2985     return -1;
2986   }
2987   template = argv[0];
2988   r = guestfs_mkdtemp (g, template);
2989   if (r == NULL) return -1;
2990   printf ("%s\n", r);
2991   free (r);
2992   return 0;
2993 }
2994
2995 static int run_wc_l (const char *cmd, int argc, char *argv[])
2996 {
2997   int r;
2998   const char *path;
2999   if (argc != 1) {
3000     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
3001     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3002     return -1;
3003   }
3004   path = argv[0];
3005   r = guestfs_wc_l (g, path);
3006   if (r == -1) return -1;
3007   printf ("%d\n", r);
3008   return 0;
3009 }
3010
3011 static int run_wc_w (const char *cmd, int argc, char *argv[])
3012 {
3013   int r;
3014   const char *path;
3015   if (argc != 1) {
3016     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
3017     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3018     return -1;
3019   }
3020   path = argv[0];
3021   r = guestfs_wc_w (g, path);
3022   if (r == -1) return -1;
3023   printf ("%d\n", r);
3024   return 0;
3025 }
3026
3027 static int run_wc_c (const char *cmd, int argc, char *argv[])
3028 {
3029   int r;
3030   const char *path;
3031   if (argc != 1) {
3032     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
3033     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3034     return -1;
3035   }
3036   path = argv[0];
3037   r = guestfs_wc_c (g, path);
3038   if (r == -1) return -1;
3039   printf ("%d\n", r);
3040   return 0;
3041 }
3042
3043 static int run_head (const char *cmd, int argc, char *argv[])
3044 {
3045   char **r;
3046   const char *path;
3047   if (argc != 1) {
3048     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
3049     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3050     return -1;
3051   }
3052   path = argv[0];
3053   r = guestfs_head (g, path);
3054   if (r == NULL) return -1;
3055   print_strings (r);
3056   free_strings (r);
3057   return 0;
3058 }
3059
3060 static int run_head_n (const char *cmd, int argc, char *argv[])
3061 {
3062   char **r;
3063   int nrlines;
3064   const char *path;
3065   if (argc != 2) {
3066     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
3067     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3068     return -1;
3069   }
3070   nrlines = atoi (argv[0]);
3071   path = argv[1];
3072   r = guestfs_head_n (g, nrlines, path);
3073   if (r == NULL) return -1;
3074   print_strings (r);
3075   free_strings (r);
3076   return 0;
3077 }
3078
3079 static int run_tail (const char *cmd, int argc, char *argv[])
3080 {
3081   char **r;
3082   const char *path;
3083   if (argc != 1) {
3084     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
3085     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3086     return -1;
3087   }
3088   path = argv[0];
3089   r = guestfs_tail (g, path);
3090   if (r == NULL) return -1;
3091   print_strings (r);
3092   free_strings (r);
3093   return 0;
3094 }
3095
3096 static int run_tail_n (const char *cmd, int argc, char *argv[])
3097 {
3098   char **r;
3099   int nrlines;
3100   const char *path;
3101   if (argc != 2) {
3102     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
3103     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3104     return -1;
3105   }
3106   nrlines = atoi (argv[0]);
3107   path = argv[1];
3108   r = guestfs_tail_n (g, nrlines, path);
3109   if (r == NULL) return -1;
3110   print_strings (r);
3111   free_strings (r);
3112   return 0;
3113 }
3114
3115 static int run_df (const char *cmd, int argc, char *argv[])
3116 {
3117   char *r;
3118   if (argc != 0) {
3119     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
3120     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3121     return -1;
3122   }
3123   r = guestfs_df (g);
3124   if (r == NULL) return -1;
3125   printf ("%s\n", r);
3126   free (r);
3127   return 0;
3128 }
3129
3130 static int run_df_h (const char *cmd, int argc, char *argv[])
3131 {
3132   char *r;
3133   if (argc != 0) {
3134     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
3135     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3136     return -1;
3137   }
3138   r = guestfs_df_h (g);
3139   if (r == NULL) return -1;
3140   printf ("%s\n", r);
3141   free (r);
3142   return 0;
3143 }
3144
3145 static int run_du (const char *cmd, int argc, char *argv[])
3146 {
3147   int64_t r;
3148   const char *path;
3149   if (argc != 1) {
3150     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
3151     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3152     return -1;
3153   }
3154   path = argv[0];
3155   r = guestfs_du (g, path);
3156   if (r == -1) return -1;
3157   printf ("%" PRIi64 "\n", r);
3158   return 0;
3159 }
3160
3161 static int run_initrd_list (const char *cmd, int argc, char *argv[])
3162 {
3163   char **r;
3164   const char *path;
3165   if (argc != 1) {
3166     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
3167     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3168     return -1;
3169   }
3170   path = argv[0];
3171   r = guestfs_initrd_list (g, path);
3172   if (r == NULL) return -1;
3173   print_strings (r);
3174   free_strings (r);
3175   return 0;
3176 }
3177
3178 static int run_mount_loop (const char *cmd, int argc, char *argv[])
3179 {
3180   int r;
3181   const char *file;
3182   const char *mountpoint;
3183   if (argc != 2) {
3184     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
3185     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3186     return -1;
3187   }
3188   file = argv[0];
3189   mountpoint = argv[1];
3190   r = guestfs_mount_loop (g, file, mountpoint);
3191   return r;
3192 }
3193
3194 static int run_mkswap (const char *cmd, int argc, char *argv[])
3195 {
3196   int r;
3197   const char *device;
3198   if (argc != 1) {
3199     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
3200     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3201     return -1;
3202   }
3203   device = argv[0];
3204   r = guestfs_mkswap (g, device);
3205   return r;
3206 }
3207
3208 static int run_mkswap_L (const char *cmd, int argc, char *argv[])
3209 {
3210   int r;
3211   const char *label;
3212   const char *device;
3213   if (argc != 2) {
3214     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
3215     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3216     return -1;
3217   }
3218   label = argv[0];
3219   device = argv[1];
3220   r = guestfs_mkswap_L (g, label, device);
3221   return r;
3222 }
3223
3224 static int run_mkswap_U (const char *cmd, int argc, char *argv[])
3225 {
3226   int r;
3227   const char *uuid;
3228   const char *device;
3229   if (argc != 2) {
3230     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
3231     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3232     return -1;
3233   }
3234   uuid = argv[0];
3235   device = argv[1];
3236   r = guestfs_mkswap_U (g, uuid, device);
3237   return r;
3238 }
3239
3240 static int run_mknod (const char *cmd, int argc, char *argv[])
3241 {
3242   int r;
3243   int mode;
3244   int devmajor;
3245   int devminor;
3246   const char *path;
3247   if (argc != 4) {
3248     fprintf (stderr, "%s should have 4 parameter(s)\n", cmd);
3249     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3250     return -1;
3251   }
3252   mode = atoi (argv[0]);
3253   devmajor = atoi (argv[1]);
3254   devminor = atoi (argv[2]);
3255   path = argv[3];
3256   r = guestfs_mknod (g, mode, devmajor, devminor, path);
3257   return r;
3258 }
3259
3260 static int run_mkfifo (const char *cmd, int argc, char *argv[])
3261 {
3262   int r;
3263   int mode;
3264   const char *path;
3265   if (argc != 2) {
3266     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
3267     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3268     return -1;
3269   }
3270   mode = atoi (argv[0]);
3271   path = argv[1];
3272   r = guestfs_mkfifo (g, mode, path);
3273   return r;
3274 }
3275
3276 static int run_mknod_b (const char *cmd, int argc, char *argv[])
3277 {
3278   int r;
3279   int mode;
3280   int devmajor;
3281   int devminor;
3282   const char *path;
3283   if (argc != 4) {
3284     fprintf (stderr, "%s should have 4 parameter(s)\n", cmd);
3285     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3286     return -1;
3287   }
3288   mode = atoi (argv[0]);
3289   devmajor = atoi (argv[1]);
3290   devminor = atoi (argv[2]);
3291   path = argv[3];
3292   r = guestfs_mknod_b (g, mode, devmajor, devminor, path);
3293   return r;
3294 }
3295
3296 static int run_mknod_c (const char *cmd, int argc, char *argv[])
3297 {
3298   int r;
3299   int mode;
3300   int devmajor;
3301   int devminor;
3302   const char *path;
3303   if (argc != 4) {
3304     fprintf (stderr, "%s should have 4 parameter(s)\n", cmd);
3305     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3306     return -1;
3307   }
3308   mode = atoi (argv[0]);
3309   devmajor = atoi (argv[1]);
3310   devminor = atoi (argv[2]);
3311   path = argv[3];
3312   r = guestfs_mknod_c (g, mode, devmajor, devminor, path);
3313   return r;
3314 }
3315
3316 static int run_umask (const char *cmd, int argc, char *argv[])
3317 {
3318   int r;
3319   int mask;
3320   if (argc != 1) {
3321     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
3322     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3323     return -1;
3324   }
3325   mask = atoi (argv[0]);
3326   r = guestfs_umask (g, mask);
3327   if (r == -1) return -1;
3328   printf ("%d\n", r);
3329   return 0;
3330 }
3331
3332 int run_action (const char *cmd, int argc, char *argv[])
3333 {
3334   if (strcasecmp (cmd, "launch") == 0 || strcasecmp (cmd, "run") == 0)
3335     return run_launch (cmd, argc, argv);
3336   else
3337   if (strcasecmp (cmd, "kill_subprocess") == 0 || strcasecmp (cmd, "kill-subprocess") == 0)
3338     return run_kill_subprocess (cmd, argc, argv);
3339   else
3340   if (strcasecmp (cmd, "add_drive") == 0 || strcasecmp (cmd, "add-drive") == 0 || strcasecmp (cmd, "add") == 0)
3341     return run_add_drive (cmd, argc, argv);
3342   else
3343   if (strcasecmp (cmd, "add_cdrom") == 0 || strcasecmp (cmd, "add-cdrom") == 0 || strcasecmp (cmd, "cdrom") == 0)
3344     return run_add_cdrom (cmd, argc, argv);
3345   else
3346   if (strcasecmp (cmd, "add_drive_ro") == 0 || strcasecmp (cmd, "add-drive-ro") == 0 || strcasecmp (cmd, "add-ro") == 0)
3347     return run_add_drive_ro (cmd, argc, argv);
3348   else
3349   if (strcasecmp (cmd, "config") == 0)
3350     return run_config (cmd, argc, argv);
3351   else
3352   if (strcasecmp (cmd, "set_qemu") == 0 || strcasecmp (cmd, "set-qemu") == 0 || strcasecmp (cmd, "qemu") == 0)
3353     return run_set_qemu (cmd, argc, argv);
3354   else
3355   if (strcasecmp (cmd, "get_qemu") == 0 || strcasecmp (cmd, "get-qemu") == 0)
3356     return run_get_qemu (cmd, argc, argv);
3357   else
3358   if (strcasecmp (cmd, "set_path") == 0 || strcasecmp (cmd, "set-path") == 0 || strcasecmp (cmd, "path") == 0)
3359     return run_set_path (cmd, argc, argv);
3360   else
3361   if (strcasecmp (cmd, "get_path") == 0 || strcasecmp (cmd, "get-path") == 0)
3362     return run_get_path (cmd, argc, argv);
3363   else
3364   if (strcasecmp (cmd, "set_append") == 0 || strcasecmp (cmd, "set-append") == 0 || strcasecmp (cmd, "append") == 0)
3365     return run_set_append (cmd, argc, argv);
3366   else
3367   if (strcasecmp (cmd, "get_append") == 0 || strcasecmp (cmd, "get-append") == 0)
3368     return run_get_append (cmd, argc, argv);
3369   else
3370   if (strcasecmp (cmd, "set_autosync") == 0 || strcasecmp (cmd, "set-autosync") == 0 || strcasecmp (cmd, "autosync") == 0)
3371     return run_set_autosync (cmd, argc, argv);
3372   else
3373   if (strcasecmp (cmd, "get_autosync") == 0 || strcasecmp (cmd, "get-autosync") == 0)
3374     return run_get_autosync (cmd, argc, argv);
3375   else
3376   if (strcasecmp (cmd, "set_verbose") == 0 || strcasecmp (cmd, "set-verbose") == 0 || strcasecmp (cmd, "verbose") == 0)
3377     return run_set_verbose (cmd, argc, argv);
3378   else
3379   if (strcasecmp (cmd, "get_verbose") == 0 || strcasecmp (cmd, "get-verbose") == 0)
3380     return run_get_verbose (cmd, argc, argv);
3381   else
3382   if (strcasecmp (cmd, "is_ready") == 0 || strcasecmp (cmd, "is-ready") == 0)
3383     return run_is_ready (cmd, argc, argv);
3384   else
3385   if (strcasecmp (cmd, "is_config") == 0 || strcasecmp (cmd, "is-config") == 0)
3386     return run_is_config (cmd, argc, argv);
3387   else
3388   if (strcasecmp (cmd, "is_launching") == 0 || strcasecmp (cmd, "is-launching") == 0)
3389     return run_is_launching (cmd, argc, argv);
3390   else
3391   if (strcasecmp (cmd, "is_busy") == 0 || strcasecmp (cmd, "is-busy") == 0)
3392     return run_is_busy (cmd, argc, argv);
3393   else
3394   if (strcasecmp (cmd, "get_state") == 0 || strcasecmp (cmd, "get-state") == 0)
3395     return run_get_state (cmd, argc, argv);
3396   else
3397   if (strcasecmp (cmd, "set_memsize") == 0 || strcasecmp (cmd, "set-memsize") == 0 || strcasecmp (cmd, "memsize") == 0)
3398     return run_set_memsize (cmd, argc, argv);
3399   else
3400   if (strcasecmp (cmd, "get_memsize") == 0 || strcasecmp (cmd, "get-memsize") == 0)
3401     return run_get_memsize (cmd, argc, argv);
3402   else
3403   if (strcasecmp (cmd, "mount") == 0)
3404     return run_mount (cmd, argc, argv);
3405   else
3406   if (strcasecmp (cmd, "sync") == 0)
3407     return run_sync (cmd, argc, argv);
3408   else
3409   if (strcasecmp (cmd, "touch") == 0)
3410     return run_touch (cmd, argc, argv);
3411   else
3412   if (strcasecmp (cmd, "cat") == 0)
3413     return run_cat (cmd, argc, argv);
3414   else
3415   if (strcasecmp (cmd, "ll") == 0)
3416     return run_ll (cmd, argc, argv);
3417   else
3418   if (strcasecmp (cmd, "ls") == 0)
3419     return run_ls (cmd, argc, argv);
3420   else
3421   if (strcasecmp (cmd, "list_devices") == 0 || strcasecmp (cmd, "list-devices") == 0)
3422     return run_list_devices (cmd, argc, argv);
3423   else
3424   if (strcasecmp (cmd, "list_partitions") == 0 || strcasecmp (cmd, "list-partitions") == 0)
3425     return run_list_partitions (cmd, argc, argv);
3426   else
3427   if (strcasecmp (cmd, "pvs") == 0)
3428     return run_pvs (cmd, argc, argv);
3429   else
3430   if (strcasecmp (cmd, "vgs") == 0)
3431     return run_vgs (cmd, argc, argv);
3432   else
3433   if (strcasecmp (cmd, "lvs") == 0)
3434     return run_lvs (cmd, argc, argv);
3435   else
3436   if (strcasecmp (cmd, "pvs_full") == 0 || strcasecmp (cmd, "pvs-full") == 0)
3437     return run_pvs_full (cmd, argc, argv);
3438   else
3439   if (strcasecmp (cmd, "vgs_full") == 0 || strcasecmp (cmd, "vgs-full") == 0)
3440     return run_vgs_full (cmd, argc, argv);
3441   else
3442   if (strcasecmp (cmd, "lvs_full") == 0 || strcasecmp (cmd, "lvs-full") == 0)
3443     return run_lvs_full (cmd, argc, argv);
3444   else
3445   if (strcasecmp (cmd, "read_lines") == 0 || strcasecmp (cmd, "read-lines") == 0)
3446     return run_read_lines (cmd, argc, argv);
3447   else
3448   if (strcasecmp (cmd, "aug_init") == 0 || strcasecmp (cmd, "aug-init") == 0)
3449     return run_aug_init (cmd, argc, argv);
3450   else
3451   if (strcasecmp (cmd, "aug_close") == 0 || strcasecmp (cmd, "aug-close") == 0)
3452     return run_aug_close (cmd, argc, argv);
3453   else
3454   if (strcasecmp (cmd, "aug_defvar") == 0 || strcasecmp (cmd, "aug-defvar") == 0)
3455     return run_aug_defvar (cmd, argc, argv);
3456   else
3457   if (strcasecmp (cmd, "aug_defnode") == 0 || strcasecmp (cmd, "aug-defnode") == 0)
3458     return run_aug_defnode (cmd, argc, argv);
3459   else
3460   if (strcasecmp (cmd, "aug_get") == 0 || strcasecmp (cmd, "aug-get") == 0)
3461     return run_aug_get (cmd, argc, argv);
3462   else
3463   if (strcasecmp (cmd, "aug_set") == 0 || strcasecmp (cmd, "aug-set") == 0)
3464     return run_aug_set (cmd, argc, argv);
3465   else
3466   if (strcasecmp (cmd, "aug_insert") == 0 || strcasecmp (cmd, "aug-insert") == 0)
3467     return run_aug_insert (cmd, argc, argv);
3468   else
3469   if (strcasecmp (cmd, "aug_rm") == 0 || strcasecmp (cmd, "aug-rm") == 0)
3470     return run_aug_rm (cmd, argc, argv);
3471   else
3472   if (strcasecmp (cmd, "aug_mv") == 0 || strcasecmp (cmd, "aug-mv") == 0)
3473     return run_aug_mv (cmd, argc, argv);
3474   else
3475   if (strcasecmp (cmd, "aug_match") == 0 || strcasecmp (cmd, "aug-match") == 0)
3476     return run_aug_match (cmd, argc, argv);
3477   else
3478   if (strcasecmp (cmd, "aug_save") == 0 || strcasecmp (cmd, "aug-save") == 0)
3479     return run_aug_save (cmd, argc, argv);
3480   else
3481   if (strcasecmp (cmd, "aug_load") == 0 || strcasecmp (cmd, "aug-load") == 0)
3482     return run_aug_load (cmd, argc, argv);
3483   else
3484   if (strcasecmp (cmd, "aug_ls") == 0 || strcasecmp (cmd, "aug-ls") == 0)
3485     return run_aug_ls (cmd, argc, argv);
3486   else
3487   if (strcasecmp (cmd, "rm") == 0)
3488     return run_rm (cmd, argc, argv);
3489   else
3490   if (strcasecmp (cmd, "rmdir") == 0)
3491     return run_rmdir (cmd, argc, argv);
3492   else
3493   if (strcasecmp (cmd, "rm_rf") == 0 || strcasecmp (cmd, "rm-rf") == 0)
3494     return run_rm_rf (cmd, argc, argv);
3495   else
3496   if (strcasecmp (cmd, "mkdir") == 0)
3497     return run_mkdir (cmd, argc, argv);
3498   else
3499   if (strcasecmp (cmd, "mkdir_p") == 0 || strcasecmp (cmd, "mkdir-p") == 0)
3500     return run_mkdir_p (cmd, argc, argv);
3501   else
3502   if (strcasecmp (cmd, "chmod") == 0)
3503     return run_chmod (cmd, argc, argv);
3504   else
3505   if (strcasecmp (cmd, "chown") == 0)
3506     return run_chown (cmd, argc, argv);
3507   else
3508   if (strcasecmp (cmd, "exists") == 0)
3509     return run_exists (cmd, argc, argv);
3510   else
3511   if (strcasecmp (cmd, "is_file") == 0 || strcasecmp (cmd, "is-file") == 0)
3512     return run_is_file (cmd, argc, argv);
3513   else
3514   if (strcasecmp (cmd, "is_dir") == 0 || strcasecmp (cmd, "is-dir") == 0)
3515     return run_is_dir (cmd, argc, argv);
3516   else
3517   if (strcasecmp (cmd, "pvcreate") == 0)
3518     return run_pvcreate (cmd, argc, argv);
3519   else
3520   if (strcasecmp (cmd, "vgcreate") == 0)
3521     return run_vgcreate (cmd, argc, argv);
3522   else
3523   if (strcasecmp (cmd, "lvcreate") == 0)
3524     return run_lvcreate (cmd, argc, argv);
3525   else
3526   if (strcasecmp (cmd, "mkfs") == 0)
3527     return run_mkfs (cmd, argc, argv);
3528   else
3529   if (strcasecmp (cmd, "sfdisk") == 0)
3530     return run_sfdisk (cmd, argc, argv);
3531   else
3532   if (strcasecmp (cmd, "write_file") == 0 || strcasecmp (cmd, "write-file") == 0)
3533     return run_write_file (cmd, argc, argv);
3534   else
3535   if (strcasecmp (cmd, "umount") == 0 || strcasecmp (cmd, "unmount") == 0)
3536     return run_umount (cmd, argc, argv);
3537   else
3538   if (strcasecmp (cmd, "mounts") == 0)
3539     return run_mounts (cmd, argc, argv);
3540   else
3541   if (strcasecmp (cmd, "umount_all") == 0 || strcasecmp (cmd, "umount-all") == 0 || strcasecmp (cmd, "unmount-all") == 0)
3542     return run_umount_all (cmd, argc, argv);
3543   else
3544   if (strcasecmp (cmd, "lvm_remove_all") == 0 || strcasecmp (cmd, "lvm-remove-all") == 0)
3545     return run_lvm_remove_all (cmd, argc, argv);
3546   else
3547   if (strcasecmp (cmd, "file") == 0)
3548     return run_file (cmd, argc, argv);
3549   else
3550   if (strcasecmp (cmd, "command") == 0)
3551     return run_command (cmd, argc, argv);
3552   else
3553   if (strcasecmp (cmd, "command_lines") == 0 || strcasecmp (cmd, "command-lines") == 0)
3554     return run_command_lines (cmd, argc, argv);
3555   else
3556   if (strcasecmp (cmd, "stat") == 0)
3557     return run_stat (cmd, argc, argv);
3558   else
3559   if (strcasecmp (cmd, "lstat") == 0)
3560     return run_lstat (cmd, argc, argv);
3561   else
3562   if (strcasecmp (cmd, "statvfs") == 0)
3563     return run_statvfs (cmd, argc, argv);
3564   else
3565   if (strcasecmp (cmd, "tune2fs_l") == 0 || strcasecmp (cmd, "tune2fs-l") == 0)
3566     return run_tune2fs_l (cmd, argc, argv);
3567   else
3568   if (strcasecmp (cmd, "blockdev_setro") == 0 || strcasecmp (cmd, "blockdev-setro") == 0)
3569     return run_blockdev_setro (cmd, argc, argv);
3570   else
3571   if (strcasecmp (cmd, "blockdev_setrw") == 0 || strcasecmp (cmd, "blockdev-setrw") == 0)
3572     return run_blockdev_setrw (cmd, argc, argv);
3573   else
3574   if (strcasecmp (cmd, "blockdev_getro") == 0 || strcasecmp (cmd, "blockdev-getro") == 0)
3575     return run_blockdev_getro (cmd, argc, argv);
3576   else
3577   if (strcasecmp (cmd, "blockdev_getss") == 0 || strcasecmp (cmd, "blockdev-getss") == 0)
3578     return run_blockdev_getss (cmd, argc, argv);
3579   else
3580   if (strcasecmp (cmd, "blockdev_getbsz") == 0 || strcasecmp (cmd, "blockdev-getbsz") == 0)
3581     return run_blockdev_getbsz (cmd, argc, argv);
3582   else
3583   if (strcasecmp (cmd, "blockdev_setbsz") == 0 || strcasecmp (cmd, "blockdev-setbsz") == 0)
3584     return run_blockdev_setbsz (cmd, argc, argv);
3585   else
3586   if (strcasecmp (cmd, "blockdev_getsz") == 0 || strcasecmp (cmd, "blockdev-getsz") == 0)
3587     return run_blockdev_getsz (cmd, argc, argv);
3588   else
3589   if (strcasecmp (cmd, "blockdev_getsize64") == 0 || strcasecmp (cmd, "blockdev-getsize64") == 0)
3590     return run_blockdev_getsize64 (cmd, argc, argv);
3591   else
3592   if (strcasecmp (cmd, "blockdev_flushbufs") == 0 || strcasecmp (cmd, "blockdev-flushbufs") == 0)
3593     return run_blockdev_flushbufs (cmd, argc, argv);
3594   else
3595   if (strcasecmp (cmd, "blockdev_rereadpt") == 0 || strcasecmp (cmd, "blockdev-rereadpt") == 0)
3596     return run_blockdev_rereadpt (cmd, argc, argv);
3597   else
3598   if (strcasecmp (cmd, "upload") == 0)
3599     return run_upload (cmd, argc, argv);
3600   else
3601   if (strcasecmp (cmd, "download") == 0)
3602     return run_download (cmd, argc, argv);
3603   else
3604   if (strcasecmp (cmd, "checksum") == 0)
3605     return run_checksum (cmd, argc, argv);
3606   else
3607   if (strcasecmp (cmd, "tar_in") == 0 || strcasecmp (cmd, "tar-in") == 0)
3608     return run_tar_in (cmd, argc, argv);
3609   else
3610   if (strcasecmp (cmd, "tar_out") == 0 || strcasecmp (cmd, "tar-out") == 0)
3611     return run_tar_out (cmd, argc, argv);
3612   else
3613   if (strcasecmp (cmd, "tgz_in") == 0 || strcasecmp (cmd, "tgz-in") == 0)
3614     return run_tgz_in (cmd, argc, argv);
3615   else
3616   if (strcasecmp (cmd, "tgz_out") == 0 || strcasecmp (cmd, "tgz-out") == 0)
3617     return run_tgz_out (cmd, argc, argv);
3618   else
3619   if (strcasecmp (cmd, "mount_ro") == 0 || strcasecmp (cmd, "mount-ro") == 0)
3620     return run_mount_ro (cmd, argc, argv);
3621   else
3622   if (strcasecmp (cmd, "mount_options") == 0 || strcasecmp (cmd, "mount-options") == 0)
3623     return run_mount_options (cmd, argc, argv);
3624   else
3625   if (strcasecmp (cmd, "mount_vfs") == 0 || strcasecmp (cmd, "mount-vfs") == 0)
3626     return run_mount_vfs (cmd, argc, argv);
3627   else
3628   if (strcasecmp (cmd, "debug") == 0)
3629     return run_debug (cmd, argc, argv);
3630   else
3631   if (strcasecmp (cmd, "lvremove") == 0)
3632     return run_lvremove (cmd, argc, argv);
3633   else
3634   if (strcasecmp (cmd, "vgremove") == 0)
3635     return run_vgremove (cmd, argc, argv);
3636   else
3637   if (strcasecmp (cmd, "pvremove") == 0)
3638     return run_pvremove (cmd, argc, argv);
3639   else
3640   if (strcasecmp (cmd, "set_e2label") == 0 || strcasecmp (cmd, "set-e2label") == 0)
3641     return run_set_e2label (cmd, argc, argv);
3642   else
3643   if (strcasecmp (cmd, "get_e2label") == 0 || strcasecmp (cmd, "get-e2label") == 0)
3644     return run_get_e2label (cmd, argc, argv);
3645   else
3646   if (strcasecmp (cmd, "set_e2uuid") == 0 || strcasecmp (cmd, "set-e2uuid") == 0)
3647     return run_set_e2uuid (cmd, argc, argv);
3648   else
3649   if (strcasecmp (cmd, "get_e2uuid") == 0 || strcasecmp (cmd, "get-e2uuid") == 0)
3650     return run_get_e2uuid (cmd, argc, argv);
3651   else