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