Generated code for lvresize, resize2fs.
[libguestfs.git] / fish / cmds.c
1 /* libguestfs generated file
2  * WARNING: THIS FILE IS GENERATED BY 'src/generator.ml'.
3  * ANY CHANGES YOU MAKE TO THIS FILE WILL BE LOST.
4  *
5  * Copyright (C) 2009 Red Hat Inc.
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License along
18  * with this program; if not, write to the Free Software Foundation, Inc.,
19  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20  */
21
22 #include <stdio.h>
23 #include <stdlib.h>
24 #include <string.h>
25 #include <inttypes.h>
26
27 #include <guestfs.h>
28 #include "fish.h"
29
30 void list_commands (void)
31 {
32   printf ("    %-16s     %s\n", "Command", "Description");
33   list_builtin_commands ();
34   printf ("%-20s %s\n", "add-cdrom", "add a CD-ROM disk image to examine");
35   printf ("%-20s %s\n", "add-drive", "add an image to examine or modify");
36   printf ("%-20s %s\n", "aug-close", "close the current Augeas handle");
37   printf ("%-20s %s\n", "aug-defnode", "define an Augeas node");
38   printf ("%-20s %s\n", "aug-defvar", "define an Augeas variable");
39   printf ("%-20s %s\n", "aug-get", "look up the value of an Augeas path");
40   printf ("%-20s %s\n", "aug-init", "create a new Augeas handle");
41   printf ("%-20s %s\n", "aug-insert", "insert a sibling Augeas node");
42   printf ("%-20s %s\n", "aug-load", "load files into the tree");
43   printf ("%-20s %s\n", "aug-ls", "list Augeas nodes under a path");
44   printf ("%-20s %s\n", "aug-match", "return Augeas nodes which match path");
45   printf ("%-20s %s\n", "aug-mv", "move Augeas node");
46   printf ("%-20s %s\n", "aug-rm", "remove an Augeas path");
47   printf ("%-20s %s\n", "aug-save", "write all pending Augeas changes to disk");
48   printf ("%-20s %s\n", "aug-set", "set Augeas path to value");
49   printf ("%-20s %s\n", "blockdev-flushbufs", "flush device buffers");
50   printf ("%-20s %s\n", "blockdev-getbsz", "get blocksize of block device");
51   printf ("%-20s %s\n", "blockdev-getro", "is block device set to read-only");
52   printf ("%-20s %s\n", "blockdev-getsize64", "get total size of device in bytes");
53   printf ("%-20s %s\n", "blockdev-getss", "get sectorsize of block device");
54   printf ("%-20s %s\n", "blockdev-getsz", "get total size of device in 512-byte sectors");
55   printf ("%-20s %s\n", "blockdev-rereadpt", "reread partition table");
56   printf ("%-20s %s\n", "blockdev-setbsz", "set blocksize of block device");
57   printf ("%-20s %s\n", "blockdev-setro", "set block device to read-only");
58   printf ("%-20s %s\n", "blockdev-setrw", "set block device to read-write");
59   printf ("%-20s %s\n", "cat", "list the contents of a file");
60   printf ("%-20s %s\n", "checksum", "compute MD5, SHAx or CRC checksum of file");
61   printf ("%-20s %s\n", "chmod", "change file mode");
62   printf ("%-20s %s\n", "chown", "change file owner and group");
63   printf ("%-20s %s\n", "command", "run a command from the guest filesystem");
64   printf ("%-20s %s\n", "command-lines", "run a command, returning lines");
65   printf ("%-20s %s\n", "config", "add qemu parameters");
66   printf ("%-20s %s\n", "cp", "copy a file");
67   printf ("%-20s %s\n", "cp-a", "copy a file or directory recursively");
68   printf ("%-20s %s\n", "debug", "debugging and internals");
69   printf ("%-20s %s\n", "dmesg", "return kernel messages");
70   printf ("%-20s %s\n", "download", "download a file to the local machine");
71   printf ("%-20s %s\n", "drop-caches", "drop kernel page cache, dentries and inodes");
72   printf ("%-20s %s\n", "equal", "test if two files have equal contents");
73   printf ("%-20s %s\n", "exists", "test if file or directory exists");
74   printf ("%-20s %s\n", "file", "determine file type");
75   printf ("%-20s %s\n", "fsck", "run the filesystem checker");
76   printf ("%-20s %s\n", "get-append", "get the additional kernel options");
77   printf ("%-20s %s\n", "get-autosync", "get autosync mode");
78   printf ("%-20s %s\n", "get-e2label", "get the ext2/3/4 filesystem label");
79   printf ("%-20s %s\n", "get-e2uuid", "get the ext2/3/4 filesystem UUID");
80   printf ("%-20s %s\n", "get-path", "get the search path");
81   printf ("%-20s %s\n", "get-qemu", "get the qemu binary");
82   printf ("%-20s %s\n", "get-state", "get the current state");
83   printf ("%-20s %s\n", "get-verbose", "get verbose mode");
84   printf ("%-20s %s\n", "grub-install", "install GRUB");
85   printf ("%-20s %s\n", "hexdump", "dump a file in hexadecimal");
86   printf ("%-20s %s\n", "is-busy", "is busy processing a command");
87   printf ("%-20s %s\n", "is-config", "is in configuration state");
88   printf ("%-20s %s\n", "is-dir", "test if file exists");
89   printf ("%-20s %s\n", "is-file", "test if file exists");
90   printf ("%-20s %s\n", "is-launching", "is launching subprocess");
91   printf ("%-20s %s\n", "is-ready", "is ready to accept commands");
92   printf ("%-20s %s\n", "kill-subprocess", "kill the qemu subprocess");
93   printf ("%-20s %s\n", "launch", "launch the qemu subprocess");
94   printf ("%-20s %s\n", "list-devices", "list the block devices");
95   printf ("%-20s %s\n", "list-partitions", "list the partitions");
96   printf ("%-20s %s\n", "ll", "list the files in a directory (long format)");
97   printf ("%-20s %s\n", "ls", "list the files in a directory");
98   printf ("%-20s %s\n", "lstat", "get file information for a symbolic link");
99   printf ("%-20s %s\n", "lvcreate", "create an LVM volume group");
100   printf ("%-20s %s\n", "lvm-remove-all", "remove all LVM LVs, VGs and PVs");
101   printf ("%-20s %s\n", "lvremove", "remove an LVM logical volume");
102   printf ("%-20s %s\n", "lvresize", "resize an LVM logical volume");
103   printf ("%-20s %s\n", "lvs", "list the LVM logical volumes (LVs)");
104   printf ("%-20s %s\n", "lvs-full", "list the LVM logical volumes (LVs)");
105   printf ("%-20s %s\n", "mkdir", "create a directory");
106   printf ("%-20s %s\n", "mkdir-p", "create a directory and parents");
107   printf ("%-20s %s\n", "mkfs", "make a filesystem");
108   printf ("%-20s %s\n", "mount", "mount a guest disk at a position in the filesystem");
109   printf ("%-20s %s\n", "mount-options", "mount a guest disk with mount options");
110   printf ("%-20s %s\n", "mount-ro", "mount a guest disk, read-only");
111   printf ("%-20s %s\n", "mount-vfs", "mount a guest disk with mount options and vfstype");
112   printf ("%-20s %s\n", "mounts", "show mounted filesystems");
113   printf ("%-20s %s\n", "mv", "move a file");
114   printf ("%-20s %s\n", "ping-daemon", "ping the guest daemon");
115   printf ("%-20s %s\n", "pvcreate", "create an LVM physical volume");
116   printf ("%-20s %s\n", "pvremove", "remove an LVM physical volume");
117   printf ("%-20s %s\n", "pvresize", "resize an LVM physical volume");
118   printf ("%-20s %s\n", "pvs", "list the LVM physical volumes (PVs)");
119   printf ("%-20s %s\n", "pvs-full", "list the LVM physical volumes (PVs)");
120   printf ("%-20s %s\n", "read-lines", "read file as lines");
121   printf ("%-20s %s\n", "resize2fs", "resize an ext2/ext3 filesystem");
122   printf ("%-20s %s\n", "rm", "remove a file");
123   printf ("%-20s %s\n", "rm-rf", "remove a file or directory recursively");
124   printf ("%-20s %s\n", "rmdir", "remove a directory");
125   printf ("%-20s %s\n", "set-append", "add options to kernel command line");
126   printf ("%-20s %s\n", "set-autosync", "set autosync mode");
127   printf ("%-20s %s\n", "set-e2label", "set the ext2/3/4 filesystem label");
128   printf ("%-20s %s\n", "set-e2uuid", "set the ext2/3/4 filesystem UUID");
129   printf ("%-20s %s\n", "set-path", "set the search path");
130   printf ("%-20s %s\n", "set-qemu", "set the qemu binary");
131   printf ("%-20s %s\n", "set-verbose", "set verbose mode");
132   printf ("%-20s %s\n", "sfdisk", "create partitions on a block device");
133   printf ("%-20s %s\n", "sfdisk-N", "modify a single partition on a block device");
134   printf ("%-20s %s\n", "sfdisk-disk-geometry", "display the disk geometry from the partition table");
135   printf ("%-20s %s\n", "sfdisk-kernel-geometry", "display the kernel geometry");
136   printf ("%-20s %s\n", "sfdisk-l", "display the partition table");
137   printf ("%-20s %s\n", "stat", "get file information");
138   printf ("%-20s %s\n", "statvfs", "get file system statistics");
139   printf ("%-20s %s\n", "strings", "print the printable strings in a file");
140   printf ("%-20s %s\n", "strings-e", "print the printable strings in a file");
141   printf ("%-20s %s\n", "sync", "sync disks, writes are flushed through to the disk image");
142   printf ("%-20s %s\n", "tar-in", "unpack tarfile to directory");
143   printf ("%-20s %s\n", "tar-out", "pack directory into tarfile");
144   printf ("%-20s %s\n", "tgz-in", "unpack compressed tarball to directory");
145   printf ("%-20s %s\n", "tgz-out", "pack directory into compressed tarball");
146   printf ("%-20s %s\n", "touch", "update file timestamps or create a new file");
147   printf ("%-20s %s\n", "tune2fs-l", "get ext2/ext3/ext4 superblock details");
148   printf ("%-20s %s\n", "umount", "unmount a filesystem");
149   printf ("%-20s %s\n", "umount-all", "unmount all filesystems");
150   printf ("%-20s %s\n", "upload", "upload a file from the local machine");
151   printf ("%-20s %s\n", "vg-activate", "activate or deactivate some volume groups");
152   printf ("%-20s %s\n", "vg-activate-all", "activate or deactivate all volume groups");
153   printf ("%-20s %s\n", "vgcreate", "create an LVM volume group");
154   printf ("%-20s %s\n", "vgremove", "remove an LVM volume group");
155   printf ("%-20s %s\n", "vgs", "list the LVM volume groups (VGs)");
156   printf ("%-20s %s\n", "vgs-full", "list the LVM volume groups (VGs)");
157   printf ("%-20s %s\n", "write-file", "create a file");
158   printf ("%-20s %s\n", "zero", "write zeroes to the device");
159   printf ("%-20s %s\n", "zerofree", "zero unused inodes and disk blocks on ext2/3 filesystem");
160   printf ("    Use -h <cmd> / help <cmd> to show detailed help for a command.\n");
161 }
162
163 void display_command (const char *cmd)
164 {
165   if (strcasecmp (cmd, "launch") == 0 || strcasecmp (cmd, "run") == 0)
166     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.");
167   else
168   if (strcasecmp (cmd, "kill_subprocess") == 0 || strcasecmp (cmd, "kill-subprocess") == 0)
169     pod2text ("kill-subprocess - kill the qemu subprocess", " kill-subprocess\n\nThis kills the qemu subprocess.  You should never need to call this.");
170   else
171   if (strcasecmp (cmd, "add_drive") == 0 || strcasecmp (cmd, "add-drive") == 0 || strcasecmp (cmd, "add") == 0)
172     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.");
173   else
174   if (strcasecmp (cmd, "add_cdrom") == 0 || strcasecmp (cmd, "add-cdrom") == 0 || strcasecmp (cmd, "cdrom") == 0)
175     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.");
176   else
177   if (strcasecmp (cmd, "config") == 0)
178     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.");
179   else
180   if (strcasecmp (cmd, "set_qemu") == 0 || strcasecmp (cmd, "set-qemu") == 0 || strcasecmp (cmd, "qemu") == 0)
181     pod2text ("set-qemu - set the qemu binary", " set-qemu <qemu>\n\nSet the qemu binary that we will use.\n\nThe default is chosen when the library was compiled by the\nconfigure script.\n\nYou can also override this by setting the C<LIBGUESTFS_QEMU>\nenvironment variable.\n\nSetting C<qemu> to C<NULL> restores the default qemu binary.\n\nYou can use 'qemu' as an alias for this command.");
182   else
183   if (strcasecmp (cmd, "get_qemu") == 0 || strcasecmp (cmd, "get-qemu") == 0)
184     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.");
185   else
186   if (strcasecmp (cmd, "set_path") == 0 || strcasecmp (cmd, "set-path") == 0 || strcasecmp (cmd, "path") == 0)
187     pod2text ("set-path - set the search path", " set-path <path>\n\nSet the path that libguestfs searches for kernel and initrd.img.\n\nThe default is C<$libdir/guestfs> unless overridden by setting\nC<LIBGUESTFS_PATH> environment variable.\n\nSetting C<path> to C<NULL> restores the default path.\n\nYou can use 'path' as an alias for this command.");
188   else
189   if (strcasecmp (cmd, "get_path") == 0 || strcasecmp (cmd, "get-path") == 0)
190     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.");
191   else
192   if (strcasecmp (cmd, "set_append") == 0 || strcasecmp (cmd, "set-append") == 0 || strcasecmp (cmd, "append") == 0)
193     pod2text ("set-append - add options to kernel command line", " set-append <append>\n\nThis function is used to add additional options to the\nguest kernel command line.\n\nThe default is C<NULL> unless overridden by setting\nC<LIBGUESTFS_APPEND> environment variable.\n\nSetting C<append> to C<NULL> means I<no> additional options\nare passed (libguestfs always adds a few of its own).\n\nYou can use 'append' as an alias for this command.");
194   else
195   if (strcasecmp (cmd, "get_append") == 0 || strcasecmp (cmd, "get-append") == 0)
196     pod2text ("get-append - get the additional kernel options", " get-append\n\nReturn the additional kernel options which are added to the\nguest kernel command line.\n\nIf C<NULL> then no options are added.");
197   else
198   if (strcasecmp (cmd, "set_autosync") == 0 || strcasecmp (cmd, "set-autosync") == 0 || strcasecmp (cmd, "autosync") == 0)
199     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.");
200   else
201   if (strcasecmp (cmd, "get_autosync") == 0 || strcasecmp (cmd, "get-autosync") == 0)
202     pod2text ("get-autosync - get autosync mode", " get-autosync\n\nGet the autosync flag.");
203   else
204   if (strcasecmp (cmd, "set_verbose") == 0 || strcasecmp (cmd, "set-verbose") == 0 || strcasecmp (cmd, "verbose") == 0)
205     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.");
206   else
207   if (strcasecmp (cmd, "get_verbose") == 0 || strcasecmp (cmd, "get-verbose") == 0)
208     pod2text ("get-verbose - get verbose mode", " get-verbose\n\nThis returns the verbose messages flag.");
209   else
210   if (strcasecmp (cmd, "is_ready") == 0 || strcasecmp (cmd, "is-ready") == 0)
211     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)>.");
212   else
213   if (strcasecmp (cmd, "is_config") == 0 || strcasecmp (cmd, "is-config") == 0)
214     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)>.");
215   else
216   if (strcasecmp (cmd, "is_launching") == 0 || strcasecmp (cmd, "is-launching") == 0)
217     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)>.");
218   else
219   if (strcasecmp (cmd, "is_busy") == 0 || strcasecmp (cmd, "is-busy") == 0)
220     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)>.");
221   else
222   if (strcasecmp (cmd, "get_state") == 0 || strcasecmp (cmd, "get-state") == 0)
223     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)>.");
224   else
225   if (strcasecmp (cmd, "mount") == 0)
226     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.");
227   else
228   if (strcasecmp (cmd, "sync") == 0)
229     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.");
230   else
231   if (strcasecmp (cmd, "touch") == 0)
232     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.");
233   else
234   if (strcasecmp (cmd, "cat") == 0)
235     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.");
236   else
237   if (strcasecmp (cmd, "ll") == 0)
238     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.");
239   else
240   if (strcasecmp (cmd, "ls") == 0)
241     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.");
242   else
243   if (strcasecmp (cmd, "list_devices") == 0 || strcasecmp (cmd, "list-devices") == 0)
244     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>");
245   else
246   if (strcasecmp (cmd, "list_partitions") == 0 || strcasecmp (cmd, "list-partitions") == 0)
247     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>.");
248   else
249   if (strcasecmp (cmd, "pvs") == 0)
250     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>.");
251   else
252   if (strcasecmp (cmd, "vgs") == 0)
253     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>.");
254   else
255   if (strcasecmp (cmd, "lvs") == 0)
256     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>.");
257   else
258   if (strcasecmp (cmd, "pvs_full") == 0 || strcasecmp (cmd, "pvs-full") == 0)
259     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.");
260   else
261   if (strcasecmp (cmd, "vgs_full") == 0 || strcasecmp (cmd, "vgs-full") == 0)
262     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.");
263   else
264   if (strcasecmp (cmd, "lvs_full") == 0 || strcasecmp (cmd, "lvs-full") == 0)
265     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.");
266   else
267   if (strcasecmp (cmd, "read_lines") == 0 || strcasecmp (cmd, "read-lines") == 0)
268     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.");
269   else
270   if (strcasecmp (cmd, "aug_init") == 0 || strcasecmp (cmd, "aug-init") == 0)
271     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/>.");
272   else
273   if (strcasecmp (cmd, "aug_close") == 0 || strcasecmp (cmd, "aug-close") == 0)
274     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.");
275   else
276   if (strcasecmp (cmd, "aug_defvar") == 0 || strcasecmp (cmd, "aug-defvar") == 0)
277     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.");
278   else
279   if (strcasecmp (cmd, "aug_defnode") == 0 || strcasecmp (cmd, "aug-defnode") == 0)
280     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.");
281   else
282   if (strcasecmp (cmd, "aug_get") == 0 || strcasecmp (cmd, "aug-get") == 0)
283     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.");
284   else
285   if (strcasecmp (cmd, "aug_set") == 0 || strcasecmp (cmd, "aug-set") == 0)
286     pod2text ("aug-set - set Augeas path to value", " aug-set <path> <val>\n\nSet the value associated with C<path> to C<value>.");
287   else
288   if (strcasecmp (cmd, "aug_insert") == 0 || strcasecmp (cmd, "aug-insert") == 0)
289     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]>.");
290   else
291   if (strcasecmp (cmd, "aug_rm") == 0 || strcasecmp (cmd, "aug-rm") == 0)
292     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.");
293   else
294   if (strcasecmp (cmd, "aug_mv") == 0 || strcasecmp (cmd, "aug-mv") == 0)
295     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.");
296   else
297   if (strcasecmp (cmd, "aug_match") == 0 || strcasecmp (cmd, "aug-match") == 0)
298     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.");
299   else
300   if (strcasecmp (cmd, "aug_save") == 0 || strcasecmp (cmd, "aug-save") == 0)
301     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.");
302   else
303   if (strcasecmp (cmd, "aug_load") == 0 || strcasecmp (cmd, "aug-load") == 0)
304     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.");
305   else
306   if (strcasecmp (cmd, "aug_ls") == 0 || strcasecmp (cmd, "aug-ls") == 0)
307     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.");
308   else
309   if (strcasecmp (cmd, "rm") == 0)
310     pod2text ("rm - remove a file", " rm <path>\n\nRemove the single file C<path>.");
311   else
312   if (strcasecmp (cmd, "rmdir") == 0)
313     pod2text ("rmdir - remove a directory", " rmdir <path>\n\nRemove the single directory C<path>.");
314   else
315   if (strcasecmp (cmd, "rm_rf") == 0 || strcasecmp (cmd, "rm-rf") == 0)
316     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.");
317   else
318   if (strcasecmp (cmd, "mkdir") == 0)
319     pod2text ("mkdir - create a directory", " mkdir <path>\n\nCreate a directory named C<path>.");
320   else
321   if (strcasecmp (cmd, "mkdir_p") == 0 || strcasecmp (cmd, "mkdir-p") == 0)
322     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.");
323   else
324   if (strcasecmp (cmd, "chmod") == 0)
325     pod2text ("chmod - change file mode", " chmod <mode> <path>\n\nChange the mode (permissions) of C<path> to C<mode>.  Only\nnumeric modes are supported.");
326   else
327   if (strcasecmp (cmd, "chown") == 0)
328     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).");
329   else
330   if (strcasecmp (cmd, "exists") == 0)
331     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>.");
332   else
333   if (strcasecmp (cmd, "is_file") == 0 || strcasecmp (cmd, "is-file") == 0)
334     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>.");
335   else
336   if (strcasecmp (cmd, "is_dir") == 0 || strcasecmp (cmd, "is-dir") == 0)
337     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>.");
338   else
339   if (strcasecmp (cmd, "pvcreate") == 0)
340     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>.");
341   else
342   if (strcasecmp (cmd, "vgcreate") == 0)
343     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>.");
344   else
345   if (strcasecmp (cmd, "lvcreate") == 0)
346     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.");
347   else
348   if (strcasecmp (cmd, "mkfs") == 0)
349     pod2text ("mkfs - make a filesystem", " mkfs <fstype> <device>\n\nThis creates a filesystem on C<device> (usually a partition\nor LVM logical volume).  The filesystem type is C<fstype>, for\nexample C<ext3>.");
350   else
351   if (strcasecmp (cmd, "sfdisk") == 0)
352     pod2text ("sfdisk - create partitions on a block device", " sfdisk <device> <cyls> <heads> <sectors> <lines>\n\nThis is a direct interface to the L<sfdisk(8)> program for creating\npartitions on block devices.\n\nC<device> should be a block device, for example C</dev/sda>.\n\nC<cyls>, C<heads> and C<sectors> are the number of cylinders, heads\nand sectors on the device, which are passed directly to sfdisk as\nthe I<-C>, I<-H> and I<-S> parameters.  If you pass C<0> for any\nof these, then the corresponding parameter is omitted.  Usually for\n'large' disks, you can just pass C<0> for these, but for small\n(floppy-sized) disks, sfdisk (or rather, the kernel) cannot work\nout the right geometry and you will need to tell it.\n\nC<lines> is a list of lines that we feed to C<sfdisk>.  For more\ninformation refer to the L<sfdisk(8)> manpage.\n\nTo create a single partition occupying the whole disk, you would\npass C<lines> as a single element list, when the single element being\nthe string C<,> (comma).\n\nSee also: C<sfdisk_l>, C<sfdisk_N>\n\nB<This command is dangerous.  Without careful use you\ncan easily destroy all your data>.");
353   else
354   if (strcasecmp (cmd, "write_file") == 0 || strcasecmp (cmd, "write-file") == 0)
355     pod2text ("write-file - create a file", " write-file <path> <content> <size>\n\nThis call creates a file called C<path>.  The contents of the\nfile is the string C<content> (which can contain any 8 bit data),\nwith length C<size>.\n\nAs a special case, if C<size> is C<0>\nthen the length is calculated using C<strlen> (so in this case\nthe content cannot contain embedded ASCII NULs).\n\nI<NB.> Owing to a bug, writing content containing ASCII NUL\ncharacters does I<not> work, even if the length is specified.\nWe hope to resolve this bug in a future version.  In the meantime\nuse C<upload>.\n\nBecause of the message protocol, there is a transfer limit \nof somewhere between 2MB and 4MB.  To transfer large files you should use\nFTP.");
356   else
357   if (strcasecmp (cmd, "umount") == 0 || strcasecmp (cmd, "unmount") == 0)
358     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.");
359   else
360   if (strcasecmp (cmd, "mounts") == 0)
361     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.");
362   else
363   if (strcasecmp (cmd, "umount_all") == 0 || strcasecmp (cmd, "umount-all") == 0 || strcasecmp (cmd, "unmount-all") == 0)
364     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.");
365   else
366   if (strcasecmp (cmd, "lvm_remove_all") == 0 || strcasecmp (cmd, "lvm-remove-all") == 0)
367     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>.");
368   else
369   if (strcasecmp (cmd, "file") == 0)
370     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).");
371   else
372   if (strcasecmp (cmd, "command") == 0)
373     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 return value is anything printed to I<stdout> by\nthe command.\n\nIf the command returns a non-zero exit status, then\nthis function returns an error message.  The error message\nstring is the content of I<stderr> from the command.\n\nThe C<$PATH> environment variable will contain at least\nC</usr/bin> and C</bin>.  If you require a program from\nanother location, you should provide the full path in the\nfirst parameter.\n\nShared libraries and data files required by the program\nmust be available on filesystems which are mounted in the\ncorrect places.  It is the caller's responsibility to ensure\nall filesystems that are needed are mounted at the right\nlocations.\n\nBecause of the message protocol, there is a transfer limit \nof somewhere between 2MB and 4MB.  To transfer large files you should use\nFTP.");
374   else
375   if (strcasecmp (cmd, "command_lines") == 0 || strcasecmp (cmd, "command-lines") == 0)
376     pod2text ("command-lines - run a command, returning lines", " command-lines <arguments>\n\nThis is the same as C<command>, but splits the\nresult into a list of lines.\n\nBecause of the message protocol, there is a transfer limit \nof somewhere between 2MB and 4MB.  To transfer large files you should use\nFTP.");
377   else
378   if (strcasecmp (cmd, "stat") == 0)
379     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.");
380   else
381   if (strcasecmp (cmd, "lstat") == 0)
382     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.");
383   else
384   if (strcasecmp (cmd, "statvfs") == 0)
385     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.");
386   else
387   if (strcasecmp (cmd, "tune2fs_l") == 0 || strcasecmp (cmd, "tune2fs-l") == 0)
388     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.");
389   else
390   if (strcasecmp (cmd, "blockdev_setro") == 0 || strcasecmp (cmd, "blockdev-setro") == 0)
391     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.");
392   else
393   if (strcasecmp (cmd, "blockdev_setrw") == 0 || strcasecmp (cmd, "blockdev-setrw") == 0)
394     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.");
395   else
396   if (strcasecmp (cmd, "blockdev_getro") == 0 || strcasecmp (cmd, "blockdev-getro") == 0)
397     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.");
398   else
399   if (strcasecmp (cmd, "blockdev_getss") == 0 || strcasecmp (cmd, "blockdev-getss") == 0)
400     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.");
401   else
402   if (strcasecmp (cmd, "blockdev_getbsz") == 0 || strcasecmp (cmd, "blockdev-getbsz") == 0)
403     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.");
404   else
405   if (strcasecmp (cmd, "blockdev_setbsz") == 0 || strcasecmp (cmd, "blockdev-setbsz") == 0)
406     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.");
407   else
408   if (strcasecmp (cmd, "blockdev_getsz") == 0 || strcasecmp (cmd, "blockdev-getsz") == 0)
409     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.");
410   else
411   if (strcasecmp (cmd, "blockdev_getsize64") == 0 || strcasecmp (cmd, "blockdev-getsize64") == 0)
412     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.");
413   else
414   if (strcasecmp (cmd, "blockdev_flushbufs") == 0 || strcasecmp (cmd, "blockdev-flushbufs") == 0)
415     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.");
416   else
417   if (strcasecmp (cmd, "blockdev_rereadpt") == 0 || strcasecmp (cmd, "blockdev-rereadpt") == 0)
418     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.");
419   else
420   if (strcasecmp (cmd, "upload") == 0)
421     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>.");
422   else
423   if (strcasecmp (cmd, "download") == 0)
424     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>.");
425   else
426   if (strcasecmp (cmd, "checksum") == 0)
427     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.");
428   else
429   if (strcasecmp (cmd, "tar_in") == 0 || strcasecmp (cmd, "tar-in") == 0)
430     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>.");
431   else
432   if (strcasecmp (cmd, "tar_out") == 0 || strcasecmp (cmd, "tar-out") == 0)
433     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>.");
434   else
435   if (strcasecmp (cmd, "tgz_in") == 0 || strcasecmp (cmd, "tgz-in") == 0)
436     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>.");
437   else
438   if (strcasecmp (cmd, "tgz_out") == 0 || strcasecmp (cmd, "tgz-out") == 0)
439     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>.");
440   else
441   if (strcasecmp (cmd, "mount_ro") == 0 || strcasecmp (cmd, "mount-ro") == 0)
442     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.");
443   else
444   if (strcasecmp (cmd, "mount_options") == 0 || strcasecmp (cmd, "mount-options") == 0)
445     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.");
446   else
447   if (strcasecmp (cmd, "mount_vfs") == 0 || strcasecmp (cmd, "mount-vfs") == 0)
448     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.");
449   else
450   if (strcasecmp (cmd, "debug") == 0)
451     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.");
452   else
453   if (strcasecmp (cmd, "lvremove") == 0)
454     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>.");
455   else
456   if (strcasecmp (cmd, "vgremove") == 0)
457     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).");
458   else
459   if (strcasecmp (cmd, "pvremove") == 0)
460     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.");
461   else
462   if (strcasecmp (cmd, "set_e2label") == 0 || strcasecmp (cmd, "set-e2label") == 0)
463     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.");
464   else
465   if (strcasecmp (cmd, "get_e2label") == 0 || strcasecmp (cmd, "get-e2label") == 0)
466     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>.");
467   else
468   if (strcasecmp (cmd, "set_e2uuid") == 0 || strcasecmp (cmd, "set-e2uuid") == 0)
469     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.");
470   else
471   if (strcasecmp (cmd, "get_e2uuid") == 0 || strcasecmp (cmd, "get-e2uuid") == 0)
472     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>.");
473   else
474   if (strcasecmp (cmd, "fsck") == 0)
475     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>.");
476   else
477   if (strcasecmp (cmd, "zero") == 0)
478     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.");
479   else
480   if (strcasecmp (cmd, "grub_install") == 0 || strcasecmp (cmd, "grub-install") == 0)
481     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>.");
482   else
483   if (strcasecmp (cmd, "cp") == 0)
484     pod2text ("cp - copy a file", " cp <src> <dest>\n\nThis copies a file from C<src> to C<dest> where C<dest> is\neither a destination filename or destination directory.");
485   else
486   if (strcasecmp (cmd, "cp_a") == 0 || strcasecmp (cmd, "cp-a") == 0)
487     pod2text ("cp-a - copy a file or directory recursively", " cp-a <src> <dest>\n\nThis copies a file or directory from C<src> to C<dest>\nrecursively using the C<cp -a> command.");
488   else
489   if (strcasecmp (cmd, "mv") == 0)
490     pod2text ("mv - move a file", " mv <src> <dest>\n\nThis moves a file from C<src> to C<dest> where C<dest> is\neither a destination filename or destination directory.");
491   else
492   if (strcasecmp (cmd, "drop_caches") == 0 || strcasecmp (cmd, "drop-caches") == 0)
493     pod2text ("drop-caches - drop kernel page cache, dentries and inodes", " drop-caches <whattodrop>\n\nThis instructs the guest kernel to drop its page cache,\nand/or dentries and inode caches.  The parameter C<whattodrop>\ntells the kernel what precisely to drop, see\nL<http://linux-mm.org/Drop_Caches>\n\nSetting C<whattodrop> to 3 should drop everything.\n\nThis automatically calls L<sync(2)> before the operation,\nso that the maximum guest memory is freed.");
494   else
495   if (strcasecmp (cmd, "dmesg") == 0)
496     pod2text ("dmesg - return kernel messages", " dmesg\n\nThis returns the kernel messages (C<dmesg> output) from\nthe guest kernel.  This is sometimes useful for extended\ndebugging of problems.\n\nAnother way to get the same information is to enable\nverbose messages with C<set_verbose> or by setting\nthe environment variable C<LIBGUESTFS_DEBUG=1> before\nrunning the program.");
497   else
498   if (strcasecmp (cmd, "ping_daemon") == 0 || strcasecmp (cmd, "ping-daemon") == 0)
499     pod2text ("ping-daemon - ping the guest daemon", " ping-daemon\n\nThis is a test probe into the guestfs daemon running inside\nthe qemu subprocess.  Calling this function checks that the\ndaemon responds to the ping message, without affecting the daemon\nor attached block device(s) in any other way.");
500   else
501   if (strcasecmp (cmd, "equal") == 0)
502     pod2text ("equal - test if two files have equal contents", " equal <file1> <file2>\n\nThis compares the two files C<file1> and C<file2> and returns\ntrue if their content is exactly equal, or false otherwise.\n\nThe external L<cmp(1)> program is used for the comparison.");
503   else
504   if (strcasecmp (cmd, "strings") == 0)
505     pod2text ("strings - print the printable strings in a file", " strings <path>\n\nThis runs the L<strings(1)> command on a file and returns\nthe list of printable strings found.\n\nBecause of the message protocol, there is a transfer limit \nof somewhere between 2MB and 4MB.  To transfer large files you should use\nFTP.");
506   else
507   if (strcasecmp (cmd, "strings_e") == 0 || strcasecmp (cmd, "strings-e") == 0)
508     pod2text ("strings-e - print the printable strings in a file", " strings-e <encoding> <path>\n\nThis is like the C<strings> command, but allows you to\nspecify the encoding.\n\nSee the L<strings(1)> manpage for the full list of encodings.\n\nCommonly useful encodings are C<l> (lower case L) which will\nshow strings inside Windows/x86 files.\n\nThe returned strings are transcoded to UTF-8.\n\nBecause of the message protocol, there is a transfer limit \nof somewhere between 2MB and 4MB.  To transfer large files you should use\nFTP.");
509   else
510   if (strcasecmp (cmd, "hexdump") == 0)
511     pod2text ("hexdump - dump a file in hexadecimal", " hexdump <path>\n\nThis runs C<hexdump -C> on the given C<path>.  The result is\nthe human-readable, canonical hex dump of the file.\n\nBecause of the message protocol, there is a transfer limit \nof somewhere between 2MB and 4MB.  To transfer large files you should use\nFTP.");
512   else
513   if (strcasecmp (cmd, "zerofree") == 0)
514     pod2text ("zerofree - zero unused inodes and disk blocks on ext2/3 filesystem", " zerofree <device>\n\nThis runs the I<zerofree> program on C<device>.  This program\nclaims to zero unused inodes and disk blocks on an ext2/3\nfilesystem, thus making it possible to compress the filesystem\nmore effectively.\n\nYou should B<not> run this program if the filesystem is\nmounted.\n\nIt is possible that using this program can damage the filesystem\nor data on the filesystem.");
515   else
516   if (strcasecmp (cmd, "pvresize") == 0)
517     pod2text ("pvresize - resize an LVM physical volume", " pvresize <device>\n\nThis resizes (expands or shrinks) an existing LVM physical\nvolume to match the new size of the underlying device.");
518   else
519   if (strcasecmp (cmd, "sfdisk_N") == 0 || strcasecmp (cmd, "sfdisk-N") == 0)
520     pod2text ("sfdisk-N - modify a single partition on a block device", " sfdisk-N <device> <n> <cyls> <heads> <sectors> <line>\n\nThis runs L<sfdisk(8)> option to modify just the single\npartition C<n> (note: C<n> counts from 1).\n\nFor other parameters, see C<sfdisk>.  You should usually\npass C<0> for the cyls/heads/sectors parameters.\n\nB<This command is dangerous.  Without careful use you\ncan easily destroy all your data>.");
521   else
522   if (strcasecmp (cmd, "sfdisk_l") == 0 || strcasecmp (cmd, "sfdisk-l") == 0)
523     pod2text ("sfdisk-l - display the partition table", " sfdisk-l <device>\n\nThis displays the partition table on C<device>, in the\nhuman-readable output of the L<sfdisk(8)> command.  It is\nnot intended to be parsed.");
524   else
525   if (strcasecmp (cmd, "sfdisk_kernel_geometry") == 0 || strcasecmp (cmd, "sfdisk-kernel-geometry") == 0)
526     pod2text ("sfdisk-kernel-geometry - display the kernel geometry", " sfdisk-kernel-geometry <device>\n\nThis displays the kernel's idea of the geometry of C<device>.\n\nThe result is in human-readable format, and not designed to\nbe parsed.");
527   else
528   if (strcasecmp (cmd, "sfdisk_disk_geometry") == 0 || strcasecmp (cmd, "sfdisk-disk-geometry") == 0)
529     pod2text ("sfdisk-disk-geometry - display the disk geometry from the partition table", " sfdisk-disk-geometry <device>\n\nThis displays the disk geometry of C<device> read from the\npartition table.  Especially in the case where the underlying\nblock device has been resized, this can be different from the\nkernel's idea of the geometry (see C<sfdisk_kernel_geometry>).\n\nThe result is in human-readable format, and not designed to\nbe parsed.");
530   else
531   if (strcasecmp (cmd, "vg_activate_all") == 0 || strcasecmp (cmd, "vg-activate-all") == 0)
532     pod2text ("vg-activate-all - activate or deactivate all volume groups", " vg-activate-all <activate>\n\nThis command activates or (if C<activate> is false) deactivates\nall logical volumes in all volume groups.\nIf activated, then they are made known to the\nkernel, ie. they appear as C</dev/mapper> devices.  If deactivated,\nthen those devices disappear.\n\nThis command is the same as running C<vgchange -a y|n>");
533   else
534   if (strcasecmp (cmd, "vg_activate") == 0 || strcasecmp (cmd, "vg-activate") == 0)
535     pod2text ("vg-activate - activate or deactivate some volume groups", " vg-activate <activate> <volgroups>\n\nThis command activates or (if C<activate> is false) deactivates\nall logical volumes in the listed volume groups C<volgroups>.\nIf activated, then they are made known to the\nkernel, ie. they appear as C</dev/mapper> devices.  If deactivated,\nthen those devices disappear.\n\nThis command is the same as running C<vgchange -a y|n volgroups...>\n\nNote that if C<volgroups> is an empty list then B<all> volume groups\nare activated or deactivated.");
536   else
537   if (strcasecmp (cmd, "lvresize") == 0)
538     pod2text ("lvresize - resize an LVM logical volume", " lvresize <device> <mbytes>\n\nThis resizes (expands or shrinks) an existing LVM logical\nvolume to C<mbytes>.  When reducing, data in the reduced part\nis lost.");
539   else
540   if (strcasecmp (cmd, "resize2fs") == 0)
541     pod2text ("resize2fs - resize an ext2/ext3 filesystem", " resize2fs <device>\n\nThis resizes an ext2 or ext3 filesystem to match the size of\nthe underlying device.");
542   else
543     display_builtin_command (cmd);
544 }
545
546 static void print_pv (struct guestfs_lvm_pv *pv)
547 {
548   int i;
549
550   printf ("pv_name: %s\n", pv->pv_name);
551   printf ("pv_uuid: ");
552   for (i = 0; i < 32; ++i)
553     printf ("%c", pv->pv_uuid[i]);
554   printf ("\n");
555   printf ("pv_fmt: %s\n", pv->pv_fmt);
556   printf ("pv_size: %" PRIu64 "\n", pv->pv_size);
557   printf ("dev_size: %" PRIu64 "\n", pv->dev_size);
558   printf ("pv_free: %" PRIu64 "\n", pv->pv_free);
559   printf ("pv_used: %" PRIu64 "\n", pv->pv_used);
560   printf ("pv_attr: %s\n", pv->pv_attr);
561   printf ("pv_pe_count: %" PRIi64 "\n", pv->pv_pe_count);
562   printf ("pv_pe_alloc_count: %" PRIi64 "\n", pv->pv_pe_alloc_count);
563   printf ("pv_tags: %s\n", pv->pv_tags);
564   printf ("pe_start: %" PRIu64 "\n", pv->pe_start);
565   printf ("pv_mda_count: %" PRIi64 "\n", pv->pv_mda_count);
566   printf ("pv_mda_free: %" PRIu64 "\n", pv->pv_mda_free);
567 }
568
569 static void print_pv_list (struct guestfs_lvm_pv_list *pvs)
570 {
571   int i;
572
573   for (i = 0; i < pvs->len; ++i)
574     print_pv (&pvs->val[i]);
575 }
576
577 static void print_vg (struct guestfs_lvm_vg *vg)
578 {
579   int i;
580
581   printf ("vg_name: %s\n", vg->vg_name);
582   printf ("vg_uuid: ");
583   for (i = 0; i < 32; ++i)
584     printf ("%c", vg->vg_uuid[i]);
585   printf ("\n");
586   printf ("vg_fmt: %s\n", vg->vg_fmt);
587   printf ("vg_attr: %s\n", vg->vg_attr);
588   printf ("vg_size: %" PRIu64 "\n", vg->vg_size);
589   printf ("vg_free: %" PRIu64 "\n", vg->vg_free);
590   printf ("vg_sysid: %s\n", vg->vg_sysid);
591   printf ("vg_extent_size: %" PRIu64 "\n", vg->vg_extent_size);
592   printf ("vg_extent_count: %" PRIi64 "\n", vg->vg_extent_count);
593   printf ("vg_free_count: %" PRIi64 "\n", vg->vg_free_count);
594   printf ("max_lv: %" PRIi64 "\n", vg->max_lv);
595   printf ("max_pv: %" PRIi64 "\n", vg->max_pv);
596   printf ("pv_count: %" PRIi64 "\n", vg->pv_count);
597   printf ("lv_count: %" PRIi64 "\n", vg->lv_count);
598   printf ("snap_count: %" PRIi64 "\n", vg->snap_count);
599   printf ("vg_seqno: %" PRIi64 "\n", vg->vg_seqno);
600   printf ("vg_tags: %s\n", vg->vg_tags);
601   printf ("vg_mda_count: %" PRIi64 "\n", vg->vg_mda_count);
602   printf ("vg_mda_free: %" PRIu64 "\n", vg->vg_mda_free);
603 }
604
605 static void print_vg_list (struct guestfs_lvm_vg_list *vgs)
606 {
607   int i;
608
609   for (i = 0; i < vgs->len; ++i)
610     print_vg (&vgs->val[i]);
611 }
612
613 static void print_lv (struct guestfs_lvm_lv *lv)
614 {
615   int i;
616
617   printf ("lv_name: %s\n", lv->lv_name);
618   printf ("lv_uuid: ");
619   for (i = 0; i < 32; ++i)
620     printf ("%c", lv->lv_uuid[i]);
621   printf ("\n");
622   printf ("lv_attr: %s\n", lv->lv_attr);
623   printf ("lv_major: %" PRIi64 "\n", lv->lv_major);
624   printf ("lv_minor: %" PRIi64 "\n", lv->lv_minor);
625   printf ("lv_kernel_major: %" PRIi64 "\n", lv->lv_kernel_major);
626   printf ("lv_kernel_minor: %" PRIi64 "\n", lv->lv_kernel_minor);
627   printf ("lv_size: %" PRIu64 "\n", lv->lv_size);
628   printf ("seg_count: %" PRIi64 "\n", lv->seg_count);
629   printf ("origin: %s\n", lv->origin);
630   if (lv->snap_percent >= 0) printf ("snap_percent: %g %%\n", lv->snap_percent);
631   else printf ("snap_percent: \n");
632   if (lv->copy_percent >= 0) printf ("copy_percent: %g %%\n", lv->copy_percent);
633   else printf ("copy_percent: \n");
634   printf ("move_pv: %s\n", lv->move_pv);
635   printf ("lv_tags: %s\n", lv->lv_tags);
636   printf ("mirror_log: %s\n", lv->mirror_log);
637   printf ("modules: %s\n", lv->modules);
638 }
639
640 static void print_lv_list (struct guestfs_lvm_lv_list *lvs)
641 {
642   int i;
643
644   for (i = 0; i < lvs->len; ++i)
645     print_lv (&lvs->val[i]);
646 }
647
648 static void print_stat (struct guestfs_stat *stat)
649 {
650   printf ("dev: %" PRIi64 "\n", stat->dev);
651   printf ("ino: %" PRIi64 "\n", stat->ino);
652   printf ("mode: %" PRIi64 "\n", stat->mode);
653   printf ("nlink: %" PRIi64 "\n", stat->nlink);
654   printf ("uid: %" PRIi64 "\n", stat->uid);
655   printf ("gid: %" PRIi64 "\n", stat->gid);
656   printf ("rdev: %" PRIi64 "\n", stat->rdev);
657   printf ("size: %" PRIi64 "\n", stat->size);
658   printf ("blksize: %" PRIi64 "\n", stat->blksize);
659   printf ("blocks: %" PRIi64 "\n", stat->blocks);
660   printf ("atime: %" PRIi64 "\n", stat->atime);
661   printf ("mtime: %" PRIi64 "\n", stat->mtime);
662   printf ("ctime: %" PRIi64 "\n", stat->ctime);
663 }
664
665 static void print_statvfs (struct guestfs_statvfs *statvfs)
666 {
667   printf ("bsize: %" PRIi64 "\n", statvfs->bsize);
668   printf ("frsize: %" PRIi64 "\n", statvfs->frsize);
669   printf ("blocks: %" PRIi64 "\n", statvfs->blocks);
670   printf ("bfree: %" PRIi64 "\n", statvfs->bfree);
671   printf ("bavail: %" PRIi64 "\n", statvfs->bavail);
672   printf ("files: %" PRIi64 "\n", statvfs->files);
673   printf ("ffree: %" PRIi64 "\n", statvfs->ffree);
674   printf ("favail: %" PRIi64 "\n", statvfs->favail);
675   printf ("fsid: %" PRIi64 "\n", statvfs->fsid);
676   printf ("flag: %" PRIi64 "\n", statvfs->flag);
677   printf ("namemax: %" PRIi64 "\n", statvfs->namemax);
678 }
679
680 static int run_launch (const char *cmd, int argc, char *argv[])
681 {
682   int r;
683   if (argc != 0) {
684     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
685     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
686     return -1;
687   }
688   r = launch (g);
689   return r;
690 }
691
692 static int run_kill_subprocess (const char *cmd, int argc, char *argv[])
693 {
694   int r;
695   if (argc != 0) {
696     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
697     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
698     return -1;
699   }
700   r = guestfs_kill_subprocess (g);
701   return r;
702 }
703
704 static int run_add_drive (const char *cmd, int argc, char *argv[])
705 {
706   int r;
707   const char *filename;
708   if (argc != 1) {
709     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
710     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
711     return -1;
712   }
713   filename = argv[0];
714   r = guestfs_add_drive (g, filename);
715   return r;
716 }
717
718 static int run_add_cdrom (const char *cmd, int argc, char *argv[])
719 {
720   int r;
721   const char *filename;
722   if (argc != 1) {
723     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
724     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
725     return -1;
726   }
727   filename = argv[0];
728   r = guestfs_add_cdrom (g, filename);
729   return r;
730 }
731
732 static int run_config (const char *cmd, int argc, char *argv[])
733 {
734   int r;
735   const char *qemuparam;
736   const char *qemuvalue;
737   if (argc != 2) {
738     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
739     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
740     return -1;
741   }
742   qemuparam = argv[0];
743   qemuvalue = strcmp (argv[1], "") != 0 ? argv[1] : NULL;
744   r = guestfs_config (g, qemuparam, qemuvalue);
745   return r;
746 }
747
748 static int run_set_qemu (const char *cmd, int argc, char *argv[])
749 {
750   int r;
751   const char *qemu;
752   if (argc != 1) {
753     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
754     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
755     return -1;
756   }
757   qemu = argv[0];
758   r = guestfs_set_qemu (g, qemu);
759   return r;
760 }
761
762 static int run_get_qemu (const char *cmd, int argc, char *argv[])
763 {
764   const char *r;
765   if (argc != 0) {
766     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
767     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
768     return -1;
769   }
770   r = guestfs_get_qemu (g);
771   if (r == NULL) return -1;
772   printf ("%s\n", r);
773   return 0;
774 }
775
776 static int run_set_path (const char *cmd, int argc, char *argv[])
777 {
778   int r;
779   const char *path;
780   if (argc != 1) {
781     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
782     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
783     return -1;
784   }
785   path = argv[0];
786   r = guestfs_set_path (g, path);
787   return r;
788 }
789
790 static int run_get_path (const char *cmd, int argc, char *argv[])
791 {
792   const char *r;
793   if (argc != 0) {
794     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
795     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
796     return -1;
797   }
798   r = guestfs_get_path (g);
799   if (r == NULL) return -1;
800   printf ("%s\n", r);
801   return 0;
802 }
803
804 static int run_set_append (const char *cmd, int argc, char *argv[])
805 {
806   int r;
807   const char *append;
808   if (argc != 1) {
809     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
810     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
811     return -1;
812   }
813   append = argv[0];
814   r = guestfs_set_append (g, append);
815   return r;
816 }
817
818 static int run_get_append (const char *cmd, int argc, char *argv[])
819 {
820   const char *r;
821   if (argc != 0) {
822     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
823     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
824     return -1;
825   }
826   r = guestfs_get_append (g);
827   if (r == NULL) return -1;
828   printf ("%s\n", r);
829   return 0;
830 }
831
832 static int run_set_autosync (const char *cmd, int argc, char *argv[])
833 {
834   int r;
835   int autosync;
836   if (argc != 1) {
837     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
838     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
839     return -1;
840   }
841   autosync = is_true (argv[0]) ? 1 : 0;
842   r = guestfs_set_autosync (g, autosync);
843   return r;
844 }
845
846 static int run_get_autosync (const char *cmd, int argc, char *argv[])
847 {
848   int r;
849   if (argc != 0) {
850     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
851     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
852     return -1;
853   }
854   r = guestfs_get_autosync (g);
855   if (r == -1) return -1;
856   if (r) printf ("true\n"); else printf ("false\n");
857   return 0;
858 }
859
860 static int run_set_verbose (const char *cmd, int argc, char *argv[])
861 {
862   int r;
863   int verbose;
864   if (argc != 1) {
865     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
866     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
867     return -1;
868   }
869   verbose = is_true (argv[0]) ? 1 : 0;
870   r = guestfs_set_verbose (g, verbose);
871   return r;
872 }
873
874 static int run_get_verbose (const char *cmd, int argc, char *argv[])
875 {
876   int r;
877   if (argc != 0) {
878     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
879     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
880     return -1;
881   }
882   r = guestfs_get_verbose (g);
883   if (r == -1) return -1;
884   if (r) printf ("true\n"); else printf ("false\n");
885   return 0;
886 }
887
888 static int run_is_ready (const char *cmd, int argc, char *argv[])
889 {
890   int r;
891   if (argc != 0) {
892     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
893     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
894     return -1;
895   }
896   r = guestfs_is_ready (g);
897   if (r == -1) return -1;
898   if (r) printf ("true\n"); else printf ("false\n");
899   return 0;
900 }
901
902 static int run_is_config (const char *cmd, int argc, char *argv[])
903 {
904   int r;
905   if (argc != 0) {
906     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
907     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
908     return -1;
909   }
910   r = guestfs_is_config (g);
911   if (r == -1) return -1;
912   if (r) printf ("true\n"); else printf ("false\n");
913   return 0;
914 }
915
916 static int run_is_launching (const char *cmd, int argc, char *argv[])
917 {
918   int r;
919   if (argc != 0) {
920     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
921     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
922     return -1;
923   }
924   r = guestfs_is_launching (g);
925   if (r == -1) return -1;
926   if (r) printf ("true\n"); else printf ("false\n");
927   return 0;
928 }
929
930 static int run_is_busy (const char *cmd, int argc, char *argv[])
931 {
932   int r;
933   if (argc != 0) {
934     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
935     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
936     return -1;
937   }
938   r = guestfs_is_busy (g);
939   if (r == -1) return -1;
940   if (r) printf ("true\n"); else printf ("false\n");
941   return 0;
942 }
943
944 static int run_get_state (const char *cmd, int argc, char *argv[])
945 {
946   int r;
947   if (argc != 0) {
948     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
949     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
950     return -1;
951   }
952   r = guestfs_get_state (g);
953   if (r == -1) return -1;
954   printf ("%d\n", r);
955   return 0;
956 }
957
958 static int run_mount (const char *cmd, int argc, char *argv[])
959 {
960   int r;
961   const char *device;
962   const char *mountpoint;
963   if (argc != 2) {
964     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
965     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
966     return -1;
967   }
968   device = argv[0];
969   mountpoint = argv[1];
970   r = guestfs_mount (g, device, mountpoint);
971   return r;
972 }
973
974 static int run_sync (const char *cmd, int argc, char *argv[])
975 {
976   int r;
977   if (argc != 0) {
978     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
979     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
980     return -1;
981   }
982   r = guestfs_sync (g);
983   return r;
984 }
985
986 static int run_touch (const char *cmd, int argc, char *argv[])
987 {
988   int r;
989   const char *path;
990   if (argc != 1) {
991     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
992     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
993     return -1;
994   }
995   path = argv[0];
996   r = guestfs_touch (g, path);
997   return r;
998 }
999
1000 static int run_cat (const char *cmd, int argc, char *argv[])
1001 {
1002   char *r;
1003   const char *path;
1004   if (argc != 1) {
1005     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1006     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1007     return -1;
1008   }
1009   path = argv[0];
1010   r = guestfs_cat (g, path);
1011   if (r == NULL) return -1;
1012   printf ("%s\n", r);
1013   free (r);
1014   return 0;
1015 }
1016
1017 static int run_ll (const char *cmd, int argc, char *argv[])
1018 {
1019   char *r;
1020   const char *directory;
1021   if (argc != 1) {
1022     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1023     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1024     return -1;
1025   }
1026   directory = argv[0];
1027   r = guestfs_ll (g, directory);
1028   if (r == NULL) return -1;
1029   printf ("%s\n", r);
1030   free (r);
1031   return 0;
1032 }
1033
1034 static int run_ls (const char *cmd, int argc, char *argv[])
1035 {
1036   char **r;
1037   const char *directory;
1038   if (argc != 1) {
1039     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1040     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1041     return -1;
1042   }
1043   directory = argv[0];
1044   r = guestfs_ls (g, directory);
1045   if (r == NULL) return -1;
1046   print_strings (r);
1047   free_strings (r);
1048   return 0;
1049 }
1050
1051 static int run_list_devices (const char *cmd, int argc, char *argv[])
1052 {
1053   char **r;
1054   if (argc != 0) {
1055     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1056     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1057     return -1;
1058   }
1059   r = guestfs_list_devices (g);
1060   if (r == NULL) return -1;
1061   print_strings (r);
1062   free_strings (r);
1063   return 0;
1064 }
1065
1066 static int run_list_partitions (const char *cmd, int argc, char *argv[])
1067 {
1068   char **r;
1069   if (argc != 0) {
1070     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1071     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1072     return -1;
1073   }
1074   r = guestfs_list_partitions (g);
1075   if (r == NULL) return -1;
1076   print_strings (r);
1077   free_strings (r);
1078   return 0;
1079 }
1080
1081 static int run_pvs (const char *cmd, int argc, char *argv[])
1082 {
1083   char **r;
1084   if (argc != 0) {
1085     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1086     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1087     return -1;
1088   }
1089   r = guestfs_pvs (g);
1090   if (r == NULL) return -1;
1091   print_strings (r);
1092   free_strings (r);
1093   return 0;
1094 }
1095
1096 static int run_vgs (const char *cmd, int argc, char *argv[])
1097 {
1098   char **r;
1099   if (argc != 0) {
1100     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1101     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1102     return -1;
1103   }
1104   r = guestfs_vgs (g);
1105   if (r == NULL) return -1;
1106   print_strings (r);
1107   free_strings (r);
1108   return 0;
1109 }
1110
1111 static int run_lvs (const char *cmd, int argc, char *argv[])
1112 {
1113   char **r;
1114   if (argc != 0) {
1115     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1116     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1117     return -1;
1118   }
1119   r = guestfs_lvs (g);
1120   if (r == NULL) return -1;
1121   print_strings (r);
1122   free_strings (r);
1123   return 0;
1124 }
1125
1126 static int run_pvs_full (const char *cmd, int argc, char *argv[])
1127 {
1128   struct guestfs_lvm_pv_list *r;
1129   if (argc != 0) {
1130     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1131     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1132     return -1;
1133   }
1134   r = guestfs_pvs_full (g);
1135   if (r == NULL) return -1;
1136   print_pv_list (r);
1137   guestfs_free_lvm_pv_list (r);
1138   return 0;
1139 }
1140
1141 static int run_vgs_full (const char *cmd, int argc, char *argv[])
1142 {
1143   struct guestfs_lvm_vg_list *r;
1144   if (argc != 0) {
1145     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1146     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1147     return -1;
1148   }
1149   r = guestfs_vgs_full (g);
1150   if (r == NULL) return -1;
1151   print_vg_list (r);
1152   guestfs_free_lvm_vg_list (r);
1153   return 0;
1154 }
1155
1156 static int run_lvs_full (const char *cmd, int argc, char *argv[])
1157 {
1158   struct guestfs_lvm_lv_list *r;
1159   if (argc != 0) {
1160     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1161     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1162     return -1;
1163   }
1164   r = guestfs_lvs_full (g);
1165   if (r == NULL) return -1;
1166   print_lv_list (r);
1167   guestfs_free_lvm_lv_list (r);
1168   return 0;
1169 }
1170
1171 static int run_read_lines (const char *cmd, int argc, char *argv[])
1172 {
1173   char **r;
1174   const char *path;
1175   if (argc != 1) {
1176     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1177     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1178     return -1;
1179   }
1180   path = argv[0];
1181   r = guestfs_read_lines (g, path);
1182   if (r == NULL) return -1;
1183   print_strings (r);
1184   free_strings (r);
1185   return 0;
1186 }
1187
1188 static int run_aug_init (const char *cmd, int argc, char *argv[])
1189 {
1190   int r;
1191   const char *root;
1192   int flags;
1193   if (argc != 2) {
1194     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1195     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1196     return -1;
1197   }
1198   root = argv[0];
1199   flags = atoi (argv[1]);
1200   r = guestfs_aug_init (g, root, flags);
1201   return r;
1202 }
1203
1204 static int run_aug_close (const char *cmd, int argc, char *argv[])
1205 {
1206   int r;
1207   if (argc != 0) {
1208     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1209     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1210     return -1;
1211   }
1212   r = guestfs_aug_close (g);
1213   return r;
1214 }
1215
1216 static int run_aug_defvar (const char *cmd, int argc, char *argv[])
1217 {
1218   int r;
1219   const char *name;
1220   const char *expr;
1221   if (argc != 2) {
1222     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1223     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1224     return -1;
1225   }
1226   name = argv[0];
1227   expr = strcmp (argv[1], "") != 0 ? argv[1] : NULL;
1228   r = guestfs_aug_defvar (g, name, expr);
1229   if (r == -1) return -1;
1230   printf ("%d\n", r);
1231   return 0;
1232 }
1233
1234 static int run_aug_defnode (const char *cmd, int argc, char *argv[])
1235 {
1236   struct guestfs_int_bool *r;
1237   const char *name;
1238   const char *expr;
1239   const char *val;
1240   if (argc != 3) {
1241     fprintf (stderr, "%s should have 3 parameter(s)\n", cmd);
1242     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1243     return -1;
1244   }
1245   name = argv[0];
1246   expr = argv[1];
1247   val = argv[2];
1248   r = guestfs_aug_defnode (g, name, expr, val);
1249   if (r == NULL) return -1;
1250   printf ("%d, %s\n", r->i,
1251     r->b ? "true" : "false");
1252   guestfs_free_int_bool (r);
1253   return 0;
1254 }
1255
1256 static int run_aug_get (const char *cmd, int argc, char *argv[])
1257 {
1258   char *r;
1259   const char *path;
1260   if (argc != 1) {
1261     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1262     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1263     return -1;
1264   }
1265   path = argv[0];
1266   r = guestfs_aug_get (g, path);
1267   if (r == NULL) return -1;
1268   printf ("%s\n", r);
1269   free (r);
1270   return 0;
1271 }
1272
1273 static int run_aug_set (const char *cmd, int argc, char *argv[])
1274 {
1275   int r;
1276   const char *path;
1277   const char *val;
1278   if (argc != 2) {
1279     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1280     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1281     return -1;
1282   }
1283   path = argv[0];
1284   val = argv[1];
1285   r = guestfs_aug_set (g, path, val);
1286   return r;
1287 }
1288
1289 static int run_aug_insert (const char *cmd, int argc, char *argv[])
1290 {
1291   int r;
1292   const char *path;
1293   const char *label;
1294   int before;
1295   if (argc != 3) {
1296     fprintf (stderr, "%s should have 3 parameter(s)\n", cmd);
1297     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1298     return -1;
1299   }
1300   path = argv[0];
1301   label = argv[1];
1302   before = is_true (argv[2]) ? 1 : 0;
1303   r = guestfs_aug_insert (g, path, label, before);
1304   return r;
1305 }
1306
1307 static int run_aug_rm (const char *cmd, int argc, char *argv[])
1308 {
1309   int r;
1310   const char *path;
1311   if (argc != 1) {
1312     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1313     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1314     return -1;
1315   }
1316   path = argv[0];
1317   r = guestfs_aug_rm (g, path);
1318   if (r == -1) return -1;
1319   printf ("%d\n", r);
1320   return 0;
1321 }
1322
1323 static int run_aug_mv (const char *cmd, int argc, char *argv[])
1324 {
1325   int r;
1326   const char *src;
1327   const char *dest;
1328   if (argc != 2) {
1329     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1330     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1331     return -1;
1332   }
1333   src = argv[0];
1334   dest = argv[1];
1335   r = guestfs_aug_mv (g, src, dest);
1336   return r;
1337 }
1338
1339 static int run_aug_match (const char *cmd, int argc, char *argv[])
1340 {
1341   char **r;
1342   const char *path;
1343   if (argc != 1) {
1344     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1345     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1346     return -1;
1347   }
1348   path = argv[0];
1349   r = guestfs_aug_match (g, path);
1350   if (r == NULL) return -1;
1351   print_strings (r);
1352   free_strings (r);
1353   return 0;
1354 }
1355
1356 static int run_aug_save (const char *cmd, int argc, char *argv[])
1357 {
1358   int r;
1359   if (argc != 0) {
1360     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1361     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1362     return -1;
1363   }
1364   r = guestfs_aug_save (g);
1365   return r;
1366 }
1367
1368 static int run_aug_load (const char *cmd, int argc, char *argv[])
1369 {
1370   int r;
1371   if (argc != 0) {
1372     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1373     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1374     return -1;
1375   }
1376   r = guestfs_aug_load (g);
1377   return r;
1378 }
1379
1380 static int run_aug_ls (const char *cmd, int argc, char *argv[])
1381 {
1382   char **r;
1383   const char *path;
1384   if (argc != 1) {
1385     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1386     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1387     return -1;
1388   }
1389   path = argv[0];
1390   r = guestfs_aug_ls (g, path);
1391   if (r == NULL) return -1;
1392   print_strings (r);
1393   free_strings (r);
1394   return 0;
1395 }
1396
1397 static int run_rm (const char *cmd, int argc, char *argv[])
1398 {
1399   int r;
1400   const char *path;
1401   if (argc != 1) {
1402     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1403     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1404     return -1;
1405   }
1406   path = argv[0];
1407   r = guestfs_rm (g, path);
1408   return r;
1409 }
1410
1411 static int run_rmdir (const char *cmd, int argc, char *argv[])
1412 {
1413   int r;
1414   const char *path;
1415   if (argc != 1) {
1416     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1417     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1418     return -1;
1419   }
1420   path = argv[0];
1421   r = guestfs_rmdir (g, path);
1422   return r;
1423 }
1424
1425 static int run_rm_rf (const char *cmd, int argc, char *argv[])
1426 {
1427   int r;
1428   const char *path;
1429   if (argc != 1) {
1430     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1431     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1432     return -1;
1433   }
1434   path = argv[0];
1435   r = guestfs_rm_rf (g, path);
1436   return r;
1437 }
1438
1439 static int run_mkdir (const char *cmd, int argc, char *argv[])
1440 {
1441   int r;
1442   const char *path;
1443   if (argc != 1) {
1444     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1445     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1446     return -1;
1447   }
1448   path = argv[0];
1449   r = guestfs_mkdir (g, path);
1450   return r;
1451 }
1452
1453 static int run_mkdir_p (const char *cmd, int argc, char *argv[])
1454 {
1455   int r;
1456   const char *path;
1457   if (argc != 1) {
1458     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1459     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1460     return -1;
1461   }
1462   path = argv[0];
1463   r = guestfs_mkdir_p (g, path);
1464   return r;
1465 }
1466
1467 static int run_chmod (const char *cmd, int argc, char *argv[])
1468 {
1469   int r;
1470   int mode;
1471   const char *path;
1472   if (argc != 2) {
1473     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1474     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1475     return -1;
1476   }
1477   mode = atoi (argv[0]);
1478   path = argv[1];
1479   r = guestfs_chmod (g, mode, path);
1480   return r;
1481 }
1482
1483 static int run_chown (const char *cmd, int argc, char *argv[])
1484 {
1485   int r;
1486   int owner;
1487   int group;
1488   const char *path;
1489   if (argc != 3) {
1490     fprintf (stderr, "%s should have 3 parameter(s)\n", cmd);
1491     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1492     return -1;
1493   }
1494   owner = atoi (argv[0]);
1495   group = atoi (argv[1]);
1496   path = argv[2];
1497   r = guestfs_chown (g, owner, group, path);
1498   return r;
1499 }
1500
1501 static int run_exists (const char *cmd, int argc, char *argv[])
1502 {
1503   int r;
1504   const char *path;
1505   if (argc != 1) {
1506     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1507     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1508     return -1;
1509   }
1510   path = argv[0];
1511   r = guestfs_exists (g, path);
1512   if (r == -1) return -1;
1513   if (r) printf ("true\n"); else printf ("false\n");
1514   return 0;
1515 }
1516
1517 static int run_is_file (const char *cmd, int argc, char *argv[])
1518 {
1519   int r;
1520   const char *path;
1521   if (argc != 1) {
1522     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1523     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1524     return -1;
1525   }
1526   path = argv[0];
1527   r = guestfs_is_file (g, path);
1528   if (r == -1) return -1;
1529   if (r) printf ("true\n"); else printf ("false\n");
1530   return 0;
1531 }
1532
1533 static int run_is_dir (const char *cmd, int argc, char *argv[])
1534 {
1535   int r;
1536   const char *path;
1537   if (argc != 1) {
1538     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1539     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1540     return -1;
1541   }
1542   path = argv[0];
1543   r = guestfs_is_dir (g, path);
1544   if (r == -1) return -1;
1545   if (r) printf ("true\n"); else printf ("false\n");
1546   return 0;
1547 }
1548
1549 static int run_pvcreate (const char *cmd, int argc, char *argv[])
1550 {
1551   int r;
1552   const char *device;
1553   if (argc != 1) {
1554     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1555     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1556     return -1;
1557   }
1558   device = argv[0];
1559   r = guestfs_pvcreate (g, device);
1560   return r;
1561 }
1562
1563 static int run_vgcreate (const char *cmd, int argc, char *argv[])
1564 {
1565   int r;
1566   const char *volgroup;
1567   char **physvols;
1568   if (argc != 2) {
1569     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1570     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1571     return -1;
1572   }
1573   volgroup = argv[0];
1574   physvols = parse_string_list (argv[1]);
1575   r = guestfs_vgcreate (g, volgroup, physvols);
1576   return r;
1577 }
1578
1579 static int run_lvcreate (const char *cmd, int argc, char *argv[])
1580 {
1581   int r;
1582   const char *logvol;
1583   const char *volgroup;
1584   int mbytes;
1585   if (argc != 3) {
1586     fprintf (stderr, "%s should have 3 parameter(s)\n", cmd);
1587     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1588     return -1;
1589   }
1590   logvol = argv[0];
1591   volgroup = argv[1];
1592   mbytes = atoi (argv[2]);
1593   r = guestfs_lvcreate (g, logvol, volgroup, mbytes);
1594   return r;
1595 }
1596
1597 static int run_mkfs (const char *cmd, int argc, char *argv[])
1598 {
1599   int r;
1600   const char *fstype;
1601   const char *device;
1602   if (argc != 2) {
1603     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1604     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1605     return -1;
1606   }
1607   fstype = argv[0];
1608   device = argv[1];
1609   r = guestfs_mkfs (g, fstype, device);
1610   return r;
1611 }
1612
1613 static int run_sfdisk (const char *cmd, int argc, char *argv[])
1614 {
1615   int r;
1616   const char *device;
1617   int cyls;
1618   int heads;
1619   int sectors;
1620   char **lines;
1621   if (argc != 5) {
1622     fprintf (stderr, "%s should have 5 parameter(s)\n", cmd);
1623     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1624     return -1;
1625   }
1626   device = argv[0];
1627   cyls = atoi (argv[1]);
1628   heads = atoi (argv[2]);
1629   sectors = atoi (argv[3]);
1630   lines = parse_string_list (argv[4]);
1631   r = guestfs_sfdisk (g, device, cyls, heads, sectors, lines);
1632   return r;
1633 }
1634
1635 static int run_write_file (const char *cmd, int argc, char *argv[])
1636 {
1637   int r;
1638   const char *path;
1639   const char *content;
1640   int size;
1641   if (argc != 3) {
1642     fprintf (stderr, "%s should have 3 parameter(s)\n", cmd);
1643     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1644     return -1;
1645   }
1646   path = argv[0];
1647   content = argv[1];
1648   size = atoi (argv[2]);
1649   r = guestfs_write_file (g, path, content, size);
1650   return r;
1651 }
1652
1653 static int run_umount (const char *cmd, int argc, char *argv[])
1654 {
1655   int r;
1656   const char *pathordevice;
1657   if (argc != 1) {
1658     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1659     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1660     return -1;
1661   }
1662   pathordevice = argv[0];
1663   r = guestfs_umount (g, pathordevice);
1664   return r;
1665 }
1666
1667 static int run_mounts (const char *cmd, int argc, char *argv[])
1668 {
1669   char **r;
1670   if (argc != 0) {
1671     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1672     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1673     return -1;
1674   }
1675   r = guestfs_mounts (g);
1676   if (r == NULL) return -1;
1677   print_strings (r);
1678   free_strings (r);
1679   return 0;
1680 }
1681
1682 static int run_umount_all (const char *cmd, int argc, char *argv[])
1683 {
1684   int r;
1685   if (argc != 0) {
1686     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1687     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1688     return -1;
1689   }
1690   r = guestfs_umount_all (g);
1691   return r;
1692 }
1693
1694 static int run_lvm_remove_all (const char *cmd, int argc, char *argv[])
1695 {
1696   int r;
1697   if (argc != 0) {
1698     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1699     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1700     return -1;
1701   }
1702   r = guestfs_lvm_remove_all (g);
1703   return r;
1704 }
1705
1706 static int run_file (const char *cmd, int argc, char *argv[])
1707 {
1708   char *r;
1709   const char *path;
1710   if (argc != 1) {
1711     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1712     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1713     return -1;
1714   }
1715   path = argv[0];
1716   r = guestfs_file (g, path);
1717   if (r == NULL) return -1;
1718   printf ("%s\n", r);
1719   free (r);
1720   return 0;
1721 }
1722
1723 static int run_command (const char *cmd, int argc, char *argv[])
1724 {
1725   char *r;
1726   char **arguments;
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   arguments = parse_string_list (argv[0]);
1733   r = guestfs_command (g, arguments);
1734   if (r == NULL) return -1;
1735   printf ("%s\n", r);
1736   free (r);
1737   return 0;
1738 }
1739
1740 static int run_command_lines (const char *cmd, int argc, char *argv[])
1741 {
1742   char **r;
1743   char **arguments;
1744   if (argc != 1) {
1745     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1746     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1747     return -1;
1748   }
1749   arguments = parse_string_list (argv[0]);
1750   r = guestfs_command_lines (g, arguments);
1751   if (r == NULL) return -1;
1752   print_strings (r);
1753   free_strings (r);
1754   return 0;
1755 }
1756
1757 static int run_stat (const char *cmd, int argc, char *argv[])
1758 {
1759   struct guestfs_stat *r;
1760   const char *path;
1761   if (argc != 1) {
1762     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1763     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1764     return -1;
1765   }
1766   path = argv[0];
1767   r = guestfs_stat (g, path);
1768   if (r == NULL) return -1;
1769   print_stat (r);
1770   free (r);
1771   return 0;
1772 }
1773
1774 static int run_lstat (const char *cmd, int argc, char *argv[])
1775 {
1776   struct guestfs_stat *r;
1777   const char *path;
1778   if (argc != 1) {
1779     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1780     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1781     return -1;
1782   }
1783   path = argv[0];
1784   r = guestfs_lstat (g, path);
1785   if (r == NULL) return -1;
1786   print_stat (r);
1787   free (r);
1788   return 0;
1789 }
1790
1791 static int run_statvfs (const char *cmd, int argc, char *argv[])
1792 {
1793   struct guestfs_statvfs *r;
1794   const char *path;
1795   if (argc != 1) {
1796     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1797     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1798     return -1;
1799   }
1800   path = argv[0];
1801   r = guestfs_statvfs (g, path);
1802   if (r == NULL) return -1;
1803   print_statvfs (r);
1804   free (r);
1805   return 0;
1806 }
1807
1808 static int run_tune2fs_l (const char *cmd, int argc, char *argv[])
1809 {
1810   char **r;
1811   const char *device;
1812   if (argc != 1) {
1813     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1814     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1815     return -1;
1816   }
1817   device = argv[0];
1818   r = guestfs_tune2fs_l (g, device);
1819   if (r == NULL) return -1;
1820   print_table (r);
1821   free_strings (r);
1822   return 0;
1823 }
1824
1825 static int run_blockdev_setro (const char *cmd, int argc, char *argv[])
1826 {
1827   int r;
1828   const char *device;
1829   if (argc != 1) {
1830     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1831     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1832     return -1;
1833   }
1834   device = argv[0];
1835   r = guestfs_blockdev_setro (g, device);
1836   return r;
1837 }
1838
1839 static int run_blockdev_setrw (const char *cmd, int argc, char *argv[])
1840 {
1841   int r;
1842   const char *device;
1843   if (argc != 1) {
1844     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1845     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1846     return -1;
1847   }
1848   device = argv[0];
1849   r = guestfs_blockdev_setrw (g, device);
1850   return r;
1851 }
1852
1853 static int run_blockdev_getro (const char *cmd, int argc, char *argv[])
1854 {
1855   int r;
1856   const char *device;
1857   if (argc != 1) {
1858     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1859     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1860     return -1;
1861   }
1862   device = argv[0];
1863   r = guestfs_blockdev_getro (g, device);
1864   if (r == -1) return -1;
1865   if (r) printf ("true\n"); else printf ("false\n");
1866   return 0;
1867 }
1868
1869 static int run_blockdev_getss (const char *cmd, int argc, char *argv[])
1870 {
1871   int r;
1872   const char *device;
1873   if (argc != 1) {
1874     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1875     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1876     return -1;
1877   }
1878   device = argv[0];
1879   r = guestfs_blockdev_getss (g, device);
1880   if (r == -1) return -1;
1881   printf ("%d\n", r);
1882   return 0;
1883 }
1884
1885 static int run_blockdev_getbsz (const char *cmd, int argc, char *argv[])
1886 {
1887   int r;
1888   const char *device;
1889   if (argc != 1) {
1890     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1891     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1892     return -1;
1893   }
1894   device = argv[0];
1895   r = guestfs_blockdev_getbsz (g, device);
1896   if (r == -1) return -1;
1897   printf ("%d\n", r);
1898   return 0;
1899 }
1900
1901 static int run_blockdev_setbsz (const char *cmd, int argc, char *argv[])
1902 {
1903   int r;
1904   const char *device;
1905   int blocksize;
1906   if (argc != 2) {
1907     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1908     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1909     return -1;
1910   }
1911   device = argv[0];
1912   blocksize = atoi (argv[1]);
1913   r = guestfs_blockdev_setbsz (g, device, blocksize);
1914   return r;
1915 }
1916
1917 static int run_blockdev_getsz (const char *cmd, int argc, char *argv[])
1918 {
1919   int64_t r;
1920   const char *device;
1921   if (argc != 1) {
1922     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1923     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1924     return -1;
1925   }
1926   device = argv[0];
1927   r = guestfs_blockdev_getsz (g, device);
1928   if (r == -1) return -1;
1929   printf ("%" PRIi64 "\n", r);
1930   return 0;
1931 }
1932
1933 static int run_blockdev_getsize64 (const char *cmd, int argc, char *argv[])
1934 {
1935   int64_t r;
1936   const char *device;
1937   if (argc != 1) {
1938     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1939     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1940     return -1;
1941   }
1942   device = argv[0];
1943   r = guestfs_blockdev_getsize64 (g, device);
1944   if (r == -1) return -1;
1945   printf ("%" PRIi64 "\n", r);
1946   return 0;
1947 }
1948
1949 static int run_blockdev_flushbufs (const char *cmd, int argc, char *argv[])
1950 {
1951   int r;
1952   const char *device;
1953   if (argc != 1) {
1954     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1955     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1956     return -1;
1957   }
1958   device = argv[0];
1959   r = guestfs_blockdev_flushbufs (g, device);
1960   return r;
1961 }
1962
1963 static int run_blockdev_rereadpt (const char *cmd, int argc, char *argv[])
1964 {
1965   int r;
1966   const char *device;
1967   if (argc != 1) {
1968     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1969     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1970     return -1;
1971   }
1972   device = argv[0];
1973   r = guestfs_blockdev_rereadpt (g, device);
1974   return r;
1975 }
1976
1977 static int run_upload (const char *cmd, int argc, char *argv[])
1978 {
1979   int r;
1980   const char *filename;
1981   const char *remotefilename;
1982   if (argc != 2) {
1983     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1984     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1985     return -1;
1986   }
1987   filename = strcmp (argv[0], "-") != 0 ? argv[0] : "/dev/stdin";
1988   remotefilename = argv[1];
1989   r = guestfs_upload (g, filename, remotefilename);
1990   return r;
1991 }
1992
1993 static int run_download (const char *cmd, int argc, char *argv[])
1994 {
1995   int r;
1996   const char *remotefilename;
1997   const char *filename;
1998   if (argc != 2) {
1999     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2000     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2001     return -1;
2002   }
2003   remotefilename = argv[0];
2004   filename = strcmp (argv[1], "-") != 0 ? argv[1] : "/dev/stdout";
2005   r = guestfs_download (g, remotefilename, filename);
2006   return r;
2007 }
2008
2009 static int run_checksum (const char *cmd, int argc, char *argv[])
2010 {
2011   char *r;
2012   const char *csumtype;
2013   const char *path;
2014   if (argc != 2) {
2015     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2016     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2017     return -1;
2018   }
2019   csumtype = argv[0];
2020   path = argv[1];
2021   r = guestfs_checksum (g, csumtype, path);
2022   if (r == NULL) return -1;
2023   printf ("%s\n", r);
2024   free (r);
2025   return 0;
2026 }
2027
2028 static int run_tar_in (const char *cmd, int argc, char *argv[])
2029 {
2030   int r;
2031   const char *tarfile;
2032   const char *directory;
2033   if (argc != 2) {
2034     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2035     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2036     return -1;
2037   }
2038   tarfile = strcmp (argv[0], "-") != 0 ? argv[0] : "/dev/stdin";
2039   directory = argv[1];
2040   r = guestfs_tar_in (g, tarfile, directory);
2041   return r;
2042 }
2043
2044 static int run_tar_out (const char *cmd, int argc, char *argv[])
2045 {
2046   int r;
2047   const char *directory;
2048   const char *tarfile;
2049   if (argc != 2) {
2050     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2051     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2052     return -1;
2053   }
2054   directory = argv[0];
2055   tarfile = strcmp (argv[1], "-") != 0 ? argv[1] : "/dev/stdout";
2056   r = guestfs_tar_out (g, directory, tarfile);
2057   return r;
2058 }
2059
2060 static int run_tgz_in (const char *cmd, int argc, char *argv[])
2061 {
2062   int r;
2063   const char *tarball;
2064   const char *directory;
2065   if (argc != 2) {
2066     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2067     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2068     return -1;
2069   }
2070   tarball = strcmp (argv[0], "-") != 0 ? argv[0] : "/dev/stdin";
2071   directory = argv[1];
2072   r = guestfs_tgz_in (g, tarball, directory);
2073   return r;
2074 }
2075
2076 static int run_tgz_out (const char *cmd, int argc, char *argv[])
2077 {
2078   int r;
2079   const char *directory;
2080   const char *tarball;
2081   if (argc != 2) {
2082     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2083     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2084     return -1;
2085   }
2086   directory = argv[0];
2087   tarball = strcmp (argv[1], "-") != 0 ? argv[1] : "/dev/stdout";
2088   r = guestfs_tgz_out (g, directory, tarball);
2089   return r;
2090 }
2091
2092 static int run_mount_ro (const char *cmd, int argc, char *argv[])
2093 {
2094   int r;
2095   const char *device;
2096   const char *mountpoint;
2097   if (argc != 2) {
2098     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2099     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2100     return -1;
2101   }
2102   device = argv[0];
2103   mountpoint = argv[1];
2104   r = guestfs_mount_ro (g, device, mountpoint);
2105   return r;
2106 }
2107
2108 static int run_mount_options (const char *cmd, int argc, char *argv[])
2109 {
2110   int r;
2111   const char *options;
2112   const char *device;
2113   const char *mountpoint;
2114   if (argc != 3) {
2115     fprintf (stderr, "%s should have 3 parameter(s)\n", cmd);
2116     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2117     return -1;
2118   }
2119   options = argv[0];
2120   device = argv[1];
2121   mountpoint = argv[2];
2122   r = guestfs_mount_options (g, options, device, mountpoint);
2123   return r;
2124 }
2125
2126 static int run_mount_vfs (const char *cmd, int argc, char *argv[])
2127 {
2128   int r;
2129   const char *options;
2130   const char *vfstype;
2131   const char *device;
2132   const char *mountpoint;
2133   if (argc != 4) {
2134     fprintf (stderr, "%s should have 4 parameter(s)\n", cmd);
2135     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2136     return -1;
2137   }
2138   options = argv[0];
2139   vfstype = argv[1];
2140   device = argv[2];
2141   mountpoint = argv[3];
2142   r = guestfs_mount_vfs (g, options, vfstype, device, mountpoint);
2143   return r;
2144 }
2145
2146 static int run_debug (const char *cmd, int argc, char *argv[])
2147 {
2148   char *r;
2149   const char *subcmd;
2150   char **extraargs;
2151   if (argc != 2) {
2152     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2153     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2154     return -1;
2155   }
2156   subcmd = argv[0];
2157   extraargs = parse_string_list (argv[1]);
2158   r = guestfs_debug (g, subcmd, extraargs);
2159   if (r == NULL) return -1;
2160   printf ("%s\n", r);
2161   free (r);
2162   return 0;
2163 }
2164
2165 static int run_lvremove (const char *cmd, int argc, char *argv[])
2166 {
2167   int r;
2168   const char *device;
2169   if (argc != 1) {
2170     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2171     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2172     return -1;
2173   }
2174   device = argv[0];
2175   r = guestfs_lvremove (g, device);
2176   return r;
2177 }
2178
2179 static int run_vgremove (const char *cmd, int argc, char *argv[])
2180 {
2181   int r;
2182   const char *vgname;
2183   if (argc != 1) {
2184     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2185     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2186     return -1;
2187   }
2188   vgname = argv[0];
2189   r = guestfs_vgremove (g, vgname);
2190   return r;
2191 }
2192
2193 static int run_pvremove (const char *cmd, int argc, char *argv[])
2194 {
2195   int r;
2196   const char *device;
2197   if (argc != 1) {
2198     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2199     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2200     return -1;
2201   }
2202   device = argv[0];
2203   r = guestfs_pvremove (g, device);
2204   return r;
2205 }
2206
2207 static int run_set_e2label (const char *cmd, int argc, char *argv[])
2208 {
2209   int r;
2210   const char *device;
2211   const char *label;
2212   if (argc != 2) {
2213     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2214     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2215     return -1;
2216   }
2217   device = argv[0];
2218   label = argv[1];
2219   r = guestfs_set_e2label (g, device, label);
2220   return r;
2221 }
2222
2223 static int run_get_e2label (const char *cmd, int argc, char *argv[])
2224 {
2225   char *r;
2226   const char *device;
2227   if (argc != 1) {
2228     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2229     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2230     return -1;
2231   }
2232   device = argv[0];
2233   r = guestfs_get_e2label (g, device);
2234   if (r == NULL) return -1;
2235   printf ("%s\n", r);
2236   free (r);
2237   return 0;
2238 }
2239
2240 static int run_set_e2uuid (const char *cmd, int argc, char *argv[])
2241 {
2242   int r;
2243   const char *device;
2244   const char *uuid;
2245   if (argc != 2) {
2246     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2247     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2248     return -1;
2249   }
2250   device = argv[0];
2251   uuid = argv[1];
2252   r = guestfs_set_e2uuid (g, device, uuid);
2253   return r;
2254 }
2255
2256 static int run_get_e2uuid (const char *cmd, int argc, char *argv[])
2257 {
2258   char *r;
2259   const char *device;
2260   if (argc != 1) {
2261     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2262     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2263     return -1;
2264   }
2265   device = argv[0];
2266   r = guestfs_get_e2uuid (g, device);
2267   if (r == NULL) return -1;
2268   printf ("%s\n", r);
2269   free (r);
2270   return 0;
2271 }
2272
2273 static int run_fsck (const char *cmd, int argc, char *argv[])
2274 {
2275   int r;
2276   const char *fstype;
2277   const char *device;
2278   if (argc != 2) {
2279     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2280     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2281     return -1;
2282   }
2283   fstype = argv[0];
2284   device = argv[1];
2285   r = guestfs_fsck (g, fstype, device);
2286   if (r == -1) return -1;
2287   printf ("%d\n", r);
2288   return 0;
2289 }
2290
2291 static int run_zero (const char *cmd, int argc, char *argv[])
2292 {
2293   int r;
2294   const char *device;
2295   if (argc != 1) {
2296     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2297     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2298     return -1;
2299   }
2300   device = argv[0];
2301   r = guestfs_zero (g, device);
2302   return r;
2303 }
2304
2305 static int run_grub_install (const char *cmd, int argc, char *argv[])
2306 {
2307   int r;
2308   const char *root;
2309   const char *device;
2310   if (argc != 2) {
2311     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2312     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2313     return -1;
2314   }
2315   root = argv[0];
2316   device = argv[1];
2317   r = guestfs_grub_install (g, root, device);
2318   return r;
2319 }
2320
2321 static int run_cp (const char *cmd, int argc, char *argv[])
2322 {
2323   int r;
2324   const char *src;
2325   const char *dest;
2326   if (argc != 2) {
2327     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2328     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2329     return -1;
2330   }
2331   src = argv[0];
2332   dest = argv[1];
2333   r = guestfs_cp (g, src, dest);
2334   return r;
2335 }
2336
2337 static int run_cp_a (const char *cmd, int argc, char *argv[])
2338 {
2339   int r;
2340   const char *src;
2341   const char *dest;
2342   if (argc != 2) {
2343     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2344     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2345     return -1;
2346   }
2347   src = argv[0];
2348   dest = argv[1];
2349   r = guestfs_cp_a (g, src, dest);
2350   return r;
2351 }
2352
2353 static int run_mv (const char *cmd, int argc, char *argv[])
2354 {
2355   int r;
2356   const char *src;
2357   const char *dest;
2358   if (argc != 2) {
2359     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2360     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2361     return -1;
2362   }
2363   src = argv[0];
2364   dest = argv[1];
2365   r = guestfs_mv (g, src, dest);
2366   return r;
2367 }
2368
2369 static int run_drop_caches (const char *cmd, int argc, char *argv[])
2370 {
2371   int r;
2372   int whattodrop;
2373   if (argc != 1) {
2374     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2375     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2376     return -1;
2377   }
2378   whattodrop = atoi (argv[0]);
2379   r = guestfs_drop_caches (g, whattodrop);
2380   return r;
2381 }
2382
2383 static int run_dmesg (const char *cmd, int argc, char *argv[])
2384 {
2385   char *r;
2386   if (argc != 0) {
2387     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
2388     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2389     return -1;
2390   }
2391   r = guestfs_dmesg (g);
2392   if (r == NULL) return -1;
2393   printf ("%s\n", r);
2394   free (r);
2395   return 0;
2396 }
2397
2398 static int run_ping_daemon (const char *cmd, int argc, char *argv[])
2399 {
2400   int r;
2401   if (argc != 0) {
2402     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
2403     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2404     return -1;
2405   }
2406   r = guestfs_ping_daemon (g);
2407   return r;
2408 }
2409
2410 static int run_equal (const char *cmd, int argc, char *argv[])
2411 {
2412   int r;
2413   const char *file1;
2414   const char *file2;
2415   if (argc != 2) {
2416     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2417     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2418     return -1;
2419   }
2420   file1 = argv[0];
2421   file2 = argv[1];
2422   r = guestfs_equal (g, file1, file2);
2423   if (r == -1) return -1;
2424   if (r) printf ("true\n"); else printf ("false\n");
2425   return 0;
2426 }
2427
2428 static int run_strings (const char *cmd, int argc, char *argv[])
2429 {
2430   char **r;
2431   const char *path;
2432   if (argc != 1) {
2433     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2434     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2435     return -1;
2436   }
2437   path = argv[0];
2438   r = guestfs_strings (g, path);
2439   if (r == NULL) return -1;
2440   print_strings (r);
2441   free_strings (r);
2442   return 0;
2443 }
2444
2445 static int run_strings_e (const char *cmd, int argc, char *argv[])
2446 {
2447   char **r;
2448   const char *encoding;
2449   const char *path;
2450   if (argc != 2) {
2451     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2452     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2453     return -1;
2454   }
2455   encoding = argv[0];
2456   path = argv[1];
2457   r = guestfs_strings_e (g, encoding, path);
2458   if (r == NULL) return -1;
2459   print_strings (r);
2460   free_strings (r);
2461   return 0;
2462 }
2463
2464 static int run_hexdump (const char *cmd, int argc, char *argv[])
2465 {
2466   char *r;
2467   const char *path;
2468   if (argc != 1) {
2469     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2470     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2471     return -1;
2472   }
2473   path = argv[0];
2474   r = guestfs_hexdump (g, path);
2475   if (r == NULL) return -1;
2476   printf ("%s\n", r);
2477   free (r);
2478   return 0;
2479 }
2480
2481 static int run_zerofree (const char *cmd, int argc, char *argv[])
2482 {
2483   int r;
2484   const char *device;
2485   if (argc != 1) {
2486     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2487     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2488     return -1;
2489   }
2490   device = argv[0];
2491   r = guestfs_zerofree (g, device);
2492   return r;
2493 }
2494
2495 static int run_pvresize (const char *cmd, int argc, char *argv[])
2496 {
2497   int r;
2498   const char *device;
2499   if (argc != 1) {
2500     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2501     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2502     return -1;
2503   }
2504   device = argv[0];
2505   r = guestfs_pvresize (g, device);
2506   return r;
2507 }
2508
2509 static int run_sfdisk_N (const char *cmd, int argc, char *argv[])
2510 {
2511   int r;
2512   const char *device;
2513   int n;
2514   int cyls;
2515   int heads;
2516   int sectors;
2517   const char *line;
2518   if (argc != 6) {
2519     fprintf (stderr, "%s should have 6 parameter(s)\n", cmd);
2520     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2521     return -1;
2522   }
2523   device = argv[0];
2524   n = atoi (argv[1]);
2525   cyls = atoi (argv[2]);
2526   heads = atoi (argv[3]);
2527   sectors = atoi (argv[4]);
2528   line = argv[5];
2529   r = guestfs_sfdisk_N (g, device, n, cyls, heads, sectors, line);
2530   return r;
2531 }
2532
2533 static int run_sfdisk_l (const char *cmd, int argc, char *argv[])
2534 {
2535   char *r;
2536   const char *device;
2537   if (argc != 1) {
2538     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2539     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2540     return -1;
2541   }
2542   device = argv[0];
2543   r = guestfs_sfdisk_l (g, device);
2544   if (r == NULL) return -1;
2545   printf ("%s\n", r);
2546   free (r);
2547   return 0;
2548 }
2549
2550 static int run_sfdisk_kernel_geometry (const char *cmd, int argc, char *argv[])
2551 {
2552   char *r;
2553   const char *device;
2554   if (argc != 1) {
2555     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2556     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2557     return -1;
2558   }
2559   device = argv[0];
2560   r = guestfs_sfdisk_kernel_geometry (g, device);
2561   if (r == NULL) return -1;
2562   printf ("%s\n", r);
2563   free (r);
2564   return 0;
2565 }
2566
2567 static int run_sfdisk_disk_geometry (const char *cmd, int argc, char *argv[])
2568 {
2569   char *r;
2570   const char *device;
2571   if (argc != 1) {
2572     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2573     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2574     return -1;
2575   }
2576   device = argv[0];
2577   r = guestfs_sfdisk_disk_geometry (g, device);
2578   if (r == NULL) return -1;
2579   printf ("%s\n", r);
2580   free (r);
2581   return 0;
2582 }
2583
2584 static int run_vg_activate_all (const char *cmd, int argc, char *argv[])
2585 {
2586   int r;
2587   int activate;
2588   if (argc != 1) {
2589     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2590     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2591     return -1;
2592   }
2593   activate = is_true (argv[0]) ? 1 : 0;
2594   r = guestfs_vg_activate_all (g, activate);
2595   return r;
2596 }
2597
2598 static int run_vg_activate (const char *cmd, int argc, char *argv[])
2599 {
2600   int r;
2601   int activate;
2602   char **volgroups;
2603   if (argc != 2) {
2604     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2605     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2606     return -1;
2607   }
2608   activate = is_true (argv[0]) ? 1 : 0;
2609   volgroups = parse_string_list (argv[1]);
2610   r = guestfs_vg_activate (g, activate, volgroups);
2611   return r;
2612 }
2613
2614 static int run_lvresize (const char *cmd, int argc, char *argv[])
2615 {
2616   int r;
2617   const char *device;
2618   int mbytes;
2619   if (argc != 2) {
2620     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2621     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2622     return -1;
2623   }
2624   device = argv[0];
2625   mbytes = atoi (argv[1]);
2626   r = guestfs_lvresize (g, device, mbytes);
2627   return r;
2628 }
2629
2630 static int run_resize2fs (const char *cmd, int argc, char *argv[])
2631 {
2632   int r;
2633   const char *device;
2634   if (argc != 1) {
2635     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2636     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2637     return -1;
2638   }
2639   device = argv[0];
2640   r = guestfs_resize2fs (g, device);
2641   return r;
2642 }
2643
2644 int run_action (const char *cmd, int argc, char *argv[])
2645 {
2646   if (strcasecmp (cmd, "launch") == 0 || strcasecmp (cmd, "run") == 0)
2647     return run_launch (cmd, argc, argv);
2648   else
2649   if (strcasecmp (cmd, "kill_subprocess") == 0 || strcasecmp (cmd, "kill-subprocess") == 0)
2650     return run_kill_subprocess (cmd, argc, argv);
2651   else
2652   if (strcasecmp (cmd, "add_drive") == 0 || strcasecmp (cmd, "add-drive") == 0 || strcasecmp (cmd, "add") == 0)
2653     return run_add_drive (cmd, argc, argv);
2654   else
2655   if (strcasecmp (cmd, "add_cdrom") == 0 || strcasecmp (cmd, "add-cdrom") == 0 || strcasecmp (cmd, "cdrom") == 0)
2656     return run_add_cdrom (cmd, argc, argv);
2657   else
2658   if (strcasecmp (cmd, "config") == 0)
2659     return run_config (cmd, argc, argv);
2660   else
2661   if (strcasecmp (cmd, "set_qemu") == 0 || strcasecmp (cmd, "set-qemu") == 0 || strcasecmp (cmd, "qemu") == 0)
2662     return run_set_qemu (cmd, argc, argv);
2663   else
2664   if (strcasecmp (cmd, "get_qemu") == 0 || strcasecmp (cmd, "get-qemu") == 0)
2665     return run_get_qemu (cmd, argc, argv);
2666   else
2667   if (strcasecmp (cmd, "set_path") == 0 || strcasecmp (cmd, "set-path") == 0 || strcasecmp (cmd, "path") == 0)
2668     return run_set_path (cmd, argc, argv);
2669   else
2670   if (strcasecmp (cmd, "get_path") == 0 || strcasecmp (cmd, "get-path") == 0)
2671     return run_get_path (cmd, argc, argv);
2672   else
2673   if (strcasecmp (cmd, "set_append") == 0 || strcasecmp (cmd, "set-append") == 0 || strcasecmp (cmd, "append") == 0)
2674     return run_set_append (cmd, argc, argv);
2675   else
2676   if (strcasecmp (cmd, "get_append") == 0 || strcasecmp (cmd, "get-append") == 0)
2677     return run_get_append (cmd, argc, argv);
2678   else
2679   if (strcasecmp (cmd, "set_autosync") == 0 || strcasecmp (cmd, "set-autosync") == 0 || strcasecmp (cmd, "autosync") == 0)
2680     return run_set_autosync (cmd, argc, argv);
2681   else
2682   if (strcasecmp (cmd, "get_autosync") == 0 || strcasecmp (cmd, "get-autosync") == 0)
2683     return run_get_autosync (cmd, argc, argv);
2684   else
2685   if (strcasecmp (cmd, "set_verbose") == 0 || strcasecmp (cmd, "set-verbose") == 0 || strcasecmp (cmd, "verbose") == 0)
2686     return run_set_verbose (cmd, argc, argv);
2687   else
2688   if (strcasecmp (cmd, "get_verbose") == 0 || strcasecmp (cmd, "get-verbose") == 0)
2689     return run_get_verbose (cmd, argc, argv);
2690   else
2691   if (strcasecmp (cmd, "is_ready") == 0 || strcasecmp (cmd, "is-ready") == 0)
2692     return run_is_ready (cmd, argc, argv);
2693   else
2694   if (strcasecmp (cmd, "is_config") == 0 || strcasecmp (cmd, "is-config") == 0)
2695     return run_is_config (cmd, argc, argv);
2696   else
2697   if (strcasecmp (cmd, "is_launching") == 0 || strcasecmp (cmd, "is-launching") == 0)
2698     return run_is_launching (cmd, argc, argv);
2699   else
2700   if (strcasecmp (cmd, "is_busy") == 0 || strcasecmp (cmd, "is-busy") == 0)
2701     return run_is_busy (cmd, argc, argv);
2702   else
2703   if (strcasecmp (cmd, "get_state") == 0 || strcasecmp (cmd, "get-state") == 0)
2704     return run_get_state (cmd, argc, argv);
2705   else
2706   if (strcasecmp (cmd, "mount") == 0)
2707     return run_mount (cmd, argc, argv);
2708   else
2709   if (strcasecmp (cmd, "sync") == 0)
2710     return run_sync (cmd, argc, argv);
2711   else
2712   if (strcasecmp (cmd, "touch") == 0)
2713     return run_touch (cmd, argc, argv);
2714   else
2715   if (strcasecmp (cmd, "cat") == 0)
2716     return run_cat (cmd, argc, argv);
2717   else
2718   if (strcasecmp (cmd, "ll") == 0)
2719     return run_ll (cmd, argc, argv);
2720   else
2721   if (strcasecmp (cmd, "ls") == 0)
2722     return run_ls (cmd, argc, argv);
2723   else
2724   if (strcasecmp (cmd, "list_devices") == 0 || strcasecmp (cmd, "list-devices") == 0)
2725     return run_list_devices (cmd, argc, argv);
2726   else
2727   if (strcasecmp (cmd, "list_partitions") == 0 || strcasecmp (cmd, "list-partitions") == 0)
2728     return run_list_partitions (cmd, argc, argv);
2729   else
2730   if (strcasecmp (cmd, "pvs") == 0)
2731     return run_pvs (cmd, argc, argv);
2732   else
2733   if (strcasecmp (cmd, "vgs") == 0)
2734     return run_vgs (cmd, argc, argv);
2735   else
2736   if (strcasecmp (cmd, "lvs") == 0)
2737     return run_lvs (cmd, argc, argv);
2738   else
2739   if (strcasecmp (cmd, "pvs_full") == 0 || strcasecmp (cmd, "pvs-full") == 0)
2740     return run_pvs_full (cmd, argc, argv);
2741   else
2742   if (strcasecmp (cmd, "vgs_full") == 0 || strcasecmp (cmd, "vgs-full") == 0)
2743     return run_vgs_full (cmd, argc, argv);
2744   else
2745   if (strcasecmp (cmd, "lvs_full") == 0 || strcasecmp (cmd, "lvs-full") == 0)
2746     return run_lvs_full (cmd, argc, argv);
2747   else
2748   if (strcasecmp (cmd, "read_lines") == 0 || strcasecmp (cmd, "read-lines") == 0)
2749     return run_read_lines (cmd, argc, argv);
2750   else
2751   if (strcasecmp (cmd, "aug_init") == 0 || strcasecmp (cmd, "aug-init") == 0)
2752     return run_aug_init (cmd, argc, argv);
2753   else
2754   if (strcasecmp (cmd, "aug_close") == 0 || strcasecmp (cmd, "aug-close") == 0)
2755     return run_aug_close (cmd, argc, argv);
2756   else
2757   if (strcasecmp (cmd, "aug_defvar") == 0 || strcasecmp (cmd, "aug-defvar") == 0)
2758     return run_aug_defvar (cmd, argc, argv);
2759   else
2760   if (strcasecmp (cmd, "aug_defnode") == 0 || strcasecmp (cmd, "aug-defnode") == 0)
2761     return run_aug_defnode (cmd, argc, argv);
2762   else
2763   if (strcasecmp (cmd, "aug_get") == 0 || strcasecmp (cmd, "aug-get") == 0)
2764     return run_aug_get (cmd, argc, argv);
2765   else
2766   if (strcasecmp (cmd, "aug_set") == 0 || strcasecmp (cmd, "aug-set") == 0)
2767     return run_aug_set (cmd, argc, argv);
2768   else
2769   if (strcasecmp (cmd, "aug_insert") == 0 || strcasecmp (cmd, "aug-insert") == 0)
2770     return run_aug_insert (cmd, argc, argv);
2771   else
2772   if (strcasecmp (cmd, "aug_rm") == 0 || strcasecmp (cmd, "aug-rm") == 0)
2773     return run_aug_rm (cmd, argc, argv);
2774   else
2775   if (strcasecmp (cmd, "aug_mv") == 0 || strcasecmp (cmd, "aug-mv") == 0)
2776     return run_aug_mv (cmd, argc, argv);
2777   else
2778   if (strcasecmp (cmd, "aug_match") == 0 || strcasecmp (cmd, "aug-match") == 0)
2779     return run_aug_match (cmd, argc, argv);
2780   else
2781   if (strcasecmp (cmd, "aug_save") == 0 || strcasecmp (cmd, "aug-save") == 0)
2782     return run_aug_save (cmd, argc, argv);
2783   else
2784   if (strcasecmp (cmd, "aug_load") == 0 || strcasecmp (cmd, "aug-load") == 0)
2785     return run_aug_load (cmd, argc, argv);
2786   else
2787   if (strcasecmp (cmd, "aug_ls") == 0 || strcasecmp (cmd, "aug-ls") == 0)
2788     return run_aug_ls (cmd, argc, argv);
2789   else
2790   if (strcasecmp (cmd, "rm") == 0)
2791     return run_rm (cmd, argc, argv);
2792   else
2793   if (strcasecmp (cmd, "rmdir") == 0)
2794     return run_rmdir (cmd, argc, argv);
2795   else
2796   if (strcasecmp (cmd, "rm_rf") == 0 || strcasecmp (cmd, "rm-rf") == 0)
2797     return run_rm_rf (cmd, argc, argv);
2798   else
2799   if (strcasecmp (cmd, "mkdir") == 0)
2800     return run_mkdir (cmd, argc, argv);
2801   else
2802   if (strcasecmp (cmd, "mkdir_p") == 0 || strcasecmp (cmd, "mkdir-p") == 0)
2803     return run_mkdir_p (cmd, argc, argv);
2804   else
2805   if (strcasecmp (cmd, "chmod") == 0)
2806     return run_chmod (cmd, argc, argv);
2807   else
2808   if (strcasecmp (cmd, "chown") == 0)
2809     return run_chown (cmd, argc, argv);
2810   else
2811   if (strcasecmp (cmd, "exists") == 0)
2812     return run_exists (cmd, argc, argv);
2813   else
2814   if (strcasecmp (cmd, "is_file") == 0 || strcasecmp (cmd, "is-file") == 0)
2815     return run_is_file (cmd, argc, argv);
2816   else
2817   if (strcasecmp (cmd, "is_dir") == 0 || strcasecmp (cmd, "is-dir") == 0)
2818     return run_is_dir (cmd, argc, argv);
2819   else
2820   if (strcasecmp (cmd, "pvcreate") == 0)
2821     return run_pvcreate (cmd, argc, argv);
2822   else
2823   if (strcasecmp (cmd, "vgcreate") == 0)
2824     return run_vgcreate (cmd, argc, argv);
2825   else
2826   if (strcasecmp (cmd, "lvcreate") == 0)
2827     return run_lvcreate (cmd, argc, argv);
2828   else
2829   if (strcasecmp (cmd, "mkfs") == 0)
2830     return run_mkfs (cmd, argc, argv);
2831   else
2832   if (strcasecmp (cmd, "sfdisk") == 0)
2833     return run_sfdisk (cmd, argc, argv);
2834   else
2835   if (strcasecmp (cmd, "write_file") == 0 || strcasecmp (cmd, "write-file") == 0)
2836     return run_write_file (cmd, argc, argv);
2837   else
2838   if (strcasecmp (cmd, "umount") == 0 || strcasecmp (cmd, "unmount") == 0)
2839     return run_umount (cmd, argc, argv);
2840   else
2841   if (strcasecmp (cmd, "mounts") == 0)
2842     return run_mounts (cmd, argc, argv);
2843   else
2844   if (strcasecmp (cmd, "umount_all") == 0 || strcasecmp (cmd, "umount-all") == 0 || strcasecmp (cmd, "unmount-all") == 0)
2845     return run_umount_all (cmd, argc, argv);
2846   else
2847   if (strcasecmp (cmd, "lvm_remove_all") == 0 || strcasecmp (cmd, "lvm-remove-all") == 0)
2848     return run_lvm_remove_all (cmd, argc, argv);
2849   else
2850   if (strcasecmp (cmd, "file") == 0)
2851     return run_file (cmd, argc, argv);
2852   else
2853   if (strcasecmp (cmd, "command") == 0)
2854     return run_command (cmd, argc, argv);
2855   else
2856   if (strcasecmp (cmd, "command_lines") == 0 || strcasecmp (cmd, "command-lines") == 0)
2857     return run_command_lines (cmd, argc, argv);
2858   else
2859   if (strcasecmp (cmd, "stat") == 0)
2860     return run_stat (cmd, argc, argv);
2861   else
2862   if (strcasecmp (cmd, "lstat") == 0)
2863     return run_lstat (cmd, argc, argv);
2864   else
2865   if (strcasecmp (cmd, "statvfs") == 0)
2866     return run_statvfs (cmd, argc, argv);
2867   else
2868   if (strcasecmp (cmd, "tune2fs_l") == 0 || strcasecmp (cmd, "tune2fs-l") == 0)
2869     return run_tune2fs_l (cmd, argc, argv);
2870   else
2871   if (strcasecmp (cmd, "blockdev_setro") == 0 || strcasecmp (cmd, "blockdev-setro") == 0)
2872     return run_blockdev_setro (cmd, argc, argv);
2873   else
2874   if (strcasecmp (cmd, "blockdev_setrw") == 0 || strcasecmp (cmd, "blockdev-setrw") == 0)
2875     return run_blockdev_setrw (cmd, argc, argv);
2876   else
2877   if (strcasecmp (cmd, "blockdev_getro") == 0 || strcasecmp (cmd, "blockdev-getro") == 0)
2878     return run_blockdev_getro (cmd, argc, argv);
2879   else
2880   if (strcasecmp (cmd, "blockdev_getss") == 0 || strcasecmp (cmd, "blockdev-getss") == 0)
2881     return run_blockdev_getss (cmd, argc, argv);
2882   else
2883   if (strcasecmp (cmd, "blockdev_getbsz") == 0 || strcasecmp (cmd, "blockdev-getbsz") == 0)
2884     return run_blockdev_getbsz (cmd, argc, argv);
2885   else
2886   if (strcasecmp (cmd, "blockdev_setbsz") == 0 || strcasecmp (cmd, "blockdev-setbsz") == 0)
2887     return run_blockdev_setbsz (cmd, argc, argv);
2888   else
2889   if (strcasecmp (cmd, "blockdev_getsz") == 0 || strcasecmp (cmd, "blockdev-getsz") == 0)
2890     return run_blockdev_getsz (cmd, argc, argv);
2891   else
2892   if (strcasecmp (cmd, "blockdev_getsize64") == 0 || strcasecmp (cmd, "blockdev-getsize64") == 0)
2893     return run_blockdev_getsize64 (cmd, argc, argv);
2894   else
2895   if (strcasecmp (cmd, "blockdev_flushbufs") == 0 || strcasecmp (cmd, "blockdev-flushbufs") == 0)
2896     return run_blockdev_flushbufs (cmd, argc, argv);
2897   else
2898   if (strcasecmp (cmd, "blockdev_rereadpt") == 0 || strcasecmp (cmd, "blockdev-rereadpt") == 0)
2899     return run_blockdev_rereadpt (cmd, argc, argv);
2900   else
2901   if (strcasecmp (cmd, "upload") == 0)
2902     return run_upload (cmd, argc, argv);
2903   else
2904   if (strcasecmp (cmd, "download") == 0)
2905     return run_download (cmd, argc, argv);
2906   else
2907   if (strcasecmp (cmd, "checksum") == 0)
2908     return run_checksum (cmd, argc, argv);
2909   else
2910   if (strcasecmp (cmd, "tar_in") == 0 || strcasecmp (cmd, "tar-in") == 0)
2911     return run_tar_in (cmd, argc, argv);
2912   else
2913   if (strcasecmp (cmd, "tar_out") == 0 || strcasecmp (cmd, "tar-out") == 0)
2914     return run_tar_out (cmd, argc, argv);
2915   else
2916   if (strcasecmp (cmd, "tgz_in") == 0 || strcasecmp (cmd, "tgz-in") == 0)
2917     return run_tgz_in (cmd, argc, argv);
2918   else
2919   if (strcasecmp (cmd, "tgz_out") == 0 || strcasecmp (cmd, "tgz-out") == 0)
2920     return run_tgz_out (cmd, argc, argv);
2921   else
2922   if (strcasecmp (cmd, "mount_ro") == 0 || strcasecmp (cmd, "mount-ro") == 0)
2923     return run_mount_ro (cmd, argc, argv);
2924   else
2925   if (strcasecmp (cmd, "mount_options") == 0 || strcasecmp (cmd, "mount-options") == 0)
2926     return run_mount_options (cmd, argc, argv);
2927   else
2928   if (strcasecmp (cmd, "mount_vfs") == 0 || strcasecmp (cmd, "mount-vfs") == 0)
2929     return run_mount_vfs (cmd, argc, argv);
2930   else
2931   if (strcasecmp (cmd, "debug") == 0)
2932     return run_debug (cmd, argc, argv);
2933   else
2934   if (strcasecmp (cmd, "lvremove") == 0)
2935     return run_lvremove (cmd, argc, argv);
2936   else
2937   if (strcasecmp (cmd, "vgremove") == 0)
2938     return run_vgremove (cmd, argc, argv);
2939   else
2940   if (strcasecmp (cmd, "pvremove") == 0)
2941     return run_pvremove (cmd, argc, argv);
2942   else
2943   if (strcasecmp (cmd, "set_e2label") == 0 || strcasecmp (cmd, "set-e2label") == 0)
2944     return run_set_e2label (cmd, argc, argv);
2945   else
2946   if (strcasecmp (cmd, "get_e2label") == 0 || strcasecmp (cmd, "get-e2label") == 0)
2947     return run_get_e2label (cmd, argc, argv);
2948   else
2949   if (strcasecmp (cmd, "set_e2uuid") == 0 || strcasecmp (cmd, "set-e2uuid") == 0)
2950     return run_set_e2uuid (cmd, argc, argv);
2951   else
2952   if (strcasecmp (cmd, "get_e2uuid") == 0 || strcasecmp (cmd, "get-e2uuid") == 0)
2953     return run_get_e2uuid (cmd, argc, argv);
2954   else
2955   if (strcasecmp (cmd, "fsck") == 0)
2956     return run_fsck (cmd, argc, argv);
2957   else
2958   if (strcasecmp (cmd, "zero") == 0)
2959     return run_zero (cmd, argc, argv);
2960   else
2961   if (strcasecmp (cmd, "grub_install") == 0 || strcasecmp (cmd, "grub-install") == 0)
2962     return run_grub_install (cmd, argc, argv);
2963   else
2964   if (strcasecmp (cmd, "cp") == 0)
2965     return run_cp (cmd, argc, argv);
2966   else
2967   if (strcasecmp (cmd, "cp_a") == 0 || strcasecmp (cmd, "cp-a") == 0)
2968     return run_cp_a (cmd, argc, argv);
2969   else
2970   if (strcasecmp (cmd, "mv") == 0)
2971     return run_mv (cmd, argc, argv);
2972   else
2973   if (strcasecmp (cmd, "drop_caches") == 0 || strcasecmp (cmd, "drop-caches") == 0)
2974     return run_drop_caches (cmd, argc, argv);
2975   else
2976   if (strcasecmp (cmd, "dmesg") == 0)
2977     return run_dmesg (cmd, argc, argv);
2978   else
2979   if (strcasecmp (cmd, "ping_daemon") == 0 || strcasecmp (cmd, "ping-daemon") == 0)
2980     return run_ping_daemon (cmd, argc, argv);
2981   else
2982   if (strcasecmp (cmd, "equal") == 0)
2983     return run_equal (cmd, argc, argv);
2984   else
2985   if (strcasecmp (cmd, "strings") == 0)
2986     return run_strings (cmd, argc, argv);
2987   else
2988   if (strcasecmp (cmd, "strings_e") == 0 || strcasecmp (cmd, "strings-e") == 0)
2989     return run_strings_e (cmd, argc, argv);
2990   else
2991   if (strcasecmp (cmd, "hexdump") == 0)
2992     return run_hexdump (cmd, argc, argv);
2993   else
2994   if (strcasecmp (cmd, "zerofree") == 0)
2995     return run_zerofree (cmd, argc, argv);
2996   else
2997   if (strcasecmp (cmd, "pvresize") == 0)
2998     return run_pvresize (cmd, argc, argv);
2999   else
3000   if (strcasecmp (cmd, "sfdisk_N") == 0 || strcasecmp (cmd, "sfdisk-N") == 0)
3001     return run_sfdisk_N (cmd, argc, argv);
3002   else
3003   if (strcasecmp (cmd, "sfdisk_l") == 0 || strcasecmp (cmd, "sfdisk-l") == 0)
3004     return run_sfdisk_l (cmd, argc, argv);
3005   else
3006   if (strcasecmp (cmd, "sfdisk_kernel_geometry") == 0 || strcasecmp (cmd, "sfdisk-kernel-geometry") == 0)
3007     return run_sfdisk_kernel_geometry (cmd, argc, argv);
3008   else
3009   if (strcasecmp (cmd, "sfdisk_disk_geometry") == 0 || strcasecmp (cmd, "sfdisk-disk-geometry") == 0)
3010     return run_sfdisk_disk_geometry (cmd, argc, argv);
3011   else
3012   if (strcasecmp (cmd, "vg_activate_all") == 0 || strcasecmp (cmd, "vg-activate-all") == 0)
3013     return run_vg_activate_all (cmd, argc, argv);
3014   else
3015   if (strcasecmp (cmd, "vg_activate") == 0 || strcasecmp (cmd, "vg-activate") == 0)
3016     return run_vg_activate (cmd, argc, argv);
3017   else
3018   if (strcasecmp (cmd, "lvresize") == 0)
3019     return run_lvresize (cmd, argc, argv);
3020   else
3021   if (strcasecmp (cmd, "resize2fs") == 0)
3022     return run_resize2fs (cmd, argc, argv);
3023   else
3024     {
3025       fprintf (stderr, "%s: unknown command\n", cmd);
3026       return -1;
3027     }
3028   return 0;
3029 }
3030