Generated code for 'initrd-list'.
[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", "mount", "mount a guest disk at a position in the filesystem");
120   printf ("%-20s %s\n", "mount-options", "mount a guest disk with mount options");
121   printf ("%-20s %s\n", "mount-ro", "mount a guest disk, read-only");
122   printf ("%-20s %s\n", "mount-vfs", "mount a guest disk with mount options and vfstype");
123   printf ("%-20s %s\n", "mounts", "show mounted filesystems");
124   printf ("%-20s %s\n", "mv", "move a file");
125   printf ("%-20s %s\n", "ntfs-3g-probe", "probe NTFS volume");
126   printf ("%-20s %s\n", "ping-daemon", "ping the guest daemon");
127   printf ("%-20s %s\n", "pvcreate", "create an LVM physical volume");
128   printf ("%-20s %s\n", "pvremove", "remove an LVM physical volume");
129   printf ("%-20s %s\n", "pvresize", "resize an LVM physical volume");
130   printf ("%-20s %s\n", "pvs", "list the LVM physical volumes (PVs)");
131   printf ("%-20s %s\n", "pvs-full", "list the LVM physical volumes (PVs)");
132   printf ("%-20s %s\n", "read-lines", "read file as lines");
133   printf ("%-20s %s\n", "resize2fs", "resize an ext2/ext3 filesystem");
134   printf ("%-20s %s\n", "rm", "remove a file");
135   printf ("%-20s %s\n", "rm-rf", "remove a file or directory recursively");
136   printf ("%-20s %s\n", "rmdir", "remove a directory");
137   printf ("%-20s %s\n", "scrub-device", "scrub (securely wipe) a device");
138   printf ("%-20s %s\n", "scrub-file", "scrub (securely wipe) a file");
139   printf ("%-20s %s\n", "scrub-freespace", "scrub (securely wipe) free space");
140   printf ("%-20s %s\n", "set-append", "add options to kernel command line");
141   printf ("%-20s %s\n", "set-autosync", "set autosync mode");
142   printf ("%-20s %s\n", "set-e2label", "set the ext2/3/4 filesystem label");
143   printf ("%-20s %s\n", "set-e2uuid", "set the ext2/3/4 filesystem UUID");
144   printf ("%-20s %s\n", "set-path", "set the search path");
145   printf ("%-20s %s\n", "set-qemu", "set the qemu binary");
146   printf ("%-20s %s\n", "set-verbose", "set verbose mode");
147   printf ("%-20s %s\n", "sfdisk", "create partitions on a block device");
148   printf ("%-20s %s\n", "sfdisk-N", "modify a single partition on a block device");
149   printf ("%-20s %s\n", "sfdisk-disk-geometry", "display the disk geometry from the partition table");
150   printf ("%-20s %s\n", "sfdisk-kernel-geometry", "display the kernel geometry");
151   printf ("%-20s %s\n", "sfdisk-l", "display the partition table");
152   printf ("%-20s %s\n", "sh", "run a command via the shell");
153   printf ("%-20s %s\n", "sh-lines", "run a command via the shell returning lines");
154   printf ("%-20s %s\n", "sleep", "sleep for some seconds");
155   printf ("%-20s %s\n", "stat", "get file information");
156   printf ("%-20s %s\n", "statvfs", "get file system statistics");
157   printf ("%-20s %s\n", "strings", "print the printable strings in a file");
158   printf ("%-20s %s\n", "strings-e", "print the printable strings in a file");
159   printf ("%-20s %s\n", "sync", "sync disks, writes are flushed through to the disk image");
160   printf ("%-20s %s\n", "tail", "return last 10 lines of a file");
161   printf ("%-20s %s\n", "tail-n", "return last N lines of a file");
162   printf ("%-20s %s\n", "tar-in", "unpack tarfile to directory");
163   printf ("%-20s %s\n", "tar-out", "pack directory into tarfile");
164   printf ("%-20s %s\n", "tgz-in", "unpack compressed tarball to directory");
165   printf ("%-20s %s\n", "tgz-out", "pack directory into compressed tarball");
166   printf ("%-20s %s\n", "touch", "update file timestamps or create a new file");
167   printf ("%-20s %s\n", "tune2fs-l", "get ext2/ext3/ext4 superblock details");
168   printf ("%-20s %s\n", "umount", "unmount a filesystem");
169   printf ("%-20s %s\n", "umount-all", "unmount all filesystems");
170   printf ("%-20s %s\n", "upload", "upload a file from the local machine");
171   printf ("%-20s %s\n", "vg-activate", "activate or deactivate some volume groups");
172   printf ("%-20s %s\n", "vg-activate-all", "activate or deactivate all volume groups");
173   printf ("%-20s %s\n", "vgcreate", "create an LVM volume group");
174   printf ("%-20s %s\n", "vgremove", "remove an LVM volume group");
175   printf ("%-20s %s\n", "vgs", "list the LVM volume groups (VGs)");
176   printf ("%-20s %s\n", "vgs-full", "list the LVM volume groups (VGs)");
177   printf ("%-20s %s\n", "wc-c", "count characters in a file");
178   printf ("%-20s %s\n", "wc-l", "count lines in a file");
179   printf ("%-20s %s\n", "wc-w", "count words in a file");
180   printf ("%-20s %s\n", "write-file", "create a file");
181   printf ("%-20s %s\n", "zero", "write zeroes to the device");
182   printf ("%-20s %s\n", "zerofree", "zero unused inodes and disk blocks on ext2/3 filesystem");
183   printf ("    Use -h <cmd> / help <cmd> to show detailed help for a command.\n");
184 }
185
186 void display_command (const char *cmd)
187 {
188   if (strcasecmp (cmd, "launch") == 0 || strcasecmp (cmd, "run") == 0)
189     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.");
190   else
191   if (strcasecmp (cmd, "kill_subprocess") == 0 || strcasecmp (cmd, "kill-subprocess") == 0)
192     pod2text ("kill-subprocess - kill the qemu subprocess", " kill-subprocess\n\nThis kills the qemu subprocess.  You should never need to call this.");
193   else
194   if (strcasecmp (cmd, "add_drive") == 0 || strcasecmp (cmd, "add-drive") == 0 || strcasecmp (cmd, "add") == 0)
195     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.");
196   else
197   if (strcasecmp (cmd, "add_cdrom") == 0 || strcasecmp (cmd, "add-cdrom") == 0 || strcasecmp (cmd, "cdrom") == 0)
198     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.");
199   else
200   if (strcasecmp (cmd, "add_drive_ro") == 0 || strcasecmp (cmd, "add-drive-ro") == 0 || strcasecmp (cmd, "add-ro") == 0)
201     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.");
202   else
203   if (strcasecmp (cmd, "config") == 0)
204     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.");
205   else
206   if (strcasecmp (cmd, "set_qemu") == 0 || strcasecmp (cmd, "set-qemu") == 0 || strcasecmp (cmd, "qemu") == 0)
207     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.");
208   else
209   if (strcasecmp (cmd, "get_qemu") == 0 || strcasecmp (cmd, "get-qemu") == 0)
210     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.");
211   else
212   if (strcasecmp (cmd, "set_path") == 0 || strcasecmp (cmd, "set-path") == 0 || strcasecmp (cmd, "path") == 0)
213     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.");
214   else
215   if (strcasecmp (cmd, "get_path") == 0 || strcasecmp (cmd, "get-path") == 0)
216     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.");
217   else
218   if (strcasecmp (cmd, "set_append") == 0 || strcasecmp (cmd, "set-append") == 0 || strcasecmp (cmd, "append") == 0)
219     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.");
220   else
221   if (strcasecmp (cmd, "get_append") == 0 || strcasecmp (cmd, "get-append") == 0)
222     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.");
223   else
224   if (strcasecmp (cmd, "set_autosync") == 0 || strcasecmp (cmd, "set-autosync") == 0 || strcasecmp (cmd, "autosync") == 0)
225     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.");
226   else
227   if (strcasecmp (cmd, "get_autosync") == 0 || strcasecmp (cmd, "get-autosync") == 0)
228     pod2text ("get-autosync - get autosync mode", " get-autosync\n\nGet the autosync flag.");
229   else
230   if (strcasecmp (cmd, "set_verbose") == 0 || strcasecmp (cmd, "set-verbose") == 0 || strcasecmp (cmd, "verbose") == 0)
231     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.");
232   else
233   if (strcasecmp (cmd, "get_verbose") == 0 || strcasecmp (cmd, "get-verbose") == 0)
234     pod2text ("get-verbose - get verbose mode", " get-verbose\n\nThis returns the verbose messages flag.");
235   else
236   if (strcasecmp (cmd, "is_ready") == 0 || strcasecmp (cmd, "is-ready") == 0)
237     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)>.");
238   else
239   if (strcasecmp (cmd, "is_config") == 0 || strcasecmp (cmd, "is-config") == 0)
240     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)>.");
241   else
242   if (strcasecmp (cmd, "is_launching") == 0 || strcasecmp (cmd, "is-launching") == 0)
243     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)>.");
244   else
245   if (strcasecmp (cmd, "is_busy") == 0 || strcasecmp (cmd, "is-busy") == 0)
246     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)>.");
247   else
248   if (strcasecmp (cmd, "get_state") == 0 || strcasecmp (cmd, "get-state") == 0)
249     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)>.");
250   else
251   if (strcasecmp (cmd, "mount") == 0)
252     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.");
253   else
254   if (strcasecmp (cmd, "sync") == 0)
255     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.");
256   else
257   if (strcasecmp (cmd, "touch") == 0)
258     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.");
259   else
260   if (strcasecmp (cmd, "cat") == 0)
261     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.");
262   else
263   if (strcasecmp (cmd, "ll") == 0)
264     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.");
265   else
266   if (strcasecmp (cmd, "ls") == 0)
267     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.");
268   else
269   if (strcasecmp (cmd, "list_devices") == 0 || strcasecmp (cmd, "list-devices") == 0)
270     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>");
271   else
272   if (strcasecmp (cmd, "list_partitions") == 0 || strcasecmp (cmd, "list-partitions") == 0)
273     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>.");
274   else
275   if (strcasecmp (cmd, "pvs") == 0)
276     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>.");
277   else
278   if (strcasecmp (cmd, "vgs") == 0)
279     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>.");
280   else
281   if (strcasecmp (cmd, "lvs") == 0)
282     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>.");
283   else
284   if (strcasecmp (cmd, "pvs_full") == 0 || strcasecmp (cmd, "pvs-full") == 0)
285     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.");
286   else
287   if (strcasecmp (cmd, "vgs_full") == 0 || strcasecmp (cmd, "vgs-full") == 0)
288     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.");
289   else
290   if (strcasecmp (cmd, "lvs_full") == 0 || strcasecmp (cmd, "lvs-full") == 0)
291     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.");
292   else
293   if (strcasecmp (cmd, "read_lines") == 0 || strcasecmp (cmd, "read-lines") == 0)
294     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.");
295   else
296   if (strcasecmp (cmd, "aug_init") == 0 || strcasecmp (cmd, "aug-init") == 0)
297     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/>.");
298   else
299   if (strcasecmp (cmd, "aug_close") == 0 || strcasecmp (cmd, "aug-close") == 0)
300     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.");
301   else
302   if (strcasecmp (cmd, "aug_defvar") == 0 || strcasecmp (cmd, "aug-defvar") == 0)
303     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.");
304   else
305   if (strcasecmp (cmd, "aug_defnode") == 0 || strcasecmp (cmd, "aug-defnode") == 0)
306     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.");
307   else
308   if (strcasecmp (cmd, "aug_get") == 0 || strcasecmp (cmd, "aug-get") == 0)
309     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.");
310   else
311   if (strcasecmp (cmd, "aug_set") == 0 || strcasecmp (cmd, "aug-set") == 0)
312     pod2text ("aug-set - set Augeas path to value", " aug-set <path> <val>\n\nSet the value associated with C<path> to C<value>.");
313   else
314   if (strcasecmp (cmd, "aug_insert") == 0 || strcasecmp (cmd, "aug-insert") == 0)
315     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]>.");
316   else
317   if (strcasecmp (cmd, "aug_rm") == 0 || strcasecmp (cmd, "aug-rm") == 0)
318     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.");
319   else
320   if (strcasecmp (cmd, "aug_mv") == 0 || strcasecmp (cmd, "aug-mv") == 0)
321     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.");
322   else
323   if (strcasecmp (cmd, "aug_match") == 0 || strcasecmp (cmd, "aug-match") == 0)
324     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.");
325   else
326   if (strcasecmp (cmd, "aug_save") == 0 || strcasecmp (cmd, "aug-save") == 0)
327     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.");
328   else
329   if (strcasecmp (cmd, "aug_load") == 0 || strcasecmp (cmd, "aug-load") == 0)
330     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.");
331   else
332   if (strcasecmp (cmd, "aug_ls") == 0 || strcasecmp (cmd, "aug-ls") == 0)
333     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.");
334   else
335   if (strcasecmp (cmd, "rm") == 0)
336     pod2text ("rm - remove a file", " rm <path>\n\nRemove the single file C<path>.");
337   else
338   if (strcasecmp (cmd, "rmdir") == 0)
339     pod2text ("rmdir - remove a directory", " rmdir <path>\n\nRemove the single directory C<path>.");
340   else
341   if (strcasecmp (cmd, "rm_rf") == 0 || strcasecmp (cmd, "rm-rf") == 0)
342     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.");
343   else
344   if (strcasecmp (cmd, "mkdir") == 0)
345     pod2text ("mkdir - create a directory", " mkdir <path>\n\nCreate a directory named C<path>.");
346   else
347   if (strcasecmp (cmd, "mkdir_p") == 0 || strcasecmp (cmd, "mkdir-p") == 0)
348     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.");
349   else
350   if (strcasecmp (cmd, "chmod") == 0)
351     pod2text ("chmod - change file mode", " chmod <mode> <path>\n\nChange the mode (permissions) of C<path> to C<mode>.  Only\nnumeric modes are supported.");
352   else
353   if (strcasecmp (cmd, "chown") == 0)
354     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).");
355   else
356   if (strcasecmp (cmd, "exists") == 0)
357     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>.");
358   else
359   if (strcasecmp (cmd, "is_file") == 0 || strcasecmp (cmd, "is-file") == 0)
360     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>.");
361   else
362   if (strcasecmp (cmd, "is_dir") == 0 || strcasecmp (cmd, "is-dir") == 0)
363     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>.");
364   else
365   if (strcasecmp (cmd, "pvcreate") == 0)
366     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>.");
367   else
368   if (strcasecmp (cmd, "vgcreate") == 0)
369     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>.");
370   else
371   if (strcasecmp (cmd, "lvcreate") == 0)
372     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.");
373   else
374   if (strcasecmp (cmd, "mkfs") == 0)
375     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>.");
376   else
377   if (strcasecmp (cmd, "sfdisk") == 0)
378     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>.");
379   else
380   if (strcasecmp (cmd, "write_file") == 0 || strcasecmp (cmd, "write-file") == 0)
381     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.");
382   else
383   if (strcasecmp (cmd, "umount") == 0 || strcasecmp (cmd, "unmount") == 0)
384     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.");
385   else
386   if (strcasecmp (cmd, "mounts") == 0)
387     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.");
388   else
389   if (strcasecmp (cmd, "umount_all") == 0 || strcasecmp (cmd, "umount-all") == 0 || strcasecmp (cmd, "unmount-all") == 0)
390     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.");
391   else
392   if (strcasecmp (cmd, "lvm_remove_all") == 0 || strcasecmp (cmd, "lvm-remove-all") == 0)
393     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>.");
394   else
395   if (strcasecmp (cmd, "file") == 0)
396     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).");
397   else
398   if (strcasecmp (cmd, "command") == 0)
399     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.");
400   else
401   if (strcasecmp (cmd, "command_lines") == 0 || strcasecmp (cmd, "command-lines") == 0)
402     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.");
403   else
404   if (strcasecmp (cmd, "stat") == 0)
405     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.");
406   else
407   if (strcasecmp (cmd, "lstat") == 0)
408     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.");
409   else
410   if (strcasecmp (cmd, "statvfs") == 0)
411     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.");
412   else
413   if (strcasecmp (cmd, "tune2fs_l") == 0 || strcasecmp (cmd, "tune2fs-l") == 0)
414     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.");
415   else
416   if (strcasecmp (cmd, "blockdev_setro") == 0 || strcasecmp (cmd, "blockdev-setro") == 0)
417     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.");
418   else
419   if (strcasecmp (cmd, "blockdev_setrw") == 0 || strcasecmp (cmd, "blockdev-setrw") == 0)
420     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.");
421   else
422   if (strcasecmp (cmd, "blockdev_getro") == 0 || strcasecmp (cmd, "blockdev-getro") == 0)
423     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.");
424   else
425   if (strcasecmp (cmd, "blockdev_getss") == 0 || strcasecmp (cmd, "blockdev-getss") == 0)
426     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.");
427   else
428   if (strcasecmp (cmd, "blockdev_getbsz") == 0 || strcasecmp (cmd, "blockdev-getbsz") == 0)
429     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.");
430   else
431   if (strcasecmp (cmd, "blockdev_setbsz") == 0 || strcasecmp (cmd, "blockdev-setbsz") == 0)
432     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.");
433   else
434   if (strcasecmp (cmd, "blockdev_getsz") == 0 || strcasecmp (cmd, "blockdev-getsz") == 0)
435     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.");
436   else
437   if (strcasecmp (cmd, "blockdev_getsize64") == 0 || strcasecmp (cmd, "blockdev-getsize64") == 0)
438     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.");
439   else
440   if (strcasecmp (cmd, "blockdev_flushbufs") == 0 || strcasecmp (cmd, "blockdev-flushbufs") == 0)
441     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.");
442   else
443   if (strcasecmp (cmd, "blockdev_rereadpt") == 0 || strcasecmp (cmd, "blockdev-rereadpt") == 0)
444     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.");
445   else
446   if (strcasecmp (cmd, "upload") == 0)
447     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>.");
448   else
449   if (strcasecmp (cmd, "download") == 0)
450     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>.");
451   else
452   if (strcasecmp (cmd, "checksum") == 0)
453     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.");
454   else
455   if (strcasecmp (cmd, "tar_in") == 0 || strcasecmp (cmd, "tar-in") == 0)
456     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>.");
457   else
458   if (strcasecmp (cmd, "tar_out") == 0 || strcasecmp (cmd, "tar-out") == 0)
459     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>.");
460   else
461   if (strcasecmp (cmd, "tgz_in") == 0 || strcasecmp (cmd, "tgz-in") == 0)
462     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>.");
463   else
464   if (strcasecmp (cmd, "tgz_out") == 0 || strcasecmp (cmd, "tgz-out") == 0)
465     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>.");
466   else
467   if (strcasecmp (cmd, "mount_ro") == 0 || strcasecmp (cmd, "mount-ro") == 0)
468     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.");
469   else
470   if (strcasecmp (cmd, "mount_options") == 0 || strcasecmp (cmd, "mount-options") == 0)
471     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.");
472   else
473   if (strcasecmp (cmd, "mount_vfs") == 0 || strcasecmp (cmd, "mount-vfs") == 0)
474     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.");
475   else
476   if (strcasecmp (cmd, "debug") == 0)
477     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.");
478   else
479   if (strcasecmp (cmd, "lvremove") == 0)
480     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>.");
481   else
482   if (strcasecmp (cmd, "vgremove") == 0)
483     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).");
484   else
485   if (strcasecmp (cmd, "pvremove") == 0)
486     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.");
487   else
488   if (strcasecmp (cmd, "set_e2label") == 0 || strcasecmp (cmd, "set-e2label") == 0)
489     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.");
490   else
491   if (strcasecmp (cmd, "get_e2label") == 0 || strcasecmp (cmd, "get-e2label") == 0)
492     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>.");
493   else
494   if (strcasecmp (cmd, "set_e2uuid") == 0 || strcasecmp (cmd, "set-e2uuid") == 0)
495     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.");
496   else
497   if (strcasecmp (cmd, "get_e2uuid") == 0 || strcasecmp (cmd, "get-e2uuid") == 0)
498     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>.");
499   else
500   if (strcasecmp (cmd, "fsck") == 0)
501     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>.");
502   else
503   if (strcasecmp (cmd, "zero") == 0)
504     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>.");
505   else
506   if (strcasecmp (cmd, "grub_install") == 0 || strcasecmp (cmd, "grub-install") == 0)
507     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>.");
508   else
509   if (strcasecmp (cmd, "cp") == 0)
510     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.");
511   else
512   if (strcasecmp (cmd, "cp_a") == 0 || strcasecmp (cmd, "cp-a") == 0)
513     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.");
514   else
515   if (strcasecmp (cmd, "mv") == 0)
516     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.");
517   else
518   if (strcasecmp (cmd, "drop_caches") == 0 || strcasecmp (cmd, "drop-caches") == 0)
519     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.");
520   else
521   if (strcasecmp (cmd, "dmesg") == 0)
522     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.");
523   else
524   if (strcasecmp (cmd, "ping_daemon") == 0 || strcasecmp (cmd, "ping-daemon") == 0)
525     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.");
526   else
527   if (strcasecmp (cmd, "equal") == 0)
528     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.");
529   else
530   if (strcasecmp (cmd, "strings") == 0)
531     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.");
532   else
533   if (strcasecmp (cmd, "strings_e") == 0 || strcasecmp (cmd, "strings-e") == 0)
534     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.");
535   else
536   if (strcasecmp (cmd, "hexdump") == 0)
537     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.");
538   else
539   if (strcasecmp (cmd, "zerofree") == 0)
540     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.");
541   else
542   if (strcasecmp (cmd, "pvresize") == 0)
543     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.");
544   else
545   if (strcasecmp (cmd, "sfdisk_N") == 0 || strcasecmp (cmd, "sfdisk-N") == 0)
546     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>.");
547   else
548   if (strcasecmp (cmd, "sfdisk_l") == 0 || strcasecmp (cmd, "sfdisk-l") == 0)
549     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.");
550   else
551   if (strcasecmp (cmd, "sfdisk_kernel_geometry") == 0 || strcasecmp (cmd, "sfdisk-kernel-geometry") == 0)
552     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.");
553   else
554   if (strcasecmp (cmd, "sfdisk_disk_geometry") == 0 || strcasecmp (cmd, "sfdisk-disk-geometry") == 0)
555     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.");
556   else
557   if (strcasecmp (cmd, "vg_activate_all") == 0 || strcasecmp (cmd, "vg-activate-all") == 0)
558     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>");
559   else
560   if (strcasecmp (cmd, "vg_activate") == 0 || strcasecmp (cmd, "vg-activate") == 0)
561     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.");
562   else
563   if (strcasecmp (cmd, "lvresize") == 0)
564     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.");
565   else
566   if (strcasecmp (cmd, "resize2fs") == 0)
567     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.");
568   else
569   if (strcasecmp (cmd, "find") == 0)
570     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.");
571   else
572   if (strcasecmp (cmd, "e2fsck_f") == 0 || strcasecmp (cmd, "e2fsck-f") == 0)
573     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>.");
574   else
575   if (strcasecmp (cmd, "sleep") == 0)
576     pod2text ("sleep - sleep for some seconds", " sleep <secs>\n\nSleep for C<secs> seconds.");
577   else
578   if (strcasecmp (cmd, "ntfs_3g_probe") == 0 || strcasecmp (cmd, "ntfs-3g-probe") == 0)
579     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.");
580   else
581   if (strcasecmp (cmd, "sh") == 0)
582     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.");
583   else
584   if (strcasecmp (cmd, "sh_lines") == 0 || strcasecmp (cmd, "sh-lines") == 0)
585     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>");
586   else
587   if (strcasecmp (cmd, "glob_expand") == 0 || strcasecmp (cmd, "glob-expand") == 0)
588     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.");
589   else
590   if (strcasecmp (cmd, "scrub_device") == 0 || strcasecmp (cmd, "scrub-device") == 0)
591     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>.");
592   else
593   if (strcasecmp (cmd, "scrub_file") == 0 || strcasecmp (cmd, "scrub-file") == 0)
594     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.");
595   else
596   if (strcasecmp (cmd, "scrub_freespace") == 0 || strcasecmp (cmd, "scrub-freespace") == 0)
597     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.");
598   else
599   if (strcasecmp (cmd, "mkdtemp") == 0)
600     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)>");
601   else
602   if (strcasecmp (cmd, "wc_l") == 0 || strcasecmp (cmd, "wc-l") == 0)
603     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.");
604   else
605   if (strcasecmp (cmd, "wc_w") == 0 || strcasecmp (cmd, "wc-w") == 0)
606     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.");
607   else
608   if (strcasecmp (cmd, "wc_c") == 0 || strcasecmp (cmd, "wc-c") == 0)
609     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.");
610   else
611   if (strcasecmp (cmd, "head") == 0)
612     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.");
613   else
614   if (strcasecmp (cmd, "head_n") == 0 || strcasecmp (cmd, "head-n") == 0)
615     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.");
616   else
617   if (strcasecmp (cmd, "tail") == 0)
618     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.");
619   else
620   if (strcasecmp (cmd, "tail_n") == 0 || strcasecmp (cmd, "tail-n") == 0)
621     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.");
622   else
623   if (strcasecmp (cmd, "df") == 0)
624     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.");
625   else
626   if (strcasecmp (cmd, "df_h") == 0 || strcasecmp (cmd, "df-h") == 0)
627     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.");
628   else
629   if (strcasecmp (cmd, "du") == 0)
630     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).");
631   else
632   if (strcasecmp (cmd, "initrd_list") == 0 || strcasecmp (cmd, "initrd-list") == 0)
633     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).");
634   else
635     display_builtin_command (cmd);
636 }
637
638 static void print_pv (struct guestfs_lvm_pv *pv)
639 {
640   int i;
641
642   printf ("pv_name: %s\n", pv->pv_name);
643   printf ("pv_uuid: ");
644   for (i = 0; i < 32; ++i)
645     printf ("%c", pv->pv_uuid[i]);
646   printf ("\n");
647   printf ("pv_fmt: %s\n", pv->pv_fmt);
648   printf ("pv_size: %" PRIu64 "\n", pv->pv_size);
649   printf ("dev_size: %" PRIu64 "\n", pv->dev_size);
650   printf ("pv_free: %" PRIu64 "\n", pv->pv_free);
651   printf ("pv_used: %" PRIu64 "\n", pv->pv_used);
652   printf ("pv_attr: %s\n", pv->pv_attr);
653   printf ("pv_pe_count: %" PRIi64 "\n", pv->pv_pe_count);
654   printf ("pv_pe_alloc_count: %" PRIi64 "\n", pv->pv_pe_alloc_count);
655   printf ("pv_tags: %s\n", pv->pv_tags);
656   printf ("pe_start: %" PRIu64 "\n", pv->pe_start);
657   printf ("pv_mda_count: %" PRIi64 "\n", pv->pv_mda_count);
658   printf ("pv_mda_free: %" PRIu64 "\n", pv->pv_mda_free);
659 }
660
661 static void print_pv_list (struct guestfs_lvm_pv_list *pvs)
662 {
663   int i;
664
665   for (i = 0; i < pvs->len; ++i)
666     print_pv (&pvs->val[i]);
667 }
668
669 static void print_vg (struct guestfs_lvm_vg *vg)
670 {
671   int i;
672
673   printf ("vg_name: %s\n", vg->vg_name);
674   printf ("vg_uuid: ");
675   for (i = 0; i < 32; ++i)
676     printf ("%c", vg->vg_uuid[i]);
677   printf ("\n");
678   printf ("vg_fmt: %s\n", vg->vg_fmt);
679   printf ("vg_attr: %s\n", vg->vg_attr);
680   printf ("vg_size: %" PRIu64 "\n", vg->vg_size);
681   printf ("vg_free: %" PRIu64 "\n", vg->vg_free);
682   printf ("vg_sysid: %s\n", vg->vg_sysid);
683   printf ("vg_extent_size: %" PRIu64 "\n", vg->vg_extent_size);
684   printf ("vg_extent_count: %" PRIi64 "\n", vg->vg_extent_count);
685   printf ("vg_free_count: %" PRIi64 "\n", vg->vg_free_count);
686   printf ("max_lv: %" PRIi64 "\n", vg->max_lv);
687   printf ("max_pv: %" PRIi64 "\n", vg->max_pv);
688   printf ("pv_count: %" PRIi64 "\n", vg->pv_count);
689   printf ("lv_count: %" PRIi64 "\n", vg->lv_count);
690   printf ("snap_count: %" PRIi64 "\n", vg->snap_count);
691   printf ("vg_seqno: %" PRIi64 "\n", vg->vg_seqno);
692   printf ("vg_tags: %s\n", vg->vg_tags);
693   printf ("vg_mda_count: %" PRIi64 "\n", vg->vg_mda_count);
694   printf ("vg_mda_free: %" PRIu64 "\n", vg->vg_mda_free);
695 }
696
697 static void print_vg_list (struct guestfs_lvm_vg_list *vgs)
698 {
699   int i;
700
701   for (i = 0; i < vgs->len; ++i)
702     print_vg (&vgs->val[i]);
703 }
704
705 static void print_lv (struct guestfs_lvm_lv *lv)
706 {
707   int i;
708
709   printf ("lv_name: %s\n", lv->lv_name);
710   printf ("lv_uuid: ");
711   for (i = 0; i < 32; ++i)
712     printf ("%c", lv->lv_uuid[i]);
713   printf ("\n");
714   printf ("lv_attr: %s\n", lv->lv_attr);
715   printf ("lv_major: %" PRIi64 "\n", lv->lv_major);
716   printf ("lv_minor: %" PRIi64 "\n", lv->lv_minor);
717   printf ("lv_kernel_major: %" PRIi64 "\n", lv->lv_kernel_major);
718   printf ("lv_kernel_minor: %" PRIi64 "\n", lv->lv_kernel_minor);
719   printf ("lv_size: %" PRIu64 "\n", lv->lv_size);
720   printf ("seg_count: %" PRIi64 "\n", lv->seg_count);
721   printf ("origin: %s\n", lv->origin);
722   if (lv->snap_percent >= 0) printf ("snap_percent: %g %%\n", lv->snap_percent);
723   else printf ("snap_percent: \n");
724   if (lv->copy_percent >= 0) printf ("copy_percent: %g %%\n", lv->copy_percent);
725   else printf ("copy_percent: \n");
726   printf ("move_pv: %s\n", lv->move_pv);
727   printf ("lv_tags: %s\n", lv->lv_tags);
728   printf ("mirror_log: %s\n", lv->mirror_log);
729   printf ("modules: %s\n", lv->modules);
730 }
731
732 static void print_lv_list (struct guestfs_lvm_lv_list *lvs)
733 {
734   int i;
735
736   for (i = 0; i < lvs->len; ++i)
737     print_lv (&lvs->val[i]);
738 }
739
740 static void print_stat (struct guestfs_stat *stat)
741 {
742   printf ("dev: %" PRIi64 "\n", stat->dev);
743   printf ("ino: %" PRIi64 "\n", stat->ino);
744   printf ("mode: %" PRIi64 "\n", stat->mode);
745   printf ("nlink: %" PRIi64 "\n", stat->nlink);
746   printf ("uid: %" PRIi64 "\n", stat->uid);
747   printf ("gid: %" PRIi64 "\n", stat->gid);
748   printf ("rdev: %" PRIi64 "\n", stat->rdev);
749   printf ("size: %" PRIi64 "\n", stat->size);
750   printf ("blksize: %" PRIi64 "\n", stat->blksize);
751   printf ("blocks: %" PRIi64 "\n", stat->blocks);
752   printf ("atime: %" PRIi64 "\n", stat->atime);
753   printf ("mtime: %" PRIi64 "\n", stat->mtime);
754   printf ("ctime: %" PRIi64 "\n", stat->ctime);
755 }
756
757 static void print_statvfs (struct guestfs_statvfs *statvfs)
758 {
759   printf ("bsize: %" PRIi64 "\n", statvfs->bsize);
760   printf ("frsize: %" PRIi64 "\n", statvfs->frsize);
761   printf ("blocks: %" PRIi64 "\n", statvfs->blocks);
762   printf ("bfree: %" PRIi64 "\n", statvfs->bfree);
763   printf ("bavail: %" PRIi64 "\n", statvfs->bavail);
764   printf ("files: %" PRIi64 "\n", statvfs->files);
765   printf ("ffree: %" PRIi64 "\n", statvfs->ffree);
766   printf ("favail: %" PRIi64 "\n", statvfs->favail);
767   printf ("fsid: %" PRIi64 "\n", statvfs->fsid);
768   printf ("flag: %" PRIi64 "\n", statvfs->flag);
769   printf ("namemax: %" PRIi64 "\n", statvfs->namemax);
770 }
771
772 static int run_launch (const char *cmd, int argc, char *argv[])
773 {
774   int r;
775   if (argc != 0) {
776     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
777     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
778     return -1;
779   }
780   r = launch (g);
781   return r;
782 }
783
784 static int run_kill_subprocess (const char *cmd, int argc, char *argv[])
785 {
786   int r;
787   if (argc != 0) {
788     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
789     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
790     return -1;
791   }
792   r = guestfs_kill_subprocess (g);
793   return r;
794 }
795
796 static int run_add_drive (const char *cmd, int argc, char *argv[])
797 {
798   int r;
799   const char *filename;
800   if (argc != 1) {
801     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
802     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
803     return -1;
804   }
805   filename = argv[0];
806   r = guestfs_add_drive (g, filename);
807   return r;
808 }
809
810 static int run_add_cdrom (const char *cmd, int argc, char *argv[])
811 {
812   int r;
813   const char *filename;
814   if (argc != 1) {
815     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
816     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
817     return -1;
818   }
819   filename = argv[0];
820   r = guestfs_add_cdrom (g, filename);
821   return r;
822 }
823
824 static int run_add_drive_ro (const char *cmd, int argc, char *argv[])
825 {
826   int r;
827   const char *filename;
828   if (argc != 1) {
829     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
830     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
831     return -1;
832   }
833   filename = argv[0];
834   r = guestfs_add_drive_ro (g, filename);
835   return r;
836 }
837
838 static int run_config (const char *cmd, int argc, char *argv[])
839 {
840   int r;
841   const char *qemuparam;
842   const char *qemuvalue;
843   if (argc != 2) {
844     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
845     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
846     return -1;
847   }
848   qemuparam = argv[0];
849   qemuvalue = strcmp (argv[1], "") != 0 ? argv[1] : NULL;
850   r = guestfs_config (g, qemuparam, qemuvalue);
851   return r;
852 }
853
854 static int run_set_qemu (const char *cmd, int argc, char *argv[])
855 {
856   int r;
857   const char *qemu;
858   if (argc != 1) {
859     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
860     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
861     return -1;
862   }
863   qemu = argv[0];
864   r = guestfs_set_qemu (g, qemu);
865   return r;
866 }
867
868 static int run_get_qemu (const char *cmd, int argc, char *argv[])
869 {
870   const char *r;
871   if (argc != 0) {
872     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
873     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
874     return -1;
875   }
876   r = guestfs_get_qemu (g);
877   if (r == NULL) return -1;
878   printf ("%s\n", r);
879   return 0;
880 }
881
882 static int run_set_path (const char *cmd, int argc, char *argv[])
883 {
884   int r;
885   const char *path;
886   if (argc != 1) {
887     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
888     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
889     return -1;
890   }
891   path = argv[0];
892   r = guestfs_set_path (g, path);
893   return r;
894 }
895
896 static int run_get_path (const char *cmd, int argc, char *argv[])
897 {
898   const char *r;
899   if (argc != 0) {
900     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
901     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
902     return -1;
903   }
904   r = guestfs_get_path (g);
905   if (r == NULL) return -1;
906   printf ("%s\n", r);
907   return 0;
908 }
909
910 static int run_set_append (const char *cmd, int argc, char *argv[])
911 {
912   int r;
913   const char *append;
914   if (argc != 1) {
915     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
916     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
917     return -1;
918   }
919   append = argv[0];
920   r = guestfs_set_append (g, append);
921   return r;
922 }
923
924 static int run_get_append (const char *cmd, int argc, char *argv[])
925 {
926   const char *r;
927   if (argc != 0) {
928     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
929     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
930     return -1;
931   }
932   r = guestfs_get_append (g);
933   if (r == NULL) return -1;
934   printf ("%s\n", r);
935   return 0;
936 }
937
938 static int run_set_autosync (const char *cmd, int argc, char *argv[])
939 {
940   int r;
941   int autosync;
942   if (argc != 1) {
943     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
944     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
945     return -1;
946   }
947   autosync = is_true (argv[0]) ? 1 : 0;
948   r = guestfs_set_autosync (g, autosync);
949   return r;
950 }
951
952 static int run_get_autosync (const char *cmd, int argc, char *argv[])
953 {
954   int r;
955   if (argc != 0) {
956     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
957     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
958     return -1;
959   }
960   r = guestfs_get_autosync (g);
961   if (r == -1) return -1;
962   if (r) printf ("true\n"); else printf ("false\n");
963   return 0;
964 }
965
966 static int run_set_verbose (const char *cmd, int argc, char *argv[])
967 {
968   int r;
969   int verbose;
970   if (argc != 1) {
971     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
972     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
973     return -1;
974   }
975   verbose = is_true (argv[0]) ? 1 : 0;
976   r = guestfs_set_verbose (g, verbose);
977   return r;
978 }
979
980 static int run_get_verbose (const char *cmd, int argc, char *argv[])
981 {
982   int r;
983   if (argc != 0) {
984     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
985     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
986     return -1;
987   }
988   r = guestfs_get_verbose (g);
989   if (r == -1) return -1;
990   if (r) printf ("true\n"); else printf ("false\n");
991   return 0;
992 }
993
994 static int run_is_ready (const char *cmd, int argc, char *argv[])
995 {
996   int r;
997   if (argc != 0) {
998     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
999     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1000     return -1;
1001   }
1002   r = guestfs_is_ready (g);
1003   if (r == -1) return -1;
1004   if (r) printf ("true\n"); else printf ("false\n");
1005   return 0;
1006 }
1007
1008 static int run_is_config (const char *cmd, int argc, char *argv[])
1009 {
1010   int r;
1011   if (argc != 0) {
1012     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1013     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1014     return -1;
1015   }
1016   r = guestfs_is_config (g);
1017   if (r == -1) return -1;
1018   if (r) printf ("true\n"); else printf ("false\n");
1019   return 0;
1020 }
1021
1022 static int run_is_launching (const char *cmd, int argc, char *argv[])
1023 {
1024   int r;
1025   if (argc != 0) {
1026     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1027     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1028     return -1;
1029   }
1030   r = guestfs_is_launching (g);
1031   if (r == -1) return -1;
1032   if (r) printf ("true\n"); else printf ("false\n");
1033   return 0;
1034 }
1035
1036 static int run_is_busy (const char *cmd, int argc, char *argv[])
1037 {
1038   int r;
1039   if (argc != 0) {
1040     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1041     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1042     return -1;
1043   }
1044   r = guestfs_is_busy (g);
1045   if (r == -1) return -1;
1046   if (r) printf ("true\n"); else printf ("false\n");
1047   return 0;
1048 }
1049
1050 static int run_get_state (const char *cmd, int argc, char *argv[])
1051 {
1052   int r;
1053   if (argc != 0) {
1054     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1055     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1056     return -1;
1057   }
1058   r = guestfs_get_state (g);
1059   if (r == -1) return -1;
1060   printf ("%d\n", r);
1061   return 0;
1062 }
1063
1064 static int run_mount (const char *cmd, int argc, char *argv[])
1065 {
1066   int r;
1067   const char *device;
1068   const char *mountpoint;
1069   if (argc != 2) {
1070     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1071     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1072     return -1;
1073   }
1074   device = argv[0];
1075   mountpoint = argv[1];
1076   r = guestfs_mount (g, device, mountpoint);
1077   return r;
1078 }
1079
1080 static int run_sync (const char *cmd, int argc, char *argv[])
1081 {
1082   int r;
1083   if (argc != 0) {
1084     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1085     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1086     return -1;
1087   }
1088   r = guestfs_sync (g);
1089   return r;
1090 }
1091
1092 static int run_touch (const char *cmd, int argc, char *argv[])
1093 {
1094   int r;
1095   const char *path;
1096   if (argc != 1) {
1097     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1098     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1099     return -1;
1100   }
1101   path = argv[0];
1102   r = guestfs_touch (g, path);
1103   return r;
1104 }
1105
1106 static int run_cat (const char *cmd, int argc, char *argv[])
1107 {
1108   char *r;
1109   const char *path;
1110   if (argc != 1) {
1111     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1112     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1113     return -1;
1114   }
1115   path = argv[0];
1116   r = guestfs_cat (g, path);
1117   if (r == NULL) return -1;
1118   printf ("%s\n", r);
1119   free (r);
1120   return 0;
1121 }
1122
1123 static int run_ll (const char *cmd, int argc, char *argv[])
1124 {
1125   char *r;
1126   const char *directory;
1127   if (argc != 1) {
1128     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1129     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1130     return -1;
1131   }
1132   directory = argv[0];
1133   r = guestfs_ll (g, directory);
1134   if (r == NULL) return -1;
1135   printf ("%s\n", r);
1136   free (r);
1137   return 0;
1138 }
1139
1140 static int run_ls (const char *cmd, int argc, char *argv[])
1141 {
1142   char **r;
1143   const char *directory;
1144   if (argc != 1) {
1145     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1146     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1147     return -1;
1148   }
1149   directory = argv[0];
1150   r = guestfs_ls (g, directory);
1151   if (r == NULL) return -1;
1152   print_strings (r);
1153   free_strings (r);
1154   return 0;
1155 }
1156
1157 static int run_list_devices (const char *cmd, int argc, char *argv[])
1158 {
1159   char **r;
1160   if (argc != 0) {
1161     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1162     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1163     return -1;
1164   }
1165   r = guestfs_list_devices (g);
1166   if (r == NULL) return -1;
1167   print_strings (r);
1168   free_strings (r);
1169   return 0;
1170 }
1171
1172 static int run_list_partitions (const char *cmd, int argc, char *argv[])
1173 {
1174   char **r;
1175   if (argc != 0) {
1176     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1177     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1178     return -1;
1179   }
1180   r = guestfs_list_partitions (g);
1181   if (r == NULL) return -1;
1182   print_strings (r);
1183   free_strings (r);
1184   return 0;
1185 }
1186
1187 static int run_pvs (const char *cmd, int argc, char *argv[])
1188 {
1189   char **r;
1190   if (argc != 0) {
1191     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1192     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1193     return -1;
1194   }
1195   r = guestfs_pvs (g);
1196   if (r == NULL) return -1;
1197   print_strings (r);
1198   free_strings (r);
1199   return 0;
1200 }
1201
1202 static int run_vgs (const char *cmd, int argc, char *argv[])
1203 {
1204   char **r;
1205   if (argc != 0) {
1206     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1207     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1208     return -1;
1209   }
1210   r = guestfs_vgs (g);
1211   if (r == NULL) return -1;
1212   print_strings (r);
1213   free_strings (r);
1214   return 0;
1215 }
1216
1217 static int run_lvs (const char *cmd, int argc, char *argv[])
1218 {
1219   char **r;
1220   if (argc != 0) {
1221     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1222     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1223     return -1;
1224   }
1225   r = guestfs_lvs (g);
1226   if (r == NULL) return -1;
1227   print_strings (r);
1228   free_strings (r);
1229   return 0;
1230 }
1231
1232 static int run_pvs_full (const char *cmd, int argc, char *argv[])
1233 {
1234   struct guestfs_lvm_pv_list *r;
1235   if (argc != 0) {
1236     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1237     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1238     return -1;
1239   }
1240   r = guestfs_pvs_full (g);
1241   if (r == NULL) return -1;
1242   print_pv_list (r);
1243   guestfs_free_lvm_pv_list (r);
1244   return 0;
1245 }
1246
1247 static int run_vgs_full (const char *cmd, int argc, char *argv[])
1248 {
1249   struct guestfs_lvm_vg_list *r;
1250   if (argc != 0) {
1251     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1252     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1253     return -1;
1254   }
1255   r = guestfs_vgs_full (g);
1256   if (r == NULL) return -1;
1257   print_vg_list (r);
1258   guestfs_free_lvm_vg_list (r);
1259   return 0;
1260 }
1261
1262 static int run_lvs_full (const char *cmd, int argc, char *argv[])
1263 {
1264   struct guestfs_lvm_lv_list *r;
1265   if (argc != 0) {
1266     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1267     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1268     return -1;
1269   }
1270   r = guestfs_lvs_full (g);
1271   if (r == NULL) return -1;
1272   print_lv_list (r);
1273   guestfs_free_lvm_lv_list (r);
1274   return 0;
1275 }
1276
1277 static int run_read_lines (const char *cmd, int argc, char *argv[])
1278 {
1279   char **r;
1280   const char *path;
1281   if (argc != 1) {
1282     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1283     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1284     return -1;
1285   }
1286   path = argv[0];
1287   r = guestfs_read_lines (g, path);
1288   if (r == NULL) return -1;
1289   print_strings (r);
1290   free_strings (r);
1291   return 0;
1292 }
1293
1294 static int run_aug_init (const char *cmd, int argc, char *argv[])
1295 {
1296   int r;
1297   const char *root;
1298   int flags;
1299   if (argc != 2) {
1300     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1301     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1302     return -1;
1303   }
1304   root = argv[0];
1305   flags = atoi (argv[1]);
1306   r = guestfs_aug_init (g, root, flags);
1307   return r;
1308 }
1309
1310 static int run_aug_close (const char *cmd, int argc, char *argv[])
1311 {
1312   int r;
1313   if (argc != 0) {
1314     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1315     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1316     return -1;
1317   }
1318   r = guestfs_aug_close (g);
1319   return r;
1320 }
1321
1322 static int run_aug_defvar (const char *cmd, int argc, char *argv[])
1323 {
1324   int r;
1325   const char *name;
1326   const char *expr;
1327   if (argc != 2) {
1328     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1329     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1330     return -1;
1331   }
1332   name = argv[0];
1333   expr = strcmp (argv[1], "") != 0 ? argv[1] : NULL;
1334   r = guestfs_aug_defvar (g, name, expr);
1335   if (r == -1) return -1;
1336   printf ("%d\n", r);
1337   return 0;
1338 }
1339
1340 static int run_aug_defnode (const char *cmd, int argc, char *argv[])
1341 {
1342   struct guestfs_int_bool *r;
1343   const char *name;
1344   const char *expr;
1345   const char *val;
1346   if (argc != 3) {
1347     fprintf (stderr, "%s should have 3 parameter(s)\n", cmd);
1348     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1349     return -1;
1350   }
1351   name = argv[0];
1352   expr = argv[1];
1353   val = argv[2];
1354   r = guestfs_aug_defnode (g, name, expr, val);
1355   if (r == NULL) return -1;
1356   printf ("%d, %s\n", r->i,
1357     r->b ? "true" : "false");
1358   guestfs_free_int_bool (r);
1359   return 0;
1360 }
1361
1362 static int run_aug_get (const char *cmd, int argc, char *argv[])
1363 {
1364   char *r;
1365   const char *path;
1366   if (argc != 1) {
1367     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1368     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1369     return -1;
1370   }
1371   path = argv[0];
1372   r = guestfs_aug_get (g, path);
1373   if (r == NULL) return -1;
1374   printf ("%s\n", r);
1375   free (r);
1376   return 0;
1377 }
1378
1379 static int run_aug_set (const char *cmd, int argc, char *argv[])
1380 {
1381   int r;
1382   const char *path;
1383   const char *val;
1384   if (argc != 2) {
1385     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1386     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1387     return -1;
1388   }
1389   path = argv[0];
1390   val = argv[1];
1391   r = guestfs_aug_set (g, path, val);
1392   return r;
1393 }
1394
1395 static int run_aug_insert (const char *cmd, int argc, char *argv[])
1396 {
1397   int r;
1398   const char *path;
1399   const char *label;
1400   int before;
1401   if (argc != 3) {
1402     fprintf (stderr, "%s should have 3 parameter(s)\n", cmd);
1403     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1404     return -1;
1405   }
1406   path = argv[0];
1407   label = argv[1];
1408   before = is_true (argv[2]) ? 1 : 0;
1409   r = guestfs_aug_insert (g, path, label, before);
1410   return r;
1411 }
1412
1413 static int run_aug_rm (const char *cmd, int argc, char *argv[])
1414 {
1415   int r;
1416   const char *path;
1417   if (argc != 1) {
1418     fprintf (stderr, "%s should have 1 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   r = guestfs_aug_rm (g, path);
1424   if (r == -1) return -1;
1425   printf ("%d\n", r);
1426   return 0;
1427 }
1428
1429 static int run_aug_mv (const char *cmd, int argc, char *argv[])
1430 {
1431   int r;
1432   const char *src;
1433   const char *dest;
1434   if (argc != 2) {
1435     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1436     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1437     return -1;
1438   }
1439   src = argv[0];
1440   dest = argv[1];
1441   r = guestfs_aug_mv (g, src, dest);
1442   return r;
1443 }
1444
1445 static int run_aug_match (const char *cmd, int argc, char *argv[])
1446 {
1447   char **r;
1448   const char *path;
1449   if (argc != 1) {
1450     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1451     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1452     return -1;
1453   }
1454   path = argv[0];
1455   r = guestfs_aug_match (g, path);
1456   if (r == NULL) return -1;
1457   print_strings (r);
1458   free_strings (r);
1459   return 0;
1460 }
1461
1462 static int run_aug_save (const char *cmd, int argc, char *argv[])
1463 {
1464   int r;
1465   if (argc != 0) {
1466     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1467     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1468     return -1;
1469   }
1470   r = guestfs_aug_save (g);
1471   return r;
1472 }
1473
1474 static int run_aug_load (const char *cmd, int argc, char *argv[])
1475 {
1476   int r;
1477   if (argc != 0) {
1478     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1479     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1480     return -1;
1481   }
1482   r = guestfs_aug_load (g);
1483   return r;
1484 }
1485
1486 static int run_aug_ls (const char *cmd, int argc, char *argv[])
1487 {
1488   char **r;
1489   const char *path;
1490   if (argc != 1) {
1491     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1492     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1493     return -1;
1494   }
1495   path = argv[0];
1496   r = guestfs_aug_ls (g, path);
1497   if (r == NULL) return -1;
1498   print_strings (r);
1499   free_strings (r);
1500   return 0;
1501 }
1502
1503 static int run_rm (const char *cmd, int argc, char *argv[])
1504 {
1505   int r;
1506   const char *path;
1507   if (argc != 1) {
1508     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1509     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1510     return -1;
1511   }
1512   path = argv[0];
1513   r = guestfs_rm (g, path);
1514   return r;
1515 }
1516
1517 static int run_rmdir (const char *cmd, int argc, char *argv[])
1518 {
1519   int r;
1520   const char *path;
1521   if (argc != 1) {
1522     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1523     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1524     return -1;
1525   }
1526   path = argv[0];
1527   r = guestfs_rmdir (g, path);
1528   return r;
1529 }
1530
1531 static int run_rm_rf (const char *cmd, int argc, char *argv[])
1532 {
1533   int r;
1534   const char *path;
1535   if (argc != 1) {
1536     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1537     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1538     return -1;
1539   }
1540   path = argv[0];
1541   r = guestfs_rm_rf (g, path);
1542   return r;
1543 }
1544
1545 static int run_mkdir (const char *cmd, int argc, char *argv[])
1546 {
1547   int r;
1548   const char *path;
1549   if (argc != 1) {
1550     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1551     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1552     return -1;
1553   }
1554   path = argv[0];
1555   r = guestfs_mkdir (g, path);
1556   return r;
1557 }
1558
1559 static int run_mkdir_p (const char *cmd, int argc, char *argv[])
1560 {
1561   int r;
1562   const char *path;
1563   if (argc != 1) {
1564     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1565     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1566     return -1;
1567   }
1568   path = argv[0];
1569   r = guestfs_mkdir_p (g, path);
1570   return r;
1571 }
1572
1573 static int run_chmod (const char *cmd, int argc, char *argv[])
1574 {
1575   int r;
1576   int mode;
1577   const char *path;
1578   if (argc != 2) {
1579     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1580     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1581     return -1;
1582   }
1583   mode = atoi (argv[0]);
1584   path = argv[1];
1585   r = guestfs_chmod (g, mode, path);
1586   return r;
1587 }
1588
1589 static int run_chown (const char *cmd, int argc, char *argv[])
1590 {
1591   int r;
1592   int owner;
1593   int group;
1594   const char *path;
1595   if (argc != 3) {
1596     fprintf (stderr, "%s should have 3 parameter(s)\n", cmd);
1597     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1598     return -1;
1599   }
1600   owner = atoi (argv[0]);
1601   group = atoi (argv[1]);
1602   path = argv[2];
1603   r = guestfs_chown (g, owner, group, path);
1604   return r;
1605 }
1606
1607 static int run_exists (const char *cmd, int argc, char *argv[])
1608 {
1609   int r;
1610   const char *path;
1611   if (argc != 1) {
1612     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1613     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1614     return -1;
1615   }
1616   path = argv[0];
1617   r = guestfs_exists (g, path);
1618   if (r == -1) return -1;
1619   if (r) printf ("true\n"); else printf ("false\n");
1620   return 0;
1621 }
1622
1623 static int run_is_file (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_is_file (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_dir (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_dir (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_pvcreate (const char *cmd, int argc, char *argv[])
1656 {
1657   int r;
1658   const char *device;
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   device = argv[0];
1665   r = guestfs_pvcreate (g, device);
1666   return r;
1667 }
1668
1669 static int run_vgcreate (const char *cmd, int argc, char *argv[])
1670 {
1671   int r;
1672   const char *volgroup;
1673   char **physvols;
1674   if (argc != 2) {
1675     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1676     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1677     return -1;
1678   }
1679   volgroup = argv[0];
1680   physvols = parse_string_list (argv[1]);
1681   r = guestfs_vgcreate (g, volgroup, physvols);
1682   return r;
1683 }
1684
1685 static int run_lvcreate (const char *cmd, int argc, char *argv[])
1686 {
1687   int r;
1688   const char *logvol;
1689   const char *volgroup;
1690   int mbytes;
1691   if (argc != 3) {
1692     fprintf (stderr, "%s should have 3 parameter(s)\n", cmd);
1693     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1694     return -1;
1695   }
1696   logvol = argv[0];
1697   volgroup = argv[1];
1698   mbytes = atoi (argv[2]);
1699   r = guestfs_lvcreate (g, logvol, volgroup, mbytes);
1700   return r;
1701 }
1702
1703 static int run_mkfs (const char *cmd, int argc, char *argv[])
1704 {
1705   int r;
1706   const char *fstype;
1707   const char *device;
1708   if (argc != 2) {
1709     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1710     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1711     return -1;
1712   }
1713   fstype = argv[0];
1714   device = argv[1];
1715   r = guestfs_mkfs (g, fstype, device);
1716   return r;
1717 }
1718
1719 static int run_sfdisk (const char *cmd, int argc, char *argv[])
1720 {
1721   int r;
1722   const char *device;
1723   int cyls;
1724   int heads;
1725   int sectors;
1726   char **lines;
1727   if (argc != 5) {
1728     fprintf (stderr, "%s should have 5 parameter(s)\n", cmd);
1729     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1730     return -1;
1731   }
1732   device = argv[0];
1733   cyls = atoi (argv[1]);
1734   heads = atoi (argv[2]);
1735   sectors = atoi (argv[3]);
1736   lines = parse_string_list (argv[4]);
1737   r = guestfs_sfdisk (g, device, cyls, heads, sectors, lines);
1738   return r;
1739 }
1740
1741 static int run_write_file (const char *cmd, int argc, char *argv[])
1742 {
1743   int r;
1744   const char *path;
1745   const char *content;
1746   int size;
1747   if (argc != 3) {
1748     fprintf (stderr, "%s should have 3 parameter(s)\n", cmd);
1749     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1750     return -1;
1751   }
1752   path = argv[0];
1753   content = argv[1];
1754   size = atoi (argv[2]);
1755   r = guestfs_write_file (g, path, content, size);
1756   return r;
1757 }
1758
1759 static int run_umount (const char *cmd, int argc, char *argv[])
1760 {
1761   int r;
1762   const char *pathordevice;
1763   if (argc != 1) {
1764     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1765     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1766     return -1;
1767   }
1768   pathordevice = argv[0];
1769   r = guestfs_umount (g, pathordevice);
1770   return r;
1771 }
1772
1773 static int run_mounts (const char *cmd, int argc, char *argv[])
1774 {
1775   char **r;
1776   if (argc != 0) {
1777     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1778     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1779     return -1;
1780   }
1781   r = guestfs_mounts (g);
1782   if (r == NULL) return -1;
1783   print_strings (r);
1784   free_strings (r);
1785   return 0;
1786 }
1787
1788 static int run_umount_all (const char *cmd, int argc, char *argv[])
1789 {
1790   int r;
1791   if (argc != 0) {
1792     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1793     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1794     return -1;
1795   }
1796   r = guestfs_umount_all (g);
1797   return r;
1798 }
1799
1800 static int run_lvm_remove_all (const char *cmd, int argc, char *argv[])
1801 {
1802   int r;
1803   if (argc != 0) {
1804     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1805     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1806     return -1;
1807   }
1808   r = guestfs_lvm_remove_all (g);
1809   return r;
1810 }
1811
1812 static int run_file (const char *cmd, int argc, char *argv[])
1813 {
1814   char *r;
1815   const char *path;
1816   if (argc != 1) {
1817     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1818     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1819     return -1;
1820   }
1821   path = argv[0];
1822   r = guestfs_file (g, path);
1823   if (r == NULL) return -1;
1824   printf ("%s\n", r);
1825   free (r);
1826   return 0;
1827 }
1828
1829 static int run_command (const char *cmd, int argc, char *argv[])
1830 {
1831   char *r;
1832   char **arguments;
1833   if (argc != 1) {
1834     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1835     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1836     return -1;
1837   }
1838   arguments = parse_string_list (argv[0]);
1839   r = guestfs_command (g, arguments);
1840   if (r == NULL) return -1;
1841   printf ("%s\n", r);
1842   free (r);
1843   return 0;
1844 }
1845
1846 static int run_command_lines (const char *cmd, int argc, char *argv[])
1847 {
1848   char **r;
1849   char **arguments;
1850   if (argc != 1) {
1851     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1852     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1853     return -1;
1854   }
1855   arguments = parse_string_list (argv[0]);
1856   r = guestfs_command_lines (g, arguments);
1857   if (r == NULL) return -1;
1858   print_strings (r);
1859   free_strings (r);
1860   return 0;
1861 }
1862
1863 static int run_stat (const char *cmd, int argc, char *argv[])
1864 {
1865   struct guestfs_stat *r;
1866   const char *path;
1867   if (argc != 1) {
1868     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1869     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1870     return -1;
1871   }
1872   path = argv[0];
1873   r = guestfs_stat (g, path);
1874   if (r == NULL) return -1;
1875   print_stat (r);
1876   free (r);
1877   return 0;
1878 }
1879
1880 static int run_lstat (const char *cmd, int argc, char *argv[])
1881 {
1882   struct guestfs_stat *r;
1883   const char *path;
1884   if (argc != 1) {
1885     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1886     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1887     return -1;
1888   }
1889   path = argv[0];
1890   r = guestfs_lstat (g, path);
1891   if (r == NULL) return -1;
1892   print_stat (r);
1893   free (r);
1894   return 0;
1895 }
1896
1897 static int run_statvfs (const char *cmd, int argc, char *argv[])
1898 {
1899   struct guestfs_statvfs *r;
1900   const char *path;
1901   if (argc != 1) {
1902     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1903     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1904     return -1;
1905   }
1906   path = argv[0];
1907   r = guestfs_statvfs (g, path);
1908   if (r == NULL) return -1;
1909   print_statvfs (r);
1910   free (r);
1911   return 0;
1912 }
1913
1914 static int run_tune2fs_l (const char *cmd, int argc, char *argv[])
1915 {
1916   char **r;
1917   const char *device;
1918   if (argc != 1) {
1919     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1920     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1921     return -1;
1922   }
1923   device = argv[0];
1924   r = guestfs_tune2fs_l (g, device);
1925   if (r == NULL) return -1;
1926   print_table (r);
1927   free_strings (r);
1928   return 0;
1929 }
1930
1931 static int run_blockdev_setro (const char *cmd, int argc, char *argv[])
1932 {
1933   int r;
1934   const char *device;
1935   if (argc != 1) {
1936     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1937     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1938     return -1;
1939   }
1940   device = argv[0];
1941   r = guestfs_blockdev_setro (g, device);
1942   return r;
1943 }
1944
1945 static int run_blockdev_setrw (const char *cmd, int argc, char *argv[])
1946 {
1947   int r;
1948   const char *device;
1949   if (argc != 1) {
1950     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1951     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1952     return -1;
1953   }
1954   device = argv[0];
1955   r = guestfs_blockdev_setrw (g, device);
1956   return r;
1957 }
1958
1959 static int run_blockdev_getro (const char *cmd, int argc, char *argv[])
1960 {
1961   int r;
1962   const char *device;
1963   if (argc != 1) {
1964     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1965     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1966     return -1;
1967   }
1968   device = argv[0];
1969   r = guestfs_blockdev_getro (g, device);
1970   if (r == -1) return -1;
1971   if (r) printf ("true\n"); else printf ("false\n");
1972   return 0;
1973 }
1974
1975 static int run_blockdev_getss (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_getss (g, device);
1986   if (r == -1) return -1;
1987   printf ("%d\n", r);
1988   return 0;
1989 }
1990
1991 static int run_blockdev_getbsz (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_getbsz (g, device);
2002   if (r == -1) return -1;
2003   printf ("%d\n", r);
2004   return 0;
2005 }
2006
2007 static int run_blockdev_setbsz (const char *cmd, int argc, char *argv[])
2008 {
2009   int r;
2010   const char *device;
2011   int blocksize;
2012   if (argc != 2) {
2013     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2014     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2015     return -1;
2016   }
2017   device = argv[0];
2018   blocksize = atoi (argv[1]);
2019   r = guestfs_blockdev_setbsz (g, device, blocksize);
2020   return r;
2021 }
2022
2023 static int run_blockdev_getsz (const char *cmd, int argc, char *argv[])
2024 {
2025   int64_t r;
2026   const char *device;
2027   if (argc != 1) {
2028     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2029     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2030     return -1;
2031   }
2032   device = argv[0];
2033   r = guestfs_blockdev_getsz (g, device);
2034   if (r == -1) return -1;
2035   printf ("%" PRIi64 "\n", r);
2036   return 0;
2037 }
2038
2039 static int run_blockdev_getsize64 (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_getsize64 (g, device);
2050   if (r == -1) return -1;
2051   printf ("%" PRIi64 "\n", r);
2052   return 0;
2053 }
2054
2055 static int run_blockdev_flushbufs (const char *cmd, int argc, char *argv[])
2056 {
2057   int 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_flushbufs (g, device);
2066   return r;
2067 }
2068
2069 static int run_blockdev_rereadpt (const char *cmd, int argc, char *argv[])
2070 {
2071   int r;
2072   const char *device;
2073   if (argc != 1) {
2074     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2075     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2076     return -1;
2077   }
2078   device = argv[0];
2079   r = guestfs_blockdev_rereadpt (g, device);
2080   return r;
2081 }
2082
2083 static int run_upload (const char *cmd, int argc, char *argv[])
2084 {
2085   int r;
2086   const char *filename;
2087   const char *remotefilename;
2088   if (argc != 2) {
2089     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2090     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2091     return -1;
2092   }
2093   filename = strcmp (argv[0], "-") != 0 ? argv[0] : "/dev/stdin";
2094   remotefilename = argv[1];
2095   r = guestfs_upload (g, filename, remotefilename);
2096   return r;
2097 }
2098
2099 static int run_download (const char *cmd, int argc, char *argv[])
2100 {
2101   int r;
2102   const char *remotefilename;
2103   const char *filename;
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   remotefilename = argv[0];
2110   filename = strcmp (argv[1], "-") != 0 ? argv[1] : "/dev/stdout";
2111   r = guestfs_download (g, remotefilename, filename);
2112   return r;
2113 }
2114
2115 static int run_checksum (const char *cmd, int argc, char *argv[])
2116 {
2117   char *r;
2118   const char *csumtype;
2119   const char *path;
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   csumtype = argv[0];
2126   path = argv[1];
2127   r = guestfs_checksum (g, csumtype, path);
2128   if (r == NULL) return -1;
2129   printf ("%s\n", r);
2130   free (r);
2131   return 0;
2132 }
2133
2134 static int run_tar_in (const char *cmd, int argc, char *argv[])
2135 {
2136   int r;
2137   const char *tarfile;
2138   const char *directory;
2139   if (argc != 2) {
2140     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2141     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2142     return -1;
2143   }
2144   tarfile = strcmp (argv[0], "-") != 0 ? argv[0] : "/dev/stdin";
2145   directory = argv[1];
2146   r = guestfs_tar_in (g, tarfile, directory);
2147   return r;
2148 }
2149
2150 static int run_tar_out (const char *cmd, int argc, char *argv[])
2151 {
2152   int r;
2153   const char *directory;
2154   const char *tarfile;
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   directory = argv[0];
2161   tarfile = strcmp (argv[1], "-") != 0 ? argv[1] : "/dev/stdout";
2162   r = guestfs_tar_out (g, directory, tarfile);
2163   return r;
2164 }
2165
2166 static int run_tgz_in (const char *cmd, int argc, char *argv[])
2167 {
2168   int r;
2169   const char *tarball;
2170   const char *directory;
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   tarball = strcmp (argv[0], "-") != 0 ? argv[0] : "/dev/stdin";
2177   directory = argv[1];
2178   r = guestfs_tgz_in (g, tarball, directory);
2179   return r;
2180 }
2181
2182 static int run_tgz_out (const char *cmd, int argc, char *argv[])
2183 {
2184   int r;
2185   const char *directory;
2186   const char *tarball;
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   directory = argv[0];
2193   tarball = strcmp (argv[1], "-") != 0 ? argv[1] : "/dev/stdout";
2194   r = guestfs_tgz_out (g, directory, tarball);
2195   return r;
2196 }
2197
2198 static int run_mount_ro (const char *cmd, int argc, char *argv[])
2199 {
2200   int r;
2201   const char *device;
2202   const char *mountpoint;
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   device = argv[0];
2209   mountpoint = argv[1];
2210   r = guestfs_mount_ro (g, device, mountpoint);
2211   return r;
2212 }
2213
2214 static int run_mount_options (const char *cmd, int argc, char *argv[])
2215 {
2216   int r;
2217   const char *options;
2218   const char *device;
2219   const char *mountpoint;
2220   if (argc != 3) {
2221     fprintf (stderr, "%s should have 3 parameter(s)\n", cmd);
2222     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2223     return -1;
2224   }
2225   options = argv[0];
2226   device = argv[1];
2227   mountpoint = argv[2];
2228   r = guestfs_mount_options (g, options, device, mountpoint);
2229   return r;
2230 }
2231
2232 static int run_mount_vfs (const char *cmd, int argc, char *argv[])
2233 {
2234   int r;
2235   const char *options;
2236   const char *vfstype;
2237   const char *device;
2238   const char *mountpoint;
2239   if (argc != 4) {
2240     fprintf (stderr, "%s should have 4 parameter(s)\n", cmd);
2241     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2242     return -1;
2243   }
2244   options = argv[0];
2245   vfstype = argv[1];
2246   device = argv[2];
2247   mountpoint = argv[3];
2248   r = guestfs_mount_vfs (g, options, vfstype, device, mountpoint);
2249   return r;
2250 }
2251
2252 static int run_debug (const char *cmd, int argc, char *argv[])
2253 {
2254   char *r;
2255   const char *subcmd;
2256   char **extraargs;
2257   if (argc != 2) {
2258     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2259     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2260     return -1;
2261   }
2262   subcmd = argv[0];
2263   extraargs = parse_string_list (argv[1]);
2264   r = guestfs_debug (g, subcmd, extraargs);
2265   if (r == NULL) return -1;
2266   printf ("%s\n", r);
2267   free (r);
2268   return 0;
2269 }
2270
2271 static int run_lvremove (const char *cmd, int argc, char *argv[])
2272 {
2273   int r;
2274   const char *device;
2275   if (argc != 1) {
2276     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2277     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2278     return -1;
2279   }
2280   device = argv[0];
2281   r = guestfs_lvremove (g, device);
2282   return r;
2283 }
2284
2285 static int run_vgremove (const char *cmd, int argc, char *argv[])
2286 {
2287   int r;
2288   const char *vgname;
2289   if (argc != 1) {
2290     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2291     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2292     return -1;
2293   }
2294   vgname = argv[0];
2295   r = guestfs_vgremove (g, vgname);
2296   return r;
2297 }
2298
2299 static int run_pvremove (const char *cmd, int argc, char *argv[])
2300 {
2301   int r;
2302   const char *device;
2303   if (argc != 1) {
2304     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2305     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2306     return -1;
2307   }
2308   device = argv[0];
2309   r = guestfs_pvremove (g, device);
2310   return r;
2311 }
2312
2313 static int run_set_e2label (const char *cmd, int argc, char *argv[])
2314 {
2315   int r;
2316   const char *device;
2317   const char *label;
2318   if (argc != 2) {
2319     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2320     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2321     return -1;
2322   }
2323   device = argv[0];
2324   label = argv[1];
2325   r = guestfs_set_e2label (g, device, label);
2326   return r;
2327 }
2328
2329 static int run_get_e2label (const char *cmd, int argc, char *argv[])
2330 {
2331   char *r;
2332   const char *device;
2333   if (argc != 1) {
2334     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2335     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2336     return -1;
2337   }
2338   device = argv[0];
2339   r = guestfs_get_e2label (g, device);
2340   if (r == NULL) return -1;
2341   printf ("%s\n", r);
2342   free (r);
2343   return 0;
2344 }
2345
2346 static int run_set_e2uuid (const char *cmd, int argc, char *argv[])
2347 {
2348   int r;
2349   const char *device;
2350   const char *uuid;
2351   if (argc != 2) {
2352     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2353     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2354     return -1;
2355   }
2356   device = argv[0];
2357   uuid = argv[1];
2358   r = guestfs_set_e2uuid (g, device, uuid);
2359   return r;
2360 }
2361
2362 static int run_get_e2uuid (const char *cmd, int argc, char *argv[])
2363 {
2364   char *r;
2365   const char *device;
2366   if (argc != 1) {
2367     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2368     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2369     return -1;
2370   }
2371   device = argv[0];
2372   r = guestfs_get_e2uuid (g, device);
2373   if (r == NULL) return -1;
2374   printf ("%s\n", r);
2375   free (r);
2376   return 0;
2377 }
2378
2379 static int run_fsck (const char *cmd, int argc, char *argv[])
2380 {
2381   int r;
2382   const char *fstype;
2383   const char *device;
2384   if (argc != 2) {
2385     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2386     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2387     return -1;
2388   }
2389   fstype = argv[0];
2390   device = argv[1];
2391   r = guestfs_fsck (g, fstype, device);
2392   if (r == -1) return -1;
2393   printf ("%d\n", r);
2394   return 0;
2395 }
2396
2397 static int run_zero (const char *cmd, int argc, char *argv[])
2398 {
2399   int r;
2400   const char *device;
2401   if (argc != 1) {
2402     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2403     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2404     return -1;
2405   }
2406   device = argv[0];
2407   r = guestfs_zero (g, device);
2408   return r;
2409 }
2410
2411 static int run_grub_install (const char *cmd, int argc, char *argv[])
2412 {
2413   int r;
2414   const char *root;
2415   const char *device;
2416   if (argc != 2) {
2417     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2418     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2419     return -1;
2420   }
2421   root = argv[0];
2422   device = argv[1];
2423   r = guestfs_grub_install (g, root, device);
2424   return r;
2425 }
2426
2427 static int run_cp (const char *cmd, int argc, char *argv[])
2428 {
2429   int r;
2430   const char *src;
2431   const char *dest;
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   src = argv[0];
2438   dest = argv[1];
2439   r = guestfs_cp (g, src, dest);
2440   return r;
2441 }
2442
2443 static int run_cp_a (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_a (g, src, dest);
2456   return r;
2457 }
2458
2459 static int run_mv (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_mv (g, src, dest);
2472   return r;
2473 }
2474
2475 static int run_drop_caches (const char *cmd, int argc, char *argv[])
2476 {
2477   int r;
2478   int whattodrop;
2479   if (argc != 1) {
2480     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2481     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2482     return -1;
2483   }
2484   whattodrop = atoi (argv[0]);
2485   r = guestfs_drop_caches (g, whattodrop);
2486   return r;
2487 }
2488
2489 static int run_dmesg (const char *cmd, int argc, char *argv[])
2490 {
2491   char *r;
2492   if (argc != 0) {
2493     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
2494     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2495     return -1;
2496   }
2497   r = guestfs_dmesg (g);
2498   if (r == NULL) return -1;
2499   printf ("%s\n", r);
2500   free (r);
2501   return 0;
2502 }
2503
2504 static int run_ping_daemon (const char *cmd, int argc, char *argv[])
2505 {
2506   int r;
2507   if (argc != 0) {
2508     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
2509     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2510     return -1;
2511   }
2512   r = guestfs_ping_daemon (g);
2513   return r;
2514 }
2515
2516 static int run_equal (const char *cmd, int argc, char *argv[])
2517 {
2518   int r;
2519   const char *file1;
2520   const char *file2;
2521   if (argc != 2) {
2522     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2523     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2524     return -1;
2525   }
2526   file1 = argv[0];
2527   file2 = argv[1];
2528   r = guestfs_equal (g, file1, file2);
2529   if (r == -1) return -1;
2530   if (r) printf ("true\n"); else printf ("false\n");
2531   return 0;
2532 }
2533
2534 static int run_strings (const char *cmd, int argc, char *argv[])
2535 {
2536   char **r;
2537   const char *path;
2538   if (argc != 1) {
2539     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2540     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2541     return -1;
2542   }
2543   path = argv[0];
2544   r = guestfs_strings (g, path);
2545   if (r == NULL) return -1;
2546   print_strings (r);
2547   free_strings (r);
2548   return 0;
2549 }
2550
2551 static int run_strings_e (const char *cmd, int argc, char *argv[])
2552 {
2553   char **r;
2554   const char *encoding;
2555   const char *path;
2556   if (argc != 2) {
2557     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2558     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2559     return -1;
2560   }
2561   encoding = argv[0];
2562   path = argv[1];
2563   r = guestfs_strings_e (g, encoding, path);
2564   if (r == NULL) return -1;
2565   print_strings (r);
2566   free_strings (r);
2567   return 0;
2568 }
2569
2570 static int run_hexdump (const char *cmd, int argc, char *argv[])
2571 {
2572   char *r;
2573   const char *path;
2574   if (argc != 1) {
2575     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2576     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2577     return -1;
2578   }
2579   path = argv[0];
2580   r = guestfs_hexdump (g, path);
2581   if (r == NULL) return -1;
2582   printf ("%s\n", r);
2583   free (r);
2584   return 0;
2585 }
2586
2587 static int run_zerofree (const char *cmd, int argc, char *argv[])
2588 {
2589   int r;
2590   const char *device;
2591   if (argc != 1) {
2592     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2593     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2594     return -1;
2595   }
2596   device = argv[0];
2597   r = guestfs_zerofree (g, device);
2598   return r;
2599 }
2600
2601 static int run_pvresize (const char *cmd, int argc, char *argv[])
2602 {
2603   int r;
2604   const char *device;
2605   if (argc != 1) {
2606     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2607     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2608     return -1;
2609   }
2610   device = argv[0];
2611   r = guestfs_pvresize (g, device);
2612   return r;
2613 }
2614
2615 static int run_sfdisk_N (const char *cmd, int argc, char *argv[])
2616 {
2617   int r;
2618   const char *device;
2619   int partnum;
2620   int cyls;
2621   int heads;
2622   int sectors;
2623   const char *line;
2624   if (argc != 6) {
2625     fprintf (stderr, "%s should have 6 parameter(s)\n", cmd);
2626     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2627     return -1;
2628   }
2629   device = argv[0];
2630   partnum = atoi (argv[1]);
2631   cyls = atoi (argv[2]);
2632   heads = atoi (argv[3]);
2633   sectors = atoi (argv[4]);
2634   line = argv[5];
2635   r = guestfs_sfdisk_N (g, device, partnum, cyls, heads, sectors, line);
2636   return r;
2637 }
2638
2639 static int run_sfdisk_l (const char *cmd, int argc, char *argv[])
2640 {
2641   char *r;
2642   const char *device;
2643   if (argc != 1) {
2644     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2645     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2646     return -1;
2647   }
2648   device = argv[0];
2649   r = guestfs_sfdisk_l (g, device);
2650   if (r == NULL) return -1;
2651   printf ("%s\n", r);
2652   free (r);
2653   return 0;
2654 }
2655
2656 static int run_sfdisk_kernel_geometry (const char *cmd, int argc, char *argv[])
2657 {
2658   char *r;
2659   const char *device;
2660   if (argc != 1) {
2661     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2662     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2663     return -1;
2664   }
2665   device = argv[0];
2666   r = guestfs_sfdisk_kernel_geometry (g, device);
2667   if (r == NULL) return -1;
2668   printf ("%s\n", r);
2669   free (r);
2670   return 0;
2671 }
2672
2673 static int run_sfdisk_disk_geometry (const char *cmd, int argc, char *argv[])
2674 {
2675   char *r;
2676   const char *device;
2677   if (argc != 1) {
2678     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2679     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2680     return -1;
2681   }
2682   device = argv[0];
2683   r = guestfs_sfdisk_disk_geometry (g, device);
2684   if (r == NULL) return -1;
2685   printf ("%s\n", r);
2686   free (r);
2687   return 0;
2688 }
2689
2690 static int run_vg_activate_all (const char *cmd, int argc, char *argv[])
2691 {
2692   int r;
2693   int activate;
2694   if (argc != 1) {
2695     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2696     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2697     return -1;
2698   }
2699   activate = is_true (argv[0]) ? 1 : 0;
2700   r = guestfs_vg_activate_all (g, activate);
2701   return r;
2702 }
2703
2704 static int run_vg_activate (const char *cmd, int argc, char *argv[])
2705 {
2706   int r;
2707   int activate;
2708   char **volgroups;
2709   if (argc != 2) {
2710     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2711     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2712     return -1;
2713   }
2714   activate = is_true (argv[0]) ? 1 : 0;
2715   volgroups = parse_string_list (argv[1]);
2716   r = guestfs_vg_activate (g, activate, volgroups);
2717   return r;
2718 }
2719
2720 static int run_lvresize (const char *cmd, int argc, char *argv[])
2721 {
2722   int r;
2723   const char *device;
2724   int mbytes;
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   device = argv[0];
2731   mbytes = atoi (argv[1]);
2732   r = guestfs_lvresize (g, device, mbytes);
2733   return r;
2734 }
2735
2736 static int run_resize2fs (const char *cmd, int argc, char *argv[])
2737 {
2738   int r;
2739   const char *device;
2740   if (argc != 1) {
2741     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2742     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2743     return -1;
2744   }
2745   device = argv[0];
2746   r = guestfs_resize2fs (g, device);
2747   return r;
2748 }
2749
2750 static int run_find (const char *cmd, int argc, char *argv[])
2751 {
2752   char **r;
2753   const char *directory;
2754   if (argc != 1) {
2755     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2756     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2757     return -1;
2758   }
2759   directory = argv[0];
2760   r = guestfs_find (g, directory);
2761   if (r == NULL) return -1;
2762   print_strings (r);
2763   free_strings (r);
2764   return 0;
2765 }
2766
2767 static int run_e2fsck_f (const char *cmd, int argc, char *argv[])
2768 {
2769   int r;
2770   const char *device;
2771   if (argc != 1) {
2772     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2773     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2774     return -1;
2775   }
2776   device = argv[0];
2777   r = guestfs_e2fsck_f (g, device);
2778   return r;
2779 }
2780
2781 static int run_sleep (const char *cmd, int argc, char *argv[])
2782 {
2783   int r;
2784   int secs;
2785   if (argc != 1) {
2786     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2787     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2788     return -1;
2789   }
2790   secs = atoi (argv[0]);
2791   r = guestfs_sleep (g, secs);
2792   return r;
2793 }
2794
2795 static int run_ntfs_3g_probe (const char *cmd, int argc, char *argv[])
2796 {
2797   int r;
2798   int rw;
2799   const char *device;
2800   if (argc != 2) {
2801     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2802     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2803     return -1;
2804   }
2805   rw = is_true (argv[0]) ? 1 : 0;
2806   device = argv[1];
2807   r = guestfs_ntfs_3g_probe (g, rw, device);
2808   if (r == -1) return -1;
2809   printf ("%d\n", r);
2810   return 0;
2811 }
2812
2813 static int run_sh (const char *cmd, int argc, char *argv[])
2814 {
2815   char *r;
2816   const char *command;
2817   if (argc != 1) {
2818     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2819     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2820     return -1;
2821   }
2822   command = argv[0];
2823   r = guestfs_sh (g, command);
2824   if (r == NULL) return -1;
2825   printf ("%s\n", r);
2826   free (r);
2827   return 0;
2828 }
2829
2830 static int run_sh_lines (const char *cmd, int argc, char *argv[])
2831 {
2832   char **r;
2833   const char *command;
2834   if (argc != 1) {
2835     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2836     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2837     return -1;
2838   }
2839   command = argv[0];
2840   r = guestfs_sh_lines (g, command);
2841   if (r == NULL) return -1;
2842   print_strings (r);
2843   free_strings (r);
2844   return 0;
2845 }
2846
2847 static int run_glob_expand (const char *cmd, int argc, char *argv[])
2848 {
2849   char **r;
2850   const char *pattern;
2851   if (argc != 1) {
2852     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2853     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2854     return -1;
2855   }
2856   pattern = argv[0];
2857   r = guestfs_glob_expand (g, pattern);
2858   if (r == NULL) return -1;
2859   print_strings (r);
2860   free_strings (r);
2861   return 0;
2862 }
2863
2864 static int run_scrub_device (const char *cmd, int argc, char *argv[])
2865 {
2866   int r;
2867   const char *device;
2868   if (argc != 1) {
2869     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2870     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2871     return -1;
2872   }
2873   device = argv[0];
2874   r = guestfs_scrub_device (g, device);
2875   return r;
2876 }
2877
2878 static int run_scrub_file (const char *cmd, int argc, char *argv[])
2879 {
2880   int r;
2881   const char *file;
2882   if (argc != 1) {
2883     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2884     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2885     return -1;
2886   }
2887   file = argv[0];
2888   r = guestfs_scrub_file (g, file);
2889   return r;
2890 }
2891
2892 static int run_scrub_freespace (const char *cmd, int argc, char *argv[])
2893 {
2894   int r;
2895   const char *dir;
2896   if (argc != 1) {
2897     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2898     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2899     return -1;
2900   }
2901   dir = argv[0];
2902   r = guestfs_scrub_freespace (g, dir);
2903   return r;
2904 }
2905
2906 static int run_mkdtemp (const char *cmd, int argc, char *argv[])
2907 {
2908   char *r;
2909   const char *template;
2910   if (argc != 1) {
2911     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2912     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2913     return -1;
2914   }
2915   template = argv[0];
2916   r = guestfs_mkdtemp (g, template);
2917   if (r == NULL) return -1;
2918   printf ("%s\n", r);
2919   free (r);
2920   return 0;
2921 }
2922
2923 static int run_wc_l (const char *cmd, int argc, char *argv[])
2924 {
2925   int r;
2926   const char *path;
2927   if (argc != 1) {
2928     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2929     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2930     return -1;
2931   }
2932   path = argv[0];
2933   r = guestfs_wc_l (g, path);
2934   if (r == -1) return -1;
2935   printf ("%d\n", r);
2936   return 0;
2937 }
2938
2939 static int run_wc_w (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_w (g, path);
2950   if (r == -1) return -1;
2951   printf ("%d\n", r);
2952   return 0;
2953 }
2954
2955 static int run_wc_c (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_c (g, path);
2966   if (r == -1) return -1;
2967   printf ("%d\n", r);
2968   return 0;
2969 }
2970
2971 static int run_head (const char *cmd, int argc, char *argv[])
2972 {
2973   char **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_head (g, path);
2982   if (r == NULL) return -1;
2983   print_strings (r);
2984   free_strings (r);
2985   return 0;
2986 }
2987
2988 static int run_head_n (const char *cmd, int argc, char *argv[])
2989 {
2990   char **r;
2991   int nrlines;
2992   const char *path;
2993   if (argc != 2) {
2994     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2995     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2996     return -1;
2997   }
2998   nrlines = atoi (argv[0]);
2999   path = argv[1];
3000   r = guestfs_head_n (g, nrlines, path);
3001   if (r == NULL) return -1;
3002   print_strings (r);
3003   free_strings (r);
3004   return 0;
3005 }
3006
3007 static int run_tail (const char *cmd, int argc, char *argv[])
3008 {
3009   char **r;
3010   const char *path;
3011   if (argc != 1) {
3012     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
3013     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3014     return -1;
3015   }
3016   path = argv[0];
3017   r = guestfs_tail (g, path);
3018   if (r == NULL) return -1;
3019   print_strings (r);
3020   free_strings (r);
3021   return 0;
3022 }
3023
3024 static int run_tail_n (const char *cmd, int argc, char *argv[])
3025 {
3026   char **r;
3027   int nrlines;
3028   const char *path;
3029   if (argc != 2) {
3030     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
3031     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3032     return -1;
3033   }
3034   nrlines = atoi (argv[0]);
3035   path = argv[1];
3036   r = guestfs_tail_n (g, nrlines, path);
3037   if (r == NULL) return -1;
3038   print_strings (r);
3039   free_strings (r);
3040   return 0;
3041 }
3042
3043 static int run_df (const char *cmd, int argc, char *argv[])
3044 {
3045   char *r;
3046   if (argc != 0) {
3047     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
3048     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3049     return -1;
3050   }
3051   r = guestfs_df (g);
3052   if (r == NULL) return -1;
3053   printf ("%s\n", r);
3054   free (r);
3055   return 0;
3056 }
3057
3058 static int run_df_h (const char *cmd, int argc, char *argv[])
3059 {
3060   char *r;
3061   if (argc != 0) {
3062     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
3063     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3064     return -1;
3065   }
3066   r = guestfs_df_h (g);
3067   if (r == NULL) return -1;
3068   printf ("%s\n", r);
3069   free (r);
3070   return 0;
3071 }
3072
3073 static int run_du (const char *cmd, int argc, char *argv[])
3074 {
3075   int64_t r;
3076   const char *path;
3077   if (argc != 1) {
3078     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
3079     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3080     return -1;
3081   }
3082   path = argv[0];
3083   r = guestfs_du (g, path);
3084   if (r == -1) return -1;
3085   printf ("%" PRIi64 "\n", r);
3086   return 0;
3087 }
3088
3089 static int run_initrd_list (const char *cmd, int argc, char *argv[])
3090 {
3091   char **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_initrd_list (g, path);
3100   if (r == NULL) return -1;
3101   print_strings (r);
3102   free_strings (r);
3103   return 0;
3104 }
3105
3106 int run_action (const char *cmd, int argc, char *argv[])
3107 {
3108   if (strcasecmp (cmd, "launch") == 0 || strcasecmp (cmd, "run") == 0)
3109     return run_launch (cmd, argc, argv);
3110   else
3111   if (strcasecmp (cmd, "kill_subprocess") == 0 || strcasecmp (cmd, "kill-subprocess") == 0)
3112     return run_kill_subprocess (cmd, argc, argv);
3113   else
3114   if (strcasecmp (cmd, "add_drive") == 0 || strcasecmp (cmd, "add-drive") == 0 || strcasecmp (cmd, "add") == 0)
3115     return run_add_drive (cmd, argc, argv);
3116   else
3117   if (strcasecmp (cmd, "add_cdrom") == 0 || strcasecmp (cmd, "add-cdrom") == 0 || strcasecmp (cmd, "cdrom") == 0)
3118     return run_add_cdrom (cmd, argc, argv);
3119   else
3120   if (strcasecmp (cmd, "add_drive_ro") == 0 || strcasecmp (cmd, "add-drive-ro") == 0 || strcasecmp (cmd, "add-ro") == 0)
3121     return run_add_drive_ro (cmd, argc, argv);
3122   else
3123   if (strcasecmp (cmd, "config") == 0)
3124     return run_config (cmd, argc, argv);
3125   else
3126   if (strcasecmp (cmd, "set_qemu") == 0 || strcasecmp (cmd, "set-qemu") == 0 || strcasecmp (cmd, "qemu") == 0)
3127     return run_set_qemu (cmd, argc, argv);
3128   else
3129   if (strcasecmp (cmd, "get_qemu") == 0 || strcasecmp (cmd, "get-qemu") == 0)
3130     return run_get_qemu (cmd, argc, argv);
3131   else
3132   if (strcasecmp (cmd, "set_path") == 0 || strcasecmp (cmd, "set-path") == 0 || strcasecmp (cmd, "path") == 0)
3133     return run_set_path (cmd, argc, argv);
3134   else
3135   if (strcasecmp (cmd, "get_path") == 0 || strcasecmp (cmd, "get-path") == 0)
3136     return run_get_path (cmd, argc, argv);
3137   else
3138   if (strcasecmp (cmd, "set_append") == 0 || strcasecmp (cmd, "set-append") == 0 || strcasecmp (cmd, "append") == 0)
3139     return run_set_append (cmd, argc, argv);
3140   else
3141   if (strcasecmp (cmd, "get_append") == 0 || strcasecmp (cmd, "get-append") == 0)
3142     return run_get_append (cmd, argc, argv);
3143   else
3144   if (strcasecmp (cmd, "set_autosync") == 0 || strcasecmp (cmd, "set-autosync") == 0 || strcasecmp (cmd, "autosync") == 0)
3145     return run_set_autosync (cmd, argc, argv);
3146   else
3147   if (strcasecmp (cmd, "get_autosync") == 0 || strcasecmp (cmd, "get-autosync") == 0)
3148     return run_get_autosync (cmd, argc, argv);
3149   else
3150   if (strcasecmp (cmd, "set_verbose") == 0 || strcasecmp (cmd, "set-verbose") == 0 || strcasecmp (cmd, "verbose") == 0)
3151     return run_set_verbose (cmd, argc, argv);
3152   else
3153   if (strcasecmp (cmd, "get_verbose") == 0 || strcasecmp (cmd, "get-verbose") == 0)
3154     return run_get_verbose (cmd, argc, argv);
3155   else
3156   if (strcasecmp (cmd, "is_ready") == 0 || strcasecmp (cmd, "is-ready") == 0)
3157     return run_is_ready (cmd, argc, argv);
3158   else
3159   if (strcasecmp (cmd, "is_config") == 0 || strcasecmp (cmd, "is-config") == 0)
3160     return run_is_config (cmd, argc, argv);
3161   else
3162   if (strcasecmp (cmd, "is_launching") == 0 || strcasecmp (cmd, "is-launching") == 0)
3163     return run_is_launching (cmd, argc, argv);
3164   else
3165   if (strcasecmp (cmd, "is_busy") == 0 || strcasecmp (cmd, "is-busy") == 0)
3166     return run_is_busy (cmd, argc, argv);
3167   else
3168   if (strcasecmp (cmd, "get_state") == 0 || strcasecmp (cmd, "get-state") == 0)
3169     return run_get_state (cmd, argc, argv);
3170   else
3171   if (strcasecmp (cmd, "mount") == 0)
3172     return run_mount (cmd, argc, argv);
3173   else
3174   if (strcasecmp (cmd, "sync") == 0)
3175     return run_sync (cmd, argc, argv);
3176   else
3177   if (strcasecmp (cmd, "touch") == 0)
3178     return run_touch (cmd, argc, argv);
3179   else
3180   if (strcasecmp (cmd, "cat") == 0)
3181     return run_cat (cmd, argc, argv);
3182   else
3183   if (strcasecmp (cmd, "ll") == 0)
3184     return run_ll (cmd, argc, argv);
3185   else
3186   if (strcasecmp (cmd, "ls") == 0)
3187     return run_ls (cmd, argc, argv);
3188   else
3189   if (strcasecmp (cmd, "list_devices") == 0 || strcasecmp (cmd, "list-devices") == 0)
3190     return run_list_devices (cmd, argc, argv);
3191   else
3192   if (strcasecmp (cmd, "list_partitions") == 0 || strcasecmp (cmd, "list-partitions") == 0)
3193     return run_list_partitions (cmd, argc, argv);
3194   else
3195   if (strcasecmp (cmd, "pvs") == 0)
3196     return run_pvs (cmd, argc, argv);
3197   else
3198   if (strcasecmp (cmd, "vgs") == 0)
3199     return run_vgs (cmd, argc, argv);
3200   else
3201   if (strcasecmp (cmd, "lvs") == 0)
3202     return run_lvs (cmd, argc, argv);
3203   else
3204   if (strcasecmp (cmd, "pvs_full") == 0 || strcasecmp (cmd, "pvs-full") == 0)
3205     return run_pvs_full (cmd, argc, argv);
3206   else
3207   if (strcasecmp (cmd, "vgs_full") == 0 || strcasecmp (cmd, "vgs-full") == 0)
3208     return run_vgs_full (cmd, argc, argv);
3209   else
3210   if (strcasecmp (cmd, "lvs_full") == 0 || strcasecmp (cmd, "lvs-full") == 0)
3211     return run_lvs_full (cmd, argc, argv);
3212   else
3213   if (strcasecmp (cmd, "read_lines") == 0 || strcasecmp (cmd, "read-lines") == 0)
3214     return run_read_lines (cmd, argc, argv);
3215   else
3216   if (strcasecmp (cmd, "aug_init") == 0 || strcasecmp (cmd, "aug-init") == 0)
3217     return run_aug_init (cmd, argc, argv);
3218   else
3219   if (strcasecmp (cmd, "aug_close") == 0 || strcasecmp (cmd, "aug-close") == 0)
3220     return run_aug_close (cmd, argc, argv);
3221   else
3222   if (strcasecmp (cmd, "aug_defvar") == 0 || strcasecmp (cmd, "aug-defvar") == 0)
3223     return run_aug_defvar (cmd, argc, argv);
3224   else
3225   if (strcasecmp (cmd, "aug_defnode") == 0 || strcasecmp (cmd, "aug-defnode") == 0)
3226     return run_aug_defnode (cmd, argc, argv);
3227   else
3228   if (strcasecmp (cmd, "aug_get") == 0 || strcasecmp (cmd, "aug-get") == 0)
3229     return run_aug_get (cmd, argc, argv);
3230   else
3231   if (strcasecmp (cmd, "aug_set") == 0 || strcasecmp (cmd, "aug-set") == 0)
3232     return run_aug_set (cmd, argc, argv);
3233   else
3234   if (strcasecmp (cmd, "aug_insert") == 0 || strcasecmp (cmd, "aug-insert") == 0)
3235     return run_aug_insert (cmd, argc, argv);
3236   else
3237   if (strcasecmp (cmd, "aug_rm") == 0 || strcasecmp (cmd, "aug-rm") == 0)
3238     return run_aug_rm (cmd, argc, argv);
3239   else
3240   if (strcasecmp (cmd, "aug_mv") == 0 || strcasecmp (cmd, "aug-mv") == 0)
3241     return run_aug_mv (cmd, argc, argv);
3242   else
3243   if (strcasecmp (cmd, "aug_match") == 0 || strcasecmp (cmd, "aug-match") == 0)
3244     return run_aug_match (cmd, argc, argv);
3245   else
3246   if (strcasecmp (cmd, "aug_save") == 0 || strcasecmp (cmd, "aug-save") == 0)
3247     return run_aug_save (cmd, argc, argv);
3248   else
3249   if (strcasecmp (cmd, "aug_load") == 0 || strcasecmp (cmd, "aug-load") == 0)
3250     return run_aug_load (cmd, argc, argv);
3251   else
3252   if (strcasecmp (cmd, "aug_ls") == 0 || strcasecmp (cmd, "aug-ls") == 0)
3253     return run_aug_ls (cmd, argc, argv);
3254   else
3255   if (strcasecmp (cmd, "rm") == 0)
3256     return run_rm (cmd, argc, argv);
3257   else
3258   if (strcasecmp (cmd, "rmdir") == 0)
3259     return run_rmdir (cmd, argc, argv);
3260   else
3261   if (strcasecmp (cmd, "rm_rf") == 0 || strcasecmp (cmd, "rm-rf") == 0)
3262     return run_rm_rf (cmd, argc, argv);
3263   else
3264   if (strcasecmp (cmd, "mkdir") == 0)
3265     return run_mkdir (cmd, argc, argv);
3266   else
3267   if (strcasecmp (cmd, "mkdir_p") == 0 || strcasecmp (cmd, "mkdir-p") == 0)
3268     return run_mkdir_p (cmd, argc, argv);
3269   else
3270   if (strcasecmp (cmd, "chmod") == 0)
3271     return run_chmod (cmd, argc, argv);
3272   else
3273   if (strcasecmp (cmd, "chown") == 0)
3274     return run_chown (cmd, argc, argv);
3275   else
3276   if (strcasecmp (cmd, "exists") == 0)
3277     return run_exists (cmd, argc, argv);
3278   else
3279   if (strcasecmp (cmd, "is_file") == 0 || strcasecmp (cmd, "is-file") == 0)
3280     return run_is_file (cmd, argc, argv);
3281   else
3282   if (strcasecmp (cmd, "is_dir") == 0 || strcasecmp (cmd, "is-dir") == 0)
3283     return run_is_dir (cmd, argc, argv);
3284   else
3285   if (strcasecmp (cmd, "pvcreate") == 0)
3286     return run_pvcreate (cmd, argc, argv);
3287   else
3288   if (strcasecmp (cmd, "vgcreate") == 0)
3289     return run_vgcreate (cmd, argc, argv);
3290   else
3291   if (strcasecmp (cmd, "lvcreate") == 0)
3292     return run_lvcreate (cmd, argc, argv);
3293   else
3294   if (strcasecmp (cmd, "mkfs") == 0)
3295     return run_mkfs (cmd, argc, argv);
3296   else
3297   if (strcasecmp (cmd, "sfdisk") == 0)
3298     return run_sfdisk (cmd, argc, argv);
3299   else
3300   if (strcasecmp (cmd, "write_file") == 0 || strcasecmp (cmd, "write-file") == 0)
3301     return run_write_file (cmd, argc, argv);
3302   else
3303   if (strcasecmp (cmd, "umount") == 0 || strcasecmp (cmd, "unmount") == 0)
3304     return run_umount (cmd, argc, argv);
3305   else
3306   if (strcasecmp (cmd, "mounts") == 0)
3307     return run_mounts (cmd, argc, argv);
3308   else
3309   if (strcasecmp (cmd, "umount_all") == 0 || strcasecmp (cmd, "umount-all") == 0 || strcasecmp (cmd, "unmount-all") == 0)
3310     return run_umount_all (cmd, argc, argv);
3311   else
3312   if (strcasecmp (cmd, "lvm_remove_all") == 0 || strcasecmp (cmd, "lvm-remove-all") == 0)
3313     return run_lvm_remove_all (cmd, argc, argv);
3314   else
3315   if (strcasecmp (cmd, "file") == 0)
3316     return run_file (cmd, argc, argv);
3317   else
3318   if (strcasecmp (cmd, "command") == 0)
3319     return run_command (cmd, argc, argv);
3320   else
3321   if (strcasecmp (cmd, "command_lines") == 0 || strcasecmp (cmd, "command-lines") == 0)
3322     return run_command_lines (cmd, argc, argv);
3323   else
3324   if (strcasecmp (cmd, "stat") == 0)
3325     return run_stat (cmd, argc, argv);
3326   else
3327   if (strcasecmp (cmd, "lstat") == 0)
3328     return run_lstat (cmd, argc, argv);
3329   else
3330   if (strcasecmp (cmd, "statvfs") == 0)
3331     return run_statvfs (cmd, argc, argv);
3332   else
3333   if (strcasecmp (cmd, "tune2fs_l") == 0 || strcasecmp (cmd, "tune2fs-l") == 0)
3334     return run_tune2fs_l (cmd, argc, argv);
3335   else
3336   if (strcasecmp (cmd, "blockdev_setro") == 0 || strcasecmp (cmd, "blockdev-setro") == 0)
3337     return run_blockdev_setro (cmd, argc, argv);
3338   else
3339   if (strcasecmp (cmd, "blockdev_setrw") == 0 || strcasecmp (cmd, "blockdev-setrw") == 0)
3340     return run_blockdev_setrw (cmd, argc, argv);
3341   else
3342   if (strcasecmp (cmd, "blockdev_getro") == 0 || strcasecmp (cmd, "blockdev-getro") == 0)
3343     return run_blockdev_getro (cmd, argc, argv);
3344   else
3345   if (strcasecmp (cmd, "blockdev_getss") == 0 || strcasecmp (cmd, "blockdev-getss") == 0)
3346     return run_blockdev_getss (cmd, argc, argv);
3347   else
3348   if (strcasecmp (cmd, "blockdev_getbsz") == 0 || strcasecmp (cmd, "blockdev-getbsz") == 0)
3349     return run_blockdev_getbsz (cmd, argc, argv);
3350   else
3351   if (strcasecmp (cmd, "blockdev_setbsz") == 0 || strcasecmp (cmd, "blockdev-setbsz") == 0)
3352     return run_blockdev_setbsz (cmd, argc, argv);
3353   else
3354   if (strcasecmp (cmd, "blockdev_getsz") == 0 || strcasecmp (cmd, "blockdev-getsz") == 0)
3355     return run_blockdev_getsz (cmd, argc, argv);
3356   else
3357   if (strcasecmp (cmd, "blockdev_getsize64") == 0 || strcasecmp (cmd, "blockdev-getsize64") == 0)
3358     return run_blockdev_getsize64 (cmd, argc, argv);
3359   else
3360   if (strcasecmp (cmd, "blockdev_flushbufs") == 0 || strcasecmp (cmd, "blockdev-flushbufs") == 0)
3361     return run_blockdev_flushbufs (cmd, argc, argv);
3362   else
3363   if (strcasecmp (cmd, "blockdev_rereadpt") == 0 || strcasecmp (cmd, "blockdev-rereadpt") == 0)
3364     return run_blockdev_rereadpt (cmd, argc, argv);
3365   else
3366   if (strcasecmp (cmd, "upload") == 0)
3367     return run_upload (cmd, argc, argv);
3368   else
3369   if (strcasecmp (cmd, "download") == 0)
3370     return run_download (cmd, argc, argv);
3371   else
3372   if (strcasecmp (cmd, "checksum") == 0)
3373     return run_checksum (cmd, argc, argv);
3374   else
3375   if (strcasecmp (cmd, "tar_in") == 0 || strcasecmp (cmd, "tar-in") == 0)
3376     return run_tar_in (cmd, argc, argv);
3377   else
3378   if (strcasecmp (cmd, "tar_out") == 0 || strcasecmp (cmd, "tar-out") == 0)
3379     return run_tar_out (cmd, argc, argv);
3380   else
3381   if (strcasecmp (cmd, "tgz_in") == 0 || strcasecmp (cmd, "tgz-in") == 0)
3382     return run_tgz_in (cmd, argc, argv);
3383   else
3384   if (strcasecmp (cmd, "tgz_out") == 0 || strcasecmp (cmd, "tgz-out") == 0)
3385     return run_tgz_out (cmd, argc, argv);
3386   else
3387   if (strcasecmp (cmd, "mount_ro") == 0 || strcasecmp (cmd, "mount-ro") == 0)
3388     return run_mount_ro (cmd, argc, argv);
3389   else
3390   if (strcasecmp (cmd, "mount_options") == 0 || strcasecmp (cmd, "mount-options") == 0)
3391     return run_mount_options (cmd, argc, argv);
3392   else
3393   if (strcasecmp (cmd, "mount_vfs") == 0 || strcasecmp (cmd, "mount-vfs") == 0)
3394     return run_mount_vfs (cmd, argc, argv);
3395   else
3396   if (strcasecmp (cmd, "debug") == 0)
3397     return run_debug (cmd, argc, argv);
3398   else
3399   if (strcasecmp (cmd, "lvremove") == 0)
3400     return run_lvremove (cmd, argc, argv);
3401   else
3402   if (strcasecmp (cmd, "vgremove") == 0)
3403     return run_vgremove (cmd, argc, argv);
3404   else
3405   if (strcasecmp (cmd, "pvremove") == 0)
3406     return run_pvremove (cmd, argc, argv);
3407   else
3408   if (strcasecmp (cmd, "set_e2label") == 0 || strcasecmp (cmd, "set-e2label") == 0)
3409     return run_set_e2label (cmd, argc, argv);
3410   else
3411   if (strcasecmp (cmd, "get_e2label") == 0 || strcasecmp (cmd, "get-e2label") == 0)
3412     return run_get_e2label (cmd, argc, argv);
3413   else
3414   if (strcasecmp (cmd, "set_e2uuid") == 0 || strcasecmp (cmd, "set-e2uuid") == 0)
3415     return run_set_e2uuid (cmd, argc, argv);
3416   else
3417   if (strcasecmp (cmd, "get_e2uuid") == 0 || strcasecmp (cmd, "get-e2uuid") == 0)
3418     return run_get_e2uuid (cmd, argc, argv);
3419   else
3420   if (strcasecmp (cmd, "fsck") == 0)
3421     return run_fsck (cmd, argc, argv);
3422   else
3423   if (strcasecmp (cmd, "zero") == 0)
3424     return run_zero (cmd, argc, argv);
3425   else
3426   if (strcasecmp (cmd, "grub_install") == 0 || strcasecmp (cmd, "grub-install") == 0)
3427     return run_grub_install (cmd, argc, argv);
3428   else
3429   if (strcasecmp (cmd, "cp") == 0)
3430     return run_cp (cmd, argc, argv);
3431   else
3432   if (strcasecmp (cmd, "cp_a") == 0 || strcasecmp (cmd, "cp-a") == 0)
3433     return run_cp_a (cmd, argc, argv);
3434   else
3435   if (strcasecmp (cmd, "mv") == 0)
3436     return run_mv (cmd, argc, argv);
3437   else
3438   if (strcasecmp (cmd, "drop_caches") == 0 || strcasecmp (cmd, "drop-caches") == 0)
3439     return run_drop_caches (cmd, argc, argv);
3440   else
3441   if (strcasecmp (cmd, "dmesg") == 0)
3442     return run_dmesg (cmd, argc, argv);
3443   else
3444   if (strcasecmp (cmd, "ping_daemon") == 0 || strcasecmp (cmd, "ping-daemon") == 0)
3445     return run_ping_daemon (cmd, argc, argv);
3446   else
3447   if (strcasecmp (cmd, "equal") == 0)
3448     return run_equal (cmd, argc, argv);
3449   else
3450   if (strcasecmp (cmd, "strings") == 0)
3451     return run_strings (cmd, argc, argv);
3452   else
3453   if (strcasecmp (cmd, "strings_e") == 0 || strcasecmp (cmd, "strings-e") == 0)
3454     return run_strings_e (cmd, argc, argv);
3455   else
3456   if (strcasecmp (cmd, "hexdump") == 0)
3457     return run_hexdump (cmd, argc, argv);
3458   else
3459   if (strcasecmp (cmd, "zerofree") == 0)
3460     return run_zerofree (cmd, argc, argv);
3461   else
3462   if (strcasecmp (cmd, "pvresize") == 0)
3463     return run_pvresize (cmd, argc, argv);
3464   else
3465   if (strcasecmp (cmd, "sfdisk_N") == 0 || strcasecmp (cmd, "sfdisk-N") == 0)
3466     return run_sfdisk_N (cmd, argc, argv);
3467   else
3468   if (strcasecmp (cmd, "sfdisk_l") == 0 || strcasecmp (cmd, "sfdisk-l") == 0)
3469     return run_sfdisk_l (cmd, argc, argv);
3470   else
3471   if (strcasecmp (cmd, "sfdisk_kernel_geometry") == 0 || strcasecmp (cmd, "sfdisk-kernel-geometry") == 0)
3472     return run_sfdisk_kernel_geometry (cmd, argc, argv);
3473   else
3474   if (strcasecmp (cmd, "sfdisk_disk_geometry") == 0 || strcasecmp (cmd, "sfdisk-disk-geometry") == 0)
3475     return run_sfdisk_disk_geometry (cmd, argc, argv);
3476   else
3477   if (strcasecmp (cmd, "vg_activate_all") == 0 || strcasecmp (cmd, "vg-activate-all") == 0)
3478     return run_vg_activate_all (cmd, argc, argv);
3479   else
3480   if (strcasecmp (cmd, "vg_activate") == 0 || strcasecmp (cmd, "vg-activate") == 0)
3481     return run_vg_activate (cmd, argc, argv);
3482   else
3483   if (strcasecmp (cmd, "lvresize") == 0)
3484     return run_lvresize (cmd, argc, argv);
3485   else
3486   if (strcasecmp (cmd, "resize2fs") == 0)
3487     return run_resize2fs (cmd, argc, argv);
3488   else
3489   if (strcasecmp (cmd, "find") == 0)
3490     return run_find (cmd, argc, argv);
3491   else
3492   if (strcasecmp (cmd, "e2fsck_f") == 0 || strcasecmp (cmd, "e2fsck-f") == 0)
3493     return run_e2fsck_f (cmd, argc, argv);
3494   else
3495   if (strcasecmp (cmd, "sleep") == 0)
3496     return run_sleep (cmd, argc, argv);
3497   else
3498   if (strcasecmp (cmd, "ntfs_3g_probe") == 0 || strcasecmp (cmd, "ntfs-3g-probe") == 0)
3499     return run_ntfs_3g_probe (cmd, argc, argv);
3500   else
3501   if (strcasecmp (cmd, "sh") == 0)
3502     return run_sh (cmd, argc, argv);
3503   else
3504   if (strcasecmp (cmd, "sh_lines") == 0 || strcasecmp (cmd, "sh-lines") == 0)
3505     return run_sh_lines (cmd, argc, argv);
3506   else
3507   if (strcasecmp (cmd, "glob_expand") == 0 || strcasecmp (cmd, "glob-expand") == 0)
3508     return run_glob_expand (cmd, argc, argv);
3509   else
3510   if (strcasecmp (cmd, "scrub_device") == 0 || strcasecmp (cmd, "scrub-device") == 0)
3511     return run_scrub_device (cmd, argc, argv);
3512   else
3513   if (strcasecmp (cmd, "scrub_file") == 0 || strcasecmp (cmd, "scrub-file") == 0)
3514     return run_scrub_file (cmd, argc, argv);
3515   else
3516   if (strcasecmp (cmd, "scrub_freespace") == 0 || strcasecmp (cmd, "scrub-freespace") == 0)
3517     return run_scrub_freespace (cmd, argc, argv);
3518   else
3519   if (strcasecmp (cmd, "mkdtemp") == 0)
3520     return run_mkdtemp (cmd, argc, argv);
3521   else
3522   if (strcasecmp (cmd, "wc_l") == 0 || strcasecmp (cmd, "wc-l") == 0)
3523     return run_wc_l (cmd, argc, argv);
3524   else
3525   if (strcasecmp (cmd, "wc_w") == 0 || strcasecmp (cmd, "wc-w") == 0)
3526     return run_wc_w (cmd, argc, argv);
3527   else
3528   if (strcasecmp (cmd, "wc_c") == 0 || strcasecmp (cmd, "wc-c") == 0)
3529     return run_wc_c (cmd, argc, argv);
3530   else
3531   if (strcasecmp (cmd, "head") == 0)
3532     return run_head (cmd, argc, argv);
3533   else
3534   if (strcasecmp (cmd, "head_n") == 0 || strcasecmp (cmd, "head-n") == 0)
3535     return run_head_n (cmd, argc, argv);
3536   else
3537   if (strcasecmp (cmd, "tail") == 0)
3538     return run_tail (cmd, argc, argv);
3539   else
3540   if (strcasecmp (cmd, "tail_n") == 0 || strcasecmp (cmd, "tail-n") == 0)
3541     return run_tail_n (cmd, argc, argv);
3542   else
3543   if (strcasecmp (cmd, "df") == 0)
3544     return run_df (cmd, argc, argv);
3545   else
3546   if (strcasecmp (cmd, "df_h") == 0 || strcasecmp (cmd, "df-h") == 0)
3547     return run_df_h (cmd, argc, argv);
3548   else
3549   if (strcasecmp (cmd, "du") == 0)
3550     return run_du (cmd, argc, argv);
3551   else
3552   if (strcasecmp (cmd, "initrd_list") == 0 || strcasecmp (cmd, "initrd-list") == 0)
3553     return run_initrd_list (cmd, argc, argv);
3554   else
3555     {
3556       fprintf (stderr, "%s: unknown command\n", cmd);
3557       return -1;
3558     }
3559   return 0;
3560 }
3561