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