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