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