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