Generated code for cp, cp-a and mv commands.
[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", "aug-close", "close the current Augeas handle");
37   printf ("%-20s %s\n", "aug-defnode", "define an Augeas node");
38   printf ("%-20s %s\n", "aug-defvar", "define an Augeas variable");
39   printf ("%-20s %s\n", "aug-get", "look up the value of an Augeas path");
40   printf ("%-20s %s\n", "aug-init", "create a new Augeas handle");
41   printf ("%-20s %s\n", "aug-insert", "insert a sibling Augeas node");
42   printf ("%-20s %s\n", "aug-load", "load files into the tree");
43   printf ("%-20s %s\n", "aug-ls", "list Augeas nodes under a path");
44   printf ("%-20s %s\n", "aug-match", "return Augeas nodes which match path");
45   printf ("%-20s %s\n", "aug-mv", "move Augeas node");
46   printf ("%-20s %s\n", "aug-rm", "remove an Augeas path");
47   printf ("%-20s %s\n", "aug-save", "write all pending Augeas changes to disk");
48   printf ("%-20s %s\n", "aug-set", "set Augeas path to value");
49   printf ("%-20s %s\n", "blockdev-flushbufs", "flush device buffers");
50   printf ("%-20s %s\n", "blockdev-getbsz", "get blocksize of block device");
51   printf ("%-20s %s\n", "blockdev-getro", "is block device set to read-only");
52   printf ("%-20s %s\n", "blockdev-getsize64", "get total size of device in bytes");
53   printf ("%-20s %s\n", "blockdev-getss", "get sectorsize of block device");
54   printf ("%-20s %s\n", "blockdev-getsz", "get total size of device in 512-byte sectors");
55   printf ("%-20s %s\n", "blockdev-rereadpt", "reread partition table");
56   printf ("%-20s %s\n", "blockdev-setbsz", "set blocksize of block device");
57   printf ("%-20s %s\n", "blockdev-setro", "set block device to read-only");
58   printf ("%-20s %s\n", "blockdev-setrw", "set block device to read-write");
59   printf ("%-20s %s\n", "cat", "list the contents of a file");
60   printf ("%-20s %s\n", "checksum", "compute MD5, SHAx or CRC checksum of file");
61   printf ("%-20s %s\n", "chmod", "change file mode");
62   printf ("%-20s %s\n", "chown", "change file owner and group");
63   printf ("%-20s %s\n", "command", "run a command from the guest filesystem");
64   printf ("%-20s %s\n", "command-lines", "run a command, returning lines");
65   printf ("%-20s %s\n", "config", "add qemu parameters");
66   printf ("%-20s %s\n", "cp", "copy a file");
67   printf ("%-20s %s\n", "cp-a", "copy a file or directory recursively");
68   printf ("%-20s %s\n", "debug", "debugging and internals");
69   printf ("%-20s %s\n", "download", "download a file to the local machine");
70   printf ("%-20s %s\n", "exists", "test if file or directory exists");
71   printf ("%-20s %s\n", "file", "determine file type");
72   printf ("%-20s %s\n", "fsck", "run the filesystem checker");
73   printf ("%-20s %s\n", "get-autosync", "get autosync mode");
74   printf ("%-20s %s\n", "get-e2label", "get the ext2/3/4 filesystem label");
75   printf ("%-20s %s\n", "get-e2uuid", "get the ext2/3/4 filesystem UUID");
76   printf ("%-20s %s\n", "get-path", "get the search path");
77   printf ("%-20s %s\n", "get-qemu", "get the qemu binary");
78   printf ("%-20s %s\n", "get-state", "get the current state");
79   printf ("%-20s %s\n", "get-verbose", "get verbose mode");
80   printf ("%-20s %s\n", "grub-install", "install GRUB");
81   printf ("%-20s %s\n", "is-busy", "is busy processing a command");
82   printf ("%-20s %s\n", "is-config", "is in configuration state");
83   printf ("%-20s %s\n", "is-dir", "test if file exists");
84   printf ("%-20s %s\n", "is-file", "test if file exists");
85   printf ("%-20s %s\n", "is-launching", "is launching subprocess");
86   printf ("%-20s %s\n", "is-ready", "is ready to accept commands");
87   printf ("%-20s %s\n", "kill-subprocess", "kill the qemu subprocess");
88   printf ("%-20s %s\n", "launch", "launch the qemu subprocess");
89   printf ("%-20s %s\n", "list-devices", "list the block devices");
90   printf ("%-20s %s\n", "list-partitions", "list the partitions");
91   printf ("%-20s %s\n", "ll", "list the files in a directory (long format)");
92   printf ("%-20s %s\n", "ls", "list the files in a directory");
93   printf ("%-20s %s\n", "lstat", "get file information for a symbolic link");
94   printf ("%-20s %s\n", "lvcreate", "create an LVM volume group");
95   printf ("%-20s %s\n", "lvm-remove-all", "remove all LVM LVs, VGs and PVs");
96   printf ("%-20s %s\n", "lvremove", "remove an LVM logical volume");
97   printf ("%-20s %s\n", "lvs", "list the LVM logical volumes (LVs)");
98   printf ("%-20s %s\n", "lvs-full", "list the LVM logical volumes (LVs)");
99   printf ("%-20s %s\n", "mkdir", "create a directory");
100   printf ("%-20s %s\n", "mkdir-p", "create a directory and parents");
101   printf ("%-20s %s\n", "mkfs", "make a filesystem");
102   printf ("%-20s %s\n", "mount", "mount a guest disk at a position in the filesystem");
103   printf ("%-20s %s\n", "mount-options", "mount a guest disk with mount options");
104   printf ("%-20s %s\n", "mount-ro", "mount a guest disk, read-only");
105   printf ("%-20s %s\n", "mount-vfs", "mount a guest disk with mount options and vfstype");
106   printf ("%-20s %s\n", "mounts", "show mounted filesystems");
107   printf ("%-20s %s\n", "mv", "move a file");
108   printf ("%-20s %s\n", "pvcreate", "create an LVM physical volume");
109   printf ("%-20s %s\n", "pvremove", "remove an LVM physical volume");
110   printf ("%-20s %s\n", "pvs", "list the LVM physical volumes (PVs)");
111   printf ("%-20s %s\n", "pvs-full", "list the LVM physical volumes (PVs)");
112   printf ("%-20s %s\n", "read-lines", "read file as lines");
113   printf ("%-20s %s\n", "rm", "remove a file");
114   printf ("%-20s %s\n", "rm-rf", "remove a file or directory recursively");
115   printf ("%-20s %s\n", "rmdir", "remove a directory");
116   printf ("%-20s %s\n", "set-autosync", "set autosync mode");
117   printf ("%-20s %s\n", "set-e2label", "set the ext2/3/4 filesystem label");
118   printf ("%-20s %s\n", "set-e2uuid", "set the ext2/3/4 filesystem UUID");
119   printf ("%-20s %s\n", "set-path", "set the search path");
120   printf ("%-20s %s\n", "set-qemu", "set the qemu binary");
121   printf ("%-20s %s\n", "set-verbose", "set verbose mode");
122   printf ("%-20s %s\n", "sfdisk", "create partitions on a block device");
123   printf ("%-20s %s\n", "stat", "get file information");
124   printf ("%-20s %s\n", "statvfs", "get file system statistics");
125   printf ("%-20s %s\n", "sync", "sync disks, writes are flushed through to the disk image");
126   printf ("%-20s %s\n", "tar-in", "unpack tarfile to directory");
127   printf ("%-20s %s\n", "tar-out", "pack directory into tarfile");
128   printf ("%-20s %s\n", "tgz-in", "unpack compressed tarball to directory");
129   printf ("%-20s %s\n", "tgz-out", "pack directory into compressed tarball");
130   printf ("%-20s %s\n", "touch", "update file timestamps or create a new file");
131   printf ("%-20s %s\n", "tune2fs-l", "get ext2/ext3/ext4 superblock details");
132   printf ("%-20s %s\n", "umount", "unmount a filesystem");
133   printf ("%-20s %s\n", "umount-all", "unmount all filesystems");
134   printf ("%-20s %s\n", "upload", "upload a file from the local machine");
135   printf ("%-20s %s\n", "vgcreate", "create an LVM volume group");
136   printf ("%-20s %s\n", "vgremove", "remove an LVM volume group");
137   printf ("%-20s %s\n", "vgs", "list the LVM volume groups (VGs)");
138   printf ("%-20s %s\n", "vgs-full", "list the LVM volume groups (VGs)");
139   printf ("%-20s %s\n", "write-file", "create a file");
140   printf ("%-20s %s\n", "zero", "write zeroes to the device");
141   printf ("    Use -h <cmd> / help <cmd> to show detailed help for a command.\n");
142 }
143
144 void display_command (const char *cmd)
145 {
146   if (strcasecmp (cmd, "launch") == 0 || strcasecmp (cmd, "run") == 0)
147     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.");
148   else
149   if (strcasecmp (cmd, "kill_subprocess") == 0 || strcasecmp (cmd, "kill-subprocess") == 0)
150     pod2text ("kill-subprocess - kill the qemu subprocess", " kill-subprocess\n\nThis kills the qemu subprocess.  You should never need to call this.");
151   else
152   if (strcasecmp (cmd, "add_drive") == 0 || strcasecmp (cmd, "add-drive") == 0 || strcasecmp (cmd, "add") == 0)
153     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>.\n\nYou can use 'add' as an alias for this command.");
154   else
155   if (strcasecmp (cmd, "add_cdrom") == 0 || strcasecmp (cmd, "add-cdrom") == 0 || strcasecmp (cmd, "cdrom") == 0)
156     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\nYou can use 'cdrom' as an alias for this command.");
157   else
158   if (strcasecmp (cmd, "config") == 0)
159     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.");
160   else
161   if (strcasecmp (cmd, "set_qemu") == 0 || strcasecmp (cmd, "set-qemu") == 0 || strcasecmp (cmd, "qemu") == 0)
162     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\nThe string C<qemu> is stashed in the libguestfs handle, so the caller\nmust make sure it remains valid for the lifetime of the handle.\n\nSetting C<qemu> to C<NULL> restores the default qemu binary.\n\nYou can use 'qemu' as an alias for this command.");
163   else
164   if (strcasecmp (cmd, "get_qemu") == 0 || strcasecmp (cmd, "get-qemu") == 0)
165     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.");
166   else
167   if (strcasecmp (cmd, "set_path") == 0 || strcasecmp (cmd, "set-path") == 0 || strcasecmp (cmd, "path") == 0)
168     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\nThe string C<path> is stashed in the libguestfs handle, so the caller\nmust make sure it remains valid for the lifetime of the handle.\n\nSetting C<path> to C<NULL> restores the default path.\n\nYou can use 'path' as an alias for this command.");
169   else
170   if (strcasecmp (cmd, "get_path") == 0 || strcasecmp (cmd, "get-path") == 0)
171     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.");
172   else
173   if (strcasecmp (cmd, "set_autosync") == 0 || strcasecmp (cmd, "set-autosync") == 0 || strcasecmp (cmd, "autosync") == 0)
174     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.");
175   else
176   if (strcasecmp (cmd, "get_autosync") == 0 || strcasecmp (cmd, "get-autosync") == 0)
177     pod2text ("get-autosync - get autosync mode", " get-autosync\n\nGet the autosync flag.");
178   else
179   if (strcasecmp (cmd, "set_verbose") == 0 || strcasecmp (cmd, "set-verbose") == 0 || strcasecmp (cmd, "verbose") == 0)
180     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.");
181   else
182   if (strcasecmp (cmd, "get_verbose") == 0 || strcasecmp (cmd, "get-verbose") == 0)
183     pod2text ("get-verbose - get verbose mode", " get-verbose\n\nThis returns the verbose messages flag.");
184   else
185   if (strcasecmp (cmd, "is_ready") == 0 || strcasecmp (cmd, "is-ready") == 0)
186     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)>.");
187   else
188   if (strcasecmp (cmd, "is_config") == 0 || strcasecmp (cmd, "is-config") == 0)
189     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)>.");
190   else
191   if (strcasecmp (cmd, "is_launching") == 0 || strcasecmp (cmd, "is-launching") == 0)
192     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)>.");
193   else
194   if (strcasecmp (cmd, "is_busy") == 0 || strcasecmp (cmd, "is-busy") == 0)
195     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)>.");
196   else
197   if (strcasecmp (cmd, "get_state") == 0 || strcasecmp (cmd, "get-state") == 0)
198     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)>.");
199   else
200   if (strcasecmp (cmd, "mount") == 0)
201     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.");
202   else
203   if (strcasecmp (cmd, "sync") == 0)
204     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.");
205   else
206   if (strcasecmp (cmd, "touch") == 0)
207     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.");
208   else
209   if (strcasecmp (cmd, "cat") == 0)
210     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.");
211   else
212   if (strcasecmp (cmd, "ll") == 0)
213     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.");
214   else
215   if (strcasecmp (cmd, "ls") == 0)
216     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.");
217   else
218   if (strcasecmp (cmd, "list_devices") == 0 || strcasecmp (cmd, "list-devices") == 0)
219     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>");
220   else
221   if (strcasecmp (cmd, "list_partitions") == 0 || strcasecmp (cmd, "list-partitions") == 0)
222     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>.");
223   else
224   if (strcasecmp (cmd, "pvs") == 0)
225     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>.");
226   else
227   if (strcasecmp (cmd, "vgs") == 0)
228     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>.");
229   else
230   if (strcasecmp (cmd, "lvs") == 0)
231     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>.");
232   else
233   if (strcasecmp (cmd, "pvs_full") == 0 || strcasecmp (cmd, "pvs-full") == 0)
234     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.");
235   else
236   if (strcasecmp (cmd, "vgs_full") == 0 || strcasecmp (cmd, "vgs-full") == 0)
237     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.");
238   else
239   if (strcasecmp (cmd, "lvs_full") == 0 || strcasecmp (cmd, "lvs-full") == 0)
240     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.");
241   else
242   if (strcasecmp (cmd, "read_lines") == 0 || strcasecmp (cmd, "read-lines") == 0)
243     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.");
244   else
245   if (strcasecmp (cmd, "aug_init") == 0 || strcasecmp (cmd, "aug-init") == 0)
246     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/>.");
247   else
248   if (strcasecmp (cmd, "aug_close") == 0 || strcasecmp (cmd, "aug-close") == 0)
249     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.");
250   else
251   if (strcasecmp (cmd, "aug_defvar") == 0 || strcasecmp (cmd, "aug-defvar") == 0)
252     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.");
253   else
254   if (strcasecmp (cmd, "aug_defnode") == 0 || strcasecmp (cmd, "aug-defnode") == 0)
255     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.");
256   else
257   if (strcasecmp (cmd, "aug_get") == 0 || strcasecmp (cmd, "aug-get") == 0)
258     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.");
259   else
260   if (strcasecmp (cmd, "aug_set") == 0 || strcasecmp (cmd, "aug-set") == 0)
261     pod2text ("aug-set - set Augeas path to value", " aug-set <path> <val>\n\nSet the value associated with C<path> to C<value>.");
262   else
263   if (strcasecmp (cmd, "aug_insert") == 0 || strcasecmp (cmd, "aug-insert") == 0)
264     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]>.");
265   else
266   if (strcasecmp (cmd, "aug_rm") == 0 || strcasecmp (cmd, "aug-rm") == 0)
267     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.");
268   else
269   if (strcasecmp (cmd, "aug_mv") == 0 || strcasecmp (cmd, "aug-mv") == 0)
270     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.");
271   else
272   if (strcasecmp (cmd, "aug_match") == 0 || strcasecmp (cmd, "aug-match") == 0)
273     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.");
274   else
275   if (strcasecmp (cmd, "aug_save") == 0 || strcasecmp (cmd, "aug-save") == 0)
276     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.");
277   else
278   if (strcasecmp (cmd, "aug_load") == 0 || strcasecmp (cmd, "aug-load") == 0)
279     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.");
280   else
281   if (strcasecmp (cmd, "aug_ls") == 0 || strcasecmp (cmd, "aug-ls") == 0)
282     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.");
283   else
284   if (strcasecmp (cmd, "rm") == 0)
285     pod2text ("rm - remove a file", " rm <path>\n\nRemove the single file C<path>.");
286   else
287   if (strcasecmp (cmd, "rmdir") == 0)
288     pod2text ("rmdir - remove a directory", " rmdir <path>\n\nRemove the single directory C<path>.");
289   else
290   if (strcasecmp (cmd, "rm_rf") == 0 || strcasecmp (cmd, "rm-rf") == 0)
291     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.");
292   else
293   if (strcasecmp (cmd, "mkdir") == 0)
294     pod2text ("mkdir - create a directory", " mkdir <path>\n\nCreate a directory named C<path>.");
295   else
296   if (strcasecmp (cmd, "mkdir_p") == 0 || strcasecmp (cmd, "mkdir-p") == 0)
297     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.");
298   else
299   if (strcasecmp (cmd, "chmod") == 0)
300     pod2text ("chmod - change file mode", " chmod <mode> <path>\n\nChange the mode (permissions) of C<path> to C<mode>.  Only\nnumeric modes are supported.");
301   else
302   if (strcasecmp (cmd, "chown") == 0)
303     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).");
304   else
305   if (strcasecmp (cmd, "exists") == 0)
306     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>.");
307   else
308   if (strcasecmp (cmd, "is_file") == 0 || strcasecmp (cmd, "is-file") == 0)
309     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>.");
310   else
311   if (strcasecmp (cmd, "is_dir") == 0 || strcasecmp (cmd, "is-dir") == 0)
312     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>.");
313   else
314   if (strcasecmp (cmd, "pvcreate") == 0)
315     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>.");
316   else
317   if (strcasecmp (cmd, "vgcreate") == 0)
318     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>.");
319   else
320   if (strcasecmp (cmd, "lvcreate") == 0)
321     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.");
322   else
323   if (strcasecmp (cmd, "mkfs") == 0)
324     pod2text ("mkfs - make a filesystem", " mkfs <fstype> <device>\n\nThis creates a filesystem on C<device> (usually a partition\nof LVM logical volume).  The filesystem type is C<fstype>, for\nexample C<ext3>.");
325   else
326   if (strcasecmp (cmd, "sfdisk") == 0)
327     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\nB<This command is dangerous.  Without careful use you\ncan easily destroy all your data>.");
328   else
329   if (strcasecmp (cmd, "write_file") == 0 || strcasecmp (cmd, "write-file") == 0)
330     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\nBecause of the message protocol, there is a transfer limit \nof somewhere between 2MB and 4MB.  To transfer large files you should use\nFTP.");
331   else
332   if (strcasecmp (cmd, "umount") == 0 || strcasecmp (cmd, "unmount") == 0)
333     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.");
334   else
335   if (strcasecmp (cmd, "mounts") == 0)
336     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.");
337   else
338   if (strcasecmp (cmd, "umount_all") == 0 || strcasecmp (cmd, "umount-all") == 0 || strcasecmp (cmd, "unmount-all") == 0)
339     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.");
340   else
341   if (strcasecmp (cmd, "lvm_remove_all") == 0 || strcasecmp (cmd, "lvm-remove-all") == 0)
342     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>.");
343   else
344   if (strcasecmp (cmd, "file") == 0)
345     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).");
346   else
347   if (strcasecmp (cmd, "command") == 0)
348     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).\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.");
349   else
350   if (strcasecmp (cmd, "command_lines") == 0 || strcasecmp (cmd, "command-lines") == 0)
351     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.");
352   else
353   if (strcasecmp (cmd, "stat") == 0)
354     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.");
355   else
356   if (strcasecmp (cmd, "lstat") == 0)
357     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.");
358   else
359   if (strcasecmp (cmd, "statvfs") == 0)
360     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.");
361   else
362   if (strcasecmp (cmd, "tune2fs_l") == 0 || strcasecmp (cmd, "tune2fs-l") == 0)
363     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.");
364   else
365   if (strcasecmp (cmd, "blockdev_setro") == 0 || strcasecmp (cmd, "blockdev-setro") == 0)
366     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.");
367   else
368   if (strcasecmp (cmd, "blockdev_setrw") == 0 || strcasecmp (cmd, "blockdev-setrw") == 0)
369     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.");
370   else
371   if (strcasecmp (cmd, "blockdev_getro") == 0 || strcasecmp (cmd, "blockdev-getro") == 0)
372     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.");
373   else
374   if (strcasecmp (cmd, "blockdev_getss") == 0 || strcasecmp (cmd, "blockdev-getss") == 0)
375     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.");
376   else
377   if (strcasecmp (cmd, "blockdev_getbsz") == 0 || strcasecmp (cmd, "blockdev-getbsz") == 0)
378     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.");
379   else
380   if (strcasecmp (cmd, "blockdev_setbsz") == 0 || strcasecmp (cmd, "blockdev-setbsz") == 0)
381     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.");
382   else
383   if (strcasecmp (cmd, "blockdev_getsz") == 0 || strcasecmp (cmd, "blockdev-getsz") == 0)
384     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.");
385   else
386   if (strcasecmp (cmd, "blockdev_getsize64") == 0 || strcasecmp (cmd, "blockdev-getsize64") == 0)
387     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.");
388   else
389   if (strcasecmp (cmd, "blockdev_flushbufs") == 0 || strcasecmp (cmd, "blockdev-flushbufs") == 0)
390     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.");
391   else
392   if (strcasecmp (cmd, "blockdev_rereadpt") == 0 || strcasecmp (cmd, "blockdev-rereadpt") == 0)
393     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.");
394   else
395   if (strcasecmp (cmd, "upload") == 0)
396     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>.");
397   else
398   if (strcasecmp (cmd, "download") == 0)
399     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>.");
400   else
401   if (strcasecmp (cmd, "checksum") == 0)
402     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.");
403   else
404   if (strcasecmp (cmd, "tar_in") == 0 || strcasecmp (cmd, "tar-in") == 0)
405     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>.");
406   else
407   if (strcasecmp (cmd, "tar_out") == 0 || strcasecmp (cmd, "tar-out") == 0)
408     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>.");
409   else
410   if (strcasecmp (cmd, "tgz_in") == 0 || strcasecmp (cmd, "tgz-in") == 0)
411     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>.");
412   else
413   if (strcasecmp (cmd, "tgz_out") == 0 || strcasecmp (cmd, "tgz-out") == 0)
414     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>.");
415   else
416   if (strcasecmp (cmd, "mount_ro") == 0 || strcasecmp (cmd, "mount-ro") == 0)
417     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.");
418   else
419   if (strcasecmp (cmd, "mount_options") == 0 || strcasecmp (cmd, "mount-options") == 0)
420     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.");
421   else
422   if (strcasecmp (cmd, "mount_vfs") == 0 || strcasecmp (cmd, "mount-vfs") == 0)
423     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.");
424   else
425   if (strcasecmp (cmd, "debug") == 0)
426     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.");
427   else
428   if (strcasecmp (cmd, "lvremove") == 0)
429     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>.");
430   else
431   if (strcasecmp (cmd, "vgremove") == 0)
432     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).");
433   else
434   if (strcasecmp (cmd, "pvremove") == 0)
435     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.");
436   else
437   if (strcasecmp (cmd, "set_e2label") == 0 || strcasecmp (cmd, "set-e2label") == 0)
438     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.");
439   else
440   if (strcasecmp (cmd, "get_e2label") == 0 || strcasecmp (cmd, "get-e2label") == 0)
441     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>.");
442   else
443   if (strcasecmp (cmd, "set_e2uuid") == 0 || strcasecmp (cmd, "set-e2uuid") == 0)
444     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.");
445   else
446   if (strcasecmp (cmd, "get_e2uuid") == 0 || strcasecmp (cmd, "get-e2uuid") == 0)
447     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>.");
448   else
449   if (strcasecmp (cmd, "fsck") == 0)
450     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>.");
451   else
452   if (strcasecmp (cmd, "zero") == 0)
453     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.");
454   else
455   if (strcasecmp (cmd, "grub_install") == 0 || strcasecmp (cmd, "grub-install") == 0)
456     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>.");
457   else
458   if (strcasecmp (cmd, "cp") == 0)
459     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.");
460   else
461   if (strcasecmp (cmd, "cp_a") == 0 || strcasecmp (cmd, "cp-a") == 0)
462     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.");
463   else
464   if (strcasecmp (cmd, "mv") == 0)
465     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.");
466   else
467     display_builtin_command (cmd);
468 }
469
470 static void print_pv (struct guestfs_lvm_pv *pv)
471 {
472   int i;
473
474   printf ("pv_name: %s\n", pv->pv_name);
475   printf ("pv_uuid: ");
476   for (i = 0; i < 32; ++i)
477     printf ("%c", pv->pv_uuid[i]);
478   printf ("\n");
479   printf ("pv_fmt: %s\n", pv->pv_fmt);
480   printf ("pv_size: %" PRIu64 "\n", pv->pv_size);
481   printf ("dev_size: %" PRIu64 "\n", pv->dev_size);
482   printf ("pv_free: %" PRIu64 "\n", pv->pv_free);
483   printf ("pv_used: %" PRIu64 "\n", pv->pv_used);
484   printf ("pv_attr: %s\n", pv->pv_attr);
485   printf ("pv_pe_count: %" PRIi64 "\n", pv->pv_pe_count);
486   printf ("pv_pe_alloc_count: %" PRIi64 "\n", pv->pv_pe_alloc_count);
487   printf ("pv_tags: %s\n", pv->pv_tags);
488   printf ("pe_start: %" PRIu64 "\n", pv->pe_start);
489   printf ("pv_mda_count: %" PRIi64 "\n", pv->pv_mda_count);
490   printf ("pv_mda_free: %" PRIu64 "\n", pv->pv_mda_free);
491 }
492
493 static void print_pv_list (struct guestfs_lvm_pv_list *pvs)
494 {
495   int i;
496
497   for (i = 0; i < pvs->len; ++i)
498     print_pv (&pvs->val[i]);
499 }
500
501 static void print_vg (struct guestfs_lvm_vg *vg)
502 {
503   int i;
504
505   printf ("vg_name: %s\n", vg->vg_name);
506   printf ("vg_uuid: ");
507   for (i = 0; i < 32; ++i)
508     printf ("%c", vg->vg_uuid[i]);
509   printf ("\n");
510   printf ("vg_fmt: %s\n", vg->vg_fmt);
511   printf ("vg_attr: %s\n", vg->vg_attr);
512   printf ("vg_size: %" PRIu64 "\n", vg->vg_size);
513   printf ("vg_free: %" PRIu64 "\n", vg->vg_free);
514   printf ("vg_sysid: %s\n", vg->vg_sysid);
515   printf ("vg_extent_size: %" PRIu64 "\n", vg->vg_extent_size);
516   printf ("vg_extent_count: %" PRIi64 "\n", vg->vg_extent_count);
517   printf ("vg_free_count: %" PRIi64 "\n", vg->vg_free_count);
518   printf ("max_lv: %" PRIi64 "\n", vg->max_lv);
519   printf ("max_pv: %" PRIi64 "\n", vg->max_pv);
520   printf ("pv_count: %" PRIi64 "\n", vg->pv_count);
521   printf ("lv_count: %" PRIi64 "\n", vg->lv_count);
522   printf ("snap_count: %" PRIi64 "\n", vg->snap_count);
523   printf ("vg_seqno: %" PRIi64 "\n", vg->vg_seqno);
524   printf ("vg_tags: %s\n", vg->vg_tags);
525   printf ("vg_mda_count: %" PRIi64 "\n", vg->vg_mda_count);
526   printf ("vg_mda_free: %" PRIu64 "\n", vg->vg_mda_free);
527 }
528
529 static void print_vg_list (struct guestfs_lvm_vg_list *vgs)
530 {
531   int i;
532
533   for (i = 0; i < vgs->len; ++i)
534     print_vg (&vgs->val[i]);
535 }
536
537 static void print_lv (struct guestfs_lvm_lv *lv)
538 {
539   int i;
540
541   printf ("lv_name: %s\n", lv->lv_name);
542   printf ("lv_uuid: ");
543   for (i = 0; i < 32; ++i)
544     printf ("%c", lv->lv_uuid[i]);
545   printf ("\n");
546   printf ("lv_attr: %s\n", lv->lv_attr);
547   printf ("lv_major: %" PRIi64 "\n", lv->lv_major);
548   printf ("lv_minor: %" PRIi64 "\n", lv->lv_minor);
549   printf ("lv_kernel_major: %" PRIi64 "\n", lv->lv_kernel_major);
550   printf ("lv_kernel_minor: %" PRIi64 "\n", lv->lv_kernel_minor);
551   printf ("lv_size: %" PRIu64 "\n", lv->lv_size);
552   printf ("seg_count: %" PRIi64 "\n", lv->seg_count);
553   printf ("origin: %s\n", lv->origin);
554   if (lv->snap_percent >= 0) printf ("snap_percent: %g %%\n", lv->snap_percent);
555   else printf ("snap_percent: \n");
556   if (lv->copy_percent >= 0) printf ("copy_percent: %g %%\n", lv->copy_percent);
557   else printf ("copy_percent: \n");
558   printf ("move_pv: %s\n", lv->move_pv);
559   printf ("lv_tags: %s\n", lv->lv_tags);
560   printf ("mirror_log: %s\n", lv->mirror_log);
561   printf ("modules: %s\n", lv->modules);
562 }
563
564 static void print_lv_list (struct guestfs_lvm_lv_list *lvs)
565 {
566   int i;
567
568   for (i = 0; i < lvs->len; ++i)
569     print_lv (&lvs->val[i]);
570 }
571
572 static void print_stat (struct guestfs_stat *stat)
573 {
574   printf ("dev: %" PRIi64 "\n", stat->dev);
575   printf ("ino: %" PRIi64 "\n", stat->ino);
576   printf ("mode: %" PRIi64 "\n", stat->mode);
577   printf ("nlink: %" PRIi64 "\n", stat->nlink);
578   printf ("uid: %" PRIi64 "\n", stat->uid);
579   printf ("gid: %" PRIi64 "\n", stat->gid);
580   printf ("rdev: %" PRIi64 "\n", stat->rdev);
581   printf ("size: %" PRIi64 "\n", stat->size);
582   printf ("blksize: %" PRIi64 "\n", stat->blksize);
583   printf ("blocks: %" PRIi64 "\n", stat->blocks);
584   printf ("atime: %" PRIi64 "\n", stat->atime);
585   printf ("mtime: %" PRIi64 "\n", stat->mtime);
586   printf ("ctime: %" PRIi64 "\n", stat->ctime);
587 }
588
589 static void print_statvfs (struct guestfs_statvfs *statvfs)
590 {
591   printf ("bsize: %" PRIi64 "\n", statvfs->bsize);
592   printf ("frsize: %" PRIi64 "\n", statvfs->frsize);
593   printf ("blocks: %" PRIi64 "\n", statvfs->blocks);
594   printf ("bfree: %" PRIi64 "\n", statvfs->bfree);
595   printf ("bavail: %" PRIi64 "\n", statvfs->bavail);
596   printf ("files: %" PRIi64 "\n", statvfs->files);
597   printf ("ffree: %" PRIi64 "\n", statvfs->ffree);
598   printf ("favail: %" PRIi64 "\n", statvfs->favail);
599   printf ("fsid: %" PRIi64 "\n", statvfs->fsid);
600   printf ("flag: %" PRIi64 "\n", statvfs->flag);
601   printf ("namemax: %" PRIi64 "\n", statvfs->namemax);
602 }
603
604 static int run_launch (const char *cmd, int argc, char *argv[])
605 {
606   int r;
607   if (argc != 0) {
608     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
609     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
610     return -1;
611   }
612   r = launch (g);
613   return r;
614 }
615
616 static int run_kill_subprocess (const char *cmd, int argc, char *argv[])
617 {
618   int r;
619   if (argc != 0) {
620     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
621     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
622     return -1;
623   }
624   r = guestfs_kill_subprocess (g);
625   return r;
626 }
627
628 static int run_add_drive (const char *cmd, int argc, char *argv[])
629 {
630   int r;
631   const char *filename;
632   if (argc != 1) {
633     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
634     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
635     return -1;
636   }
637   filename = argv[0];
638   r = guestfs_add_drive (g, filename);
639   return r;
640 }
641
642 static int run_add_cdrom (const char *cmd, int argc, char *argv[])
643 {
644   int r;
645   const char *filename;
646   if (argc != 1) {
647     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
648     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
649     return -1;
650   }
651   filename = argv[0];
652   r = guestfs_add_cdrom (g, filename);
653   return r;
654 }
655
656 static int run_config (const char *cmd, int argc, char *argv[])
657 {
658   int r;
659   const char *qemuparam;
660   const char *qemuvalue;
661   if (argc != 2) {
662     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
663     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
664     return -1;
665   }
666   qemuparam = argv[0];
667   qemuvalue = strcmp (argv[1], "") != 0 ? argv[1] : NULL;
668   r = guestfs_config (g, qemuparam, qemuvalue);
669   return r;
670 }
671
672 static int run_set_qemu (const char *cmd, int argc, char *argv[])
673 {
674   int r;
675   const char *qemu;
676   if (argc != 1) {
677     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
678     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
679     return -1;
680   }
681   qemu = argv[0];
682   r = guestfs_set_qemu (g, qemu);
683   return r;
684 }
685
686 static int run_get_qemu (const char *cmd, int argc, char *argv[])
687 {
688   const char *r;
689   if (argc != 0) {
690     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
691     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
692     return -1;
693   }
694   r = guestfs_get_qemu (g);
695   if (r == NULL) return -1;
696   printf ("%s\n", r);
697   return 0;
698 }
699
700 static int run_set_path (const char *cmd, int argc, char *argv[])
701 {
702   int r;
703   const char *path;
704   if (argc != 1) {
705     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
706     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
707     return -1;
708   }
709   path = argv[0];
710   r = guestfs_set_path (g, path);
711   return r;
712 }
713
714 static int run_get_path (const char *cmd, int argc, char *argv[])
715 {
716   const char *r;
717   if (argc != 0) {
718     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
719     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
720     return -1;
721   }
722   r = guestfs_get_path (g);
723   if (r == NULL) return -1;
724   printf ("%s\n", r);
725   return 0;
726 }
727
728 static int run_set_autosync (const char *cmd, int argc, char *argv[])
729 {
730   int r;
731   int autosync;
732   if (argc != 1) {
733     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
734     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
735     return -1;
736   }
737   autosync = is_true (argv[0]) ? 1 : 0;
738   r = guestfs_set_autosync (g, autosync);
739   return r;
740 }
741
742 static int run_get_autosync (const char *cmd, int argc, char *argv[])
743 {
744   int r;
745   if (argc != 0) {
746     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
747     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
748     return -1;
749   }
750   r = guestfs_get_autosync (g);
751   if (r == -1) return -1;
752   if (r) printf ("true\n"); else printf ("false\n");
753   return 0;
754 }
755
756 static int run_set_verbose (const char *cmd, int argc, char *argv[])
757 {
758   int r;
759   int verbose;
760   if (argc != 1) {
761     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
762     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
763     return -1;
764   }
765   verbose = is_true (argv[0]) ? 1 : 0;
766   r = guestfs_set_verbose (g, verbose);
767   return r;
768 }
769
770 static int run_get_verbose (const char *cmd, int argc, char *argv[])
771 {
772   int r;
773   if (argc != 0) {
774     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
775     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
776     return -1;
777   }
778   r = guestfs_get_verbose (g);
779   if (r == -1) return -1;
780   if (r) printf ("true\n"); else printf ("false\n");
781   return 0;
782 }
783
784 static int run_is_ready (const char *cmd, int argc, char *argv[])
785 {
786   int r;
787   if (argc != 0) {
788     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
789     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
790     return -1;
791   }
792   r = guestfs_is_ready (g);
793   if (r == -1) return -1;
794   if (r) printf ("true\n"); else printf ("false\n");
795   return 0;
796 }
797
798 static int run_is_config (const char *cmd, int argc, char *argv[])
799 {
800   int r;
801   if (argc != 0) {
802     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
803     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
804     return -1;
805   }
806   r = guestfs_is_config (g);
807   if (r == -1) return -1;
808   if (r) printf ("true\n"); else printf ("false\n");
809   return 0;
810 }
811
812 static int run_is_launching (const char *cmd, int argc, char *argv[])
813 {
814   int r;
815   if (argc != 0) {
816     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
817     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
818     return -1;
819   }
820   r = guestfs_is_launching (g);
821   if (r == -1) return -1;
822   if (r) printf ("true\n"); else printf ("false\n");
823   return 0;
824 }
825
826 static int run_is_busy (const char *cmd, int argc, char *argv[])
827 {
828   int r;
829   if (argc != 0) {
830     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
831     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
832     return -1;
833   }
834   r = guestfs_is_busy (g);
835   if (r == -1) return -1;
836   if (r) printf ("true\n"); else printf ("false\n");
837   return 0;
838 }
839
840 static int run_get_state (const char *cmd, int argc, char *argv[])
841 {
842   int r;
843   if (argc != 0) {
844     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
845     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
846     return -1;
847   }
848   r = guestfs_get_state (g);
849   if (r == -1) return -1;
850   printf ("%d\n", r);
851   return 0;
852 }
853
854 static int run_mount (const char *cmd, int argc, char *argv[])
855 {
856   int r;
857   const char *device;
858   const char *mountpoint;
859   if (argc != 2) {
860     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
861     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
862     return -1;
863   }
864   device = argv[0];
865   mountpoint = argv[1];
866   r = guestfs_mount (g, device, mountpoint);
867   return r;
868 }
869
870 static int run_sync (const char *cmd, int argc, char *argv[])
871 {
872   int r;
873   if (argc != 0) {
874     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
875     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
876     return -1;
877   }
878   r = guestfs_sync (g);
879   return r;
880 }
881
882 static int run_touch (const char *cmd, int argc, char *argv[])
883 {
884   int r;
885   const char *path;
886   if (argc != 1) {
887     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
888     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
889     return -1;
890   }
891   path = argv[0];
892   r = guestfs_touch (g, path);
893   return r;
894 }
895
896 static int run_cat (const char *cmd, int argc, char *argv[])
897 {
898   char *r;
899   const char *path;
900   if (argc != 1) {
901     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
902     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
903     return -1;
904   }
905   path = argv[0];
906   r = guestfs_cat (g, path);
907   if (r == NULL) return -1;
908   printf ("%s\n", r);
909   free (r);
910   return 0;
911 }
912
913 static int run_ll (const char *cmd, int argc, char *argv[])
914 {
915   char *r;
916   const char *directory;
917   if (argc != 1) {
918     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
919     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
920     return -1;
921   }
922   directory = argv[0];
923   r = guestfs_ll (g, directory);
924   if (r == NULL) return -1;
925   printf ("%s\n", r);
926   free (r);
927   return 0;
928 }
929
930 static int run_ls (const char *cmd, int argc, char *argv[])
931 {
932   char **r;
933   const char *directory;
934   if (argc != 1) {
935     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
936     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
937     return -1;
938   }
939   directory = argv[0];
940   r = guestfs_ls (g, directory);
941   if (r == NULL) return -1;
942   print_strings (r);
943   free_strings (r);
944   return 0;
945 }
946
947 static int run_list_devices (const char *cmd, int argc, char *argv[])
948 {
949   char **r;
950   if (argc != 0) {
951     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
952     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
953     return -1;
954   }
955   r = guestfs_list_devices (g);
956   if (r == NULL) return -1;
957   print_strings (r);
958   free_strings (r);
959   return 0;
960 }
961
962 static int run_list_partitions (const char *cmd, int argc, char *argv[])
963 {
964   char **r;
965   if (argc != 0) {
966     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
967     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
968     return -1;
969   }
970   r = guestfs_list_partitions (g);
971   if (r == NULL) return -1;
972   print_strings (r);
973   free_strings (r);
974   return 0;
975 }
976
977 static int run_pvs (const char *cmd, int argc, char *argv[])
978 {
979   char **r;
980   if (argc != 0) {
981     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
982     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
983     return -1;
984   }
985   r = guestfs_pvs (g);
986   if (r == NULL) return -1;
987   print_strings (r);
988   free_strings (r);
989   return 0;
990 }
991
992 static int run_vgs (const char *cmd, int argc, char *argv[])
993 {
994   char **r;
995   if (argc != 0) {
996     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
997     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
998     return -1;
999   }
1000   r = guestfs_vgs (g);
1001   if (r == NULL) return -1;
1002   print_strings (r);
1003   free_strings (r);
1004   return 0;
1005 }
1006
1007 static int run_lvs (const char *cmd, int argc, char *argv[])
1008 {
1009   char **r;
1010   if (argc != 0) {
1011     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1012     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1013     return -1;
1014   }
1015   r = guestfs_lvs (g);
1016   if (r == NULL) return -1;
1017   print_strings (r);
1018   free_strings (r);
1019   return 0;
1020 }
1021
1022 static int run_pvs_full (const char *cmd, int argc, char *argv[])
1023 {
1024   struct guestfs_lvm_pv_list *r;
1025   if (argc != 0) {
1026     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1027     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1028     return -1;
1029   }
1030   r = guestfs_pvs_full (g);
1031   if (r == NULL) return -1;
1032   print_pv_list (r);
1033   guestfs_free_lvm_pv_list (r);
1034   return 0;
1035 }
1036
1037 static int run_vgs_full (const char *cmd, int argc, char *argv[])
1038 {
1039   struct guestfs_lvm_vg_list *r;
1040   if (argc != 0) {
1041     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1042     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1043     return -1;
1044   }
1045   r = guestfs_vgs_full (g);
1046   if (r == NULL) return -1;
1047   print_vg_list (r);
1048   guestfs_free_lvm_vg_list (r);
1049   return 0;
1050 }
1051
1052 static int run_lvs_full (const char *cmd, int argc, char *argv[])
1053 {
1054   struct guestfs_lvm_lv_list *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_lvs_full (g);
1061   if (r == NULL) return -1;
1062   print_lv_list (r);
1063   guestfs_free_lvm_lv_list (r);
1064   return 0;
1065 }
1066
1067 static int run_read_lines (const char *cmd, int argc, char *argv[])
1068 {
1069   char **r;
1070   const char *path;
1071   if (argc != 1) {
1072     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1073     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1074     return -1;
1075   }
1076   path = argv[0];
1077   r = guestfs_read_lines (g, path);
1078   if (r == NULL) return -1;
1079   print_strings (r);
1080   free_strings (r);
1081   return 0;
1082 }
1083
1084 static int run_aug_init (const char *cmd, int argc, char *argv[])
1085 {
1086   int r;
1087   const char *root;
1088   int flags;
1089   if (argc != 2) {
1090     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1091     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1092     return -1;
1093   }
1094   root = argv[0];
1095   flags = atoi (argv[1]);
1096   r = guestfs_aug_init (g, root, flags);
1097   return r;
1098 }
1099
1100 static int run_aug_close (const char *cmd, int argc, char *argv[])
1101 {
1102   int r;
1103   if (argc != 0) {
1104     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1105     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1106     return -1;
1107   }
1108   r = guestfs_aug_close (g);
1109   return r;
1110 }
1111
1112 static int run_aug_defvar (const char *cmd, int argc, char *argv[])
1113 {
1114   int r;
1115   const char *name;
1116   const char *expr;
1117   if (argc != 2) {
1118     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1119     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1120     return -1;
1121   }
1122   name = argv[0];
1123   expr = strcmp (argv[1], "") != 0 ? argv[1] : NULL;
1124   r = guestfs_aug_defvar (g, name, expr);
1125   if (r == -1) return -1;
1126   printf ("%d\n", r);
1127   return 0;
1128 }
1129
1130 static int run_aug_defnode (const char *cmd, int argc, char *argv[])
1131 {
1132   struct guestfs_int_bool *r;
1133   const char *name;
1134   const char *expr;
1135   const char *val;
1136   if (argc != 3) {
1137     fprintf (stderr, "%s should have 3 parameter(s)\n", cmd);
1138     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1139     return -1;
1140   }
1141   name = argv[0];
1142   expr = argv[1];
1143   val = argv[2];
1144   r = guestfs_aug_defnode (g, name, expr, val);
1145   if (r == NULL) return -1;
1146   printf ("%d, %s\n", r->i,
1147     r->b ? "true" : "false");
1148   guestfs_free_int_bool (r);
1149   return 0;
1150 }
1151
1152 static int run_aug_get (const char *cmd, int argc, char *argv[])
1153 {
1154   char *r;
1155   const char *path;
1156   if (argc != 1) {
1157     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1158     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1159     return -1;
1160   }
1161   path = argv[0];
1162   r = guestfs_aug_get (g, path);
1163   if (r == NULL) return -1;
1164   printf ("%s\n", r);
1165   free (r);
1166   return 0;
1167 }
1168
1169 static int run_aug_set (const char *cmd, int argc, char *argv[])
1170 {
1171   int r;
1172   const char *path;
1173   const char *val;
1174   if (argc != 2) {
1175     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1176     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1177     return -1;
1178   }
1179   path = argv[0];
1180   val = argv[1];
1181   r = guestfs_aug_set (g, path, val);
1182   return r;
1183 }
1184
1185 static int run_aug_insert (const char *cmd, int argc, char *argv[])
1186 {
1187   int r;
1188   const char *path;
1189   const char *label;
1190   int before;
1191   if (argc != 3) {
1192     fprintf (stderr, "%s should have 3 parameter(s)\n", cmd);
1193     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1194     return -1;
1195   }
1196   path = argv[0];
1197   label = argv[1];
1198   before = is_true (argv[2]) ? 1 : 0;
1199   r = guestfs_aug_insert (g, path, label, before);
1200   return r;
1201 }
1202
1203 static int run_aug_rm (const char *cmd, int argc, char *argv[])
1204 {
1205   int r;
1206   const char *path;
1207   if (argc != 1) {
1208     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1209     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1210     return -1;
1211   }
1212   path = argv[0];
1213   r = guestfs_aug_rm (g, path);
1214   if (r == -1) return -1;
1215   printf ("%d\n", r);
1216   return 0;
1217 }
1218
1219 static int run_aug_mv (const char *cmd, int argc, char *argv[])
1220 {
1221   int r;
1222   const char *src;
1223   const char *dest;
1224   if (argc != 2) {
1225     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1226     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1227     return -1;
1228   }
1229   src = argv[0];
1230   dest = argv[1];
1231   r = guestfs_aug_mv (g, src, dest);
1232   return r;
1233 }
1234
1235 static int run_aug_match (const char *cmd, int argc, char *argv[])
1236 {
1237   char **r;
1238   const char *path;
1239   if (argc != 1) {
1240     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1241     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1242     return -1;
1243   }
1244   path = argv[0];
1245   r = guestfs_aug_match (g, path);
1246   if (r == NULL) return -1;
1247   print_strings (r);
1248   free_strings (r);
1249   return 0;
1250 }
1251
1252 static int run_aug_save (const char *cmd, int argc, char *argv[])
1253 {
1254   int r;
1255   if (argc != 0) {
1256     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1257     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1258     return -1;
1259   }
1260   r = guestfs_aug_save (g);
1261   return r;
1262 }
1263
1264 static int run_aug_load (const char *cmd, int argc, char *argv[])
1265 {
1266   int r;
1267   if (argc != 0) {
1268     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1269     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1270     return -1;
1271   }
1272   r = guestfs_aug_load (g);
1273   return r;
1274 }
1275
1276 static int run_aug_ls (const char *cmd, int argc, char *argv[])
1277 {
1278   char **r;
1279   const char *path;
1280   if (argc != 1) {
1281     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1282     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1283     return -1;
1284   }
1285   path = argv[0];
1286   r = guestfs_aug_ls (g, path);
1287   if (r == NULL) return -1;
1288   print_strings (r);
1289   free_strings (r);
1290   return 0;
1291 }
1292
1293 static int run_rm (const char *cmd, int argc, char *argv[])
1294 {
1295   int r;
1296   const char *path;
1297   if (argc != 1) {
1298     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1299     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1300     return -1;
1301   }
1302   path = argv[0];
1303   r = guestfs_rm (g, path);
1304   return r;
1305 }
1306
1307 static int run_rmdir (const char *cmd, int argc, char *argv[])
1308 {
1309   int r;
1310   const char *path;
1311   if (argc != 1) {
1312     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1313     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1314     return -1;
1315   }
1316   path = argv[0];
1317   r = guestfs_rmdir (g, path);
1318   return r;
1319 }
1320
1321 static int run_rm_rf (const char *cmd, int argc, char *argv[])
1322 {
1323   int r;
1324   const char *path;
1325   if (argc != 1) {
1326     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1327     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1328     return -1;
1329   }
1330   path = argv[0];
1331   r = guestfs_rm_rf (g, path);
1332   return r;
1333 }
1334
1335 static int run_mkdir (const char *cmd, int argc, char *argv[])
1336 {
1337   int r;
1338   const char *path;
1339   if (argc != 1) {
1340     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1341     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1342     return -1;
1343   }
1344   path = argv[0];
1345   r = guestfs_mkdir (g, path);
1346   return r;
1347 }
1348
1349 static int run_mkdir_p (const char *cmd, int argc, char *argv[])
1350 {
1351   int 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_mkdir_p (g, path);
1360   return r;
1361 }
1362
1363 static int run_chmod (const char *cmd, int argc, char *argv[])
1364 {
1365   int r;
1366   int mode;
1367   const char *path;
1368   if (argc != 2) {
1369     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1370     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1371     return -1;
1372   }
1373   mode = atoi (argv[0]);
1374   path = argv[1];
1375   r = guestfs_chmod (g, mode, path);
1376   return r;
1377 }
1378
1379 static int run_chown (const char *cmd, int argc, char *argv[])
1380 {
1381   int r;
1382   int owner;
1383   int group;
1384   const char *path;
1385   if (argc != 3) {
1386     fprintf (stderr, "%s should have 3 parameter(s)\n", cmd);
1387     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1388     return -1;
1389   }
1390   owner = atoi (argv[0]);
1391   group = atoi (argv[1]);
1392   path = argv[2];
1393   r = guestfs_chown (g, owner, group, path);
1394   return r;
1395 }
1396
1397 static int run_exists (const char *cmd, int argc, char *argv[])
1398 {
1399   int r;
1400   const char *path;
1401   if (argc != 1) {
1402     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1403     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1404     return -1;
1405   }
1406   path = argv[0];
1407   r = guestfs_exists (g, path);
1408   if (r == -1) return -1;
1409   if (r) printf ("true\n"); else printf ("false\n");
1410   return 0;
1411 }
1412
1413 static int run_is_file (const char *cmd, int argc, char *argv[])
1414 {
1415   int r;
1416   const char *path;
1417   if (argc != 1) {
1418     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1419     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1420     return -1;
1421   }
1422   path = argv[0];
1423   r = guestfs_is_file (g, path);
1424   if (r == -1) return -1;
1425   if (r) printf ("true\n"); else printf ("false\n");
1426   return 0;
1427 }
1428
1429 static int run_is_dir (const char *cmd, int argc, char *argv[])
1430 {
1431   int r;
1432   const char *path;
1433   if (argc != 1) {
1434     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1435     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1436     return -1;
1437   }
1438   path = argv[0];
1439   r = guestfs_is_dir (g, path);
1440   if (r == -1) return -1;
1441   if (r) printf ("true\n"); else printf ("false\n");
1442   return 0;
1443 }
1444
1445 static int run_pvcreate (const char *cmd, int argc, char *argv[])
1446 {
1447   int r;
1448   const char *device;
1449   if (argc != 1) {
1450     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1451     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1452     return -1;
1453   }
1454   device = argv[0];
1455   r = guestfs_pvcreate (g, device);
1456   return r;
1457 }
1458
1459 static int run_vgcreate (const char *cmd, int argc, char *argv[])
1460 {
1461   int r;
1462   const char *volgroup;
1463   char **physvols;
1464   if (argc != 2) {
1465     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1466     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1467     return -1;
1468   }
1469   volgroup = argv[0];
1470   physvols = parse_string_list (argv[1]);
1471   r = guestfs_vgcreate (g, volgroup, physvols);
1472   return r;
1473 }
1474
1475 static int run_lvcreate (const char *cmd, int argc, char *argv[])
1476 {
1477   int r;
1478   const char *logvol;
1479   const char *volgroup;
1480   int mbytes;
1481   if (argc != 3) {
1482     fprintf (stderr, "%s should have 3 parameter(s)\n", cmd);
1483     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1484     return -1;
1485   }
1486   logvol = argv[0];
1487   volgroup = argv[1];
1488   mbytes = atoi (argv[2]);
1489   r = guestfs_lvcreate (g, logvol, volgroup, mbytes);
1490   return r;
1491 }
1492
1493 static int run_mkfs (const char *cmd, int argc, char *argv[])
1494 {
1495   int r;
1496   const char *fstype;
1497   const char *device;
1498   if (argc != 2) {
1499     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1500     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1501     return -1;
1502   }
1503   fstype = argv[0];
1504   device = argv[1];
1505   r = guestfs_mkfs (g, fstype, device);
1506   return r;
1507 }
1508
1509 static int run_sfdisk (const char *cmd, int argc, char *argv[])
1510 {
1511   int r;
1512   const char *device;
1513   int cyls;
1514   int heads;
1515   int sectors;
1516   char **lines;
1517   if (argc != 5) {
1518     fprintf (stderr, "%s should have 5 parameter(s)\n", cmd);
1519     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1520     return -1;
1521   }
1522   device = argv[0];
1523   cyls = atoi (argv[1]);
1524   heads = atoi (argv[2]);
1525   sectors = atoi (argv[3]);
1526   lines = parse_string_list (argv[4]);
1527   r = guestfs_sfdisk (g, device, cyls, heads, sectors, lines);
1528   return r;
1529 }
1530
1531 static int run_write_file (const char *cmd, int argc, char *argv[])
1532 {
1533   int r;
1534   const char *path;
1535   const char *content;
1536   int size;
1537   if (argc != 3) {
1538     fprintf (stderr, "%s should have 3 parameter(s)\n", cmd);
1539     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1540     return -1;
1541   }
1542   path = argv[0];
1543   content = argv[1];
1544   size = atoi (argv[2]);
1545   r = guestfs_write_file (g, path, content, size);
1546   return r;
1547 }
1548
1549 static int run_umount (const char *cmd, int argc, char *argv[])
1550 {
1551   int r;
1552   const char *pathordevice;
1553   if (argc != 1) {
1554     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1555     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1556     return -1;
1557   }
1558   pathordevice = argv[0];
1559   r = guestfs_umount (g, pathordevice);
1560   return r;
1561 }
1562
1563 static int run_mounts (const char *cmd, int argc, char *argv[])
1564 {
1565   char **r;
1566   if (argc != 0) {
1567     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1568     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1569     return -1;
1570   }
1571   r = guestfs_mounts (g);
1572   if (r == NULL) return -1;
1573   print_strings (r);
1574   free_strings (r);
1575   return 0;
1576 }
1577
1578 static int run_umount_all (const char *cmd, int argc, char *argv[])
1579 {
1580   int r;
1581   if (argc != 0) {
1582     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1583     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1584     return -1;
1585   }
1586   r = guestfs_umount_all (g);
1587   return r;
1588 }
1589
1590 static int run_lvm_remove_all (const char *cmd, int argc, char *argv[])
1591 {
1592   int r;
1593   if (argc != 0) {
1594     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1595     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1596     return -1;
1597   }
1598   r = guestfs_lvm_remove_all (g);
1599   return r;
1600 }
1601
1602 static int run_file (const char *cmd, int argc, char *argv[])
1603 {
1604   char *r;
1605   const char *path;
1606   if (argc != 1) {
1607     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1608     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1609     return -1;
1610   }
1611   path = argv[0];
1612   r = guestfs_file (g, path);
1613   if (r == NULL) return -1;
1614   printf ("%s\n", r);
1615   free (r);
1616   return 0;
1617 }
1618
1619 static int run_command (const char *cmd, int argc, char *argv[])
1620 {
1621   char *r;
1622   char **arguments;
1623   if (argc != 1) {
1624     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1625     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1626     return -1;
1627   }
1628   arguments = parse_string_list (argv[0]);
1629   r = guestfs_command (g, arguments);
1630   if (r == NULL) return -1;
1631   printf ("%s\n", r);
1632   free (r);
1633   return 0;
1634 }
1635
1636 static int run_command_lines (const char *cmd, int argc, char *argv[])
1637 {
1638   char **r;
1639   char **arguments;
1640   if (argc != 1) {
1641     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1642     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1643     return -1;
1644   }
1645   arguments = parse_string_list (argv[0]);
1646   r = guestfs_command_lines (g, arguments);
1647   if (r == NULL) return -1;
1648   print_strings (r);
1649   free_strings (r);
1650   return 0;
1651 }
1652
1653 static int run_stat (const char *cmd, int argc, char *argv[])
1654 {
1655   struct guestfs_stat *r;
1656   const char *path;
1657   if (argc != 1) {
1658     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1659     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1660     return -1;
1661   }
1662   path = argv[0];
1663   r = guestfs_stat (g, path);
1664   if (r == NULL) return -1;
1665   print_stat (r);
1666   free (r);
1667   return 0;
1668 }
1669
1670 static int run_lstat (const char *cmd, int argc, char *argv[])
1671 {
1672   struct guestfs_stat *r;
1673   const char *path;
1674   if (argc != 1) {
1675     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1676     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1677     return -1;
1678   }
1679   path = argv[0];
1680   r = guestfs_lstat (g, path);
1681   if (r == NULL) return -1;
1682   print_stat (r);
1683   free (r);
1684   return 0;
1685 }
1686
1687 static int run_statvfs (const char *cmd, int argc, char *argv[])
1688 {
1689   struct guestfs_statvfs *r;
1690   const char *path;
1691   if (argc != 1) {
1692     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1693     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1694     return -1;
1695   }
1696   path = argv[0];
1697   r = guestfs_statvfs (g, path);
1698   if (r == NULL) return -1;
1699   print_statvfs (r);
1700   free (r);
1701   return 0;
1702 }
1703
1704 static int run_tune2fs_l (const char *cmd, int argc, char *argv[])
1705 {
1706   char **r;
1707   const char *device;
1708   if (argc != 1) {
1709     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1710     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1711     return -1;
1712   }
1713   device = argv[0];
1714   r = guestfs_tune2fs_l (g, device);
1715   if (r == NULL) return -1;
1716   print_table (r);
1717   free_strings (r);
1718   return 0;
1719 }
1720
1721 static int run_blockdev_setro (const char *cmd, int argc, char *argv[])
1722 {
1723   int r;
1724   const char *device;
1725   if (argc != 1) {
1726     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1727     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1728     return -1;
1729   }
1730   device = argv[0];
1731   r = guestfs_blockdev_setro (g, device);
1732   return r;
1733 }
1734
1735 static int run_blockdev_setrw (const char *cmd, int argc, char *argv[])
1736 {
1737   int r;
1738   const char *device;
1739   if (argc != 1) {
1740     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1741     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1742     return -1;
1743   }
1744   device = argv[0];
1745   r = guestfs_blockdev_setrw (g, device);
1746   return r;
1747 }
1748
1749 static int run_blockdev_getro (const char *cmd, int argc, char *argv[])
1750 {
1751   int r;
1752   const char *device;
1753   if (argc != 1) {
1754     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1755     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1756     return -1;
1757   }
1758   device = argv[0];
1759   r = guestfs_blockdev_getro (g, device);
1760   if (r == -1) return -1;
1761   if (r) printf ("true\n"); else printf ("false\n");
1762   return 0;
1763 }
1764
1765 static int run_blockdev_getss (const char *cmd, int argc, char *argv[])
1766 {
1767   int r;
1768   const char *device;
1769   if (argc != 1) {
1770     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1771     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1772     return -1;
1773   }
1774   device = argv[0];
1775   r = guestfs_blockdev_getss (g, device);
1776   if (r == -1) return -1;
1777   printf ("%d\n", r);
1778   return 0;
1779 }
1780
1781 static int run_blockdev_getbsz (const char *cmd, int argc, char *argv[])
1782 {
1783   int r;
1784   const char *device;
1785   if (argc != 1) {
1786     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1787     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1788     return -1;
1789   }
1790   device = argv[0];
1791   r = guestfs_blockdev_getbsz (g, device);
1792   if (r == -1) return -1;
1793   printf ("%d\n", r);
1794   return 0;
1795 }
1796
1797 static int run_blockdev_setbsz (const char *cmd, int argc, char *argv[])
1798 {
1799   int r;
1800   const char *device;
1801   int blocksize;
1802   if (argc != 2) {
1803     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1804     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1805     return -1;
1806   }
1807   device = argv[0];
1808   blocksize = atoi (argv[1]);
1809   r = guestfs_blockdev_setbsz (g, device, blocksize);
1810   return r;
1811 }
1812
1813 static int run_blockdev_getsz (const char *cmd, int argc, char *argv[])
1814 {
1815   int64_t r;
1816   const char *device;
1817   if (argc != 1) {
1818     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1819     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1820     return -1;
1821   }
1822   device = argv[0];
1823   r = guestfs_blockdev_getsz (g, device);
1824   if (r == -1) return -1;
1825   printf ("%" PRIi64 "\n", r);
1826   return 0;
1827 }
1828
1829 static int run_blockdev_getsize64 (const char *cmd, int argc, char *argv[])
1830 {
1831   int64_t r;
1832   const char *device;
1833   if (argc != 1) {
1834     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1835     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1836     return -1;
1837   }
1838   device = argv[0];
1839   r = guestfs_blockdev_getsize64 (g, device);
1840   if (r == -1) return -1;
1841   printf ("%" PRIi64 "\n", r);
1842   return 0;
1843 }
1844
1845 static int run_blockdev_flushbufs (const char *cmd, int argc, char *argv[])
1846 {
1847   int r;
1848   const char *device;
1849   if (argc != 1) {
1850     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1851     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1852     return -1;
1853   }
1854   device = argv[0];
1855   r = guestfs_blockdev_flushbufs (g, device);
1856   return r;
1857 }
1858
1859 static int run_blockdev_rereadpt (const char *cmd, int argc, char *argv[])
1860 {
1861   int r;
1862   const char *device;
1863   if (argc != 1) {
1864     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1865     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1866     return -1;
1867   }
1868   device = argv[0];
1869   r = guestfs_blockdev_rereadpt (g, device);
1870   return r;
1871 }
1872
1873 static int run_upload (const char *cmd, int argc, char *argv[])
1874 {
1875   int r;
1876   const char *filename;
1877   const char *remotefilename;
1878   if (argc != 2) {
1879     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1880     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1881     return -1;
1882   }
1883   filename = strcmp (argv[0], "-") != 0 ? argv[0] : "/dev/stdin";
1884   remotefilename = argv[1];
1885   r = guestfs_upload (g, filename, remotefilename);
1886   return r;
1887 }
1888
1889 static int run_download (const char *cmd, int argc, char *argv[])
1890 {
1891   int r;
1892   const char *remotefilename;
1893   const char *filename;
1894   if (argc != 2) {
1895     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1896     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1897     return -1;
1898   }
1899   remotefilename = argv[0];
1900   filename = strcmp (argv[1], "-") != 0 ? argv[1] : "/dev/stdout";
1901   r = guestfs_download (g, remotefilename, filename);
1902   return r;
1903 }
1904
1905 static int run_checksum (const char *cmd, int argc, char *argv[])
1906 {
1907   char *r;
1908   const char *csumtype;
1909   const char *path;
1910   if (argc != 2) {
1911     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1912     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1913     return -1;
1914   }
1915   csumtype = argv[0];
1916   path = argv[1];
1917   r = guestfs_checksum (g, csumtype, path);
1918   if (r == NULL) return -1;
1919   printf ("%s\n", r);
1920   free (r);
1921   return 0;
1922 }
1923
1924 static int run_tar_in (const char *cmd, int argc, char *argv[])
1925 {
1926   int r;
1927   const char *tarfile;
1928   const char *directory;
1929   if (argc != 2) {
1930     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1931     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1932     return -1;
1933   }
1934   tarfile = strcmp (argv[0], "-") != 0 ? argv[0] : "/dev/stdin";
1935   directory = argv[1];
1936   r = guestfs_tar_in (g, tarfile, directory);
1937   return r;
1938 }
1939
1940 static int run_tar_out (const char *cmd, int argc, char *argv[])
1941 {
1942   int r;
1943   const char *directory;
1944   const char *tarfile;
1945   if (argc != 2) {
1946     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1947     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1948     return -1;
1949   }
1950   directory = argv[0];
1951   tarfile = strcmp (argv[1], "-") != 0 ? argv[1] : "/dev/stdout";
1952   r = guestfs_tar_out (g, directory, tarfile);
1953   return r;
1954 }
1955
1956 static int run_tgz_in (const char *cmd, int argc, char *argv[])
1957 {
1958   int r;
1959   const char *tarball;
1960   const char *directory;
1961   if (argc != 2) {
1962     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1963     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1964     return -1;
1965   }
1966   tarball = strcmp (argv[0], "-") != 0 ? argv[0] : "/dev/stdin";
1967   directory = argv[1];
1968   r = guestfs_tgz_in (g, tarball, directory);
1969   return r;
1970 }
1971
1972 static int run_tgz_out (const char *cmd, int argc, char *argv[])
1973 {
1974   int r;
1975   const char *directory;
1976   const char *tarball;
1977   if (argc != 2) {
1978     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1979     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1980     return -1;
1981   }
1982   directory = argv[0];
1983   tarball = strcmp (argv[1], "-") != 0 ? argv[1] : "/dev/stdout";
1984   r = guestfs_tgz_out (g, directory, tarball);
1985   return r;
1986 }
1987
1988 static int run_mount_ro (const char *cmd, int argc, char *argv[])
1989 {
1990   int r;
1991   const char *device;
1992   const char *mountpoint;
1993   if (argc != 2) {
1994     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1995     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1996     return -1;
1997   }
1998   device = argv[0];
1999   mountpoint = argv[1];
2000   r = guestfs_mount_ro (g, device, mountpoint);
2001   return r;
2002 }
2003
2004 static int run_mount_options (const char *cmd, int argc, char *argv[])
2005 {
2006   int r;
2007   const char *options;
2008   const char *device;
2009   const char *mountpoint;
2010   if (argc != 3) {
2011     fprintf (stderr, "%s should have 3 parameter(s)\n", cmd);
2012     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2013     return -1;
2014   }
2015   options = argv[0];
2016   device = argv[1];
2017   mountpoint = argv[2];
2018   r = guestfs_mount_options (g, options, device, mountpoint);
2019   return r;
2020 }
2021
2022 static int run_mount_vfs (const char *cmd, int argc, char *argv[])
2023 {
2024   int r;
2025   const char *options;
2026   const char *vfstype;
2027   const char *device;
2028   const char *mountpoint;
2029   if (argc != 4) {
2030     fprintf (stderr, "%s should have 4 parameter(s)\n", cmd);
2031     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2032     return -1;
2033   }
2034   options = argv[0];
2035   vfstype = argv[1];
2036   device = argv[2];
2037   mountpoint = argv[3];
2038   r = guestfs_mount_vfs (g, options, vfstype, device, mountpoint);
2039   return r;
2040 }
2041
2042 static int run_debug (const char *cmd, int argc, char *argv[])
2043 {
2044   char *r;
2045   const char *subcmd;
2046   char **extraargs;
2047   if (argc != 2) {
2048     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2049     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2050     return -1;
2051   }
2052   subcmd = argv[0];
2053   extraargs = parse_string_list (argv[1]);
2054   r = guestfs_debug (g, subcmd, extraargs);
2055   if (r == NULL) return -1;
2056   printf ("%s\n", r);
2057   free (r);
2058   return 0;
2059 }
2060
2061 static int run_lvremove (const char *cmd, int argc, char *argv[])
2062 {
2063   int r;
2064   const char *device;
2065   if (argc != 1) {
2066     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2067     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2068     return -1;
2069   }
2070   device = argv[0];
2071   r = guestfs_lvremove (g, device);
2072   return r;
2073 }
2074
2075 static int run_vgremove (const char *cmd, int argc, char *argv[])
2076 {
2077   int r;
2078   const char *vgname;
2079   if (argc != 1) {
2080     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2081     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2082     return -1;
2083   }
2084   vgname = argv[0];
2085   r = guestfs_vgremove (g, vgname);
2086   return r;
2087 }
2088
2089 static int run_pvremove (const char *cmd, int argc, char *argv[])
2090 {
2091   int r;
2092   const char *device;
2093   if (argc != 1) {
2094     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2095     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2096     return -1;
2097   }
2098   device = argv[0];
2099   r = guestfs_pvremove (g, device);
2100   return r;
2101 }
2102
2103 static int run_set_e2label (const char *cmd, int argc, char *argv[])
2104 {
2105   int r;
2106   const char *device;
2107   const char *label;
2108   if (argc != 2) {
2109     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2110     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2111     return -1;
2112   }
2113   device = argv[0];
2114   label = argv[1];
2115   r = guestfs_set_e2label (g, device, label);
2116   return r;
2117 }
2118
2119 static int run_get_e2label (const char *cmd, int argc, char *argv[])
2120 {
2121   char *r;
2122   const char *device;
2123   if (argc != 1) {
2124     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2125     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2126     return -1;
2127   }
2128   device = argv[0];
2129   r = guestfs_get_e2label (g, device);
2130   if (r == NULL) return -1;
2131   printf ("%s\n", r);
2132   free (r);
2133   return 0;
2134 }
2135
2136 static int run_set_e2uuid (const char *cmd, int argc, char *argv[])
2137 {
2138   int r;
2139   const char *device;
2140   const char *uuid;
2141   if (argc != 2) {
2142     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2143     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2144     return -1;
2145   }
2146   device = argv[0];
2147   uuid = argv[1];
2148   r = guestfs_set_e2uuid (g, device, uuid);
2149   return r;
2150 }
2151
2152 static int run_get_e2uuid (const char *cmd, int argc, char *argv[])
2153 {
2154   char *r;
2155   const char *device;
2156   if (argc != 1) {
2157     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2158     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2159     return -1;
2160   }
2161   device = argv[0];
2162   r = guestfs_get_e2uuid (g, device);
2163   if (r == NULL) return -1;
2164   printf ("%s\n", r);
2165   free (r);
2166   return 0;
2167 }
2168
2169 static int run_fsck (const char *cmd, int argc, char *argv[])
2170 {
2171   int r;
2172   const char *fstype;
2173   const char *device;
2174   if (argc != 2) {
2175     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2176     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2177     return -1;
2178   }
2179   fstype = argv[0];
2180   device = argv[1];
2181   r = guestfs_fsck (g, fstype, device);
2182   if (r == -1) return -1;
2183   printf ("%d\n", r);
2184   return 0;
2185 }
2186
2187 static int run_zero (const char *cmd, int argc, char *argv[])
2188 {
2189   int r;
2190   const char *device;
2191   if (argc != 1) {
2192     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2193     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2194     return -1;
2195   }
2196   device = argv[0];
2197   r = guestfs_zero (g, device);
2198   return r;
2199 }
2200
2201 static int run_grub_install (const char *cmd, int argc, char *argv[])
2202 {
2203   int r;
2204   const char *root;
2205   const char *device;
2206   if (argc != 2) {
2207     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2208     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2209     return -1;
2210   }
2211   root = argv[0];
2212   device = argv[1];
2213   r = guestfs_grub_install (g, root, device);
2214   return r;
2215 }
2216
2217 static int run_cp (const char *cmd, int argc, char *argv[])
2218 {
2219   int r;
2220   const char *src;
2221   const char *dest;
2222   if (argc != 2) {
2223     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2224     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2225     return -1;
2226   }
2227   src = argv[0];
2228   dest = argv[1];
2229   r = guestfs_cp (g, src, dest);
2230   return r;
2231 }
2232
2233 static int run_cp_a (const char *cmd, int argc, char *argv[])
2234 {
2235   int r;
2236   const char *src;
2237   const char *dest;
2238   if (argc != 2) {
2239     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2240     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2241     return -1;
2242   }
2243   src = argv[0];
2244   dest = argv[1];
2245   r = guestfs_cp_a (g, src, dest);
2246   return r;
2247 }
2248
2249 static int run_mv (const char *cmd, int argc, char *argv[])
2250 {
2251   int r;
2252   const char *src;
2253   const char *dest;
2254   if (argc != 2) {
2255     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2256     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2257     return -1;
2258   }
2259   src = argv[0];
2260   dest = argv[1];
2261   r = guestfs_mv (g, src, dest);
2262   return r;
2263 }
2264
2265 int run_action (const char *cmd, int argc, char *argv[])
2266 {
2267   if (strcasecmp (cmd, "launch") == 0 || strcasecmp (cmd, "run") == 0)
2268     return run_launch (cmd, argc, argv);
2269   else
2270   if (strcasecmp (cmd, "kill_subprocess") == 0 || strcasecmp (cmd, "kill-subprocess") == 0)
2271     return run_kill_subprocess (cmd, argc, argv);
2272   else
2273   if (strcasecmp (cmd, "add_drive") == 0 || strcasecmp (cmd, "add-drive") == 0 || strcasecmp (cmd, "add") == 0)
2274     return run_add_drive (cmd, argc, argv);
2275   else
2276   if (strcasecmp (cmd, "add_cdrom") == 0 || strcasecmp (cmd, "add-cdrom") == 0 || strcasecmp (cmd, "cdrom") == 0)
2277     return run_add_cdrom (cmd, argc, argv);
2278   else
2279   if (strcasecmp (cmd, "config") == 0)
2280     return run_config (cmd, argc, argv);
2281   else
2282   if (strcasecmp (cmd, "set_qemu") == 0 || strcasecmp (cmd, "set-qemu") == 0 || strcasecmp (cmd, "qemu") == 0)
2283     return run_set_qemu (cmd, argc, argv);
2284   else
2285   if (strcasecmp (cmd, "get_qemu") == 0 || strcasecmp (cmd, "get-qemu") == 0)
2286     return run_get_qemu (cmd, argc, argv);
2287   else
2288   if (strcasecmp (cmd, "set_path") == 0 || strcasecmp (cmd, "set-path") == 0 || strcasecmp (cmd, "path") == 0)
2289     return run_set_path (cmd, argc, argv);
2290   else
2291   if (strcasecmp (cmd, "get_path") == 0 || strcasecmp (cmd, "get-path") == 0)
2292     return run_get_path (cmd, argc, argv);
2293   else
2294   if (strcasecmp (cmd, "set_autosync") == 0 || strcasecmp (cmd, "set-autosync") == 0 || strcasecmp (cmd, "autosync") == 0)
2295     return run_set_autosync (cmd, argc, argv);
2296   else
2297   if (strcasecmp (cmd, "get_autosync") == 0 || strcasecmp (cmd, "get-autosync") == 0)
2298     return run_get_autosync (cmd, argc, argv);
2299   else
2300   if (strcasecmp (cmd, "set_verbose") == 0 || strcasecmp (cmd, "set-verbose") == 0 || strcasecmp (cmd, "verbose") == 0)
2301     return run_set_verbose (cmd, argc, argv);
2302   else
2303   if (strcasecmp (cmd, "get_verbose") == 0 || strcasecmp (cmd, "get-verbose") == 0)
2304     return run_get_verbose (cmd, argc, argv);
2305   else
2306   if (strcasecmp (cmd, "is_ready") == 0 || strcasecmp (cmd, "is-ready") == 0)
2307     return run_is_ready (cmd, argc, argv);
2308   else
2309   if (strcasecmp (cmd, "is_config") == 0 || strcasecmp (cmd, "is-config") == 0)
2310     return run_is_config (cmd, argc, argv);
2311   else
2312   if (strcasecmp (cmd, "is_launching") == 0 || strcasecmp (cmd, "is-launching") == 0)
2313     return run_is_launching (cmd, argc, argv);
2314   else
2315   if (strcasecmp (cmd, "is_busy") == 0 || strcasecmp (cmd, "is-busy") == 0)
2316     return run_is_busy (cmd, argc, argv);
2317   else
2318   if (strcasecmp (cmd, "get_state") == 0 || strcasecmp (cmd, "get-state") == 0)
2319     return run_get_state (cmd, argc, argv);
2320   else
2321   if (strcasecmp (cmd, "mount") == 0)
2322     return run_mount (cmd, argc, argv);
2323   else
2324   if (strcasecmp (cmd, "sync") == 0)
2325     return run_sync (cmd, argc, argv);
2326   else
2327   if (strcasecmp (cmd, "touch") == 0)
2328     return run_touch (cmd, argc, argv);
2329   else
2330   if (strcasecmp (cmd, "cat") == 0)
2331     return run_cat (cmd, argc, argv);
2332   else
2333   if (strcasecmp (cmd, "ll") == 0)
2334     return run_ll (cmd, argc, argv);
2335   else
2336   if (strcasecmp (cmd, "ls") == 0)
2337     return run_ls (cmd, argc, argv);
2338   else
2339   if (strcasecmp (cmd, "list_devices") == 0 || strcasecmp (cmd, "list-devices") == 0)
2340     return run_list_devices (cmd, argc, argv);
2341   else
2342   if (strcasecmp (cmd, "list_partitions") == 0 || strcasecmp (cmd, "list-partitions") == 0)
2343     return run_list_partitions (cmd, argc, argv);
2344   else
2345   if (strcasecmp (cmd, "pvs") == 0)
2346     return run_pvs (cmd, argc, argv);
2347   else
2348   if (strcasecmp (cmd, "vgs") == 0)
2349     return run_vgs (cmd, argc, argv);
2350   else
2351   if (strcasecmp (cmd, "lvs") == 0)
2352     return run_lvs (cmd, argc, argv);
2353   else
2354   if (strcasecmp (cmd, "pvs_full") == 0 || strcasecmp (cmd, "pvs-full") == 0)
2355     return run_pvs_full (cmd, argc, argv);
2356   else
2357   if (strcasecmp (cmd, "vgs_full") == 0 || strcasecmp (cmd, "vgs-full") == 0)
2358     return run_vgs_full (cmd, argc, argv);
2359   else
2360   if (strcasecmp (cmd, "lvs_full") == 0 || strcasecmp (cmd, "lvs-full") == 0)
2361     return run_lvs_full (cmd, argc, argv);
2362   else
2363   if (strcasecmp (cmd, "read_lines") == 0 || strcasecmp (cmd, "read-lines") == 0)
2364     return run_read_lines (cmd, argc, argv);
2365   else
2366   if (strcasecmp (cmd, "aug_init") == 0 || strcasecmp (cmd, "aug-init") == 0)
2367     return run_aug_init (cmd, argc, argv);
2368   else
2369   if (strcasecmp (cmd, "aug_close") == 0 || strcasecmp (cmd, "aug-close") == 0)
2370     return run_aug_close (cmd, argc, argv);
2371   else
2372   if (strcasecmp (cmd, "aug_defvar") == 0 || strcasecmp (cmd, "aug-defvar") == 0)
2373     return run_aug_defvar (cmd, argc, argv);
2374   else
2375   if (strcasecmp (cmd, "aug_defnode") == 0 || strcasecmp (cmd, "aug-defnode") == 0)
2376     return run_aug_defnode (cmd, argc, argv);
2377   else
2378   if (strcasecmp (cmd, "aug_get") == 0 || strcasecmp (cmd, "aug-get") == 0)
2379     return run_aug_get (cmd, argc, argv);
2380   else
2381   if (strcasecmp (cmd, "aug_set") == 0 || strcasecmp (cmd, "aug-set") == 0)
2382     return run_aug_set (cmd, argc, argv);
2383   else
2384   if (strcasecmp (cmd, "aug_insert") == 0 || strcasecmp (cmd, "aug-insert") == 0)
2385     return run_aug_insert (cmd, argc, argv);
2386   else
2387   if (strcasecmp (cmd, "aug_rm") == 0 || strcasecmp (cmd, "aug-rm") == 0)
2388     return run_aug_rm (cmd, argc, argv);
2389   else
2390   if (strcasecmp (cmd, "aug_mv") == 0 || strcasecmp (cmd, "aug-mv") == 0)
2391     return run_aug_mv (cmd, argc, argv);
2392   else
2393   if (strcasecmp (cmd, "aug_match") == 0 || strcasecmp (cmd, "aug-match") == 0)
2394     return run_aug_match (cmd, argc, argv);
2395   else
2396   if (strcasecmp (cmd, "aug_save") == 0 || strcasecmp (cmd, "aug-save") == 0)
2397     return run_aug_save (cmd, argc, argv);
2398   else
2399   if (strcasecmp (cmd, "aug_load") == 0 || strcasecmp (cmd, "aug-load") == 0)
2400     return run_aug_load (cmd, argc, argv);
2401   else
2402   if (strcasecmp (cmd, "aug_ls") == 0 || strcasecmp (cmd, "aug-ls") == 0)
2403     return run_aug_ls (cmd, argc, argv);
2404   else
2405   if (strcasecmp (cmd, "rm") == 0)
2406     return run_rm (cmd, argc, argv);
2407   else
2408   if (strcasecmp (cmd, "rmdir") == 0)
2409     return run_rmdir (cmd, argc, argv);
2410   else
2411   if (strcasecmp (cmd, "rm_rf") == 0 || strcasecmp (cmd, "rm-rf") == 0)
2412     return run_rm_rf (cmd, argc, argv);
2413   else
2414   if (strcasecmp (cmd, "mkdir") == 0)
2415     return run_mkdir (cmd, argc, argv);
2416   else
2417   if (strcasecmp (cmd, "mkdir_p") == 0 || strcasecmp (cmd, "mkdir-p") == 0)
2418     return run_mkdir_p (cmd, argc, argv);
2419   else
2420   if (strcasecmp (cmd, "chmod") == 0)
2421     return run_chmod (cmd, argc, argv);
2422   else
2423   if (strcasecmp (cmd, "chown") == 0)
2424     return run_chown (cmd, argc, argv);
2425   else
2426   if (strcasecmp (cmd, "exists") == 0)
2427     return run_exists (cmd, argc, argv);
2428   else
2429   if (strcasecmp (cmd, "is_file") == 0 || strcasecmp (cmd, "is-file") == 0)
2430     return run_is_file (cmd, argc, argv);
2431   else
2432   if (strcasecmp (cmd, "is_dir") == 0 || strcasecmp (cmd, "is-dir") == 0)
2433     return run_is_dir (cmd, argc, argv);
2434   else
2435   if (strcasecmp (cmd, "pvcreate") == 0)
2436     return run_pvcreate (cmd, argc, argv);
2437   else
2438   if (strcasecmp (cmd, "vgcreate") == 0)
2439     return run_vgcreate (cmd, argc, argv);
2440   else
2441   if (strcasecmp (cmd, "lvcreate") == 0)
2442     return run_lvcreate (cmd, argc, argv);
2443   else
2444   if (strcasecmp (cmd, "mkfs") == 0)
2445     return run_mkfs (cmd, argc, argv);
2446   else
2447   if (strcasecmp (cmd, "sfdisk") == 0)
2448     return run_sfdisk (cmd, argc, argv);
2449   else
2450   if (strcasecmp (cmd, "write_file") == 0 || strcasecmp (cmd, "write-file") == 0)
2451     return run_write_file (cmd, argc, argv);
2452   else
2453   if (strcasecmp (cmd, "umount") == 0 || strcasecmp (cmd, "unmount") == 0)
2454     return run_umount (cmd, argc, argv);
2455   else
2456   if (strcasecmp (cmd, "mounts") == 0)
2457     return run_mounts (cmd, argc, argv);
2458   else
2459   if (strcasecmp (cmd, "umount_all") == 0 || strcasecmp (cmd, "umount-all") == 0 || strcasecmp (cmd, "unmount-all") == 0)
2460     return run_umount_all (cmd, argc, argv);
2461   else
2462   if (strcasecmp (cmd, "lvm_remove_all") == 0 || strcasecmp (cmd, "lvm-remove-all") == 0)
2463     return run_lvm_remove_all (cmd, argc, argv);
2464   else
2465   if (strcasecmp (cmd, "file") == 0)
2466     return run_file (cmd, argc, argv);
2467   else
2468   if (strcasecmp (cmd, "command") == 0)
2469     return run_command (cmd, argc, argv);
2470   else
2471   if (strcasecmp (cmd, "command_lines") == 0 || strcasecmp (cmd, "command-lines") == 0)
2472     return run_command_lines (cmd, argc, argv);
2473   else
2474   if (strcasecmp (cmd, "stat") == 0)
2475     return run_stat (cmd, argc, argv);
2476   else
2477   if (strcasecmp (cmd, "lstat") == 0)
2478     return run_lstat (cmd, argc, argv);
2479   else
2480   if (strcasecmp (cmd, "statvfs") == 0)
2481     return run_statvfs (cmd, argc, argv);
2482   else
2483   if (strcasecmp (cmd, "tune2fs_l") == 0 || strcasecmp (cmd, "tune2fs-l") == 0)
2484     return run_tune2fs_l (cmd, argc, argv);
2485   else
2486   if (strcasecmp (cmd, "blockdev_setro") == 0 || strcasecmp (cmd, "blockdev-setro") == 0)
2487     return run_blockdev_setro (cmd, argc, argv);
2488   else
2489   if (strcasecmp (cmd, "blockdev_setrw") == 0 || strcasecmp (cmd, "blockdev-setrw") == 0)
2490     return run_blockdev_setrw (cmd, argc, argv);
2491   else
2492   if (strcasecmp (cmd, "blockdev_getro") == 0 || strcasecmp (cmd, "blockdev-getro") == 0)
2493     return run_blockdev_getro (cmd, argc, argv);
2494   else
2495   if (strcasecmp (cmd, "blockdev_getss") == 0 || strcasecmp (cmd, "blockdev-getss") == 0)
2496     return run_blockdev_getss (cmd, argc, argv);
2497   else
2498   if (strcasecmp (cmd, "blockdev_getbsz") == 0 || strcasecmp (cmd, "blockdev-getbsz") == 0)
2499     return run_blockdev_getbsz (cmd, argc, argv);
2500   else
2501   if (strcasecmp (cmd, "blockdev_setbsz") == 0 || strcasecmp (cmd, "blockdev-setbsz") == 0)
2502     return run_blockdev_setbsz (cmd, argc, argv);
2503   else
2504   if (strcasecmp (cmd, "blockdev_getsz") == 0 || strcasecmp (cmd, "blockdev-getsz") == 0)
2505     return run_blockdev_getsz (cmd, argc, argv);
2506   else
2507   if (strcasecmp (cmd, "blockdev_getsize64") == 0 || strcasecmp (cmd, "blockdev-getsize64") == 0)
2508     return run_blockdev_getsize64 (cmd, argc, argv);
2509   else
2510   if (strcasecmp (cmd, "blockdev_flushbufs") == 0 || strcasecmp (cmd, "blockdev-flushbufs") == 0)
2511     return run_blockdev_flushbufs (cmd, argc, argv);
2512   else
2513   if (strcasecmp (cmd, "blockdev_rereadpt") == 0 || strcasecmp (cmd, "blockdev-rereadpt") == 0)
2514     return run_blockdev_rereadpt (cmd, argc, argv);
2515   else
2516   if (strcasecmp (cmd, "upload") == 0)
2517     return run_upload (cmd, argc, argv);
2518   else
2519   if (strcasecmp (cmd, "download") == 0)
2520     return run_download (cmd, argc, argv);
2521   else
2522   if (strcasecmp (cmd, "checksum") == 0)
2523     return run_checksum (cmd, argc, argv);
2524   else
2525   if (strcasecmp (cmd, "tar_in") == 0 || strcasecmp (cmd, "tar-in") == 0)
2526     return run_tar_in (cmd, argc, argv);
2527   else
2528   if (strcasecmp (cmd, "tar_out") == 0 || strcasecmp (cmd, "tar-out") == 0)
2529     return run_tar_out (cmd, argc, argv);
2530   else
2531   if (strcasecmp (cmd, "tgz_in") == 0 || strcasecmp (cmd, "tgz-in") == 0)
2532     return run_tgz_in (cmd, argc, argv);
2533   else
2534   if (strcasecmp (cmd, "tgz_out") == 0 || strcasecmp (cmd, "tgz-out") == 0)
2535     return run_tgz_out (cmd, argc, argv);
2536   else
2537   if (strcasecmp (cmd, "mount_ro") == 0 || strcasecmp (cmd, "mount-ro") == 0)
2538     return run_mount_ro (cmd, argc, argv);
2539   else
2540   if (strcasecmp (cmd, "mount_options") == 0 || strcasecmp (cmd, "mount-options") == 0)
2541     return run_mount_options (cmd, argc, argv);
2542   else
2543   if (strcasecmp (cmd, "mount_vfs") == 0 || strcasecmp (cmd, "mount-vfs") == 0)
2544     return run_mount_vfs (cmd, argc, argv);
2545   else
2546   if (strcasecmp (cmd, "debug") == 0)
2547     return run_debug (cmd, argc, argv);
2548   else
2549   if (strcasecmp (cmd, "lvremove") == 0)
2550     return run_lvremove (cmd, argc, argv);
2551   else
2552   if (strcasecmp (cmd, "vgremove") == 0)
2553     return run_vgremove (cmd, argc, argv);
2554   else
2555   if (strcasecmp (cmd, "pvremove") == 0)
2556     return run_pvremove (cmd, argc, argv);
2557   else
2558   if (strcasecmp (cmd, "set_e2label") == 0 || strcasecmp (cmd, "set-e2label") == 0)
2559     return run_set_e2label (cmd, argc, argv);
2560   else
2561   if (strcasecmp (cmd, "get_e2label") == 0 || strcasecmp (cmd, "get-e2label") == 0)
2562     return run_get_e2label (cmd, argc, argv);
2563   else
2564   if (strcasecmp (cmd, "set_e2uuid") == 0 || strcasecmp (cmd, "set-e2uuid") == 0)
2565     return run_set_e2uuid (cmd, argc, argv);
2566   else
2567   if (strcasecmp (cmd, "get_e2uuid") == 0 || strcasecmp (cmd, "get-e2uuid") == 0)
2568     return run_get_e2uuid (cmd, argc, argv);
2569   else
2570   if (strcasecmp (cmd, "fsck") == 0)
2571     return run_fsck (cmd, argc, argv);
2572   else
2573   if (strcasecmp (cmd, "zero") == 0)
2574     return run_zero (cmd, argc, argv);
2575   else
2576   if (strcasecmp (cmd, "grub_install") == 0 || strcasecmp (cmd, "grub-install") == 0)
2577     return run_grub_install (cmd, argc, argv);
2578   else
2579   if (strcasecmp (cmd, "cp") == 0)
2580     return run_cp (cmd, argc, argv);
2581   else
2582   if (strcasecmp (cmd, "cp_a") == 0 || strcasecmp (cmd, "cp-a") == 0)
2583     return run_cp_a (cmd, argc, argv);
2584   else
2585   if (strcasecmp (cmd, "mv") == 0)
2586     return run_mv (cmd, argc, argv);
2587   else
2588     {
2589       fprintf (stderr, "%s: unknown command\n", cmd);
2590       return -1;
2591     }
2592   return 0;
2593 }
2594