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