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