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