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