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