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