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