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