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