Generated code for the 'mkswap*' commands.
[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", "add-drive-ro", "add a drive in snapshot mode (read-only)");
37   printf ("%-20s %s\n", "aug-close", "close the current Augeas handle");
38   printf ("%-20s %s\n", "aug-defnode", "define an Augeas node");
39   printf ("%-20s %s\n", "aug-defvar", "define an Augeas variable");
40   printf ("%-20s %s\n", "aug-get", "look up the value of an Augeas path");
41   printf ("%-20s %s\n", "aug-init", "create a new Augeas handle");
42   printf ("%-20s %s\n", "aug-insert", "insert a sibling Augeas node");
43   printf ("%-20s %s\n", "aug-load", "load files into the tree");
44   printf ("%-20s %s\n", "aug-ls", "list Augeas nodes under a path");
45   printf ("%-20s %s\n", "aug-match", "return Augeas nodes which match path");
46   printf ("%-20s %s\n", "aug-mv", "move Augeas node");
47   printf ("%-20s %s\n", "aug-rm", "remove an Augeas path");
48   printf ("%-20s %s\n", "aug-save", "write all pending Augeas changes to disk");
49   printf ("%-20s %s\n", "aug-set", "set Augeas path to value");
50   printf ("%-20s %s\n", "blockdev-flushbufs", "flush device buffers");
51   printf ("%-20s %s\n", "blockdev-getbsz", "get blocksize of block device");
52   printf ("%-20s %s\n", "blockdev-getro", "is block device set to read-only");
53   printf ("%-20s %s\n", "blockdev-getsize64", "get total size of device in bytes");
54   printf ("%-20s %s\n", "blockdev-getss", "get sectorsize of block device");
55   printf ("%-20s %s\n", "blockdev-getsz", "get total size of device in 512-byte sectors");
56   printf ("%-20s %s\n", "blockdev-rereadpt", "reread partition table");
57   printf ("%-20s %s\n", "blockdev-setbsz", "set blocksize of block device");
58   printf ("%-20s %s\n", "blockdev-setro", "set block device to read-only");
59   printf ("%-20s %s\n", "blockdev-setrw", "set block device to read-write");
60   printf ("%-20s %s\n", "cat", "list the contents of a file");
61   printf ("%-20s %s\n", "checksum", "compute MD5, SHAx or CRC checksum of file");
62   printf ("%-20s %s\n", "chmod", "change file mode");
63   printf ("%-20s %s\n", "chown", "change file owner and group");
64   printf ("%-20s %s\n", "command", "run a command from the guest filesystem");
65   printf ("%-20s %s\n", "command-lines", "run a command, returning lines");
66   printf ("%-20s %s\n", "config", "add qemu parameters");
67   printf ("%-20s %s\n", "cp", "copy a file");
68   printf ("%-20s %s\n", "cp-a", "copy a file or directory recursively");
69   printf ("%-20s %s\n", "debug", "debugging and internals");
70   printf ("%-20s %s\n", "df", "report file system disk space usage");
71   printf ("%-20s %s\n", "df-h", "report file system disk space usage (human readable)");
72   printf ("%-20s %s\n", "dmesg", "return kernel messages");
73   printf ("%-20s %s\n", "download", "download a file to the local machine");
74   printf ("%-20s %s\n", "drop-caches", "drop kernel page cache, dentries and inodes");
75   printf ("%-20s %s\n", "du", "estimate file space usage");
76   printf ("%-20s %s\n", "e2fsck-f", "check an ext2/ext3 filesystem");
77   printf ("%-20s %s\n", "equal", "test if two files have equal contents");
78   printf ("%-20s %s\n", "exists", "test if file or directory exists");
79   printf ("%-20s %s\n", "file", "determine file type");
80   printf ("%-20s %s\n", "find", "find all files and directories");
81   printf ("%-20s %s\n", "fsck", "run the filesystem checker");
82   printf ("%-20s %s\n", "get-append", "get the additional kernel options");
83   printf ("%-20s %s\n", "get-autosync", "get autosync mode");
84   printf ("%-20s %s\n", "get-e2label", "get the ext2/3/4 filesystem label");
85   printf ("%-20s %s\n", "get-e2uuid", "get the ext2/3/4 filesystem UUID");
86   printf ("%-20s %s\n", "get-path", "get the search path");
87   printf ("%-20s %s\n", "get-qemu", "get the qemu binary");
88   printf ("%-20s %s\n", "get-state", "get the current state");
89   printf ("%-20s %s\n", "get-verbose", "get verbose mode");
90   printf ("%-20s %s\n", "glob-expand", "expand a wildcard path");
91   printf ("%-20s %s\n", "grub-install", "install GRUB");
92   printf ("%-20s %s\n", "head", "return first 10 lines of a file");
93   printf ("%-20s %s\n", "head-n", "return first N lines of a file");
94   printf ("%-20s %s\n", "hexdump", "dump a file in hexadecimal");
95   printf ("%-20s %s\n", "initrd-list", "list files in an initrd");
96   printf ("%-20s %s\n", "is-busy", "is busy processing a command");
97   printf ("%-20s %s\n", "is-config", "is in configuration state");
98   printf ("%-20s %s\n", "is-dir", "test if file exists");
99   printf ("%-20s %s\n", "is-file", "test if file exists");
100   printf ("%-20s %s\n", "is-launching", "is launching subprocess");
101   printf ("%-20s %s\n", "is-ready", "is ready to accept commands");
102   printf ("%-20s %s\n", "kill-subprocess", "kill the qemu subprocess");
103   printf ("%-20s %s\n", "launch", "launch the qemu subprocess");
104   printf ("%-20s %s\n", "list-devices", "list the block devices");
105   printf ("%-20s %s\n", "list-partitions", "list the partitions");
106   printf ("%-20s %s\n", "ll", "list the files in a directory (long format)");
107   printf ("%-20s %s\n", "ls", "list the files in a directory");
108   printf ("%-20s %s\n", "lstat", "get file information for a symbolic link");
109   printf ("%-20s %s\n", "lvcreate", "create an LVM volume group");
110   printf ("%-20s %s\n", "lvm-remove-all", "remove all LVM LVs, VGs and PVs");
111   printf ("%-20s %s\n", "lvremove", "remove an LVM logical volume");
112   printf ("%-20s %s\n", "lvresize", "resize an LVM logical volume");
113   printf ("%-20s %s\n", "lvs", "list the LVM logical volumes (LVs)");
114   printf ("%-20s %s\n", "lvs-full", "list the LVM logical volumes (LVs)");
115   printf ("%-20s %s\n", "mkdir", "create a directory");
116   printf ("%-20s %s\n", "mkdir-p", "create a directory and parents");
117   printf ("%-20s %s\n", "mkdtemp", "create a temporary directory");
118   printf ("%-20s %s\n", "mkfs", "make a filesystem");
119   printf ("%-20s %s\n", "mkswap", "create a swap partition");
120   printf ("%-20s %s\n", "mkswap-L", "create a swap partition with a label");
121   printf ("%-20s %s\n", "mkswap-U", "create a swap partition with an explicit UUID");
122   printf ("%-20s %s\n", "mount", "mount a guest disk at a position in the filesystem");
123   printf ("%-20s %s\n", "mount-loop", "mount a file using the loop device");
124   printf ("%-20s %s\n", "mount-options", "mount a guest disk with mount options");
125   printf ("%-20s %s\n", "mount-ro", "mount a guest disk, read-only");
126   printf ("%-20s %s\n", "mount-vfs", "mount a guest disk with mount options and vfstype");
127   printf ("%-20s %s\n", "mounts", "show mounted filesystems");
128   printf ("%-20s %s\n", "mv", "move a file");
129   printf ("%-20s %s\n", "ntfs-3g-probe", "probe NTFS volume");
130   printf ("%-20s %s\n", "ping-daemon", "ping the guest daemon");
131   printf ("%-20s %s\n", "pvcreate", "create an LVM physical volume");
132   printf ("%-20s %s\n", "pvremove", "remove an LVM physical volume");
133   printf ("%-20s %s\n", "pvresize", "resize an LVM physical volume");
134   printf ("%-20s %s\n", "pvs", "list the LVM physical volumes (PVs)");
135   printf ("%-20s %s\n", "pvs-full", "list the LVM physical volumes (PVs)");
136   printf ("%-20s %s\n", "read-lines", "read file as lines");
137   printf ("%-20s %s\n", "resize2fs", "resize an ext2/ext3 filesystem");
138   printf ("%-20s %s\n", "rm", "remove a file");
139   printf ("%-20s %s\n", "rm-rf", "remove a file or directory recursively");
140   printf ("%-20s %s\n", "rmdir", "remove a directory");
141   printf ("%-20s %s\n", "scrub-device", "scrub (securely wipe) a device");
142   printf ("%-20s %s\n", "scrub-file", "scrub (securely wipe) a file");
143   printf ("%-20s %s\n", "scrub-freespace", "scrub (securely wipe) free space");
144   printf ("%-20s %s\n", "set-append", "add options to kernel command line");
145   printf ("%-20s %s\n", "set-autosync", "set autosync mode");
146   printf ("%-20s %s\n", "set-e2label", "set the ext2/3/4 filesystem label");
147   printf ("%-20s %s\n", "set-e2uuid", "set the ext2/3/4 filesystem UUID");
148   printf ("%-20s %s\n", "set-path", "set the search path");
149   printf ("%-20s %s\n", "set-qemu", "set the qemu binary");
150   printf ("%-20s %s\n", "set-verbose", "set verbose mode");
151   printf ("%-20s %s\n", "sfdisk", "create partitions on a block device");
152   printf ("%-20s %s\n", "sfdisk-N", "modify a single partition on a block device");
153   printf ("%-20s %s\n", "sfdisk-disk-geometry", "display the disk geometry from the partition table");
154   printf ("%-20s %s\n", "sfdisk-kernel-geometry", "display the kernel geometry");
155   printf ("%-20s %s\n", "sfdisk-l", "display the partition table");
156   printf ("%-20s %s\n", "sh", "run a command via the shell");
157   printf ("%-20s %s\n", "sh-lines", "run a command via the shell returning lines");
158   printf ("%-20s %s\n", "sleep", "sleep for some seconds");
159   printf ("%-20s %s\n", "stat", "get file information");
160   printf ("%-20s %s\n", "statvfs", "get file system statistics");
161   printf ("%-20s %s\n", "strings", "print the printable strings in a file");
162   printf ("%-20s %s\n", "strings-e", "print the printable strings in a file");
163   printf ("%-20s %s\n", "sync", "sync disks, writes are flushed through to the disk image");
164   printf ("%-20s %s\n", "tail", "return last 10 lines of a file");
165   printf ("%-20s %s\n", "tail-n", "return last N lines of a file");
166   printf ("%-20s %s\n", "tar-in", "unpack tarfile to directory");
167   printf ("%-20s %s\n", "tar-out", "pack directory into tarfile");
168   printf ("%-20s %s\n", "tgz-in", "unpack compressed tarball to directory");
169   printf ("%-20s %s\n", "tgz-out", "pack directory into compressed tarball");
170   printf ("%-20s %s\n", "touch", "update file timestamps or create a new file");
171   printf ("%-20s %s\n", "tune2fs-l", "get ext2/ext3/ext4 superblock details");
172   printf ("%-20s %s\n", "umount", "unmount a filesystem");
173   printf ("%-20s %s\n", "umount-all", "unmount all filesystems");
174   printf ("%-20s %s\n", "upload", "upload a file from the local machine");
175   printf ("%-20s %s\n", "vg-activate", "activate or deactivate some volume groups");
176   printf ("%-20s %s\n", "vg-activate-all", "activate or deactivate all volume groups");
177   printf ("%-20s %s\n", "vgcreate", "create an LVM volume group");
178   printf ("%-20s %s\n", "vgremove", "remove an LVM volume group");
179   printf ("%-20s %s\n", "vgs", "list the LVM volume groups (VGs)");
180   printf ("%-20s %s\n", "vgs-full", "list the LVM volume groups (VGs)");
181   printf ("%-20s %s\n", "wc-c", "count characters in a file");
182   printf ("%-20s %s\n", "wc-l", "count lines in a file");
183   printf ("%-20s %s\n", "wc-w", "count words in a file");
184   printf ("%-20s %s\n", "write-file", "create a file");
185   printf ("%-20s %s\n", "zero", "write zeroes to the device");
186   printf ("%-20s %s\n", "zerofree", "zero unused inodes and disk blocks on ext2/3 filesystem");
187   printf ("    Use -h <cmd> / help <cmd> to show detailed help for a command.\n");
188 }
189
190 void display_command (const char *cmd)
191 {
192   if (strcasecmp (cmd, "launch") == 0 || strcasecmp (cmd, "run") == 0)
193     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.");
194   else
195   if (strcasecmp (cmd, "kill_subprocess") == 0 || strcasecmp (cmd, "kill-subprocess") == 0)
196     pod2text ("kill-subprocess - kill the qemu subprocess", " kill-subprocess\n\nThis kills the qemu subprocess.  You should never need to call this.");
197   else
198   if (strcasecmp (cmd, "add_drive") == 0 || strcasecmp (cmd, "add-drive") == 0 || strcasecmp (cmd, "add") == 0)
199     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,cache=off>.\n\nNote that this call checks for the existence of C<filename>.  This\nstops you from specifying other types of drive which are supported\nby qemu such as C<nbd:> and C<http:> URLs.  To specify those, use\nthe general C<config> call instead.\n\nYou can use 'add' as an alias for this command.");
200   else
201   if (strcasecmp (cmd, "add_cdrom") == 0 || strcasecmp (cmd, "add-cdrom") == 0 || strcasecmp (cmd, "cdrom") == 0)
202     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\nNote that this call checks for the existence of C<filename>.  This\nstops you from specifying other types of drive which are supported\nby qemu such as C<nbd:> and C<http:> URLs.  To specify those, use\nthe general C<config> call instead.\n\nYou can use 'cdrom' as an alias for this command.");
203   else
204   if (strcasecmp (cmd, "add_drive_ro") == 0 || strcasecmp (cmd, "add-drive-ro") == 0 || strcasecmp (cmd, "add-ro") == 0)
205     pod2text ("add-drive-ro - add a drive in snapshot mode (read-only)", " add-drive-ro <filename>\n\nThis adds a drive in snapshot mode, making it effectively\nread-only.\n\nNote that writes to the device are allowed, and will be seen for\nthe duration of the guestfs handle, but they are written\nto a temporary file which is discarded as soon as the guestfs\nhandle is closed.  We don't currently have any method to enable\nchanges to be committed, although qemu can support this.\n\nThis is equivalent to the qemu parameter\nC<-drive file=filename,snapshot=on>.\n\nNote that this call checks for the existence of C<filename>.  This\nstops you from specifying other types of drive which are supported\nby qemu such as C<nbd:> and C<http:> URLs.  To specify those, use\nthe general C<config> call instead.\n\nYou can use 'add-ro' as an alias for this command.");
206   else
207   if (strcasecmp (cmd, "config") == 0)
208     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.");
209   else
210   if (strcasecmp (cmd, "set_qemu") == 0 || strcasecmp (cmd, "set-qemu") == 0 || strcasecmp (cmd, "qemu") == 0)
211     pod2text ("set-qemu - set the qemu binary", " set-qemu <qemu>\n\nSet the qemu binary that we will use.\n\nThe default is chosen when the library was compiled by the\nconfigure script.\n\nYou can also override this by setting the C<LIBGUESTFS_QEMU>\nenvironment variable.\n\nSetting C<qemu> to C<NULL> restores the default qemu binary.\n\nYou can use 'qemu' as an alias for this command.");
212   else
213   if (strcasecmp (cmd, "get_qemu") == 0 || strcasecmp (cmd, "get-qemu") == 0)
214     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.");
215   else
216   if (strcasecmp (cmd, "set_path") == 0 || strcasecmp (cmd, "set-path") == 0 || strcasecmp (cmd, "path") == 0)
217     pod2text ("set-path - set the search path", " set-path <path>\n\nSet the path that libguestfs searches for kernel and initrd.img.\n\nThe default is C<$libdir/guestfs> unless overridden by setting\nC<LIBGUESTFS_PATH> environment variable.\n\nSetting C<path> to C<NULL> restores the default path.\n\nYou can use 'path' as an alias for this command.");
218   else
219   if (strcasecmp (cmd, "get_path") == 0 || strcasecmp (cmd, "get-path") == 0)
220     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.");
221   else
222   if (strcasecmp (cmd, "set_append") == 0 || strcasecmp (cmd, "set-append") == 0 || strcasecmp (cmd, "append") == 0)
223     pod2text ("set-append - add options to kernel command line", " set-append <append>\n\nThis function is used to add additional options to the\nguest kernel command line.\n\nThe default is C<NULL> unless overridden by setting\nC<LIBGUESTFS_APPEND> environment variable.\n\nSetting C<append> to C<NULL> means I<no> additional options\nare passed (libguestfs always adds a few of its own).\n\nYou can use 'append' as an alias for this command.");
224   else
225   if (strcasecmp (cmd, "get_append") == 0 || strcasecmp (cmd, "get-append") == 0)
226     pod2text ("get-append - get the additional kernel options", " get-append\n\nReturn the additional kernel options which are added to the\nguest kernel command line.\n\nIf C<NULL> then no options are added.");
227   else
228   if (strcasecmp (cmd, "set_autosync") == 0 || strcasecmp (cmd, "set-autosync") == 0 || strcasecmp (cmd, "autosync") == 0)
229     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.");
230   else
231   if (strcasecmp (cmd, "get_autosync") == 0 || strcasecmp (cmd, "get-autosync") == 0)
232     pod2text ("get-autosync - get autosync mode", " get-autosync\n\nGet the autosync flag.");
233   else
234   if (strcasecmp (cmd, "set_verbose") == 0 || strcasecmp (cmd, "set-verbose") == 0 || strcasecmp (cmd, "verbose") == 0)
235     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.");
236   else
237   if (strcasecmp (cmd, "get_verbose") == 0 || strcasecmp (cmd, "get-verbose") == 0)
238     pod2text ("get-verbose - get verbose mode", " get-verbose\n\nThis returns the verbose messages flag.");
239   else
240   if (strcasecmp (cmd, "is_ready") == 0 || strcasecmp (cmd, "is-ready") == 0)
241     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)>.");
242   else
243   if (strcasecmp (cmd, "is_config") == 0 || strcasecmp (cmd, "is-config") == 0)
244     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)>.");
245   else
246   if (strcasecmp (cmd, "is_launching") == 0 || strcasecmp (cmd, "is-launching") == 0)
247     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)>.");
248   else
249   if (strcasecmp (cmd, "is_busy") == 0 || strcasecmp (cmd, "is-busy") == 0)
250     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)>.");
251   else
252   if (strcasecmp (cmd, "get_state") == 0 || strcasecmp (cmd, "get-state") == 0)
253     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)>.");
254   else
255   if (strcasecmp (cmd, "mount") == 0)
256     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.");
257   else
258   if (strcasecmp (cmd, "sync") == 0)
259     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.");
260   else
261   if (strcasecmp (cmd, "touch") == 0)
262     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.");
263   else
264   if (strcasecmp (cmd, "cat") == 0)
265     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.");
266   else
267   if (strcasecmp (cmd, "ll") == 0)
268     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.");
269   else
270   if (strcasecmp (cmd, "ls") == 0)
271     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.");
272   else
273   if (strcasecmp (cmd, "list_devices") == 0 || strcasecmp (cmd, "list-devices") == 0)
274     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>");
275   else
276   if (strcasecmp (cmd, "list_partitions") == 0 || strcasecmp (cmd, "list-partitions") == 0)
277     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>.");
278   else
279   if (strcasecmp (cmd, "pvs") == 0)
280     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>.");
281   else
282   if (strcasecmp (cmd, "vgs") == 0)
283     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>.");
284   else
285   if (strcasecmp (cmd, "lvs") == 0)
286     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>.");
287   else
288   if (strcasecmp (cmd, "pvs_full") == 0 || strcasecmp (cmd, "pvs-full") == 0)
289     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.");
290   else
291   if (strcasecmp (cmd, "vgs_full") == 0 || strcasecmp (cmd, "vgs-full") == 0)
292     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.");
293   else
294   if (strcasecmp (cmd, "lvs_full") == 0 || strcasecmp (cmd, "lvs-full") == 0)
295     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.");
296   else
297   if (strcasecmp (cmd, "read_lines") == 0 || strcasecmp (cmd, "read-lines") == 0)
298     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.");
299   else
300   if (strcasecmp (cmd, "aug_init") == 0 || strcasecmp (cmd, "aug-init") == 0)
301     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/>.");
302   else
303   if (strcasecmp (cmd, "aug_close") == 0 || strcasecmp (cmd, "aug-close") == 0)
304     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.");
305   else
306   if (strcasecmp (cmd, "aug_defvar") == 0 || strcasecmp (cmd, "aug-defvar") == 0)
307     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.");
308   else
309   if (strcasecmp (cmd, "aug_defnode") == 0 || strcasecmp (cmd, "aug-defnode") == 0)
310     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.");
311   else
312   if (strcasecmp (cmd, "aug_get") == 0 || strcasecmp (cmd, "aug-get") == 0)
313     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.");
314   else
315   if (strcasecmp (cmd, "aug_set") == 0 || strcasecmp (cmd, "aug-set") == 0)
316     pod2text ("aug-set - set Augeas path to value", " aug-set <path> <val>\n\nSet the value associated with C<path> to C<value>.");
317   else
318   if (strcasecmp (cmd, "aug_insert") == 0 || strcasecmp (cmd, "aug-insert") == 0)
319     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]>.");
320   else
321   if (strcasecmp (cmd, "aug_rm") == 0 || strcasecmp (cmd, "aug-rm") == 0)
322     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.");
323   else
324   if (strcasecmp (cmd, "aug_mv") == 0 || strcasecmp (cmd, "aug-mv") == 0)
325     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.");
326   else
327   if (strcasecmp (cmd, "aug_match") == 0 || strcasecmp (cmd, "aug-match") == 0)
328     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.");
329   else
330   if (strcasecmp (cmd, "aug_save") == 0 || strcasecmp (cmd, "aug-save") == 0)
331     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.");
332   else
333   if (strcasecmp (cmd, "aug_load") == 0 || strcasecmp (cmd, "aug-load") == 0)
334     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.");
335   else
336   if (strcasecmp (cmd, "aug_ls") == 0 || strcasecmp (cmd, "aug-ls") == 0)
337     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.");
338   else
339   if (strcasecmp (cmd, "rm") == 0)
340     pod2text ("rm - remove a file", " rm <path>\n\nRemove the single file C<path>.");
341   else
342   if (strcasecmp (cmd, "rmdir") == 0)
343     pod2text ("rmdir - remove a directory", " rmdir <path>\n\nRemove the single directory C<path>.");
344   else
345   if (strcasecmp (cmd, "rm_rf") == 0 || strcasecmp (cmd, "rm-rf") == 0)
346     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.");
347   else
348   if (strcasecmp (cmd, "mkdir") == 0)
349     pod2text ("mkdir - create a directory", " mkdir <path>\n\nCreate a directory named C<path>.");
350   else
351   if (strcasecmp (cmd, "mkdir_p") == 0 || strcasecmp (cmd, "mkdir-p") == 0)
352     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.");
353   else
354   if (strcasecmp (cmd, "chmod") == 0)
355     pod2text ("chmod - change file mode", " chmod <mode> <path>\n\nChange the mode (permissions) of C<path> to C<mode>.  Only\nnumeric modes are supported.");
356   else
357   if (strcasecmp (cmd, "chown") == 0)
358     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).");
359   else
360   if (strcasecmp (cmd, "exists") == 0)
361     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>.");
362   else
363   if (strcasecmp (cmd, "is_file") == 0 || strcasecmp (cmd, "is-file") == 0)
364     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>.");
365   else
366   if (strcasecmp (cmd, "is_dir") == 0 || strcasecmp (cmd, "is-dir") == 0)
367     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>.");
368   else
369   if (strcasecmp (cmd, "pvcreate") == 0)
370     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>.");
371   else
372   if (strcasecmp (cmd, "vgcreate") == 0)
373     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>.");
374   else
375   if (strcasecmp (cmd, "lvcreate") == 0)
376     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.");
377   else
378   if (strcasecmp (cmd, "mkfs") == 0)
379     pod2text ("mkfs - make a filesystem", " mkfs <fstype> <device>\n\nThis creates a filesystem on C<device> (usually a partition\nor LVM logical volume).  The filesystem type is C<fstype>, for\nexample C<ext3>.");
380   else
381   if (strcasecmp (cmd, "sfdisk") == 0)
382     pod2text ("sfdisk - create partitions on a block device", " sfdisk <device> <cyls> <heads> <sectors> <lines>\n\nThis is a direct interface to the L<sfdisk(8)> program for creating\npartitions on block devices.\n\nC<device> should be a block device, for example C</dev/sda>.\n\nC<cyls>, C<heads> and C<sectors> are the number of cylinders, heads\nand sectors on the device, which are passed directly to sfdisk as\nthe I<-C>, I<-H> and I<-S> parameters.  If you pass C<0> for any\nof these, then the corresponding parameter is omitted.  Usually for\n'large' disks, you can just pass C<0> for these, but for small\n(floppy-sized) disks, sfdisk (or rather, the kernel) cannot work\nout the right geometry and you will need to tell it.\n\nC<lines> is a list of lines that we feed to C<sfdisk>.  For more\ninformation refer to the L<sfdisk(8)> manpage.\n\nTo create a single partition occupying the whole disk, you would\npass C<lines> as a single element list, when the single element being\nthe string C<,> (comma).\n\nSee also: C<sfdisk_l>, C<sfdisk_N>\n\nB<This command is dangerous.  Without careful use you\ncan easily destroy all your data>.");
383   else
384   if (strcasecmp (cmd, "write_file") == 0 || strcasecmp (cmd, "write-file") == 0)
385     pod2text ("write-file - create a file", " write-file <path> <content> <size>\n\nThis call creates a file called C<path>.  The contents of the\nfile is the string C<content> (which can contain any 8 bit data),\nwith length C<size>.\n\nAs a special case, if C<size> is C<0>\nthen the length is calculated using C<strlen> (so in this case\nthe content cannot contain embedded ASCII NULs).\n\nI<NB.> Owing to a bug, writing content containing ASCII NUL\ncharacters does I<not> work, even if the length is specified.\nWe hope to resolve this bug in a future version.  In the meantime\nuse C<upload>.\n\nBecause of the message protocol, there is a transfer limit \nof somewhere between 2MB and 4MB.  To transfer large files you should use\nFTP.");
386   else
387   if (strcasecmp (cmd, "umount") == 0 || strcasecmp (cmd, "unmount") == 0)
388     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.");
389   else
390   if (strcasecmp (cmd, "mounts") == 0)
391     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.");
392   else
393   if (strcasecmp (cmd, "umount_all") == 0 || strcasecmp (cmd, "umount-all") == 0 || strcasecmp (cmd, "unmount-all") == 0)
394     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.");
395   else
396   if (strcasecmp (cmd, "lvm_remove_all") == 0 || strcasecmp (cmd, "lvm-remove-all") == 0)
397     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>.");
398   else
399   if (strcasecmp (cmd, "file") == 0)
400     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).");
401   else
402   if (strcasecmp (cmd, "command") == 0)
403     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).  Note that\nthe command runs directly, and is I<not> invoked via\nthe shell (see C<sh>).\n\nThe return value is anything printed to I<stdout> by\nthe command.\n\nIf the command returns a non-zero exit status, then\nthis function returns an error message.  The error message\nstring is the content of I<stderr> from the command.\n\nThe C<$PATH> environment variable will contain at least\nC</usr/bin> and C</bin>.  If you require a program from\nanother location, you should provide the full path in the\nfirst parameter.\n\nShared libraries and data files required by the program\nmust be available on filesystems which are mounted in the\ncorrect places.  It is the caller's responsibility to ensure\nall filesystems that are needed are mounted at the right\nlocations.\n\nBecause of the message protocol, there is a transfer limit \nof somewhere between 2MB and 4MB.  To transfer large files you should use\nFTP.");
404   else
405   if (strcasecmp (cmd, "command_lines") == 0 || strcasecmp (cmd, "command-lines") == 0)
406     pod2text ("command-lines - run a command, returning lines", " command-lines <arguments>\n\nThis is the same as C<command>, but splits the\nresult into a list of lines.\n\nSee also: C<sh_lines>\n\nBecause of the message protocol, there is a transfer limit \nof somewhere between 2MB and 4MB.  To transfer large files you should use\nFTP.");
407   else
408   if (strcasecmp (cmd, "stat") == 0)
409     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.");
410   else
411   if (strcasecmp (cmd, "lstat") == 0)
412     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.");
413   else
414   if (strcasecmp (cmd, "statvfs") == 0)
415     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.");
416   else
417   if (strcasecmp (cmd, "tune2fs_l") == 0 || strcasecmp (cmd, "tune2fs-l") == 0)
418     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.");
419   else
420   if (strcasecmp (cmd, "blockdev_setro") == 0 || strcasecmp (cmd, "blockdev-setro") == 0)
421     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.");
422   else
423   if (strcasecmp (cmd, "blockdev_setrw") == 0 || strcasecmp (cmd, "blockdev-setrw") == 0)
424     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.");
425   else
426   if (strcasecmp (cmd, "blockdev_getro") == 0 || strcasecmp (cmd, "blockdev-getro") == 0)
427     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.");
428   else
429   if (strcasecmp (cmd, "blockdev_getss") == 0 || strcasecmp (cmd, "blockdev-getss") == 0)
430     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.");
431   else
432   if (strcasecmp (cmd, "blockdev_getbsz") == 0 || strcasecmp (cmd, "blockdev-getbsz") == 0)
433     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.");
434   else
435   if (strcasecmp (cmd, "blockdev_setbsz") == 0 || strcasecmp (cmd, "blockdev-setbsz") == 0)
436     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.");
437   else
438   if (strcasecmp (cmd, "blockdev_getsz") == 0 || strcasecmp (cmd, "blockdev-getsz") == 0)
439     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.");
440   else
441   if (strcasecmp (cmd, "blockdev_getsize64") == 0 || strcasecmp (cmd, "blockdev-getsize64") == 0)
442     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.");
443   else
444   if (strcasecmp (cmd, "blockdev_flushbufs") == 0 || strcasecmp (cmd, "blockdev-flushbufs") == 0)
445     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.");
446   else
447   if (strcasecmp (cmd, "blockdev_rereadpt") == 0 || strcasecmp (cmd, "blockdev-rereadpt") == 0)
448     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.");
449   else
450   if (strcasecmp (cmd, "upload") == 0)
451     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>.");
452   else
453   if (strcasecmp (cmd, "download") == 0)
454     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>.");
455   else
456   if (strcasecmp (cmd, "checksum") == 0)
457     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.");
458   else
459   if (strcasecmp (cmd, "tar_in") == 0 || strcasecmp (cmd, "tar-in") == 0)
460     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>.");
461   else
462   if (strcasecmp (cmd, "tar_out") == 0 || strcasecmp (cmd, "tar-out") == 0)
463     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>.");
464   else
465   if (strcasecmp (cmd, "tgz_in") == 0 || strcasecmp (cmd, "tgz-in") == 0)
466     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>.");
467   else
468   if (strcasecmp (cmd, "tgz_out") == 0 || strcasecmp (cmd, "tgz-out") == 0)
469     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>.");
470   else
471   if (strcasecmp (cmd, "mount_ro") == 0 || strcasecmp (cmd, "mount-ro") == 0)
472     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.");
473   else
474   if (strcasecmp (cmd, "mount_options") == 0 || strcasecmp (cmd, "mount-options") == 0)
475     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.");
476   else
477   if (strcasecmp (cmd, "mount_vfs") == 0 || strcasecmp (cmd, "mount-vfs") == 0)
478     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.");
479   else
480   if (strcasecmp (cmd, "debug") == 0)
481     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.");
482   else
483   if (strcasecmp (cmd, "lvremove") == 0)
484     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>.");
485   else
486   if (strcasecmp (cmd, "vgremove") == 0)
487     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).");
488   else
489   if (strcasecmp (cmd, "pvremove") == 0)
490     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.");
491   else
492   if (strcasecmp (cmd, "set_e2label") == 0 || strcasecmp (cmd, "set-e2label") == 0)
493     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.");
494   else
495   if (strcasecmp (cmd, "get_e2label") == 0 || strcasecmp (cmd, "get-e2label") == 0)
496     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>.");
497   else
498   if (strcasecmp (cmd, "set_e2uuid") == 0 || strcasecmp (cmd, "set-e2uuid") == 0)
499     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.");
500   else
501   if (strcasecmp (cmd, "get_e2uuid") == 0 || strcasecmp (cmd, "get-e2uuid") == 0)
502     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>.");
503   else
504   if (strcasecmp (cmd, "fsck") == 0)
505     pod2text ("fsck - run the filesystem checker", " fsck <fstype> <device>\n\nThis runs the filesystem checker (fsck) on C<device> which\nshould have filesystem type C<fstype>.\n\nThe returned integer is the status.  See L<fsck(8)> for the\nlist of status codes from C<fsck>.\n\nNotes:\n\n=over 4\n\n=item *\n\nMultiple status codes can be summed together.\n\n=item *\n\nA non-zero return code can mean \"success\", for example if\nerrors have been corrected on the filesystem.\n\n=item *\n\nChecking or repairing NTFS volumes is not supported\n(by linux-ntfs).\n\n=back\n\nThis command is entirely equivalent to running C<fsck -a -t fstype device>.");
506   else
507   if (strcasecmp (cmd, "zero") == 0)
508     pod2text ("zero - write zeroes to the device", " zero <device>\n\nThis command writes zeroes over the first few blocks of C<device>.\n\nHow many blocks are zeroed isn't specified (but it's I<not> enough\nto securely wipe the device).  It should be sufficient to remove\nany partition tables, filesystem superblocks and so on.\n\nSee also: C<scrub_device>.");
509   else
510   if (strcasecmp (cmd, "grub_install") == 0 || strcasecmp (cmd, "grub-install") == 0)
511     pod2text ("grub-install - install GRUB", " grub-install <root> <device>\n\nThis command installs GRUB (the Grand Unified Bootloader) on\nC<device>, with the root directory being C<root>.");
512   else
513   if (strcasecmp (cmd, "cp") == 0)
514     pod2text ("cp - copy a file", " cp <src> <dest>\n\nThis copies a file from C<src> to C<dest> where C<dest> is\neither a destination filename or destination directory.");
515   else
516   if (strcasecmp (cmd, "cp_a") == 0 || strcasecmp (cmd, "cp-a") == 0)
517     pod2text ("cp-a - copy a file or directory recursively", " cp-a <src> <dest>\n\nThis copies a file or directory from C<src> to C<dest>\nrecursively using the C<cp -a> command.");
518   else
519   if (strcasecmp (cmd, "mv") == 0)
520     pod2text ("mv - move a file", " mv <src> <dest>\n\nThis moves a file from C<src> to C<dest> where C<dest> is\neither a destination filename or destination directory.");
521   else
522   if (strcasecmp (cmd, "drop_caches") == 0 || strcasecmp (cmd, "drop-caches") == 0)
523     pod2text ("drop-caches - drop kernel page cache, dentries and inodes", " drop-caches <whattodrop>\n\nThis instructs the guest kernel to drop its page cache,\nand/or dentries and inode caches.  The parameter C<whattodrop>\ntells the kernel what precisely to drop, see\nL<http://linux-mm.org/Drop_Caches>\n\nSetting C<whattodrop> to 3 should drop everything.\n\nThis automatically calls L<sync(2)> before the operation,\nso that the maximum guest memory is freed.");
524   else
525   if (strcasecmp (cmd, "dmesg") == 0)
526     pod2text ("dmesg - return kernel messages", " dmesg\n\nThis returns the kernel messages (C<dmesg> output) from\nthe guest kernel.  This is sometimes useful for extended\ndebugging of problems.\n\nAnother way to get the same information is to enable\nverbose messages with C<set_verbose> or by setting\nthe environment variable C<LIBGUESTFS_DEBUG=1> before\nrunning the program.");
527   else
528   if (strcasecmp (cmd, "ping_daemon") == 0 || strcasecmp (cmd, "ping-daemon") == 0)
529     pod2text ("ping-daemon - ping the guest daemon", " ping-daemon\n\nThis is a test probe into the guestfs daemon running inside\nthe qemu subprocess.  Calling this function checks that the\ndaemon responds to the ping message, without affecting the daemon\nor attached block device(s) in any other way.");
530   else
531   if (strcasecmp (cmd, "equal") == 0)
532     pod2text ("equal - test if two files have equal contents", " equal <file1> <file2>\n\nThis compares the two files C<file1> and C<file2> and returns\ntrue if their content is exactly equal, or false otherwise.\n\nThe external L<cmp(1)> program is used for the comparison.");
533   else
534   if (strcasecmp (cmd, "strings") == 0)
535     pod2text ("strings - print the printable strings in a file", " strings <path>\n\nThis runs the L<strings(1)> command on a file and returns\nthe list of printable strings found.\n\nBecause of the message protocol, there is a transfer limit \nof somewhere between 2MB and 4MB.  To transfer large files you should use\nFTP.");
536   else
537   if (strcasecmp (cmd, "strings_e") == 0 || strcasecmp (cmd, "strings-e") == 0)
538     pod2text ("strings-e - print the printable strings in a file", " strings-e <encoding> <path>\n\nThis is like the C<strings> command, but allows you to\nspecify the encoding.\n\nSee the L<strings(1)> manpage for the full list of encodings.\n\nCommonly useful encodings are C<l> (lower case L) which will\nshow strings inside Windows/x86 files.\n\nThe returned strings are transcoded to UTF-8.\n\nBecause of the message protocol, there is a transfer limit \nof somewhere between 2MB and 4MB.  To transfer large files you should use\nFTP.");
539   else
540   if (strcasecmp (cmd, "hexdump") == 0)
541     pod2text ("hexdump - dump a file in hexadecimal", " hexdump <path>\n\nThis runs C<hexdump -C> on the given C<path>.  The result is\nthe human-readable, canonical hex dump of the file.\n\nBecause of the message protocol, there is a transfer limit \nof somewhere between 2MB and 4MB.  To transfer large files you should use\nFTP.");
542   else
543   if (strcasecmp (cmd, "zerofree") == 0)
544     pod2text ("zerofree - zero unused inodes and disk blocks on ext2/3 filesystem", " zerofree <device>\n\nThis runs the I<zerofree> program on C<device>.  This program\nclaims to zero unused inodes and disk blocks on an ext2/3\nfilesystem, thus making it possible to compress the filesystem\nmore effectively.\n\nYou should B<not> run this program if the filesystem is\nmounted.\n\nIt is possible that using this program can damage the filesystem\nor data on the filesystem.");
545   else
546   if (strcasecmp (cmd, "pvresize") == 0)
547     pod2text ("pvresize - resize an LVM physical volume", " pvresize <device>\n\nThis resizes (expands or shrinks) an existing LVM physical\nvolume to match the new size of the underlying device.");
548   else
549   if (strcasecmp (cmd, "sfdisk_N") == 0 || strcasecmp (cmd, "sfdisk-N") == 0)
550     pod2text ("sfdisk-N - modify a single partition on a block device", " sfdisk-N <device> <partnum> <cyls> <heads> <sectors> <line>\n\nThis runs L<sfdisk(8)> option to modify just the single\npartition C<n> (note: C<n> counts from 1).\n\nFor other parameters, see C<sfdisk>.  You should usually\npass C<0> for the cyls/heads/sectors parameters.\n\nB<This command is dangerous.  Without careful use you\ncan easily destroy all your data>.");
551   else
552   if (strcasecmp (cmd, "sfdisk_l") == 0 || strcasecmp (cmd, "sfdisk-l") == 0)
553     pod2text ("sfdisk-l - display the partition table", " sfdisk-l <device>\n\nThis displays the partition table on C<device>, in the\nhuman-readable output of the L<sfdisk(8)> command.  It is\nnot intended to be parsed.");
554   else
555   if (strcasecmp (cmd, "sfdisk_kernel_geometry") == 0 || strcasecmp (cmd, "sfdisk-kernel-geometry") == 0)
556     pod2text ("sfdisk-kernel-geometry - display the kernel geometry", " sfdisk-kernel-geometry <device>\n\nThis displays the kernel's idea of the geometry of C<device>.\n\nThe result is in human-readable format, and not designed to\nbe parsed.");
557   else
558   if (strcasecmp (cmd, "sfdisk_disk_geometry") == 0 || strcasecmp (cmd, "sfdisk-disk-geometry") == 0)
559     pod2text ("sfdisk-disk-geometry - display the disk geometry from the partition table", " sfdisk-disk-geometry <device>\n\nThis displays the disk geometry of C<device> read from the\npartition table.  Especially in the case where the underlying\nblock device has been resized, this can be different from the\nkernel's idea of the geometry (see C<sfdisk_kernel_geometry>).\n\nThe result is in human-readable format, and not designed to\nbe parsed.");
560   else
561   if (strcasecmp (cmd, "vg_activate_all") == 0 || strcasecmp (cmd, "vg-activate-all") == 0)
562     pod2text ("vg-activate-all - activate or deactivate all volume groups", " vg-activate-all <activate>\n\nThis command activates or (if C<activate> is false) deactivates\nall logical volumes in all volume groups.\nIf activated, then they are made known to the\nkernel, ie. they appear as C</dev/mapper> devices.  If deactivated,\nthen those devices disappear.\n\nThis command is the same as running C<vgchange -a y|n>");
563   else
564   if (strcasecmp (cmd, "vg_activate") == 0 || strcasecmp (cmd, "vg-activate") == 0)
565     pod2text ("vg-activate - activate or deactivate some volume groups", " vg-activate <activate> <volgroups>\n\nThis command activates or (if C<activate> is false) deactivates\nall logical volumes in the listed volume groups C<volgroups>.\nIf activated, then they are made known to the\nkernel, ie. they appear as C</dev/mapper> devices.  If deactivated,\nthen those devices disappear.\n\nThis command is the same as running C<vgchange -a y|n volgroups...>\n\nNote that if C<volgroups> is an empty list then B<all> volume groups\nare activated or deactivated.");
566   else
567   if (strcasecmp (cmd, "lvresize") == 0)
568     pod2text ("lvresize - resize an LVM logical volume", " lvresize <device> <mbytes>\n\nThis resizes (expands or shrinks) an existing LVM logical\nvolume to C<mbytes>.  When reducing, data in the reduced part\nis lost.");
569   else
570   if (strcasecmp (cmd, "resize2fs") == 0)
571     pod2text ("resize2fs - resize an ext2/ext3 filesystem", " resize2fs <device>\n\nThis resizes an ext2 or ext3 filesystem to match the size of\nthe underlying device.\n\nI<Note:> It is sometimes required that you run C<e2fsck_f>\non the C<device> before calling this command.  For unknown reasons\nC<resize2fs> sometimes gives an error about this and sometimes not.\nIn any case, it is always safe to call C<e2fsck_f> before\ncalling this function.");
572   else
573   if (strcasecmp (cmd, "find") == 0)
574     pod2text ("find - find all files and directories", " find <directory>\n\nThis command lists out all files and directories, recursively,\nstarting at C<directory>.  It is essentially equivalent to\nrunning the shell command C<find directory -print> but some\npost-processing happens on the output, described below.\n\nThis returns a list of strings I<without any prefix>.  Thus\nif the directory structure was:\n\n /tmp/a\n /tmp/b\n /tmp/c/d\n\nthen the returned list from C<find> C</tmp> would be\n4 elements:\n\n a\n b\n c\n c/d\n\nIf C<directory> is not a directory, then this command returns\nan error.\n\nThe returned list is sorted.");
575   else
576   if (strcasecmp (cmd, "e2fsck_f") == 0 || strcasecmp (cmd, "e2fsck-f") == 0)
577     pod2text ("e2fsck-f - check an ext2/ext3 filesystem", " e2fsck-f <device>\n\nThis runs C<e2fsck -p -f device>, ie. runs the ext2/ext3\nfilesystem checker on C<device>, noninteractively (C<-p>),\neven if the filesystem appears to be clean (C<-f>).\n\nThis command is only needed because of C<resize2fs>\n(q.v.).  Normally you should use C<fsck>.");
578   else
579   if (strcasecmp (cmd, "sleep") == 0)
580     pod2text ("sleep - sleep for some seconds", " sleep <secs>\n\nSleep for C<secs> seconds.");
581   else
582   if (strcasecmp (cmd, "ntfs_3g_probe") == 0 || strcasecmp (cmd, "ntfs-3g-probe") == 0)
583     pod2text ("ntfs-3g-probe - probe NTFS volume", " ntfs-3g-probe <rw> <device>\n\nThis command runs the L<ntfs-3g.probe(8)> command which probes\nan NTFS C<device> for mountability.  (Not all NTFS volumes can\nbe mounted read-write, and some cannot be mounted at all).\n\nC<rw> is a boolean flag.  Set it to true if you want to test\nif the volume can be mounted read-write.  Set it to false if\nyou want to test if the volume can be mounted read-only.\n\nThe return value is an integer which C<0> if the operation\nwould succeed, or some non-zero value documented in the\nL<ntfs-3g.probe(8)> manual page.");
584   else
585   if (strcasecmp (cmd, "sh") == 0)
586     pod2text ("sh - run a command via the shell", " sh <command>\n\nThis call runs a command from the guest filesystem via the\nguest's C</bin/sh>.\n\nThis is like C<command>, but passes the command to:\n\n /bin/sh -c \"command\"\n\nDepending on the guest's shell, this usually results in\nwildcards being expanded, shell expressions being interpolated\nand so on.\n\nAll the provisos about C<command> apply to this call.");
587   else
588   if (strcasecmp (cmd, "sh_lines") == 0 || strcasecmp (cmd, "sh-lines") == 0)
589     pod2text ("sh-lines - run a command via the shell returning lines", " sh-lines <command>\n\nThis is the same as C<sh>, but splits the result\ninto a list of lines.\n\nSee also: C<command_lines>");
590   else
591   if (strcasecmp (cmd, "glob_expand") == 0 || strcasecmp (cmd, "glob-expand") == 0)
592     pod2text ("glob-expand - expand a wildcard path", " glob-expand <pattern>\n\nThis command searches for all the pathnames matching\nC<pattern> according to the wildcard expansion rules\nused by the shell.\n\nIf no paths match, then this returns an empty list\n(note: not an error).\n\nIt is just a wrapper around the C L<glob(3)> function\nwith flags C<GLOB_MARK|GLOB_BRACE>.\nSee that manual page for more details.");
593   else
594   if (strcasecmp (cmd, "scrub_device") == 0 || strcasecmp (cmd, "scrub-device") == 0)
595     pod2text ("scrub-device - scrub (securely wipe) a device", " scrub-device <device>\n\nThis command writes patterns over C<device> to make data retrieval\nmore difficult.\n\nIt is an interface to the L<scrub(1)> program.  See that\nmanual page for more details.\n\nB<This command is dangerous.  Without careful use you\ncan easily destroy all your data>.");
596   else
597   if (strcasecmp (cmd, "scrub_file") == 0 || strcasecmp (cmd, "scrub-file") == 0)
598     pod2text ("scrub-file - scrub (securely wipe) a file", " scrub-file <file>\n\nThis command writes patterns over a file to make data retrieval\nmore difficult.\n\nThe file is I<removed> after scrubbing.\n\nIt is an interface to the L<scrub(1)> program.  See that\nmanual page for more details.");
599   else
600   if (strcasecmp (cmd, "scrub_freespace") == 0 || strcasecmp (cmd, "scrub-freespace") == 0)
601     pod2text ("scrub-freespace - scrub (securely wipe) free space", " scrub-freespace <dir>\n\nThis command creates the directory C<dir> and then fills it\nwith files until the filesystem is full, and scrubs the files\nas for C<scrub_file>, and deletes them.\nThe intention is to scrub any free space on the partition\ncontaining C<dir>.\n\nIt is an interface to the L<scrub(1)> program.  See that\nmanual page for more details.");
602   else
603   if (strcasecmp (cmd, "mkdtemp") == 0)
604     pod2text ("mkdtemp - create a temporary directory", " mkdtemp <template>\n\nThis command creates a temporary directory.  The\nC<template> parameter should be a full pathname for the\ntemporary directory name with the final six characters being\n\"XXXXXX\".\n\nFor example: \"/tmp/myprogXXXXXX\" or \"/Temp/myprogXXXXXX\",\nthe second one being suitable for Windows filesystems.\n\nThe name of the temporary directory that was created\nis returned.\n\nThe temporary directory is created with mode 0700\nand is owned by root.\n\nThe caller is responsible for deleting the temporary\ndirectory and its contents after use.\n\nSee also: L<mkdtemp(3)>");
605   else
606   if (strcasecmp (cmd, "wc_l") == 0 || strcasecmp (cmd, "wc-l") == 0)
607     pod2text ("wc-l - count lines in a file", " wc-l <path>\n\nThis command counts the lines in a file, using the\nC<wc -l> external command.");
608   else
609   if (strcasecmp (cmd, "wc_w") == 0 || strcasecmp (cmd, "wc-w") == 0)
610     pod2text ("wc-w - count words in a file", " wc-w <path>\n\nThis command counts the words in a file, using the\nC<wc -w> external command.");
611   else
612   if (strcasecmp (cmd, "wc_c") == 0 || strcasecmp (cmd, "wc-c") == 0)
613     pod2text ("wc-c - count characters in a file", " wc-c <path>\n\nThis command counts the characters in a file, using the\nC<wc -c> external command.");
614   else
615   if (strcasecmp (cmd, "head") == 0)
616     pod2text ("head - return first 10 lines of a file", " head <path>\n\nThis command returns up to the first 10 lines of a file as\na list of strings.\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.");
617   else
618   if (strcasecmp (cmd, "head_n") == 0 || strcasecmp (cmd, "head-n") == 0)
619     pod2text ("head-n - return first N lines of a file", " head-n <nrlines> <path>\n\nIf the parameter C<nrlines> is a positive number, this returns the first\nC<nrlines> lines of the file C<path>.\n\nIf the parameter C<nrlines> is a negative number, this returns lines\nfrom the file C<path>, excluding the last C<nrlines> lines.\n\nIf the parameter C<nrlines> is zero, this returns an empty list.\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.");
620   else
621   if (strcasecmp (cmd, "tail") == 0)
622     pod2text ("tail - return last 10 lines of a file", " tail <path>\n\nThis command returns up to the last 10 lines of a file as\na list of strings.\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.");
623   else
624   if (strcasecmp (cmd, "tail_n") == 0 || strcasecmp (cmd, "tail-n") == 0)
625     pod2text ("tail-n - return last N lines of a file", " tail-n <nrlines> <path>\n\nIf the parameter C<nrlines> is a positive number, this returns the last\nC<nrlines> lines of the file C<path>.\n\nIf the parameter C<nrlines> is a negative number, this returns lines\nfrom the file C<path>, starting with the C<-nrlines>th line.\n\nIf the parameter C<nrlines> is zero, this returns an empty list.\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.");
626   else
627   if (strcasecmp (cmd, "df") == 0)
628     pod2text ("df - report file system disk space usage", " df\n\nThis command runs the C<df> command to report disk space used.\n\nThis command is mostly useful for interactive sessions.  It\nis I<not> intended that you try to parse the output string.\nUse C<statvfs> from programs.");
629   else
630   if (strcasecmp (cmd, "df_h") == 0 || strcasecmp (cmd, "df-h") == 0)
631     pod2text ("df-h - report file system disk space usage (human readable)", " df-h\n\nThis command runs the C<df -h> command to report disk space used\nin human-readable format.\n\nThis command is mostly useful for interactive sessions.  It\nis I<not> intended that you try to parse the output string.\nUse C<statvfs> from programs.");
632   else
633   if (strcasecmp (cmd, "du") == 0)
634     pod2text ("du - estimate file space usage", " du <path>\n\nThis command runs the C<du -s> command to estimate file space\nusage for C<path>.\n\nC<path> can be a file or a directory.  If C<path> is a directory\nthen the estimate includes the contents of the directory and all\nsubdirectories (recursively).\n\nThe result is the estimated size in I<kilobytes>\n(ie. units of 1024 bytes).");
635   else
636   if (strcasecmp (cmd, "initrd_list") == 0 || strcasecmp (cmd, "initrd-list") == 0)
637     pod2text ("initrd-list - list files in an initrd", " initrd-list <path>\n\nThis command lists out files contained in an initrd.\n\nThe files are listed without any initial C</> character.  The\nfiles are listed in the order they appear (not necessarily\nalphabetical).  Directory names are listed as separate items.\n\nOld Linux kernels (2.4 and earlier) used a compressed ext2\nfilesystem as initrd.  We I<only> support the newer initramfs\nformat (compressed cpio files).");
638   else
639   if (strcasecmp (cmd, "mount_loop") == 0 || strcasecmp (cmd, "mount-loop") == 0)
640     pod2text ("mount-loop - mount a file using the loop device", " mount-loop <file> <mountpoint>\n\nThis command lets you mount C<file> (a filesystem image\nin a file) on a mount point.  It is entirely equivalent to\nthe command C<mount -o loop file mountpoint>.");
641   else
642   if (strcasecmp (cmd, "mkswap") == 0)
643     pod2text ("mkswap - create a swap partition", " mkswap <device>\n\nCreate a swap partition on C<device>.");
644   else
645   if (strcasecmp (cmd, "mkswap_L") == 0 || strcasecmp (cmd, "mkswap-L") == 0)
646     pod2text ("mkswap-L - create a swap partition with a label", " mkswap-L <label> <device>\n\nCreate a swap partition on C<device> with label C<label>.");
647   else
648   if (strcasecmp (cmd, "mkswap_U") == 0 || strcasecmp (cmd, "mkswap-U") == 0)
649     pod2text ("mkswap-U - create a swap partition with an explicit UUID", " mkswap-U <uuid> <device>\n\nCreate a swap partition on C<device> with UUID C<uuid>.");
650   else
651     display_builtin_command (cmd);
652 }
653
654 static void print_pv (struct guestfs_lvm_pv *pv)
655 {
656   int i;
657
658   printf ("pv_name: %s\n", pv->pv_name);
659   printf ("pv_uuid: ");
660   for (i = 0; i < 32; ++i)
661     printf ("%c", pv->pv_uuid[i]);
662   printf ("\n");
663   printf ("pv_fmt: %s\n", pv->pv_fmt);
664   printf ("pv_size: %" PRIu64 "\n", pv->pv_size);
665   printf ("dev_size: %" PRIu64 "\n", pv->dev_size);
666   printf ("pv_free: %" PRIu64 "\n", pv->pv_free);
667   printf ("pv_used: %" PRIu64 "\n", pv->pv_used);
668   printf ("pv_attr: %s\n", pv->pv_attr);
669   printf ("pv_pe_count: %" PRIi64 "\n", pv->pv_pe_count);
670   printf ("pv_pe_alloc_count: %" PRIi64 "\n", pv->pv_pe_alloc_count);
671   printf ("pv_tags: %s\n", pv->pv_tags);
672   printf ("pe_start: %" PRIu64 "\n", pv->pe_start);
673   printf ("pv_mda_count: %" PRIi64 "\n", pv->pv_mda_count);
674   printf ("pv_mda_free: %" PRIu64 "\n", pv->pv_mda_free);
675 }
676
677 static void print_pv_list (struct guestfs_lvm_pv_list *pvs)
678 {
679   int i;
680
681   for (i = 0; i < pvs->len; ++i)
682     print_pv (&pvs->val[i]);
683 }
684
685 static void print_vg (struct guestfs_lvm_vg *vg)
686 {
687   int i;
688
689   printf ("vg_name: %s\n", vg->vg_name);
690   printf ("vg_uuid: ");
691   for (i = 0; i < 32; ++i)
692     printf ("%c", vg->vg_uuid[i]);
693   printf ("\n");
694   printf ("vg_fmt: %s\n", vg->vg_fmt);
695   printf ("vg_attr: %s\n", vg->vg_attr);
696   printf ("vg_size: %" PRIu64 "\n", vg->vg_size);
697   printf ("vg_free: %" PRIu64 "\n", vg->vg_free);
698   printf ("vg_sysid: %s\n", vg->vg_sysid);
699   printf ("vg_extent_size: %" PRIu64 "\n", vg->vg_extent_size);
700   printf ("vg_extent_count: %" PRIi64 "\n", vg->vg_extent_count);
701   printf ("vg_free_count: %" PRIi64 "\n", vg->vg_free_count);
702   printf ("max_lv: %" PRIi64 "\n", vg->max_lv);
703   printf ("max_pv: %" PRIi64 "\n", vg->max_pv);
704   printf ("pv_count: %" PRIi64 "\n", vg->pv_count);
705   printf ("lv_count: %" PRIi64 "\n", vg->lv_count);
706   printf ("snap_count: %" PRIi64 "\n", vg->snap_count);
707   printf ("vg_seqno: %" PRIi64 "\n", vg->vg_seqno);
708   printf ("vg_tags: %s\n", vg->vg_tags);
709   printf ("vg_mda_count: %" PRIi64 "\n", vg->vg_mda_count);
710   printf ("vg_mda_free: %" PRIu64 "\n", vg->vg_mda_free);
711 }
712
713 static void print_vg_list (struct guestfs_lvm_vg_list *vgs)
714 {
715   int i;
716
717   for (i = 0; i < vgs->len; ++i)
718     print_vg (&vgs->val[i]);
719 }
720
721 static void print_lv (struct guestfs_lvm_lv *lv)
722 {
723   int i;
724
725   printf ("lv_name: %s\n", lv->lv_name);
726   printf ("lv_uuid: ");
727   for (i = 0; i < 32; ++i)
728     printf ("%c", lv->lv_uuid[i]);
729   printf ("\n");
730   printf ("lv_attr: %s\n", lv->lv_attr);
731   printf ("lv_major: %" PRIi64 "\n", lv->lv_major);
732   printf ("lv_minor: %" PRIi64 "\n", lv->lv_minor);
733   printf ("lv_kernel_major: %" PRIi64 "\n", lv->lv_kernel_major);
734   printf ("lv_kernel_minor: %" PRIi64 "\n", lv->lv_kernel_minor);
735   printf ("lv_size: %" PRIu64 "\n", lv->lv_size);
736   printf ("seg_count: %" PRIi64 "\n", lv->seg_count);
737   printf ("origin: %s\n", lv->origin);
738   if (lv->snap_percent >= 0) printf ("snap_percent: %g %%\n", lv->snap_percent);
739   else printf ("snap_percent: \n");
740   if (lv->copy_percent >= 0) printf ("copy_percent: %g %%\n", lv->copy_percent);
741   else printf ("copy_percent: \n");
742   printf ("move_pv: %s\n", lv->move_pv);
743   printf ("lv_tags: %s\n", lv->lv_tags);
744   printf ("mirror_log: %s\n", lv->mirror_log);
745   printf ("modules: %s\n", lv->modules);
746 }
747
748 static void print_lv_list (struct guestfs_lvm_lv_list *lvs)
749 {
750   int i;
751
752   for (i = 0; i < lvs->len; ++i)
753     print_lv (&lvs->val[i]);
754 }
755
756 static void print_stat (struct guestfs_stat *stat)
757 {
758   printf ("dev: %" PRIi64 "\n", stat->dev);
759   printf ("ino: %" PRIi64 "\n", stat->ino);
760   printf ("mode: %" PRIi64 "\n", stat->mode);
761   printf ("nlink: %" PRIi64 "\n", stat->nlink);
762   printf ("uid: %" PRIi64 "\n", stat->uid);
763   printf ("gid: %" PRIi64 "\n", stat->gid);
764   printf ("rdev: %" PRIi64 "\n", stat->rdev);
765   printf ("size: %" PRIi64 "\n", stat->size);
766   printf ("blksize: %" PRIi64 "\n", stat->blksize);
767   printf ("blocks: %" PRIi64 "\n", stat->blocks);
768   printf ("atime: %" PRIi64 "\n", stat->atime);
769   printf ("mtime: %" PRIi64 "\n", stat->mtime);
770   printf ("ctime: %" PRIi64 "\n", stat->ctime);
771 }
772
773 static void print_statvfs (struct guestfs_statvfs *statvfs)
774 {
775   printf ("bsize: %" PRIi64 "\n", statvfs->bsize);
776   printf ("frsize: %" PRIi64 "\n", statvfs->frsize);
777   printf ("blocks: %" PRIi64 "\n", statvfs->blocks);
778   printf ("bfree: %" PRIi64 "\n", statvfs->bfree);
779   printf ("bavail: %" PRIi64 "\n", statvfs->bavail);
780   printf ("files: %" PRIi64 "\n", statvfs->files);
781   printf ("ffree: %" PRIi64 "\n", statvfs->ffree);
782   printf ("favail: %" PRIi64 "\n", statvfs->favail);
783   printf ("fsid: %" PRIi64 "\n", statvfs->fsid);
784   printf ("flag: %" PRIi64 "\n", statvfs->flag);
785   printf ("namemax: %" PRIi64 "\n", statvfs->namemax);
786 }
787
788 static int run_launch (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 = launch (g);
797   return r;
798 }
799
800 static int run_kill_subprocess (const char *cmd, int argc, char *argv[])
801 {
802   int r;
803   if (argc != 0) {
804     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
805     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
806     return -1;
807   }
808   r = guestfs_kill_subprocess (g);
809   return r;
810 }
811
812 static int run_add_drive (const char *cmd, int argc, char *argv[])
813 {
814   int r;
815   const char *filename;
816   if (argc != 1) {
817     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
818     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
819     return -1;
820   }
821   filename = argv[0];
822   r = guestfs_add_drive (g, filename);
823   return r;
824 }
825
826 static int run_add_cdrom (const char *cmd, int argc, char *argv[])
827 {
828   int r;
829   const char *filename;
830   if (argc != 1) {
831     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
832     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
833     return -1;
834   }
835   filename = argv[0];
836   r = guestfs_add_cdrom (g, filename);
837   return r;
838 }
839
840 static int run_add_drive_ro (const char *cmd, int argc, char *argv[])
841 {
842   int r;
843   const char *filename;
844   if (argc != 1) {
845     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
846     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
847     return -1;
848   }
849   filename = argv[0];
850   r = guestfs_add_drive_ro (g, filename);
851   return r;
852 }
853
854 static int run_config (const char *cmd, int argc, char *argv[])
855 {
856   int r;
857   const char *qemuparam;
858   const char *qemuvalue;
859   if (argc != 2) {
860     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
861     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
862     return -1;
863   }
864   qemuparam = argv[0];
865   qemuvalue = strcmp (argv[1], "") != 0 ? argv[1] : NULL;
866   r = guestfs_config (g, qemuparam, qemuvalue);
867   return r;
868 }
869
870 static int run_set_qemu (const char *cmd, int argc, char *argv[])
871 {
872   int r;
873   const char *qemu;
874   if (argc != 1) {
875     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
876     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
877     return -1;
878   }
879   qemu = argv[0];
880   r = guestfs_set_qemu (g, qemu);
881   return r;
882 }
883
884 static int run_get_qemu (const char *cmd, int argc, char *argv[])
885 {
886   const char *r;
887   if (argc != 0) {
888     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
889     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
890     return -1;
891   }
892   r = guestfs_get_qemu (g);
893   if (r == NULL) return -1;
894   printf ("%s\n", r);
895   return 0;
896 }
897
898 static int run_set_path (const char *cmd, int argc, char *argv[])
899 {
900   int r;
901   const char *path;
902   if (argc != 1) {
903     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
904     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
905     return -1;
906   }
907   path = argv[0];
908   r = guestfs_set_path (g, path);
909   return r;
910 }
911
912 static int run_get_path (const char *cmd, int argc, char *argv[])
913 {
914   const char *r;
915   if (argc != 0) {
916     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
917     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
918     return -1;
919   }
920   r = guestfs_get_path (g);
921   if (r == NULL) return -1;
922   printf ("%s\n", r);
923   return 0;
924 }
925
926 static int run_set_append (const char *cmd, int argc, char *argv[])
927 {
928   int r;
929   const char *append;
930   if (argc != 1) {
931     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
932     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
933     return -1;
934   }
935   append = argv[0];
936   r = guestfs_set_append (g, append);
937   return r;
938 }
939
940 static int run_get_append (const char *cmd, int argc, char *argv[])
941 {
942   const char *r;
943   if (argc != 0) {
944     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
945     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
946     return -1;
947   }
948   r = guestfs_get_append (g);
949   if (r == NULL) return -1;
950   printf ("%s\n", r);
951   return 0;
952 }
953
954 static int run_set_autosync (const char *cmd, int argc, char *argv[])
955 {
956   int r;
957   int autosync;
958   if (argc != 1) {
959     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
960     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
961     return -1;
962   }
963   autosync = is_true (argv[0]) ? 1 : 0;
964   r = guestfs_set_autosync (g, autosync);
965   return r;
966 }
967
968 static int run_get_autosync (const char *cmd, int argc, char *argv[])
969 {
970   int 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_get_autosync (g);
977   if (r == -1) return -1;
978   if (r) printf ("true\n"); else printf ("false\n");
979   return 0;
980 }
981
982 static int run_set_verbose (const char *cmd, int argc, char *argv[])
983 {
984   int r;
985   int verbose;
986   if (argc != 1) {
987     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
988     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
989     return -1;
990   }
991   verbose = is_true (argv[0]) ? 1 : 0;
992   r = guestfs_set_verbose (g, verbose);
993   return r;
994 }
995
996 static int run_get_verbose (const char *cmd, int argc, char *argv[])
997 {
998   int r;
999   if (argc != 0) {
1000     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1001     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1002     return -1;
1003   }
1004   r = guestfs_get_verbose (g);
1005   if (r == -1) return -1;
1006   if (r) printf ("true\n"); else printf ("false\n");
1007   return 0;
1008 }
1009
1010 static int run_is_ready (const char *cmd, int argc, char *argv[])
1011 {
1012   int r;
1013   if (argc != 0) {
1014     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1015     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1016     return -1;
1017   }
1018   r = guestfs_is_ready (g);
1019   if (r == -1) return -1;
1020   if (r) printf ("true\n"); else printf ("false\n");
1021   return 0;
1022 }
1023
1024 static int run_is_config (const char *cmd, int argc, char *argv[])
1025 {
1026   int r;
1027   if (argc != 0) {
1028     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1029     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1030     return -1;
1031   }
1032   r = guestfs_is_config (g);
1033   if (r == -1) return -1;
1034   if (r) printf ("true\n"); else printf ("false\n");
1035   return 0;
1036 }
1037
1038 static int run_is_launching (const char *cmd, int argc, char *argv[])
1039 {
1040   int r;
1041   if (argc != 0) {
1042     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1043     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1044     return -1;
1045   }
1046   r = guestfs_is_launching (g);
1047   if (r == -1) return -1;
1048   if (r) printf ("true\n"); else printf ("false\n");
1049   return 0;
1050 }
1051
1052 static int run_is_busy (const char *cmd, int argc, char *argv[])
1053 {
1054   int r;
1055   if (argc != 0) {
1056     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1057     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1058     return -1;
1059   }
1060   r = guestfs_is_busy (g);
1061   if (r == -1) return -1;
1062   if (r) printf ("true\n"); else printf ("false\n");
1063   return 0;
1064 }
1065
1066 static int run_get_state (const char *cmd, int argc, char *argv[])
1067 {
1068   int r;
1069   if (argc != 0) {
1070     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1071     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1072     return -1;
1073   }
1074   r = guestfs_get_state (g);
1075   if (r == -1) return -1;
1076   printf ("%d\n", r);
1077   return 0;
1078 }
1079
1080 static int run_mount (const char *cmd, int argc, char *argv[])
1081 {
1082   int r;
1083   const char *device;
1084   const char *mountpoint;
1085   if (argc != 2) {
1086     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1087     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1088     return -1;
1089   }
1090   device = argv[0];
1091   mountpoint = argv[1];
1092   r = guestfs_mount (g, device, mountpoint);
1093   return r;
1094 }
1095
1096 static int run_sync (const char *cmd, int argc, char *argv[])
1097 {
1098   int r;
1099   if (argc != 0) {
1100     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1101     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1102     return -1;
1103   }
1104   r = guestfs_sync (g);
1105   return r;
1106 }
1107
1108 static int run_touch (const char *cmd, int argc, char *argv[])
1109 {
1110   int r;
1111   const char *path;
1112   if (argc != 1) {
1113     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1114     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1115     return -1;
1116   }
1117   path = argv[0];
1118   r = guestfs_touch (g, path);
1119   return r;
1120 }
1121
1122 static int run_cat (const char *cmd, int argc, char *argv[])
1123 {
1124   char *r;
1125   const char *path;
1126   if (argc != 1) {
1127     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1128     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1129     return -1;
1130   }
1131   path = argv[0];
1132   r = guestfs_cat (g, path);
1133   if (r == NULL) return -1;
1134   printf ("%s\n", r);
1135   free (r);
1136   return 0;
1137 }
1138
1139 static int run_ll (const char *cmd, int argc, char *argv[])
1140 {
1141   char *r;
1142   const char *directory;
1143   if (argc != 1) {
1144     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1145     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1146     return -1;
1147   }
1148   directory = argv[0];
1149   r = guestfs_ll (g, directory);
1150   if (r == NULL) return -1;
1151   printf ("%s\n", r);
1152   free (r);
1153   return 0;
1154 }
1155
1156 static int run_ls (const char *cmd, int argc, char *argv[])
1157 {
1158   char **r;
1159   const char *directory;
1160   if (argc != 1) {
1161     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1162     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1163     return -1;
1164   }
1165   directory = argv[0];
1166   r = guestfs_ls (g, directory);
1167   if (r == NULL) return -1;
1168   print_strings (r);
1169   free_strings (r);
1170   return 0;
1171 }
1172
1173 static int run_list_devices (const char *cmd, int argc, char *argv[])
1174 {
1175   char **r;
1176   if (argc != 0) {
1177     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1178     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1179     return -1;
1180   }
1181   r = guestfs_list_devices (g);
1182   if (r == NULL) return -1;
1183   print_strings (r);
1184   free_strings (r);
1185   return 0;
1186 }
1187
1188 static int run_list_partitions (const char *cmd, int argc, char *argv[])
1189 {
1190   char **r;
1191   if (argc != 0) {
1192     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1193     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1194     return -1;
1195   }
1196   r = guestfs_list_partitions (g);
1197   if (r == NULL) return -1;
1198   print_strings (r);
1199   free_strings (r);
1200   return 0;
1201 }
1202
1203 static int run_pvs (const char *cmd, int argc, char *argv[])
1204 {
1205   char **r;
1206   if (argc != 0) {
1207     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1208     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1209     return -1;
1210   }
1211   r = guestfs_pvs (g);
1212   if (r == NULL) return -1;
1213   print_strings (r);
1214   free_strings (r);
1215   return 0;
1216 }
1217
1218 static int run_vgs (const char *cmd, int argc, char *argv[])
1219 {
1220   char **r;
1221   if (argc != 0) {
1222     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1223     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1224     return -1;
1225   }
1226   r = guestfs_vgs (g);
1227   if (r == NULL) return -1;
1228   print_strings (r);
1229   free_strings (r);
1230   return 0;
1231 }
1232
1233 static int run_lvs (const char *cmd, int argc, char *argv[])
1234 {
1235   char **r;
1236   if (argc != 0) {
1237     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1238     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1239     return -1;
1240   }
1241   r = guestfs_lvs (g);
1242   if (r == NULL) return -1;
1243   print_strings (r);
1244   free_strings (r);
1245   return 0;
1246 }
1247
1248 static int run_pvs_full (const char *cmd, int argc, char *argv[])
1249 {
1250   struct guestfs_lvm_pv_list *r;
1251   if (argc != 0) {
1252     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1253     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1254     return -1;
1255   }
1256   r = guestfs_pvs_full (g);
1257   if (r == NULL) return -1;
1258   print_pv_list (r);
1259   guestfs_free_lvm_pv_list (r);
1260   return 0;
1261 }
1262
1263 static int run_vgs_full (const char *cmd, int argc, char *argv[])
1264 {
1265   struct guestfs_lvm_vg_list *r;
1266   if (argc != 0) {
1267     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1268     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1269     return -1;
1270   }
1271   r = guestfs_vgs_full (g);
1272   if (r == NULL) return -1;
1273   print_vg_list (r);
1274   guestfs_free_lvm_vg_list (r);
1275   return 0;
1276 }
1277
1278 static int run_lvs_full (const char *cmd, int argc, char *argv[])
1279 {
1280   struct guestfs_lvm_lv_list *r;
1281   if (argc != 0) {
1282     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1283     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1284     return -1;
1285   }
1286   r = guestfs_lvs_full (g);
1287   if (r == NULL) return -1;
1288   print_lv_list (r);
1289   guestfs_free_lvm_lv_list (r);
1290   return 0;
1291 }
1292
1293 static int run_read_lines (const char *cmd, int argc, char *argv[])
1294 {
1295   char **r;
1296   const char *path;
1297   if (argc != 1) {
1298     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1299     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1300     return -1;
1301   }
1302   path = argv[0];
1303   r = guestfs_read_lines (g, path);
1304   if (r == NULL) return -1;
1305   print_strings (r);
1306   free_strings (r);
1307   return 0;
1308 }
1309
1310 static int run_aug_init (const char *cmd, int argc, char *argv[])
1311 {
1312   int r;
1313   const char *root;
1314   int flags;
1315   if (argc != 2) {
1316     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1317     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1318     return -1;
1319   }
1320   root = argv[0];
1321   flags = atoi (argv[1]);
1322   r = guestfs_aug_init (g, root, flags);
1323   return r;
1324 }
1325
1326 static int run_aug_close (const char *cmd, int argc, char *argv[])
1327 {
1328   int r;
1329   if (argc != 0) {
1330     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1331     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1332     return -1;
1333   }
1334   r = guestfs_aug_close (g);
1335   return r;
1336 }
1337
1338 static int run_aug_defvar (const char *cmd, int argc, char *argv[])
1339 {
1340   int r;
1341   const char *name;
1342   const char *expr;
1343   if (argc != 2) {
1344     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1345     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1346     return -1;
1347   }
1348   name = argv[0];
1349   expr = strcmp (argv[1], "") != 0 ? argv[1] : NULL;
1350   r = guestfs_aug_defvar (g, name, expr);
1351   if (r == -1) return -1;
1352   printf ("%d\n", r);
1353   return 0;
1354 }
1355
1356 static int run_aug_defnode (const char *cmd, int argc, char *argv[])
1357 {
1358   struct guestfs_int_bool *r;
1359   const char *name;
1360   const char *expr;
1361   const char *val;
1362   if (argc != 3) {
1363     fprintf (stderr, "%s should have 3 parameter(s)\n", cmd);
1364     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1365     return -1;
1366   }
1367   name = argv[0];
1368   expr = argv[1];
1369   val = argv[2];
1370   r = guestfs_aug_defnode (g, name, expr, val);
1371   if (r == NULL) return -1;
1372   printf ("%d, %s\n", r->i,
1373     r->b ? "true" : "false");
1374   guestfs_free_int_bool (r);
1375   return 0;
1376 }
1377
1378 static int run_aug_get (const char *cmd, int argc, char *argv[])
1379 {
1380   char *r;
1381   const char *path;
1382   if (argc != 1) {
1383     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1384     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1385     return -1;
1386   }
1387   path = argv[0];
1388   r = guestfs_aug_get (g, path);
1389   if (r == NULL) return -1;
1390   printf ("%s\n", r);
1391   free (r);
1392   return 0;
1393 }
1394
1395 static int run_aug_set (const char *cmd, int argc, char *argv[])
1396 {
1397   int r;
1398   const char *path;
1399   const char *val;
1400   if (argc != 2) {
1401     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1402     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1403     return -1;
1404   }
1405   path = argv[0];
1406   val = argv[1];
1407   r = guestfs_aug_set (g, path, val);
1408   return r;
1409 }
1410
1411 static int run_aug_insert (const char *cmd, int argc, char *argv[])
1412 {
1413   int r;
1414   const char *path;
1415   const char *label;
1416   int before;
1417   if (argc != 3) {
1418     fprintf (stderr, "%s should have 3 parameter(s)\n", cmd);
1419     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1420     return -1;
1421   }
1422   path = argv[0];
1423   label = argv[1];
1424   before = is_true (argv[2]) ? 1 : 0;
1425   r = guestfs_aug_insert (g, path, label, before);
1426   return r;
1427 }
1428
1429 static int run_aug_rm (const char *cmd, int argc, char *argv[])
1430 {
1431   int r;
1432   const char *path;
1433   if (argc != 1) {
1434     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1435     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1436     return -1;
1437   }
1438   path = argv[0];
1439   r = guestfs_aug_rm (g, path);
1440   if (r == -1) return -1;
1441   printf ("%d\n", r);
1442   return 0;
1443 }
1444
1445 static int run_aug_mv (const char *cmd, int argc, char *argv[])
1446 {
1447   int r;
1448   const char *src;
1449   const char *dest;
1450   if (argc != 2) {
1451     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1452     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1453     return -1;
1454   }
1455   src = argv[0];
1456   dest = argv[1];
1457   r = guestfs_aug_mv (g, src, dest);
1458   return r;
1459 }
1460
1461 static int run_aug_match (const char *cmd, int argc, char *argv[])
1462 {
1463   char **r;
1464   const char *path;
1465   if (argc != 1) {
1466     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1467     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1468     return -1;
1469   }
1470   path = argv[0];
1471   r = guestfs_aug_match (g, path);
1472   if (r == NULL) return -1;
1473   print_strings (r);
1474   free_strings (r);
1475   return 0;
1476 }
1477
1478 static int run_aug_save (const char *cmd, int argc, char *argv[])
1479 {
1480   int r;
1481   if (argc != 0) {
1482     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1483     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1484     return -1;
1485   }
1486   r = guestfs_aug_save (g);
1487   return r;
1488 }
1489
1490 static int run_aug_load (const char *cmd, int argc, char *argv[])
1491 {
1492   int r;
1493   if (argc != 0) {
1494     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1495     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1496     return -1;
1497   }
1498   r = guestfs_aug_load (g);
1499   return r;
1500 }
1501
1502 static int run_aug_ls (const char *cmd, int argc, char *argv[])
1503 {
1504   char **r;
1505   const char *path;
1506   if (argc != 1) {
1507     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1508     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1509     return -1;
1510   }
1511   path = argv[0];
1512   r = guestfs_aug_ls (g, path);
1513   if (r == NULL) return -1;
1514   print_strings (r);
1515   free_strings (r);
1516   return 0;
1517 }
1518
1519 static int run_rm (const char *cmd, int argc, char *argv[])
1520 {
1521   int r;
1522   const char *path;
1523   if (argc != 1) {
1524     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1525     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1526     return -1;
1527   }
1528   path = argv[0];
1529   r = guestfs_rm (g, path);
1530   return r;
1531 }
1532
1533 static int run_rmdir (const char *cmd, int argc, char *argv[])
1534 {
1535   int r;
1536   const char *path;
1537   if (argc != 1) {
1538     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1539     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1540     return -1;
1541   }
1542   path = argv[0];
1543   r = guestfs_rmdir (g, path);
1544   return r;
1545 }
1546
1547 static int run_rm_rf (const char *cmd, int argc, char *argv[])
1548 {
1549   int r;
1550   const char *path;
1551   if (argc != 1) {
1552     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1553     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1554     return -1;
1555   }
1556   path = argv[0];
1557   r = guestfs_rm_rf (g, path);
1558   return r;
1559 }
1560
1561 static int run_mkdir (const char *cmd, int argc, char *argv[])
1562 {
1563   int r;
1564   const char *path;
1565   if (argc != 1) {
1566     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1567     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1568     return -1;
1569   }
1570   path = argv[0];
1571   r = guestfs_mkdir (g, path);
1572   return r;
1573 }
1574
1575 static int run_mkdir_p (const char *cmd, int argc, char *argv[])
1576 {
1577   int r;
1578   const char *path;
1579   if (argc != 1) {
1580     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1581     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1582     return -1;
1583   }
1584   path = argv[0];
1585   r = guestfs_mkdir_p (g, path);
1586   return r;
1587 }
1588
1589 static int run_chmod (const char *cmd, int argc, char *argv[])
1590 {
1591   int r;
1592   int mode;
1593   const char *path;
1594   if (argc != 2) {
1595     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1596     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1597     return -1;
1598   }
1599   mode = atoi (argv[0]);
1600   path = argv[1];
1601   r = guestfs_chmod (g, mode, path);
1602   return r;
1603 }
1604
1605 static int run_chown (const char *cmd, int argc, char *argv[])
1606 {
1607   int r;
1608   int owner;
1609   int group;
1610   const char *path;
1611   if (argc != 3) {
1612     fprintf (stderr, "%s should have 3 parameter(s)\n", cmd);
1613     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1614     return -1;
1615   }
1616   owner = atoi (argv[0]);
1617   group = atoi (argv[1]);
1618   path = argv[2];
1619   r = guestfs_chown (g, owner, group, path);
1620   return r;
1621 }
1622
1623 static int run_exists (const char *cmd, int argc, char *argv[])
1624 {
1625   int r;
1626   const char *path;
1627   if (argc != 1) {
1628     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1629     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1630     return -1;
1631   }
1632   path = argv[0];
1633   r = guestfs_exists (g, path);
1634   if (r == -1) return -1;
1635   if (r) printf ("true\n"); else printf ("false\n");
1636   return 0;
1637 }
1638
1639 static int run_is_file (const char *cmd, int argc, char *argv[])
1640 {
1641   int r;
1642   const char *path;
1643   if (argc != 1) {
1644     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1645     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1646     return -1;
1647   }
1648   path = argv[0];
1649   r = guestfs_is_file (g, path);
1650   if (r == -1) return -1;
1651   if (r) printf ("true\n"); else printf ("false\n");
1652   return 0;
1653 }
1654
1655 static int run_is_dir (const char *cmd, int argc, char *argv[])
1656 {
1657   int r;
1658   const char *path;
1659   if (argc != 1) {
1660     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1661     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1662     return -1;
1663   }
1664   path = argv[0];
1665   r = guestfs_is_dir (g, path);
1666   if (r == -1) return -1;
1667   if (r) printf ("true\n"); else printf ("false\n");
1668   return 0;
1669 }
1670
1671 static int run_pvcreate (const char *cmd, int argc, char *argv[])
1672 {
1673   int r;
1674   const char *device;
1675   if (argc != 1) {
1676     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1677     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1678     return -1;
1679   }
1680   device = argv[0];
1681   r = guestfs_pvcreate (g, device);
1682   return r;
1683 }
1684
1685 static int run_vgcreate (const char *cmd, int argc, char *argv[])
1686 {
1687   int r;
1688   const char *volgroup;
1689   char **physvols;
1690   if (argc != 2) {
1691     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1692     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1693     return -1;
1694   }
1695   volgroup = argv[0];
1696   physvols = parse_string_list (argv[1]);
1697   r = guestfs_vgcreate (g, volgroup, physvols);
1698   return r;
1699 }
1700
1701 static int run_lvcreate (const char *cmd, int argc, char *argv[])
1702 {
1703   int r;
1704   const char *logvol;
1705   const char *volgroup;
1706   int mbytes;
1707   if (argc != 3) {
1708     fprintf (stderr, "%s should have 3 parameter(s)\n", cmd);
1709     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1710     return -1;
1711   }
1712   logvol = argv[0];
1713   volgroup = argv[1];
1714   mbytes = atoi (argv[2]);
1715   r = guestfs_lvcreate (g, logvol, volgroup, mbytes);
1716   return r;
1717 }
1718
1719 static int run_mkfs (const char *cmd, int argc, char *argv[])
1720 {
1721   int r;
1722   const char *fstype;
1723   const char *device;
1724   if (argc != 2) {
1725     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1726     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1727     return -1;
1728   }
1729   fstype = argv[0];
1730   device = argv[1];
1731   r = guestfs_mkfs (g, fstype, device);
1732   return r;
1733 }
1734
1735 static int run_sfdisk (const char *cmd, int argc, char *argv[])
1736 {
1737   int r;
1738   const char *device;
1739   int cyls;
1740   int heads;
1741   int sectors;
1742   char **lines;
1743   if (argc != 5) {
1744     fprintf (stderr, "%s should have 5 parameter(s)\n", cmd);
1745     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1746     return -1;
1747   }
1748   device = argv[0];
1749   cyls = atoi (argv[1]);
1750   heads = atoi (argv[2]);
1751   sectors = atoi (argv[3]);
1752   lines = parse_string_list (argv[4]);
1753   r = guestfs_sfdisk (g, device, cyls, heads, sectors, lines);
1754   return r;
1755 }
1756
1757 static int run_write_file (const char *cmd, int argc, char *argv[])
1758 {
1759   int r;
1760   const char *path;
1761   const char *content;
1762   int size;
1763   if (argc != 3) {
1764     fprintf (stderr, "%s should have 3 parameter(s)\n", cmd);
1765     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1766     return -1;
1767   }
1768   path = argv[0];
1769   content = argv[1];
1770   size = atoi (argv[2]);
1771   r = guestfs_write_file (g, path, content, size);
1772   return r;
1773 }
1774
1775 static int run_umount (const char *cmd, int argc, char *argv[])
1776 {
1777   int r;
1778   const char *pathordevice;
1779   if (argc != 1) {
1780     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1781     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1782     return -1;
1783   }
1784   pathordevice = argv[0];
1785   r = guestfs_umount (g, pathordevice);
1786   return r;
1787 }
1788
1789 static int run_mounts (const char *cmd, int argc, char *argv[])
1790 {
1791   char **r;
1792   if (argc != 0) {
1793     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1794     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1795     return -1;
1796   }
1797   r = guestfs_mounts (g);
1798   if (r == NULL) return -1;
1799   print_strings (r);
1800   free_strings (r);
1801   return 0;
1802 }
1803
1804 static int run_umount_all (const char *cmd, int argc, char *argv[])
1805 {
1806   int r;
1807   if (argc != 0) {
1808     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1809     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1810     return -1;
1811   }
1812   r = guestfs_umount_all (g);
1813   return r;
1814 }
1815
1816 static int run_lvm_remove_all (const char *cmd, int argc, char *argv[])
1817 {
1818   int r;
1819   if (argc != 0) {
1820     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1821     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1822     return -1;
1823   }
1824   r = guestfs_lvm_remove_all (g);
1825   return r;
1826 }
1827
1828 static int run_file (const char *cmd, int argc, char *argv[])
1829 {
1830   char *r;
1831   const char *path;
1832   if (argc != 1) {
1833     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1834     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1835     return -1;
1836   }
1837   path = argv[0];
1838   r = guestfs_file (g, path);
1839   if (r == NULL) return -1;
1840   printf ("%s\n", r);
1841   free (r);
1842   return 0;
1843 }
1844
1845 static int run_command (const char *cmd, int argc, char *argv[])
1846 {
1847   char *r;
1848   char **arguments;
1849   if (argc != 1) {
1850     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1851     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1852     return -1;
1853   }
1854   arguments = parse_string_list (argv[0]);
1855   r = guestfs_command (g, arguments);
1856   if (r == NULL) return -1;
1857   printf ("%s\n", r);
1858   free (r);
1859   return 0;
1860 }
1861
1862 static int run_command_lines (const char *cmd, int argc, char *argv[])
1863 {
1864   char **r;
1865   char **arguments;
1866   if (argc != 1) {
1867     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1868     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1869     return -1;
1870   }
1871   arguments = parse_string_list (argv[0]);
1872   r = guestfs_command_lines (g, arguments);
1873   if (r == NULL) return -1;
1874   print_strings (r);
1875   free_strings (r);
1876   return 0;
1877 }
1878
1879 static int run_stat (const char *cmd, int argc, char *argv[])
1880 {
1881   struct guestfs_stat *r;
1882   const char *path;
1883   if (argc != 1) {
1884     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1885     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1886     return -1;
1887   }
1888   path = argv[0];
1889   r = guestfs_stat (g, path);
1890   if (r == NULL) return -1;
1891   print_stat (r);
1892   free (r);
1893   return 0;
1894 }
1895
1896 static int run_lstat (const char *cmd, int argc, char *argv[])
1897 {
1898   struct guestfs_stat *r;
1899   const char *path;
1900   if (argc != 1) {
1901     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1902     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1903     return -1;
1904   }
1905   path = argv[0];
1906   r = guestfs_lstat (g, path);
1907   if (r == NULL) return -1;
1908   print_stat (r);
1909   free (r);
1910   return 0;
1911 }
1912
1913 static int run_statvfs (const char *cmd, int argc, char *argv[])
1914 {
1915   struct guestfs_statvfs *r;
1916   const char *path;
1917   if (argc != 1) {
1918     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1919     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1920     return -1;
1921   }
1922   path = argv[0];
1923   r = guestfs_statvfs (g, path);
1924   if (r == NULL) return -1;
1925   print_statvfs (r);
1926   free (r);
1927   return 0;
1928 }
1929
1930 static int run_tune2fs_l (const char *cmd, int argc, char *argv[])
1931 {
1932   char **r;
1933   const char *device;
1934   if (argc != 1) {
1935     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1936     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1937     return -1;
1938   }
1939   device = argv[0];
1940   r = guestfs_tune2fs_l (g, device);
1941   if (r == NULL) return -1;
1942   print_table (r);
1943   free_strings (r);
1944   return 0;
1945 }
1946
1947 static int run_blockdev_setro (const char *cmd, int argc, char *argv[])
1948 {
1949   int r;
1950   const char *device;
1951   if (argc != 1) {
1952     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1953     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1954     return -1;
1955   }
1956   device = argv[0];
1957   r = guestfs_blockdev_setro (g, device);
1958   return r;
1959 }
1960
1961 static int run_blockdev_setrw (const char *cmd, int argc, char *argv[])
1962 {
1963   int r;
1964   const char *device;
1965   if (argc != 1) {
1966     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1967     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1968     return -1;
1969   }
1970   device = argv[0];
1971   r = guestfs_blockdev_setrw (g, device);
1972   return r;
1973 }
1974
1975 static int run_blockdev_getro (const char *cmd, int argc, char *argv[])
1976 {
1977   int r;
1978   const char *device;
1979   if (argc != 1) {
1980     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1981     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1982     return -1;
1983   }
1984   device = argv[0];
1985   r = guestfs_blockdev_getro (g, device);
1986   if (r == -1) return -1;
1987   if (r) printf ("true\n"); else printf ("false\n");
1988   return 0;
1989 }
1990
1991 static int run_blockdev_getss (const char *cmd, int argc, char *argv[])
1992 {
1993   int r;
1994   const char *device;
1995   if (argc != 1) {
1996     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1997     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1998     return -1;
1999   }
2000   device = argv[0];
2001   r = guestfs_blockdev_getss (g, device);
2002   if (r == -1) return -1;
2003   printf ("%d\n", r);
2004   return 0;
2005 }
2006
2007 static int run_blockdev_getbsz (const char *cmd, int argc, char *argv[])
2008 {
2009   int r;
2010   const char *device;
2011   if (argc != 1) {
2012     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2013     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2014     return -1;
2015   }
2016   device = argv[0];
2017   r = guestfs_blockdev_getbsz (g, device);
2018   if (r == -1) return -1;
2019   printf ("%d\n", r);
2020   return 0;
2021 }
2022
2023 static int run_blockdev_setbsz (const char *cmd, int argc, char *argv[])
2024 {
2025   int r;
2026   const char *device;
2027   int blocksize;
2028   if (argc != 2) {
2029     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2030     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2031     return -1;
2032   }
2033   device = argv[0];
2034   blocksize = atoi (argv[1]);
2035   r = guestfs_blockdev_setbsz (g, device, blocksize);
2036   return r;
2037 }
2038
2039 static int run_blockdev_getsz (const char *cmd, int argc, char *argv[])
2040 {
2041   int64_t r;
2042   const char *device;
2043   if (argc != 1) {
2044     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2045     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2046     return -1;
2047   }
2048   device = argv[0];
2049   r = guestfs_blockdev_getsz (g, device);
2050   if (r == -1) return -1;
2051   printf ("%" PRIi64 "\n", r);
2052   return 0;
2053 }
2054
2055 static int run_blockdev_getsize64 (const char *cmd, int argc, char *argv[])
2056 {
2057   int64_t r;
2058   const char *device;
2059   if (argc != 1) {
2060     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2061     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2062     return -1;
2063   }
2064   device = argv[0];
2065   r = guestfs_blockdev_getsize64 (g, device);
2066   if (r == -1) return -1;
2067   printf ("%" PRIi64 "\n", r);
2068   return 0;
2069 }
2070
2071 static int run_blockdev_flushbufs (const char *cmd, int argc, char *argv[])
2072 {
2073   int r;
2074   const char *device;
2075   if (argc != 1) {
2076     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2077     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2078     return -1;
2079   }
2080   device = argv[0];
2081   r = guestfs_blockdev_flushbufs (g, device);
2082   return r;
2083 }
2084
2085 static int run_blockdev_rereadpt (const char *cmd, int argc, char *argv[])
2086 {
2087   int r;
2088   const char *device;
2089   if (argc != 1) {
2090     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2091     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2092     return -1;
2093   }
2094   device = argv[0];
2095   r = guestfs_blockdev_rereadpt (g, device);
2096   return r;
2097 }
2098
2099 static int run_upload (const char *cmd, int argc, char *argv[])
2100 {
2101   int r;
2102   const char *filename;
2103   const char *remotefilename;
2104   if (argc != 2) {
2105     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2106     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2107     return -1;
2108   }
2109   filename = strcmp (argv[0], "-") != 0 ? argv[0] : "/dev/stdin";
2110   remotefilename = argv[1];
2111   r = guestfs_upload (g, filename, remotefilename);
2112   return r;
2113 }
2114
2115 static int run_download (const char *cmd, int argc, char *argv[])
2116 {
2117   int r;
2118   const char *remotefilename;
2119   const char *filename;
2120   if (argc != 2) {
2121     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2122     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2123     return -1;
2124   }
2125   remotefilename = argv[0];
2126   filename = strcmp (argv[1], "-") != 0 ? argv[1] : "/dev/stdout";
2127   r = guestfs_download (g, remotefilename, filename);
2128   return r;
2129 }
2130
2131 static int run_checksum (const char *cmd, int argc, char *argv[])
2132 {
2133   char *r;
2134   const char *csumtype;
2135   const char *path;
2136   if (argc != 2) {
2137     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2138     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2139     return -1;
2140   }
2141   csumtype = argv[0];
2142   path = argv[1];
2143   r = guestfs_checksum (g, csumtype, path);
2144   if (r == NULL) return -1;
2145   printf ("%s\n", r);
2146   free (r);
2147   return 0;
2148 }
2149
2150 static int run_tar_in (const char *cmd, int argc, char *argv[])
2151 {
2152   int r;
2153   const char *tarfile;
2154   const char *directory;
2155   if (argc != 2) {
2156     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2157     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2158     return -1;
2159   }
2160   tarfile = strcmp (argv[0], "-") != 0 ? argv[0] : "/dev/stdin";
2161   directory = argv[1];
2162   r = guestfs_tar_in (g, tarfile, directory);
2163   return r;
2164 }
2165
2166 static int run_tar_out (const char *cmd, int argc, char *argv[])
2167 {
2168   int r;
2169   const char *directory;
2170   const char *tarfile;
2171   if (argc != 2) {
2172     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2173     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2174     return -1;
2175   }
2176   directory = argv[0];
2177   tarfile = strcmp (argv[1], "-") != 0 ? argv[1] : "/dev/stdout";
2178   r = guestfs_tar_out (g, directory, tarfile);
2179   return r;
2180 }
2181
2182 static int run_tgz_in (const char *cmd, int argc, char *argv[])
2183 {
2184   int r;
2185   const char *tarball;
2186   const char *directory;
2187   if (argc != 2) {
2188     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2189     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2190     return -1;
2191   }
2192   tarball = strcmp (argv[0], "-") != 0 ? argv[0] : "/dev/stdin";
2193   directory = argv[1];
2194   r = guestfs_tgz_in (g, tarball, directory);
2195   return r;
2196 }
2197
2198 static int run_tgz_out (const char *cmd, int argc, char *argv[])
2199 {
2200   int r;
2201   const char *directory;
2202   const char *tarball;
2203   if (argc != 2) {
2204     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2205     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2206     return -1;
2207   }
2208   directory = argv[0];
2209   tarball = strcmp (argv[1], "-") != 0 ? argv[1] : "/dev/stdout";
2210   r = guestfs_tgz_out (g, directory, tarball);
2211   return r;
2212 }
2213
2214 static int run_mount_ro (const char *cmd, int argc, char *argv[])
2215 {
2216   int r;
2217   const char *device;
2218   const char *mountpoint;
2219   if (argc != 2) {
2220     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2221     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2222     return -1;
2223   }
2224   device = argv[0];
2225   mountpoint = argv[1];
2226   r = guestfs_mount_ro (g, device, mountpoint);
2227   return r;
2228 }
2229
2230 static int run_mount_options (const char *cmd, int argc, char *argv[])
2231 {
2232   int r;
2233   const char *options;
2234   const char *device;
2235   const char *mountpoint;
2236   if (argc != 3) {
2237     fprintf (stderr, "%s should have 3 parameter(s)\n", cmd);
2238     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2239     return -1;
2240   }
2241   options = argv[0];
2242   device = argv[1];
2243   mountpoint = argv[2];
2244   r = guestfs_mount_options (g, options, device, mountpoint);
2245   return r;
2246 }
2247
2248 static int run_mount_vfs (const char *cmd, int argc, char *argv[])
2249 {
2250   int r;
2251   const char *options;
2252   const char *vfstype;
2253   const char *device;
2254   const char *mountpoint;
2255   if (argc != 4) {
2256     fprintf (stderr, "%s should have 4 parameter(s)\n", cmd);
2257     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2258     return -1;
2259   }
2260   options = argv[0];
2261   vfstype = argv[1];
2262   device = argv[2];
2263   mountpoint = argv[3];
2264   r = guestfs_mount_vfs (g, options, vfstype, device, mountpoint);
2265   return r;
2266 }
2267
2268 static int run_debug (const char *cmd, int argc, char *argv[])
2269 {
2270   char *r;
2271   const char *subcmd;
2272   char **extraargs;
2273   if (argc != 2) {
2274     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2275     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2276     return -1;
2277   }
2278   subcmd = argv[0];
2279   extraargs = parse_string_list (argv[1]);
2280   r = guestfs_debug (g, subcmd, extraargs);
2281   if (r == NULL) return -1;
2282   printf ("%s\n", r);
2283   free (r);
2284   return 0;
2285 }
2286
2287 static int run_lvremove (const char *cmd, int argc, char *argv[])
2288 {
2289   int r;
2290   const char *device;
2291   if (argc != 1) {
2292     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2293     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2294     return -1;
2295   }
2296   device = argv[0];
2297   r = guestfs_lvremove (g, device);
2298   return r;
2299 }
2300
2301 static int run_vgremove (const char *cmd, int argc, char *argv[])
2302 {
2303   int r;
2304   const char *vgname;
2305   if (argc != 1) {
2306     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2307     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2308     return -1;
2309   }
2310   vgname = argv[0];
2311   r = guestfs_vgremove (g, vgname);
2312   return r;
2313 }
2314
2315 static int run_pvremove (const char *cmd, int argc, char *argv[])
2316 {
2317   int r;
2318   const char *device;
2319   if (argc != 1) {
2320     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2321     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2322     return -1;
2323   }
2324   device = argv[0];
2325   r = guestfs_pvremove (g, device);
2326   return r;
2327 }
2328
2329 static int run_set_e2label (const char *cmd, int argc, char *argv[])
2330 {
2331   int r;
2332   const char *device;
2333   const char *label;
2334   if (argc != 2) {
2335     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2336     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2337     return -1;
2338   }
2339   device = argv[0];
2340   label = argv[1];
2341   r = guestfs_set_e2label (g, device, label);
2342   return r;
2343 }
2344
2345 static int run_get_e2label (const char *cmd, int argc, char *argv[])
2346 {
2347   char *r;
2348   const char *device;
2349   if (argc != 1) {
2350     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2351     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2352     return -1;
2353   }
2354   device = argv[0];
2355   r = guestfs_get_e2label (g, device);
2356   if (r == NULL) return -1;
2357   printf ("%s\n", r);
2358   free (r);
2359   return 0;
2360 }
2361
2362 static int run_set_e2uuid (const char *cmd, int argc, char *argv[])
2363 {
2364   int r;
2365   const char *device;
2366   const char *uuid;
2367   if (argc != 2) {
2368     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2369     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2370     return -1;
2371   }
2372   device = argv[0];
2373   uuid = argv[1];
2374   r = guestfs_set_e2uuid (g, device, uuid);
2375   return r;
2376 }
2377
2378 static int run_get_e2uuid (const char *cmd, int argc, char *argv[])
2379 {
2380   char *r;
2381   const char *device;
2382   if (argc != 1) {
2383     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2384     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2385     return -1;
2386   }
2387   device = argv[0];
2388   r = guestfs_get_e2uuid (g, device);
2389   if (r == NULL) return -1;
2390   printf ("%s\n", r);
2391   free (r);
2392   return 0;
2393 }
2394
2395 static int run_fsck (const char *cmd, int argc, char *argv[])
2396 {
2397   int r;
2398   const char *fstype;
2399   const char *device;
2400   if (argc != 2) {
2401     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2402     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2403     return -1;
2404   }
2405   fstype = argv[0];
2406   device = argv[1];
2407   r = guestfs_fsck (g, fstype, device);
2408   if (r == -1) return -1;
2409   printf ("%d\n", r);
2410   return 0;
2411 }
2412
2413 static int run_zero (const char *cmd, int argc, char *argv[])
2414 {
2415   int r;
2416   const char *device;
2417   if (argc != 1) {
2418     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2419     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2420     return -1;
2421   }
2422   device = argv[0];
2423   r = guestfs_zero (g, device);
2424   return r;
2425 }
2426
2427 static int run_grub_install (const char *cmd, int argc, char *argv[])
2428 {
2429   int r;
2430   const char *root;
2431   const char *device;
2432   if (argc != 2) {
2433     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2434     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2435     return -1;
2436   }
2437   root = argv[0];
2438   device = argv[1];
2439   r = guestfs_grub_install (g, root, device);
2440   return r;
2441 }
2442
2443 static int run_cp (const char *cmd, int argc, char *argv[])
2444 {
2445   int r;
2446   const char *src;
2447   const char *dest;
2448   if (argc != 2) {
2449     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2450     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2451     return -1;
2452   }
2453   src = argv[0];
2454   dest = argv[1];
2455   r = guestfs_cp (g, src, dest);
2456   return r;
2457 }
2458
2459 static int run_cp_a (const char *cmd, int argc, char *argv[])
2460 {
2461   int r;
2462   const char *src;
2463   const char *dest;
2464   if (argc != 2) {
2465     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2466     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2467     return -1;
2468   }
2469   src = argv[0];
2470   dest = argv[1];
2471   r = guestfs_cp_a (g, src, dest);
2472   return r;
2473 }
2474
2475 static int run_mv (const char *cmd, int argc, char *argv[])
2476 {
2477   int r;
2478   const char *src;
2479   const char *dest;
2480   if (argc != 2) {
2481     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2482     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2483     return -1;
2484   }
2485   src = argv[0];
2486   dest = argv[1];
2487   r = guestfs_mv (g, src, dest);
2488   return r;
2489 }
2490
2491 static int run_drop_caches (const char *cmd, int argc, char *argv[])
2492 {
2493   int r;
2494   int whattodrop;
2495   if (argc != 1) {
2496     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2497     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2498     return -1;
2499   }
2500   whattodrop = atoi (argv[0]);
2501   r = guestfs_drop_caches (g, whattodrop);
2502   return r;
2503 }
2504
2505 static int run_dmesg (const char *cmd, int argc, char *argv[])
2506 {
2507   char *r;
2508   if (argc != 0) {
2509     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
2510     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2511     return -1;
2512   }
2513   r = guestfs_dmesg (g);
2514   if (r == NULL) return -1;
2515   printf ("%s\n", r);
2516   free (r);
2517   return 0;
2518 }
2519
2520 static int run_ping_daemon (const char *cmd, int argc, char *argv[])
2521 {
2522   int r;
2523   if (argc != 0) {
2524     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
2525     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2526     return -1;
2527   }
2528   r = guestfs_ping_daemon (g);
2529   return r;
2530 }
2531
2532 static int run_equal (const char *cmd, int argc, char *argv[])
2533 {
2534   int r;
2535   const char *file1;
2536   const char *file2;
2537   if (argc != 2) {
2538     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2539     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2540     return -1;
2541   }
2542   file1 = argv[0];
2543   file2 = argv[1];
2544   r = guestfs_equal (g, file1, file2);
2545   if (r == -1) return -1;
2546   if (r) printf ("true\n"); else printf ("false\n");
2547   return 0;
2548 }
2549
2550 static int run_strings (const char *cmd, int argc, char *argv[])
2551 {
2552   char **r;
2553   const char *path;
2554   if (argc != 1) {
2555     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2556     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2557     return -1;
2558   }
2559   path = argv[0];
2560   r = guestfs_strings (g, path);
2561   if (r == NULL) return -1;
2562   print_strings (r);
2563   free_strings (r);
2564   return 0;
2565 }
2566
2567 static int run_strings_e (const char *cmd, int argc, char *argv[])
2568 {
2569   char **r;
2570   const char *encoding;
2571   const char *path;
2572   if (argc != 2) {
2573     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2574     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2575     return -1;
2576   }
2577   encoding = argv[0];
2578   path = argv[1];
2579   r = guestfs_strings_e (g, encoding, path);
2580   if (r == NULL) return -1;
2581   print_strings (r);
2582   free_strings (r);
2583   return 0;
2584 }
2585
2586 static int run_hexdump (const char *cmd, int argc, char *argv[])
2587 {
2588   char *r;
2589   const char *path;
2590   if (argc != 1) {
2591     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2592     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2593     return -1;
2594   }
2595   path = argv[0];
2596   r = guestfs_hexdump (g, path);
2597   if (r == NULL) return -1;
2598   printf ("%s\n", r);
2599   free (r);
2600   return 0;
2601 }
2602
2603 static int run_zerofree (const char *cmd, int argc, char *argv[])
2604 {
2605   int r;
2606   const char *device;
2607   if (argc != 1) {
2608     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2609     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2610     return -1;
2611   }
2612   device = argv[0];
2613   r = guestfs_zerofree (g, device);
2614   return r;
2615 }
2616
2617 static int run_pvresize (const char *cmd, int argc, char *argv[])
2618 {
2619   int r;
2620   const char *device;
2621   if (argc != 1) {
2622     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2623     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2624     return -1;
2625   }
2626   device = argv[0];
2627   r = guestfs_pvresize (g, device);
2628   return r;
2629 }
2630
2631 static int run_sfdisk_N (const char *cmd, int argc, char *argv[])
2632 {
2633   int r;
2634   const char *device;
2635   int partnum;
2636   int cyls;
2637   int heads;
2638   int sectors;
2639   const char *line;
2640   if (argc != 6) {
2641     fprintf (stderr, "%s should have 6 parameter(s)\n", cmd);
2642     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2643     return -1;
2644   }
2645   device = argv[0];
2646   partnum = atoi (argv[1]);
2647   cyls = atoi (argv[2]);
2648   heads = atoi (argv[3]);
2649   sectors = atoi (argv[4]);
2650   line = argv[5];
2651   r = guestfs_sfdisk_N (g, device, partnum, cyls, heads, sectors, line);
2652   return r;
2653 }
2654
2655 static int run_sfdisk_l (const char *cmd, int argc, char *argv[])
2656 {
2657   char *r;
2658   const char *device;
2659   if (argc != 1) {
2660     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2661     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2662     return -1;
2663   }
2664   device = argv[0];
2665   r = guestfs_sfdisk_l (g, device);
2666   if (r == NULL) return -1;
2667   printf ("%s\n", r);
2668   free (r);
2669   return 0;
2670 }
2671
2672 static int run_sfdisk_kernel_geometry (const char *cmd, int argc, char *argv[])
2673 {
2674   char *r;
2675   const char *device;
2676   if (argc != 1) {
2677     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2678     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2679     return -1;
2680   }
2681   device = argv[0];
2682   r = guestfs_sfdisk_kernel_geometry (g, device);
2683   if (r == NULL) return -1;
2684   printf ("%s\n", r);
2685   free (r);
2686   return 0;
2687 }
2688
2689 static int run_sfdisk_disk_geometry (const char *cmd, int argc, char *argv[])
2690 {
2691   char *r;
2692   const char *device;
2693   if (argc != 1) {
2694     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2695     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2696     return -1;
2697   }
2698   device = argv[0];
2699   r = guestfs_sfdisk_disk_geometry (g, device);
2700   if (r == NULL) return -1;
2701   printf ("%s\n", r);
2702   free (r);
2703   return 0;
2704 }
2705
2706 static int run_vg_activate_all (const char *cmd, int argc, char *argv[])
2707 {
2708   int r;
2709   int activate;
2710   if (argc != 1) {
2711     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2712     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2713     return -1;
2714   }
2715   activate = is_true (argv[0]) ? 1 : 0;
2716   r = guestfs_vg_activate_all (g, activate);
2717   return r;
2718 }
2719
2720 static int run_vg_activate (const char *cmd, int argc, char *argv[])
2721 {
2722   int r;
2723   int activate;
2724   char **volgroups;
2725   if (argc != 2) {
2726     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2727     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2728     return -1;
2729   }
2730   activate = is_true (argv[0]) ? 1 : 0;
2731   volgroups = parse_string_list (argv[1]);
2732   r = guestfs_vg_activate (g, activate, volgroups);
2733   return r;
2734 }
2735
2736 static int run_lvresize (const char *cmd, int argc, char *argv[])
2737 {
2738   int r;
2739   const char *device;
2740   int mbytes;
2741   if (argc != 2) {
2742     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2743     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2744     return -1;
2745   }
2746   device = argv[0];
2747   mbytes = atoi (argv[1]);
2748   r = guestfs_lvresize (g, device, mbytes);
2749   return r;
2750 }
2751
2752 static int run_resize2fs (const char *cmd, int argc, char *argv[])
2753 {
2754   int r;
2755   const char *device;
2756   if (argc != 1) {
2757     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2758     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2759     return -1;
2760   }
2761   device = argv[0];
2762   r = guestfs_resize2fs (g, device);
2763   return r;
2764 }
2765
2766 static int run_find (const char *cmd, int argc, char *argv[])
2767 {
2768   char **r;
2769   const char *directory;
2770   if (argc != 1) {
2771     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2772     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2773     return -1;
2774   }
2775   directory = argv[0];
2776   r = guestfs_find (g, directory);
2777   if (r == NULL) return -1;
2778   print_strings (r);
2779   free_strings (r);
2780   return 0;
2781 }
2782
2783 static int run_e2fsck_f (const char *cmd, int argc, char *argv[])
2784 {
2785   int r;
2786   const char *device;
2787   if (argc != 1) {
2788     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2789     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2790     return -1;
2791   }
2792   device = argv[0];
2793   r = guestfs_e2fsck_f (g, device);
2794   return r;
2795 }
2796
2797 static int run_sleep (const char *cmd, int argc, char *argv[])
2798 {
2799   int r;
2800   int secs;
2801   if (argc != 1) {
2802     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2803     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2804     return -1;
2805   }
2806   secs = atoi (argv[0]);
2807   r = guestfs_sleep (g, secs);
2808   return r;
2809 }
2810
2811 static int run_ntfs_3g_probe (const char *cmd, int argc, char *argv[])
2812 {
2813   int r;
2814   int rw;
2815   const char *device;
2816   if (argc != 2) {
2817     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2818     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2819     return -1;
2820   }
2821   rw = is_true (argv[0]) ? 1 : 0;
2822   device = argv[1];
2823   r = guestfs_ntfs_3g_probe (g, rw, device);
2824   if (r == -1) return -1;
2825   printf ("%d\n", r);
2826   return 0;
2827 }
2828
2829 static int run_sh (const char *cmd, int argc, char *argv[])
2830 {
2831   char *r;
2832   const char *command;
2833   if (argc != 1) {
2834     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2835     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2836     return -1;
2837   }
2838   command = argv[0];
2839   r = guestfs_sh (g, command);
2840   if (r == NULL) return -1;
2841   printf ("%s\n", r);
2842   free (r);
2843   return 0;
2844 }
2845
2846 static int run_sh_lines (const char *cmd, int argc, char *argv[])
2847 {
2848   char **r;
2849   const char *command;
2850   if (argc != 1) {
2851     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2852     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2853     return -1;
2854   }
2855   command = argv[0];
2856   r = guestfs_sh_lines (g, command);
2857   if (r == NULL) return -1;
2858   print_strings (r);
2859   free_strings (r);
2860   return 0;
2861 }
2862
2863 static int run_glob_expand (const char *cmd, int argc, char *argv[])
2864 {
2865   char **r;
2866   const char *pattern;
2867   if (argc != 1) {
2868     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2869     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2870     return -1;
2871   }
2872   pattern = argv[0];
2873   r = guestfs_glob_expand (g, pattern);
2874   if (r == NULL) return -1;
2875   print_strings (r);
2876   free_strings (r);
2877   return 0;
2878 }
2879
2880 static int run_scrub_device (const char *cmd, int argc, char *argv[])
2881 {
2882   int r;
2883   const char *device;
2884   if (argc != 1) {
2885     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2886     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2887     return -1;
2888   }
2889   device = argv[0];
2890   r = guestfs_scrub_device (g, device);
2891   return r;
2892 }
2893
2894 static int run_scrub_file (const char *cmd, int argc, char *argv[])
2895 {
2896   int r;
2897   const char *file;
2898   if (argc != 1) {
2899     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2900     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2901     return -1;
2902   }
2903   file = argv[0];
2904   r = guestfs_scrub_file (g, file);
2905   return r;
2906 }
2907
2908 static int run_scrub_freespace (const char *cmd, int argc, char *argv[])
2909 {
2910   int r;
2911   const char *dir;
2912   if (argc != 1) {
2913     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2914     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2915     return -1;
2916   }
2917   dir = argv[0];
2918   r = guestfs_scrub_freespace (g, dir);
2919   return r;
2920 }
2921
2922 static int run_mkdtemp (const char *cmd, int argc, char *argv[])
2923 {
2924   char *r;
2925   const char *template;
2926   if (argc != 1) {
2927     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2928     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2929     return -1;
2930   }
2931   template = argv[0];
2932   r = guestfs_mkdtemp (g, template);
2933   if (r == NULL) return -1;
2934   printf ("%s\n", r);
2935   free (r);
2936   return 0;
2937 }
2938
2939 static int run_wc_l (const char *cmd, int argc, char *argv[])
2940 {
2941   int r;
2942   const char *path;
2943   if (argc != 1) {
2944     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2945     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2946     return -1;
2947   }
2948   path = argv[0];
2949   r = guestfs_wc_l (g, path);
2950   if (r == -1) return -1;
2951   printf ("%d\n", r);
2952   return 0;
2953 }
2954
2955 static int run_wc_w (const char *cmd, int argc, char *argv[])
2956 {
2957   int r;
2958   const char *path;
2959   if (argc != 1) {
2960     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2961     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2962     return -1;
2963   }
2964   path = argv[0];
2965   r = guestfs_wc_w (g, path);
2966   if (r == -1) return -1;
2967   printf ("%d\n", r);
2968   return 0;
2969 }
2970
2971 static int run_wc_c (const char *cmd, int argc, char *argv[])
2972 {
2973   int r;
2974   const char *path;
2975   if (argc != 1) {
2976     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2977     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2978     return -1;
2979   }
2980   path = argv[0];
2981   r = guestfs_wc_c (g, path);
2982   if (r == -1) return -1;
2983   printf ("%d\n", r);
2984   return 0;
2985 }
2986
2987 static int run_head (const char *cmd, int argc, char *argv[])
2988 {
2989   char **r;
2990   const char *path;
2991   if (argc != 1) {
2992     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2993     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2994     return -1;
2995   }
2996   path = argv[0];
2997   r = guestfs_head (g, path);
2998   if (r == NULL) return -1;
2999   print_strings (r);
3000   free_strings (r);
3001   return 0;
3002 }
3003
3004 static int run_head_n (const char *cmd, int argc, char *argv[])
3005 {
3006   char **r;
3007   int nrlines;
3008   const char *path;
3009   if (argc != 2) {
3010     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
3011     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3012     return -1;
3013   }
3014   nrlines = atoi (argv[0]);
3015   path = argv[1];
3016   r = guestfs_head_n (g, nrlines, path);
3017   if (r == NULL) return -1;
3018   print_strings (r);
3019   free_strings (r);
3020   return 0;
3021 }
3022
3023 static int run_tail (const char *cmd, int argc, char *argv[])
3024 {
3025   char **r;
3026   const char *path;
3027   if (argc != 1) {
3028     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
3029     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3030     return -1;
3031   }
3032   path = argv[0];
3033   r = guestfs_tail (g, path);
3034   if (r == NULL) return -1;
3035   print_strings (r);
3036   free_strings (r);
3037   return 0;
3038 }
3039
3040 static int run_tail_n (const char *cmd, int argc, char *argv[])
3041 {
3042   char **r;
3043   int nrlines;
3044   const char *path;
3045   if (argc != 2) {
3046     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
3047     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3048     return -1;
3049   }
3050   nrlines = atoi (argv[0]);
3051   path = argv[1];
3052   r = guestfs_tail_n (g, nrlines, path);
3053   if (r == NULL) return -1;
3054   print_strings (r);
3055   free_strings (r);
3056   return 0;
3057 }
3058
3059 static int run_df (const char *cmd, int argc, char *argv[])
3060 {
3061   char *r;
3062   if (argc != 0) {
3063     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
3064     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3065     return -1;
3066   }
3067   r = guestfs_df (g);
3068   if (r == NULL) return -1;
3069   printf ("%s\n", r);
3070   free (r);
3071   return 0;
3072 }
3073
3074 static int run_df_h (const char *cmd, int argc, char *argv[])
3075 {
3076   char *r;
3077   if (argc != 0) {
3078     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
3079     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3080     return -1;
3081   }
3082   r = guestfs_df_h (g);
3083   if (r == NULL) return -1;
3084   printf ("%s\n", r);
3085   free (r);
3086   return 0;
3087 }
3088
3089 static int run_du (const char *cmd, int argc, char *argv[])
3090 {
3091   int64_t r;
3092   const char *path;
3093   if (argc != 1) {
3094     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
3095     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3096     return -1;
3097   }
3098   path = argv[0];
3099   r = guestfs_du (g, path);
3100   if (r == -1) return -1;
3101   printf ("%" PRIi64 "\n", r);
3102   return 0;
3103 }
3104
3105 static int run_initrd_list (const char *cmd, int argc, char *argv[])
3106 {
3107   char **r;
3108   const char *path;
3109   if (argc != 1) {
3110     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
3111     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3112     return -1;
3113   }
3114   path = argv[0];
3115   r = guestfs_initrd_list (g, path);
3116   if (r == NULL) return -1;
3117   print_strings (r);
3118   free_strings (r);
3119   return 0;
3120 }
3121
3122 static int run_mount_loop (const char *cmd, int argc, char *argv[])
3123 {
3124   int r;
3125   const char *file;
3126   const char *mountpoint;
3127   if (argc != 2) {
3128     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
3129     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3130     return -1;
3131   }
3132   file = argv[0];
3133   mountpoint = argv[1];
3134   r = guestfs_mount_loop (g, file, mountpoint);
3135   return r;
3136 }
3137
3138 static int run_mkswap (const char *cmd, int argc, char *argv[])
3139 {
3140   int r;
3141   const char *device;
3142   if (argc != 1) {
3143     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
3144     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3145     return -1;
3146   }
3147   device = argv[0];
3148   r = guestfs_mkswap (g, device);
3149   return r;
3150 }
3151
3152 static int run_mkswap_L (const char *cmd, int argc, char *argv[])
3153 {
3154   int r;
3155   const char *label;
3156   const char *device;
3157   if (argc != 2) {
3158     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
3159     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3160     return -1;
3161   }
3162   label = argv[0];
3163   device = argv[1];
3164   r = guestfs_mkswap_L (g, label, device);
3165   return r;
3166 }
3167
3168 static int run_mkswap_U (const char *cmd, int argc, char *argv[])
3169 {
3170   int r;
3171   const char *uuid;
3172   const char *device;
3173   if (argc != 2) {
3174     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
3175     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3176     return -1;
3177   }
3178   uuid = argv[0];
3179   device = argv[1];
3180   r = guestfs_mkswap_U (g, uuid, device);
3181   return r;
3182 }
3183
3184 int run_action (const char *cmd, int argc, char *argv[])
3185 {
3186   if (strcasecmp (cmd, "launch") == 0 || strcasecmp (cmd, "run") == 0)
3187     return run_launch (cmd, argc, argv);
3188   else
3189   if (strcasecmp (cmd, "kill_subprocess") == 0 || strcasecmp (cmd, "kill-subprocess") == 0)
3190     return run_kill_subprocess (cmd, argc, argv);
3191   else
3192   if (strcasecmp (cmd, "add_drive") == 0 || strcasecmp (cmd, "add-drive") == 0 || strcasecmp (cmd, "add") == 0)
3193     return run_add_drive (cmd, argc, argv);
3194   else
3195   if (strcasecmp (cmd, "add_cdrom") == 0 || strcasecmp (cmd, "add-cdrom") == 0 || strcasecmp (cmd, "cdrom") == 0)
3196     return run_add_cdrom (cmd, argc, argv);
3197   else
3198   if (strcasecmp (cmd, "add_drive_ro") == 0 || strcasecmp (cmd, "add-drive-ro") == 0 || strcasecmp (cmd, "add-ro") == 0)
3199     return run_add_drive_ro (cmd, argc, argv);
3200   else
3201   if (strcasecmp (cmd, "config") == 0)
3202     return run_config (cmd, argc, argv);
3203   else
3204   if (strcasecmp (cmd, "set_qemu") == 0 || strcasecmp (cmd, "set-qemu") == 0 || strcasecmp (cmd, "qemu") == 0)
3205     return run_set_qemu (cmd, argc, argv);
3206   else
3207   if (strcasecmp (cmd, "get_qemu") == 0 || strcasecmp (cmd, "get-qemu") == 0)
3208     return run_get_qemu (cmd, argc, argv);
3209   else
3210   if (strcasecmp (cmd, "set_path") == 0 || strcasecmp (cmd, "set-path") == 0 || strcasecmp (cmd, "path") == 0)
3211     return run_set_path (cmd, argc, argv);
3212   else
3213   if (strcasecmp (cmd, "get_path") == 0 || strcasecmp (cmd, "get-path") == 0)
3214     return run_get_path (cmd, argc, argv);
3215   else
3216   if (strcasecmp (cmd, "set_append") == 0 || strcasecmp (cmd, "set-append") == 0 || strcasecmp (cmd, "append") == 0)
3217     return run_set_append (cmd, argc, argv);
3218   else
3219   if (strcasecmp (cmd, "get_append") == 0 || strcasecmp (cmd, "get-append") == 0)
3220     return run_get_append (cmd, argc, argv);
3221   else
3222   if (strcasecmp (cmd, "set_autosync") == 0 || strcasecmp (cmd, "set-autosync") == 0 || strcasecmp (cmd, "autosync") == 0)
3223     return run_set_autosync (cmd, argc, argv);
3224   else
3225   if (strcasecmp (cmd, "get_autosync") == 0 || strcasecmp (cmd, "get-autosync") == 0)
3226     return run_get_autosync (cmd, argc, argv);
3227   else
3228   if (strcasecmp (cmd, "set_verbose") == 0 || strcasecmp (cmd, "set-verbose") == 0 || strcasecmp (cmd, "verbose") == 0)
3229     return run_set_verbose (cmd, argc, argv);
3230   else
3231   if (strcasecmp (cmd, "get_verbose") == 0 || strcasecmp (cmd, "get-verbose") == 0)
3232     return run_get_verbose (cmd, argc, argv);
3233   else
3234   if (strcasecmp (cmd, "is_ready") == 0 || strcasecmp (cmd, "is-ready") == 0)
3235     return run_is_ready (cmd, argc, argv);
3236   else
3237   if (strcasecmp (cmd, "is_config") == 0 || strcasecmp (cmd, "is-config") == 0)
3238     return run_is_config (cmd, argc, argv);
3239   else
3240   if (strcasecmp (cmd, "is_launching") == 0 || strcasecmp (cmd, "is-launching") == 0)
3241     return run_is_launching (cmd, argc, argv);
3242   else
3243   if (strcasecmp (cmd, "is_busy") == 0 || strcasecmp (cmd, "is-busy") == 0)
3244     return run_is_busy (cmd, argc, argv);
3245   else
3246   if (strcasecmp (cmd, "get_state") == 0 || strcasecmp (cmd, "get-state") == 0)
3247     return run_get_state (cmd, argc, argv);
3248   else
3249   if (strcasecmp (cmd, "mount") == 0)
3250     return run_mount (cmd, argc, argv);
3251   else
3252   if (strcasecmp (cmd, "sync") == 0)
3253     return run_sync (cmd, argc, argv);
3254   else
3255   if (strcasecmp (cmd, "touch") == 0)
3256     return run_touch (cmd, argc, argv);
3257   else
3258   if (strcasecmp (cmd, "cat") == 0)
3259     return run_cat (cmd, argc, argv);
3260   else
3261   if (strcasecmp (cmd, "ll") == 0)
3262     return run_ll (cmd, argc, argv);
3263   else
3264   if (strcasecmp (cmd, "ls") == 0)
3265     return run_ls (cmd, argc, argv);
3266   else
3267   if (strcasecmp (cmd, "list_devices") == 0 || strcasecmp (cmd, "list-devices") == 0)
3268     return run_list_devices (cmd, argc, argv);
3269   else
3270   if (strcasecmp (cmd, "list_partitions") == 0 || strcasecmp (cmd, "list-partitions") == 0)
3271     return run_list_partitions (cmd, argc, argv);
3272   else
3273   if (strcasecmp (cmd, "pvs") == 0)
3274     return run_pvs (cmd, argc, argv);
3275   else
3276   if (strcasecmp (cmd, "vgs") == 0)
3277     return run_vgs (cmd, argc, argv);
3278   else
3279   if (strcasecmp (cmd, "lvs") == 0)
3280     return run_lvs (cmd, argc, argv);
3281   else
3282   if (strcasecmp (cmd, "pvs_full") == 0 || strcasecmp (cmd, "pvs-full") == 0)
3283     return run_pvs_full (cmd, argc, argv);
3284   else
3285   if (strcasecmp (cmd, "vgs_full") == 0 || strcasecmp (cmd, "vgs-full") == 0)
3286     return run_vgs_full (cmd, argc, argv);
3287   else
3288   if (strcasecmp (cmd, "lvs_full") == 0 || strcasecmp (cmd, "lvs-full") == 0)
3289     return run_lvs_full (cmd, argc, argv);
3290   else
3291   if (strcasecmp (cmd, "read_lines") == 0 || strcasecmp (cmd, "read-lines") == 0)
3292     return run_read_lines (cmd, argc, argv);
3293   else
3294   if (strcasecmp (cmd, "aug_init") == 0 || strcasecmp (cmd, "aug-init") == 0)
3295     return run_aug_init (cmd, argc, argv);
3296   else
3297   if (strcasecmp (cmd, "aug_close") == 0 || strcasecmp (cmd, "aug-close") == 0)
3298     return run_aug_close (cmd, argc, argv);
3299   else
3300   if (strcasecmp (cmd, "aug_defvar") == 0 || strcasecmp (cmd, "aug-defvar") == 0)
3301     return run_aug_defvar (cmd, argc, argv);
3302   else
3303   if (strcasecmp (cmd, "aug_defnode") == 0 || strcasecmp (cmd, "aug-defnode") == 0)
3304     return run_aug_defnode (cmd, argc, argv);
3305   else
3306   if (strcasecmp (cmd, "aug_get") == 0 || strcasecmp (cmd, "aug-get") == 0)
3307     return run_aug_get (cmd, argc, argv);
3308   else
3309   if (strcasecmp (cmd, "aug_set") == 0 || strcasecmp (cmd, "aug-set") == 0)
3310     return run_aug_set (cmd, argc, argv);
3311   else
3312   if (strcasecmp (cmd, "aug_insert") == 0 || strcasecmp (cmd, "aug-insert") == 0)
3313     return run_aug_insert (cmd, argc, argv);
3314   else
3315   if (strcasecmp (cmd, "aug_rm") == 0 || strcasecmp (cmd, "aug-rm") == 0)
3316     return run_aug_rm (cmd, argc, argv);
3317   else
3318   if (strcasecmp (cmd, "aug_mv") == 0 || strcasecmp (cmd, "aug-mv") == 0)
3319     return run_aug_mv (cmd, argc, argv);
3320   else
3321   if (strcasecmp (cmd, "aug_match") == 0 || strcasecmp (cmd, "aug-match") == 0)
3322     return run_aug_match (cmd, argc, argv);
3323   else
3324   if (strcasecmp (cmd, "aug_save") == 0 || strcasecmp (cmd, "aug-save") == 0)
3325     return run_aug_save (cmd, argc, argv);
3326   else
3327   if (strcasecmp (cmd, "aug_load") == 0 || strcasecmp (cmd, "aug-load") == 0)
3328     return run_aug_load (cmd, argc, argv);
3329   else
3330   if (strcasecmp (cmd, "aug_ls") == 0 || strcasecmp (cmd, "aug-ls") == 0)
3331     return run_aug_ls (cmd, argc, argv);
3332   else
3333   if (strcasecmp (cmd, "rm") == 0)
3334     return run_rm (cmd, argc, argv);
3335   else
3336   if (strcasecmp (cmd, "rmdir") == 0)
3337     return run_rmdir (cmd, argc, argv);
3338   else
3339   if (strcasecmp (cmd, "rm_rf") == 0 || strcasecmp (cmd, "rm-rf") == 0)
3340     return run_rm_rf (cmd, argc, argv);
3341   else
3342   if (strcasecmp (cmd, "mkdir") == 0)
3343     return run_mkdir (cmd, argc, argv);
3344   else
3345   if (strcasecmp (cmd, "mkdir_p") == 0 || strcasecmp (cmd, "mkdir-p") == 0)
3346     return run_mkdir_p (cmd, argc, argv);
3347   else
3348   if (strcasecmp (cmd, "chmod") == 0)
3349     return run_chmod (cmd, argc, argv);
3350   else
3351   if (strcasecmp (cmd, "chown") == 0)
3352     return run_chown (cmd, argc, argv);
3353   else
3354   if (strcasecmp (cmd, "exists") == 0)
3355     return run_exists (cmd, argc, argv);
3356   else
3357   if (strcasecmp (cmd, "is_file") == 0 || strcasecmp (cmd, "is-file") == 0)
3358     return run_is_file (cmd, argc, argv);
3359   else
3360   if (strcasecmp (cmd, "is_dir") == 0 || strcasecmp (cmd, "is-dir") == 0)
3361     return run_is_dir (cmd, argc, argv);
3362   else
3363   if (strcasecmp (cmd, "pvcreate") == 0)
3364     return run_pvcreate (cmd, argc, argv);
3365   else
3366   if (strcasecmp (cmd, "vgcreate") == 0)
3367     return run_vgcreate (cmd, argc, argv);
3368   else
3369   if (strcasecmp (cmd, "lvcreate") == 0)
3370     return run_lvcreate (cmd, argc, argv);
3371   else
3372   if (strcasecmp (cmd, "mkfs") == 0)
3373     return run_mkfs (cmd, argc, argv);
3374   else
3375   if (strcasecmp (cmd, "sfdisk") == 0)
3376     return run_sfdisk (cmd, argc, argv);
3377   else
3378   if (strcasecmp (cmd, "write_file") == 0 || strcasecmp (cmd, "write-file") == 0)
3379     return run_write_file (cmd, argc, argv);
3380   else
3381   if (strcasecmp (cmd, "umount") == 0 || strcasecmp (cmd, "unmount") == 0)
3382     return run_umount (cmd, argc, argv);
3383   else
3384   if (strcasecmp (cmd, "mounts") == 0)
3385     return run_mounts (cmd, argc, argv);
3386   else
3387   if (strcasecmp (cmd, "umount_all") == 0 || strcasecmp (cmd, "umount-all") == 0 || strcasecmp (cmd, "unmount-all") == 0)
3388     return run_umount_all (cmd, argc, argv);
3389   else
3390   if (strcasecmp (cmd, "lvm_remove_all") == 0 || strcasecmp (cmd, "lvm-remove-all") == 0)
3391     return run_lvm_remove_all (cmd, argc, argv);
3392   else
3393   if (strcasecmp (cmd, "file") == 0)
3394     return run_file (cmd, argc, argv);
3395   else
3396   if (strcasecmp (cmd, "command") == 0)
3397     return run_command (cmd, argc, argv);
3398   else
3399   if (strcasecmp (cmd, "command_lines") == 0 || strcasecmp (cmd, "command-lines") == 0)
3400     return run_command_lines (cmd, argc, argv);
3401   else
3402   if (strcasecmp (cmd, "stat") == 0)
3403     return run_stat (cmd, argc, argv);
3404   else
3405   if (strcasecmp (cmd, "lstat") == 0)
3406     return run_lstat (cmd, argc, argv);
3407   else
3408   if (strcasecmp (cmd, "statvfs") == 0)
3409     return run_statvfs (cmd, argc, argv);
3410   else
3411   if (strcasecmp (cmd, "tune2fs_l") == 0 || strcasecmp (cmd, "tune2fs-l") == 0)
3412     return run_tune2fs_l (cmd, argc, argv);
3413   else
3414   if (strcasecmp (cmd, "blockdev_setro") == 0 || strcasecmp (cmd, "blockdev-setro") == 0)
3415     return run_blockdev_setro (cmd, argc, argv);
3416   else
3417   if (strcasecmp (cmd, "blockdev_setrw") == 0 || strcasecmp (cmd, "blockdev-setrw") == 0)
3418     return run_blockdev_setrw (cmd, argc, argv);
3419   else
3420   if (strcasecmp (cmd, "blockdev_getro") == 0 || strcasecmp (cmd, "blockdev-getro") == 0)
3421     return run_blockdev_getro (cmd, argc, argv);
3422   else
3423   if (strcasecmp (cmd, "blockdev_getss") == 0 || strcasecmp (cmd, "blockdev-getss") == 0)
3424     return run_blockdev_getss (cmd, argc, argv);
3425   else
3426   if (strcasecmp (cmd, "blockdev_getbsz") == 0 || strcasecmp (cmd, "blockdev-getbsz") == 0)
3427     return run_blockdev_getbsz (cmd, argc, argv);
3428   else
3429   if (strcasecmp (cmd, "blockdev_setbsz") == 0 || strcasecmp (cmd, "blockdev-setbsz") == 0)
3430     return run_blockdev_setbsz (cmd, argc, argv);
3431   else
3432   if (strcasecmp (cmd, "blockdev_getsz") == 0 || strcasecmp (cmd, "blockdev-getsz") == 0)
3433     return run_blockdev_getsz (cmd, argc, argv);
3434   else
3435   if (strcasecmp (cmd, "blockdev_getsize64") == 0 || strcasecmp (cmd, "blockdev-getsize64") == 0)
3436     return run_blockdev_getsize64 (cmd, argc, argv);
3437   else
3438   if (strcasecmp (cmd, "blockdev_flushbufs") == 0 || strcasecmp (cmd, "blockdev-flushbufs") == 0)
3439     return run_blockdev_flushbufs (cmd, argc, argv);
3440   else
3441   if (strcasecmp (cmd, "blockdev_rereadpt") == 0 || strcasecmp (cmd, "blockdev-rereadpt") == 0)
3442     return run_blockdev_rereadpt (cmd, argc, argv);
3443   else
3444   if (strcasecmp (cmd, "upload") == 0)
3445     return run_upload (cmd, argc, argv);
3446   else
3447   if (strcasecmp (cmd, "download") == 0)
3448     return run_download (cmd, argc, argv);
3449   else
3450   if (strcasecmp (cmd, "checksum") == 0)
3451     return run_checksum (cmd, argc, argv);
3452   else
3453   if (strcasecmp (cmd, "tar_in") == 0 || strcasecmp (cmd, "tar-in") == 0)
3454     return run_tar_in (cmd, argc, argv);
3455   else
3456   if (strcasecmp (cmd, "tar_out") == 0 || strcasecmp (cmd, "tar-out") == 0)
3457     return run_tar_out (cmd, argc, argv);
3458   else
3459   if (strcasecmp (cmd, "tgz_in") == 0 || strcasecmp (cmd, "tgz-in") == 0)
3460     return run_tgz_in (cmd, argc, argv);
3461   else
3462   if (strcasecmp (cmd, "tgz_out") == 0 || strcasecmp (cmd, "tgz-out") == 0)
3463     return run_tgz_out (cmd, argc, argv);
3464   else
3465   if (strcasecmp (cmd, "mount_ro") == 0 || strcasecmp (cmd, "mount-ro") == 0)
3466     return run_mount_ro (cmd, argc, argv);
3467   else
3468   if (strcasecmp (cmd, "mount_options") == 0 || strcasecmp (cmd, "mount-options") == 0)
3469     return run_mount_options (cmd, argc, argv);
3470   else
3471   if (strcasecmp (cmd, "mount_vfs") == 0 || strcasecmp (cmd, "mount-vfs") == 0)
3472     return run_mount_vfs (cmd, argc, argv);
3473   else
3474   if (strcasecmp (cmd, "debug") == 0)
3475     return run_debug (cmd, argc, argv);
3476   else
3477   if (strcasecmp (cmd, "lvremove") == 0)
3478     return run_lvremove (cmd, argc, argv);
3479   else
3480   if (strcasecmp (cmd, "vgremove") == 0)
3481     return run_vgremove (cmd, argc, argv);
3482   else
3483   if (strcasecmp (cmd, "pvremove") == 0)
3484     return run_pvremove (cmd, argc, argv);
3485   else
3486   if (strcasecmp (cmd, "set_e2label") == 0 || strcasecmp (cmd, "set-e2label") == 0)
3487     return run_set_e2label (cmd, argc, argv);
3488   else
3489   if (strcasecmp (cmd, "get_e2label") == 0 || strcasecmp (cmd, "get-e2label") == 0)
3490     return run_get_e2label (cmd, argc, argv);
3491   else
3492   if (strcasecmp (cmd, "set_e2uuid") == 0 || strcasecmp (cmd, "set-e2uuid") == 0)
3493     return run_set_e2uuid (cmd, argc, argv);
3494   else
3495   if (strcasecmp (cmd, "get_e2uuid") == 0 || strcasecmp (cmd, "get-e2uuid") == 0)
3496     return run_get_e2uuid (cmd, argc, argv);
3497   else
3498   if (strcasecmp (cmd, "fsck") == 0)
3499     return run_fsck (cmd, argc, argv);
3500   else
3501   if (strcasecmp (cmd, "zero") == 0)
3502     return run_zero (cmd, argc, argv);
3503   else
3504   if (strcasecmp (cmd, "grub_install") == 0 || strcasecmp (cmd, "grub-install") == 0)
3505     return run_grub_install (cmd, argc, argv);
3506   else
3507   if (strcasecmp (cmd, "cp") == 0)
3508     return run_cp (cmd, argc, argv);
3509   else
3510   if (strcasecmp (cmd, "cp_a") == 0 || strcasecmp (cmd, "cp-a") == 0)
3511     return run_cp_a (cmd, argc, argv);
3512   else
3513   if (strcasecmp (cmd, "mv") == 0)
3514     return run_mv (cmd, argc, argv);
3515   else
3516   if (strcasecmp (cmd, "drop_caches") == 0 || strcasecmp (cmd, "drop-caches") == 0)
3517     return run_drop_caches (cmd, argc, argv);
3518   else
3519   if (strcasecmp (cmd, "dmesg") == 0)
3520     return run_dmesg (cmd, argc, argv);
3521   else
3522   if (strcasecmp (cmd, "ping_daemon") == 0 || strcasecmp (cmd, "ping-daemon") == 0)
3523     return run_ping_daemon (cmd, argc, argv);
3524   else
3525   if (strcasecmp (cmd, "equal") == 0)
3526     return run_equal (cmd, argc, argv);
3527   else
3528   if (strcasecmp (cmd, "strings") == 0)
3529     return run_strings (cmd, argc, argv);
3530   else
3531   if (strcasecmp (cmd, "strings_e") == 0 || strcasecmp (cmd, "strings-e") == 0)
3532     return run_strings_e (cmd, argc, argv);
3533   else
3534   if (strcasecmp (cmd, "hexdump") == 0)
3535     return run_hexdump (cmd, argc, argv);
3536   else
3537   if (strcasecmp (cmd, "zerofree") == 0)
3538     return run_zerofree (cmd, argc, argv);
3539   else
3540   if (strcasecmp (cmd, "pvresize") == 0)
3541     return run_pvresize (cmd, argc, argv);
3542   else
3543   if (strcasecmp (cmd, "sfdisk_N") == 0 || strcasecmp (cmd, "sfdisk-N") == 0)
3544     return run_sfdisk_N (cmd, argc, argv);
3545   else
3546   if (strcasecmp (cmd, "sfdisk_l") == 0 || strcasecmp (cmd, "sfdisk-l") == 0)
3547     return run_sfdisk_l (cmd, argc, argv);
3548   else
3549   if (strcasecmp (cmd, "sfdisk_kernel_geometry") == 0 || strcasecmp (cmd, "sfdisk-kernel-geometry") == 0)
3550     return run_sfdisk_kernel_geometry (cmd, argc, argv);
3551   else
3552   if (strcasecmp (cmd, "sfdisk_disk_geometry") == 0 || strcasecmp (cmd, "sfdisk-disk-geometry") == 0)
3553     return run_sfdisk_disk_geometry (cmd, argc, argv);
3554   else
3555   if (strcasecmp (cmd, "vg_activate_all") == 0 || strcasecmp (cmd, "vg-activate-all") == 0)
3556     return run_vg_activate_all (cmd, argc, argv);
3557   else
3558   if (strcasecmp (cmd, "vg_activate") == 0 || strcasecmp (cmd, "vg-activate") == 0)
3559     return run_vg_activate (cmd, argc, argv);
3560   else
3561   if (strcasecmp (cmd, "lvresize") == 0)
3562     return run_lvresize (cmd, argc, argv);
3563   else
3564   if (strcasecmp (cmd, "resize2fs") == 0)
3565     return run_resize2fs (cmd, argc, argv);
3566   else
3567   if (strcasecmp (cmd, "find") == 0)
3568     return run_find (cmd, argc, argv);
3569   else
3570   if (strcasecmp (cmd, "e2fsck_f") == 0 || strcasecmp (cmd, "e2fsck-f") == 0)
3571     return run_e2fsck_f (cmd, argc, argv);
3572   else
3573   if (strcasecmp (cmd, "sleep") == 0)
3574     return run_sleep (cmd, argc, argv);
3575   else
3576   if (strcasecmp (cmd, "ntfs_3g_probe") == 0 || strcasecmp (cmd, "ntfs-3g-probe") == 0)
3577     return run_ntfs_3g_probe (cmd, argc, argv);
3578   else
3579   if (strcasecmp (cmd, "sh") == 0)
3580     return run_sh (cmd, argc, argv);
3581   else
3582   if (strcasecmp (cmd, "sh_lines") == 0 || strcasecmp (cmd, "sh-lines") == 0)
3583     return run_sh_lines (cmd, argc, argv);
3584   else
3585   if (strcasecmp (cmd, "glob_expand") == 0 || strcasecmp (cmd, "glob-expand") == 0)
3586     return run_glob_expand (cmd, argc, argv);
3587   else
3588   if (strcasecmp (cmd, "scrub_device") == 0 || strcasecmp (cmd, "scrub-device") == 0)
3589     return run_scrub_device (cmd, argc, argv);
3590   else
3591   if (strcasecmp (cmd, "scrub_file") == 0 || strcasecmp (cmd, "scrub-file") == 0)
3592     return run_scrub_file (cmd, argc, argv);
3593   else
3594   if (strcasecmp (cmd, "scrub_freespace") == 0 || strcasecmp (cmd, "scrub-freespace") == 0)
3595     return run_scrub_freespace (cmd, argc, argv);
3596   else
3597   if (strcasecmp (cmd, "mkdtemp") == 0)
3598     return run_mkdtemp (cmd, argc, argv);
3599   else
3600   if (strcasecmp (cmd, "wc_l") == 0 || strcasecmp (cmd, "wc-l") == 0)
3601     return run_wc_l (cmd, argc, argv);
3602   else
3603   if (strcasecmp (cmd, "wc_w") == 0 || strcasecmp (cmd, "wc-w") == 0)
3604     return run_wc_w (cmd, argc, argv);
3605   else
3606   if (strcasecmp (cmd, "wc_c") == 0 || strcasecmp (cmd, "wc-c") == 0)
3607     return run_wc_c (cmd, argc, argv);
3608   else
3609   if (strcasecmp (cmd, "head") == 0)
3610     return run_head (cmd, argc, argv);
3611   else
3612   if (strcasecmp (cmd, "head_n") == 0 || strcasecmp (cmd, "head-n") == 0)
3613     return run_head_n (cmd, argc, argv);
3614   else
3615   if (strcasecmp (cmd, "tail") == 0)
3616     return run_tail (cmd, argc, argv);
3617   else
3618   if (strcasecmp (cmd, "tail_n") == 0 || strcasecmp (cmd, "tail-n") == 0)
3619     return run_tail_n (cmd, argc, argv);
3620   else
3621   if (strcasecmp (cmd, "df") == 0)
3622     return run_df (cmd, argc, argv);
3623   else
3624   if (strcasecmp (cmd, "df_h") == 0 || strcasecmp (cmd, "df-h") == 0)
3625     return run_df_h (cmd, argc, argv);
3626   else
3627   if (strcasecmp (cmd, "du") == 0)
3628     return run_du (cmd, argc, argv);
3629   else
3630   if (strcasecmp (cmd, "initrd_list") == 0 || strcasecmp (cmd, "initrd-list") == 0)
3631     return run_initrd_list (cmd, argc, argv);
3632   else
3633   if (strcasecmp (cmd, "mount_loop") == 0 || strcasecmp (cmd, "mount-loop") == 0)
3634     return run_mount_loop (cmd, argc, argv);
3635   else
3636   if (strcasecmp (cmd, "mkswap") == 0)
3637     return run_mkswap (cmd, argc, argv);
3638   else
3639   if (strcasecmp (cmd, "mkswap_L") == 0 || strcasecmp (cmd, "mkswap-L") == 0)
3640     return run_mkswap_L (cmd, argc, argv);
3641   else
3642   if (strcasecmp (cmd, "mkswap_U") == 0 || strcasecmp (cmd, "mkswap-U") == 0)
3643     return run_mkswap_U (cmd, argc, argv);
3644   else
3645     {
3646       fprintf (stderr, "%s: unknown command\n", cmd);
3647       return -1;
3648     }
3649   return 0;
3650 }
3651