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