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