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