b2b6513afd1fd416ce714bbba3f3a6f3b97f6806
[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", "add-drive-ro", "add a drive in snapshot mode (read-only)");
37   printf ("%-20s %s\n", "aug-close", "close the current Augeas handle");
38   printf ("%-20s %s\n", "aug-defnode", "define an Augeas node");
39   printf ("%-20s %s\n", "aug-defvar", "define an Augeas variable");
40   printf ("%-20s %s\n", "aug-get", "look up the value of an Augeas path");
41   printf ("%-20s %s\n", "aug-init", "create a new Augeas handle");
42   printf ("%-20s %s\n", "aug-insert", "insert a sibling Augeas node");
43   printf ("%-20s %s\n", "aug-load", "load files into the tree");
44   printf ("%-20s %s\n", "aug-ls", "list Augeas nodes under a path");
45   printf ("%-20s %s\n", "aug-match", "return Augeas nodes which match path");
46   printf ("%-20s %s\n", "aug-mv", "move Augeas node");
47   printf ("%-20s %s\n", "aug-rm", "remove an Augeas path");
48   printf ("%-20s %s\n", "aug-save", "write all pending Augeas changes to disk");
49   printf ("%-20s %s\n", "aug-set", "set Augeas path to value");
50   printf ("%-20s %s\n", "blockdev-flushbufs", "flush device buffers");
51   printf ("%-20s %s\n", "blockdev-getbsz", "get blocksize of block device");
52   printf ("%-20s %s\n", "blockdev-getro", "is block device set to read-only");
53   printf ("%-20s %s\n", "blockdev-getsize64", "get total size of device in bytes");
54   printf ("%-20s %s\n", "blockdev-getss", "get sectorsize of block device");
55   printf ("%-20s %s\n", "blockdev-getsz", "get total size of device in 512-byte sectors");
56   printf ("%-20s %s\n", "blockdev-rereadpt", "reread partition table");
57   printf ("%-20s %s\n", "blockdev-setbsz", "set blocksize of block device");
58   printf ("%-20s %s\n", "blockdev-setro", "set block device to read-only");
59   printf ("%-20s %s\n", "blockdev-setrw", "set block device to read-write");
60   printf ("%-20s %s\n", "cat", "list the contents of a file");
61   printf ("%-20s %s\n", "checksum", "compute MD5, SHAx or CRC checksum of file");
62   printf ("%-20s %s\n", "chmod", "change file mode");
63   printf ("%-20s %s\n", "chown", "change file owner and group");
64   printf ("%-20s %s\n", "command", "run a command from the guest filesystem");
65   printf ("%-20s %s\n", "command-lines", "run a command, returning lines");
66   printf ("%-20s %s\n", "config", "add qemu parameters");
67   printf ("%-20s %s\n", "cp", "copy a file");
68   printf ("%-20s %s\n", "cp-a", "copy a file or directory recursively");
69   printf ("%-20s %s\n", "debug", "debugging and internals");
70   printf ("%-20s %s\n", "df", "report file system disk space usage");
71   printf ("%-20s %s\n", "df-h", "report file system disk space usage (human readable)");
72   printf ("%-20s %s\n", "dmesg", "return kernel messages");
73   printf ("%-20s %s\n", "download", "download a file to the local machine");
74   printf ("%-20s %s\n", "drop-caches", "drop kernel page cache, dentries and inodes");
75   printf ("%-20s %s\n", "du", "estimate file space usage");
76   printf ("%-20s %s\n", "e2fsck-f", "check an ext2/ext3 filesystem");
77   printf ("%-20s %s\n", "equal", "test if two files have equal contents");
78   printf ("%-20s %s\n", "exists", "test if file or directory exists");
79   printf ("%-20s %s\n", "file", "determine file type");
80   printf ("%-20s %s\n", "find", "find all files and directories");
81   printf ("%-20s %s\n", "fsck", "run the filesystem checker");
82   printf ("%-20s %s\n", "get-append", "get the additional kernel options");
83   printf ("%-20s %s\n", "get-autosync", "get autosync mode");
84   printf ("%-20s %s\n", "get-e2label", "get the ext2/3/4 filesystem label");
85   printf ("%-20s %s\n", "get-e2uuid", "get the ext2/3/4 filesystem UUID");
86   printf ("%-20s %s\n", "get-memsize", "get memory allocated to the qemu subprocess");
87   printf ("%-20s %s\n", "get-path", "get the search path");
88   printf ("%-20s %s\n", "get-qemu", "get the qemu binary");
89   printf ("%-20s %s\n", "get-state", "get the current state");
90   printf ("%-20s %s\n", "get-verbose", "get verbose mode");
91   printf ("%-20s %s\n", "glob-expand", "expand a wildcard path");
92   printf ("%-20s %s\n", "grub-install", "install GRUB");
93   printf ("%-20s %s\n", "head", "return first 10 lines of a file");
94   printf ("%-20s %s\n", "head-n", "return first N lines of a file");
95   printf ("%-20s %s\n", "hexdump", "dump a file in hexadecimal");
96   printf ("%-20s %s\n", "initrd-list", "list files in an initrd");
97   printf ("%-20s %s\n", "is-busy", "is busy processing a command");
98   printf ("%-20s %s\n", "is-config", "is in configuration state");
99   printf ("%-20s %s\n", "is-dir", "test if file exists");
100   printf ("%-20s %s\n", "is-file", "test if file exists");
101   printf ("%-20s %s\n", "is-launching", "is launching subprocess");
102   printf ("%-20s %s\n", "is-ready", "is ready to accept commands");
103   printf ("%-20s %s\n", "kill-subprocess", "kill the qemu subprocess");
104   printf ("%-20s %s\n", "launch", "launch the qemu subprocess");
105   printf ("%-20s %s\n", "list-devices", "list the block devices");
106   printf ("%-20s %s\n", "list-partitions", "list the partitions");
107   printf ("%-20s %s\n", "ll", "list the files in a directory (long format)");
108   printf ("%-20s %s\n", "ls", "list the files in a directory");
109   printf ("%-20s %s\n", "lstat", "get file information for a symbolic link");
110   printf ("%-20s %s\n", "lvcreate", "create an LVM volume group");
111   printf ("%-20s %s\n", "lvm-remove-all", "remove all LVM LVs, VGs and PVs");
112   printf ("%-20s %s\n", "lvremove", "remove an LVM logical volume");
113   printf ("%-20s %s\n", "lvresize", "resize an LVM logical volume");
114   printf ("%-20s %s\n", "lvs", "list the LVM logical volumes (LVs)");
115   printf ("%-20s %s\n", "lvs-full", "list the LVM logical volumes (LVs)");
116   printf ("%-20s %s\n", "mkdir", "create a directory");
117   printf ("%-20s %s\n", "mkdir-p", "create a directory and parents");
118   printf ("%-20s %s\n", "mkdtemp", "create a temporary directory");
119   printf ("%-20s %s\n", "mkfs", "make a filesystem");
120   printf ("%-20s %s\n", "mkswap", "create a swap partition");
121   printf ("%-20s %s\n", "mkswap-L", "create a swap partition with a label");
122   printf ("%-20s %s\n", "mkswap-U", "create a swap partition with an explicit UUID");
123   printf ("%-20s %s\n", "mount", "mount a guest disk at a position in the filesystem");
124   printf ("%-20s %s\n", "mount-loop", "mount a file using the loop device");
125   printf ("%-20s %s\n", "mount-options", "mount a guest disk with mount options");
126   printf ("%-20s %s\n", "mount-ro", "mount a guest disk, read-only");
127   printf ("%-20s %s\n", "mount-vfs", "mount a guest disk with mount options and vfstype");
128   printf ("%-20s %s\n", "mounts", "show mounted filesystems");
129   printf ("%-20s %s\n", "mv", "move a file");
130   printf ("%-20s %s\n", "ntfs-3g-probe", "probe NTFS volume");
131   printf ("%-20s %s\n", "ping-daemon", "ping the guest daemon");
132   printf ("%-20s %s\n", "pvcreate", "create an LVM physical volume");
133   printf ("%-20s %s\n", "pvremove", "remove an LVM physical volume");
134   printf ("%-20s %s\n", "pvresize", "resize an LVM physical volume");
135   printf ("%-20s %s\n", "pvs", "list the LVM physical volumes (PVs)");
136   printf ("%-20s %s\n", "pvs-full", "list the LVM physical volumes (PVs)");
137   printf ("%-20s %s\n", "read-lines", "read file as lines");
138   printf ("%-20s %s\n", "resize2fs", "resize an ext2/ext3 filesystem");
139   printf ("%-20s %s\n", "rm", "remove a file");
140   printf ("%-20s %s\n", "rm-rf", "remove a file or directory recursively");
141   printf ("%-20s %s\n", "rmdir", "remove a directory");
142   printf ("%-20s %s\n", "scrub-device", "scrub (securely wipe) a device");
143   printf ("%-20s %s\n", "scrub-file", "scrub (securely wipe) a file");
144   printf ("%-20s %s\n", "scrub-freespace", "scrub (securely wipe) free space");
145   printf ("%-20s %s\n", "set-append", "add options to kernel command line");
146   printf ("%-20s %s\n", "set-autosync", "set autosync mode");
147   printf ("%-20s %s\n", "set-e2label", "set the ext2/3/4 filesystem label");
148   printf ("%-20s %s\n", "set-e2uuid", "set the ext2/3/4 filesystem UUID");
149   printf ("%-20s %s\n", "set-memsize", "set memory allocated to the qemu subprocess");
150   printf ("%-20s %s\n", "set-path", "set the search path");
151   printf ("%-20s %s\n", "set-qemu", "set the qemu binary");
152   printf ("%-20s %s\n", "set-verbose", "set verbose mode");
153   printf ("%-20s %s\n", "sfdisk", "create partitions on a block device");
154   printf ("%-20s %s\n", "sfdisk-N", "modify a single partition on a block device");
155   printf ("%-20s %s\n", "sfdisk-disk-geometry", "display the disk geometry from the partition table");
156   printf ("%-20s %s\n", "sfdisk-kernel-geometry", "display the kernel geometry");
157   printf ("%-20s %s\n", "sfdisk-l", "display the partition table");
158   printf ("%-20s %s\n", "sh", "run a command via the shell");
159   printf ("%-20s %s\n", "sh-lines", "run a command via the shell returning lines");
160   printf ("%-20s %s\n", "sleep", "sleep for some seconds");
161   printf ("%-20s %s\n", "stat", "get file information");
162   printf ("%-20s %s\n", "statvfs", "get file system statistics");
163   printf ("%-20s %s\n", "strings", "print the printable strings in a file");
164   printf ("%-20s %s\n", "strings-e", "print the printable strings in a file");
165   printf ("%-20s %s\n", "sync", "sync disks, writes are flushed through to the disk image");
166   printf ("%-20s %s\n", "tail", "return last 10 lines of a file");
167   printf ("%-20s %s\n", "tail-n", "return last N lines of a file");
168   printf ("%-20s %s\n", "tar-in", "unpack tarfile to directory");
169   printf ("%-20s %s\n", "tar-out", "pack directory into tarfile");
170   printf ("%-20s %s\n", "tgz-in", "unpack compressed tarball to directory");
171   printf ("%-20s %s\n", "tgz-out", "pack directory into compressed tarball");
172   printf ("%-20s %s\n", "touch", "update file timestamps or create a new file");
173   printf ("%-20s %s\n", "tune2fs-l", "get ext2/ext3/ext4 superblock details");
174   printf ("%-20s %s\n", "umount", "unmount a filesystem");
175   printf ("%-20s %s\n", "umount-all", "unmount all filesystems");
176   printf ("%-20s %s\n", "upload", "upload a file from the local machine");
177   printf ("%-20s %s\n", "vg-activate", "activate or deactivate some volume groups");
178   printf ("%-20s %s\n", "vg-activate-all", "activate or deactivate all volume groups");
179   printf ("%-20s %s\n", "vgcreate", "create an LVM volume group");
180   printf ("%-20s %s\n", "vgremove", "remove an LVM volume group");
181   printf ("%-20s %s\n", "vgs", "list the LVM volume groups (VGs)");
182   printf ("%-20s %s\n", "vgs-full", "list the LVM volume groups (VGs)");
183   printf ("%-20s %s\n", "wc-c", "count characters in a file");
184   printf ("%-20s %s\n", "wc-l", "count lines in a file");
185   printf ("%-20s %s\n", "wc-w", "count words in a file");
186   printf ("%-20s %s\n", "write-file", "create a file");
187   printf ("%-20s %s\n", "zero", "write zeroes to the device");
188   printf ("%-20s %s\n", "zerofree", "zero unused inodes and disk blocks on ext2/3 filesystem");
189   printf ("    Use -h <cmd> / help <cmd> to show detailed help for a command.\n");
190 }
191
192 void display_command (const char *cmd)
193 {
194   if (strcasecmp (cmd, "launch") == 0 || strcasecmp (cmd, "run") == 0)
195     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.");
196   else
197   if (strcasecmp (cmd, "kill_subprocess") == 0 || strcasecmp (cmd, "kill-subprocess") == 0)
198     pod2text ("kill-subprocess - kill the qemu subprocess", " kill-subprocess\n\nThis kills the qemu subprocess.  You should never need to call this.");
199   else
200   if (strcasecmp (cmd, "add_drive") == 0 || strcasecmp (cmd, "add-drive") == 0 || strcasecmp (cmd, "add") == 0)
201     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,cache=off>.\n\nNote that this call checks for the existence of C<filename>.  This\nstops you from specifying other types of drive which are supported\nby qemu such as C<nbd:> and C<http:> URLs.  To specify those, use\nthe general C<config> call instead.\n\nYou can use 'add' as an alias for this command.");
202   else
203   if (strcasecmp (cmd, "add_cdrom") == 0 || strcasecmp (cmd, "add-cdrom") == 0 || strcasecmp (cmd, "cdrom") == 0)
204     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\nNote that this call checks for the existence of C<filename>.  This\nstops you from specifying other types of drive which are supported\nby qemu such as C<nbd:> and C<http:> URLs.  To specify those, use\nthe general C<config> call instead.\n\nYou can use 'cdrom' as an alias for this command.");
205   else
206   if (strcasecmp (cmd, "add_drive_ro") == 0 || strcasecmp (cmd, "add-drive-ro") == 0 || strcasecmp (cmd, "add-ro") == 0)
207     pod2text ("add-drive-ro - add a drive in snapshot mode (read-only)", " add-drive-ro <filename>\n\nThis adds a drive in snapshot mode, making it effectively\nread-only.\n\nNote that writes to the device are allowed, and will be seen for\nthe duration of the guestfs handle, but they are written\nto a temporary file which is discarded as soon as the guestfs\nhandle is closed.  We don't currently have any method to enable\nchanges to be committed, although qemu can support this.\n\nThis is equivalent to the qemu parameter\nC<-drive file=filename,snapshot=on>.\n\nNote that this call checks for the existence of C<filename>.  This\nstops you from specifying other types of drive which are supported\nby qemu such as C<nbd:> and C<http:> URLs.  To specify those, use\nthe general C<config> call instead.\n\nYou can use 'add-ro' as an alias for this command.");
208   else
209   if (strcasecmp (cmd, "config") == 0)
210     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.");
211   else
212   if (strcasecmp (cmd, "set_qemu") == 0 || strcasecmp (cmd, "set-qemu") == 0 || strcasecmp (cmd, "qemu") == 0)
213     pod2text ("set-qemu - set the qemu binary", " set-qemu <qemu>\n\nSet the qemu binary that we will use.\n\nThe default is chosen when the library was compiled by the\nconfigure script.\n\nYou can also override this by setting the C<LIBGUESTFS_QEMU>\nenvironment variable.\n\nSetting C<qemu> to C<NULL> restores the default qemu binary.\n\nYou can use 'qemu' as an alias for this command.");
214   else
215   if (strcasecmp (cmd, "get_qemu") == 0 || strcasecmp (cmd, "get-qemu") == 0)
216     pod2text ("get-qemu - get the qemu binary", " get-qemu\n\nReturn the current qemu binary.\n\nThis is always non-NULL.  If it wasn't set already, then this will\nreturn the default qemu binary name.");
217   else
218   if (strcasecmp (cmd, "set_path") == 0 || strcasecmp (cmd, "set-path") == 0 || strcasecmp (cmd, "path") == 0)
219     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\nSetting C<path> to C<NULL> restores the default path.\n\nYou can use 'path' as an alias for this command.");
220   else
221   if (strcasecmp (cmd, "get_path") == 0 || strcasecmp (cmd, "get-path") == 0)
222     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.");
223   else
224   if (strcasecmp (cmd, "set_append") == 0 || strcasecmp (cmd, "set-append") == 0 || strcasecmp (cmd, "append") == 0)
225     pod2text ("set-append - add options to kernel command line", " set-append <append>\n\nThis function is used to add additional options to the\nguest kernel command line.\n\nThe default is C<NULL> unless overridden by setting\nC<LIBGUESTFS_APPEND> environment variable.\n\nSetting C<append> to C<NULL> means I<no> additional options\nare passed (libguestfs always adds a few of its own).\n\nYou can use 'append' as an alias for this command.");
226   else
227   if (strcasecmp (cmd, "get_append") == 0 || strcasecmp (cmd, "get-append") == 0)
228     pod2text ("get-append - get the additional kernel options", " get-append\n\nReturn the additional kernel options which are added to the\nguest kernel command line.\n\nIf C<NULL> then no options are added.");
229   else
230   if (strcasecmp (cmd, "set_autosync") == 0 || strcasecmp (cmd, "set-autosync") == 0 || strcasecmp (cmd, "autosync") == 0)
231     pod2text ("set-autosync - set autosync mode", " set-autosync <autosync>\n\nIf C<autosync> is true, this enables autosync.  Libguestfs will make a\nbest effort attempt to run C<umount_all> followed by\nC<sync> when the handle is closed\n(also if the program exits without closing handles).\n\nThis is disabled by default (except in guestfish where it is\nenabled by default).\n\nYou can use 'autosync' as an alias for this command.");
232   else
233   if (strcasecmp (cmd, "get_autosync") == 0 || strcasecmp (cmd, "get-autosync") == 0)
234     pod2text ("get-autosync - get autosync mode", " get-autosync\n\nGet the autosync flag.");
235   else
236   if (strcasecmp (cmd, "set_verbose") == 0 || strcasecmp (cmd, "set-verbose") == 0 || strcasecmp (cmd, "verbose") == 0)
237     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.");
238   else
239   if (strcasecmp (cmd, "get_verbose") == 0 || strcasecmp (cmd, "get-verbose") == 0)
240     pod2text ("get-verbose - get verbose mode", " get-verbose\n\nThis returns the verbose messages flag.");
241   else
242   if (strcasecmp (cmd, "is_ready") == 0 || strcasecmp (cmd, "is-ready") == 0)
243     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)>.");
244   else
245   if (strcasecmp (cmd, "is_config") == 0 || strcasecmp (cmd, "is-config") == 0)
246     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)>.");
247   else
248   if (strcasecmp (cmd, "is_launching") == 0 || strcasecmp (cmd, "is-launching") == 0)
249     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)>.");
250   else
251   if (strcasecmp (cmd, "is_busy") == 0 || strcasecmp (cmd, "is-busy") == 0)
252     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)>.");
253   else
254   if (strcasecmp (cmd, "get_state") == 0 || strcasecmp (cmd, "get-state") == 0)
255     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)>.");
256   else
257   if (strcasecmp (cmd, "set_memsize") == 0 || strcasecmp (cmd, "set-memsize") == 0 || strcasecmp (cmd, "memsize") == 0)
258     pod2text ("set-memsize - set memory allocated to the qemu subprocess", " set-memsize <memsize>\n\nThis sets the memory size in megabytes allocated to the\nqemu subprocess.  This only has any effect if called before\nC<launch>.\n\nYou can also change this by setting the environment\nvariable C<LIBGUESTFS_MEMSIZE> before the handle is\ncreated.\n\nFor more information on the architecture of libguestfs,\nsee L<guestfs(3)>.\n\nYou can use 'memsize' as an alias for this command.");
259   else
260   if (strcasecmp (cmd, "get_memsize") == 0 || strcasecmp (cmd, "get-memsize") == 0)
261     pod2text ("get-memsize - get memory allocated to the qemu subprocess", " get-memsize\n\nThis gets the memory size in megabytes allocated to the\nqemu subprocess.\n\nIf C<set_memsize> was not called\non this handle, and if C<LIBGUESTFS_MEMSIZE> was not set,\nthen this returns the compiled-in default value for memsize.\n\nFor more information on the architecture of libguestfs,\nsee L<guestfs(3)>.");
262   else
263   if (strcasecmp (cmd, "mount") == 0)
264     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.");
265   else
266   if (strcasecmp (cmd, "sync") == 0)
267     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.");
268   else
269   if (strcasecmp (cmd, "touch") == 0)
270     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.");
271   else
272   if (strcasecmp (cmd, "cat") == 0)
273     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.");
274   else
275   if (strcasecmp (cmd, "ll") == 0)
276     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.");
277   else
278   if (strcasecmp (cmd, "ls") == 0)
279     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.");
280   else
281   if (strcasecmp (cmd, "list_devices") == 0 || strcasecmp (cmd, "list-devices") == 0)
282     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>");
283   else
284   if (strcasecmp (cmd, "list_partitions") == 0 || strcasecmp (cmd, "list-partitions") == 0)
285     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>.");
286   else
287   if (strcasecmp (cmd, "pvs") == 0)
288     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>.");
289   else
290   if (strcasecmp (cmd, "vgs") == 0)
291     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>.");
292   else
293   if (strcasecmp (cmd, "lvs") == 0)
294     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>.");
295   else
296   if (strcasecmp (cmd, "pvs_full") == 0 || strcasecmp (cmd, "pvs-full") == 0)
297     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.");
298   else
299   if (strcasecmp (cmd, "vgs_full") == 0 || strcasecmp (cmd, "vgs-full") == 0)
300     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.");
301   else
302   if (strcasecmp (cmd, "lvs_full") == 0 || strcasecmp (cmd, "lvs-full") == 0)
303     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.");
304   else
305   if (strcasecmp (cmd, "read_lines") == 0 || strcasecmp (cmd, "read-lines") == 0)
306     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.");
307   else
308   if (strcasecmp (cmd, "aug_init") == 0 || strcasecmp (cmd, "aug-init") == 0)
309     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/>.");
310   else
311   if (strcasecmp (cmd, "aug_close") == 0 || strcasecmp (cmd, "aug-close") == 0)
312     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.");
313   else
314   if (strcasecmp (cmd, "aug_defvar") == 0 || strcasecmp (cmd, "aug-defvar") == 0)
315     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.");
316   else
317   if (strcasecmp (cmd, "aug_defnode") == 0 || strcasecmp (cmd, "aug-defnode") == 0)
318     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.");
319   else
320   if (strcasecmp (cmd, "aug_get") == 0 || strcasecmp (cmd, "aug-get") == 0)
321     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.");
322   else
323   if (strcasecmp (cmd, "aug_set") == 0 || strcasecmp (cmd, "aug-set") == 0)
324     pod2text ("aug-set - set Augeas path to value", " aug-set <path> <val>\n\nSet the value associated with C<path> to C<value>.");
325   else
326   if (strcasecmp (cmd, "aug_insert") == 0 || strcasecmp (cmd, "aug-insert") == 0)
327     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]>.");
328   else
329   if (strcasecmp (cmd, "aug_rm") == 0 || strcasecmp (cmd, "aug-rm") == 0)
330     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.");
331   else
332   if (strcasecmp (cmd, "aug_mv") == 0 || strcasecmp (cmd, "aug-mv") == 0)
333     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.");
334   else
335   if (strcasecmp (cmd, "aug_match") == 0 || strcasecmp (cmd, "aug-match") == 0)
336     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.");
337   else
338   if (strcasecmp (cmd, "aug_save") == 0 || strcasecmp (cmd, "aug-save") == 0)
339     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.");
340   else
341   if (strcasecmp (cmd, "aug_load") == 0 || strcasecmp (cmd, "aug-load") == 0)
342     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.");
343   else
344   if (strcasecmp (cmd, "aug_ls") == 0 || strcasecmp (cmd, "aug-ls") == 0)
345     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.");
346   else
347   if (strcasecmp (cmd, "rm") == 0)
348     pod2text ("rm - remove a file", " rm <path>\n\nRemove the single file C<path>.");
349   else
350   if (strcasecmp (cmd, "rmdir") == 0)
351     pod2text ("rmdir - remove a directory", " rmdir <path>\n\nRemove the single directory C<path>.");
352   else
353   if (strcasecmp (cmd, "rm_rf") == 0 || strcasecmp (cmd, "rm-rf") == 0)
354     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.");
355   else
356   if (strcasecmp (cmd, "mkdir") == 0)
357     pod2text ("mkdir - create a directory", " mkdir <path>\n\nCreate a directory named C<path>.");
358   else
359   if (strcasecmp (cmd, "mkdir_p") == 0 || strcasecmp (cmd, "mkdir-p") == 0)
360     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.");
361   else
362   if (strcasecmp (cmd, "chmod") == 0)
363     pod2text ("chmod - change file mode", " chmod <mode> <path>\n\nChange the mode (permissions) of C<path> to C<mode>.  Only\nnumeric modes are supported.");
364   else
365   if (strcasecmp (cmd, "chown") == 0)
366     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).");
367   else
368   if (strcasecmp (cmd, "exists") == 0)
369     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>.");
370   else
371   if (strcasecmp (cmd, "is_file") == 0 || strcasecmp (cmd, "is-file") == 0)
372     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>.");
373   else
374   if (strcasecmp (cmd, "is_dir") == 0 || strcasecmp (cmd, "is-dir") == 0)
375     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>.");
376   else
377   if (strcasecmp (cmd, "pvcreate") == 0)
378     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>.");
379   else
380   if (strcasecmp (cmd, "vgcreate") == 0)
381     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>.");
382   else
383   if (strcasecmp (cmd, "lvcreate") == 0)
384     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.");
385   else
386   if (strcasecmp (cmd, "mkfs") == 0)
387     pod2text ("mkfs - make a filesystem", " mkfs <fstype> <device>\n\nThis creates a filesystem on C<device> (usually a partition\nor LVM logical volume).  The filesystem type is C<fstype>, for\nexample C<ext3>.");
388   else
389   if (strcasecmp (cmd, "sfdisk") == 0)
390     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\nSee also: C<sfdisk_l>, C<sfdisk_N>\n\nB<This command is dangerous.  Without careful use you\ncan easily destroy all your data>.");
391   else
392   if (strcasecmp (cmd, "write_file") == 0 || strcasecmp (cmd, "write-file") == 0)
393     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\nI<NB.> Owing to a bug, writing content containing ASCII NUL\ncharacters does I<not> work, even if the length is specified.\nWe hope to resolve this bug in a future version.  In the meantime\nuse C<upload>.\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.");
394   else
395   if (strcasecmp (cmd, "umount") == 0 || strcasecmp (cmd, "unmount") == 0)
396     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.");
397   else
398   if (strcasecmp (cmd, "mounts") == 0)
399     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.");
400   else
401   if (strcasecmp (cmd, "umount_all") == 0 || strcasecmp (cmd, "umount-all") == 0 || strcasecmp (cmd, "unmount-all") == 0)
402     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.");
403   else
404   if (strcasecmp (cmd, "lvm_remove_all") == 0 || strcasecmp (cmd, "lvm-remove-all") == 0)
405     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>.");
406   else
407   if (strcasecmp (cmd, "file") == 0)
408     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).");
409   else
410   if (strcasecmp (cmd, "command") == 0)
411     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).  Note that\nthe command runs directly, and is I<not> invoked via\nthe shell (see C<sh>).\n\nThe return value is anything printed to I<stdout> by\nthe command.\n\nIf the command returns a non-zero exit status, then\nthis function returns an error message.  The error message\nstring is the content of I<stderr> from the command.\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.\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.");
412   else
413   if (strcasecmp (cmd, "command_lines") == 0 || strcasecmp (cmd, "command-lines") == 0)
414     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.\n\nSee also: C<sh_lines>\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.");
415   else
416   if (strcasecmp (cmd, "stat") == 0)
417     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.");
418   else
419   if (strcasecmp (cmd, "lstat") == 0)
420     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.");
421   else
422   if (strcasecmp (cmd, "statvfs") == 0)
423     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.");
424   else
425   if (strcasecmp (cmd, "tune2fs_l") == 0 || strcasecmp (cmd, "tune2fs-l") == 0)
426     pod2text ("tune2fs-l - get ext2/ext3/ext4 superblock details", " tune2fs-l <device>\n\nThis returns the contents of the ext2, ext3 or ext4 filesystem\nsuperblock on C<device>.\n\nIt is the same as running C<tune2fs -l device>.  See L<tune2fs(8)>\nmanpage for more details.  The list of fields returned isn't\nclearly defined, and depends on both the version of C<tune2fs>\nthat libguestfs was built against, and the filesystem itself.");
427   else
428   if (strcasecmp (cmd, "blockdev_setro") == 0 || strcasecmp (cmd, "blockdev-setro") == 0)
429     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.");
430   else
431   if (strcasecmp (cmd, "blockdev_setrw") == 0 || strcasecmp (cmd, "blockdev-setrw") == 0)
432     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.");
433   else
434   if (strcasecmp (cmd, "blockdev_getro") == 0 || strcasecmp (cmd, "blockdev-getro") == 0)
435     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.");
436   else
437   if (strcasecmp (cmd, "blockdev_getss") == 0 || strcasecmp (cmd, "blockdev-getss") == 0)
438     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.");
439   else
440   if (strcasecmp (cmd, "blockdev_getbsz") == 0 || strcasecmp (cmd, "blockdev-getbsz") == 0)
441     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.");
442   else
443   if (strcasecmp (cmd, "blockdev_setbsz") == 0 || strcasecmp (cmd, "blockdev-setbsz") == 0)
444     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.");
445   else
446   if (strcasecmp (cmd, "blockdev_getsz") == 0 || strcasecmp (cmd, "blockdev-getsz") == 0)
447     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.");
448   else
449   if (strcasecmp (cmd, "blockdev_getsize64") == 0 || strcasecmp (cmd, "blockdev-getsize64") == 0)
450     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.");
451   else
452   if (strcasecmp (cmd, "blockdev_flushbufs") == 0 || strcasecmp (cmd, "blockdev-flushbufs") == 0)
453     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.");
454   else
455   if (strcasecmp (cmd, "blockdev_rereadpt") == 0 || strcasecmp (cmd, "blockdev-rereadpt") == 0)
456     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.");
457   else
458   if (strcasecmp (cmd, "upload") == 0)
459     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>.");
460   else
461   if (strcasecmp (cmd, "download") == 0)
462     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>.");
463   else
464   if (strcasecmp (cmd, "checksum") == 0)
465     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.");
466   else
467   if (strcasecmp (cmd, "tar_in") == 0 || strcasecmp (cmd, "tar-in") == 0)
468     pod2text ("tar-in - unpack tarfile to directory", " tar-in <tarfile> <directory>\n\nThis command uploads and unpacks local file C<tarfile> (an\nI<uncompressed> tar file) into C<directory>.\n\nTo upload a compressed tarball, use C<tgz_in>.");
469   else
470   if (strcasecmp (cmd, "tar_out") == 0 || strcasecmp (cmd, "tar-out") == 0)
471     pod2text ("tar-out - pack directory into tarfile", " tar-out <directory> <tarfile>\n\nThis command packs the contents of C<directory> and downloads\nit to local file C<tarfile>.\n\nTo download a compressed tarball, use C<tgz_out>.");
472   else
473   if (strcasecmp (cmd, "tgz_in") == 0 || strcasecmp (cmd, "tgz-in") == 0)
474     pod2text ("tgz-in - unpack compressed tarball to directory", " tgz-in <tarball> <directory>\n\nThis command uploads and unpacks local file C<tarball> (a\nI<gzip compressed> tar file) into C<directory>.\n\nTo upload an uncompressed tarball, use C<tar_in>.");
475   else
476   if (strcasecmp (cmd, "tgz_out") == 0 || strcasecmp (cmd, "tgz-out") == 0)
477     pod2text ("tgz-out - pack directory into compressed tarball", " tgz-out <directory> <tarball>\n\nThis command packs the contents of C<directory> and downloads\nit to local file C<tarball>.\n\nTo download an uncompressed tarball, use C<tar_out>.");
478   else
479   if (strcasecmp (cmd, "mount_ro") == 0 || strcasecmp (cmd, "mount-ro") == 0)
480     pod2text ("mount-ro - mount a guest disk, read-only", " mount-ro <device> <mountpoint>\n\nThis is the same as the C<mount> command, but it\nmounts the filesystem with the read-only (I<-o ro>) flag.");
481   else
482   if (strcasecmp (cmd, "mount_options") == 0 || strcasecmp (cmd, "mount-options") == 0)
483     pod2text ("mount-options - mount a guest disk with mount options", " mount-options <options> <device> <mountpoint>\n\nThis is the same as the C<mount> command, but it\nallows you to set the mount options as for the\nL<mount(8)> I<-o> flag.");
484   else
485   if (strcasecmp (cmd, "mount_vfs") == 0 || strcasecmp (cmd, "mount-vfs") == 0)
486     pod2text ("mount-vfs - mount a guest disk with mount options and vfstype", " mount-vfs <options> <vfstype> <device> <mountpoint>\n\nThis is the same as the C<mount> command, but it\nallows you to set both the mount options and the vfstype\nas for the L<mount(8)> I<-o> and I<-t> flags.");
487   else
488   if (strcasecmp (cmd, "debug") == 0)
489     pod2text ("debug - debugging and internals", " debug <subcmd> <extraargs>\n\nThe C<debug> command exposes some internals of\nC<guestfsd> (the guestfs daemon) that runs inside the\nqemu subprocess.\n\nThere is no comprehensive help for this command.  You have\nto look at the file C<daemon/debug.c> in the libguestfs source\nto find out what you can do.");
490   else
491   if (strcasecmp (cmd, "lvremove") == 0)
492     pod2text ("lvremove - remove an LVM logical volume", " lvremove <device>\n\nRemove an LVM logical volume C<device>, where C<device> is\nthe path to the LV, such as C</dev/VG/LV>.\n\nYou can also remove all LVs in a volume group by specifying\nthe VG name, C</dev/VG>.");
493   else
494   if (strcasecmp (cmd, "vgremove") == 0)
495     pod2text ("vgremove - remove an LVM volume group", " vgremove <vgname>\n\nRemove an LVM volume group C<vgname>, (for example C<VG>).\n\nThis also forcibly removes all logical volumes in the volume\ngroup (if any).");
496   else
497   if (strcasecmp (cmd, "pvremove") == 0)
498     pod2text ("pvremove - remove an LVM physical volume", " pvremove <device>\n\nThis wipes a physical volume C<device> so that LVM will no longer\nrecognise it.\n\nThe implementation uses the C<pvremove> command which refuses to\nwipe physical volumes that contain any volume groups, so you have\nto remove those first.");
499   else
500   if (strcasecmp (cmd, "set_e2label") == 0 || strcasecmp (cmd, "set-e2label") == 0)
501     pod2text ("set-e2label - set the ext2/3/4 filesystem label", " set-e2label <device> <label>\n\nThis sets the ext2/3/4 filesystem label of the filesystem on\nC<device> to C<label>.  Filesystem labels are limited to\n16 characters.\n\nYou can use either C<tune2fs_l> or C<get_e2label>\nto return the existing label on a filesystem.");
502   else
503   if (strcasecmp (cmd, "get_e2label") == 0 || strcasecmp (cmd, "get-e2label") == 0)
504     pod2text ("get-e2label - get the ext2/3/4 filesystem label", " get-e2label <device>\n\nThis returns the ext2/3/4 filesystem label of the filesystem on\nC<device>.");
505   else
506   if (strcasecmp (cmd, "set_e2uuid") == 0 || strcasecmp (cmd, "set-e2uuid") == 0)
507     pod2text ("set-e2uuid - set the ext2/3/4 filesystem UUID", " set-e2uuid <device> <uuid>\n\nThis sets the ext2/3/4 filesystem UUID of the filesystem on\nC<device> to C<uuid>.  The format of the UUID and alternatives\nsuch as C<clear>, C<random> and C<time> are described in the\nL<tune2fs(8)> manpage.\n\nYou can use either C<tune2fs_l> or C<get_e2uuid>\nto return the existing UUID of a filesystem.");
508   else
509   if (strcasecmp (cmd, "get_e2uuid") == 0 || strcasecmp (cmd, "get-e2uuid") == 0)
510     pod2text ("get-e2uuid - get the ext2/3/4 filesystem UUID", " get-e2uuid <device>\n\nThis returns the ext2/3/4 filesystem UUID of the filesystem on\nC<device>.");
511   else
512   if (strcasecmp (cmd, "fsck") == 0)
513     pod2text ("fsck - run the filesystem checker", " fsck <fstype> <device>\n\nThis runs the filesystem checker (fsck) on C<device> which\nshould have filesystem type C<fstype>.\n\nThe returned integer is the status.  See L<fsck(8)> for the\nlist of status codes from C<fsck>.\n\nNotes:\n\n=over 4\n\n=item *\n\nMultiple status codes can be summed together.\n\n=item *\n\nA non-zero return code can mean \"success\", for example if\nerrors have been corrected on the filesystem.\n\n=item *\n\nChecking or repairing NTFS volumes is not supported\n(by linux-ntfs).\n\n=back\n\nThis command is entirely equivalent to running C<fsck -a -t fstype device>.");
514   else
515   if (strcasecmp (cmd, "zero") == 0)
516     pod2text ("zero - write zeroes to the device", " zero <device>\n\nThis command writes zeroes over the first few blocks of C<device>.\n\nHow many blocks are zeroed isn't specified (but it's I<not> enough\nto securely wipe the device).  It should be sufficient to remove\nany partition tables, filesystem superblocks and so on.\n\nSee also: C<scrub_device>.");
517   else
518   if (strcasecmp (cmd, "grub_install") == 0 || strcasecmp (cmd, "grub-install") == 0)
519     pod2text ("grub-install - install GRUB", " grub-install <root> <device>\n\nThis command installs GRUB (the Grand Unified Bootloader) on\nC<device>, with the root directory being C<root>.");
520   else
521   if (strcasecmp (cmd, "cp") == 0)
522     pod2text ("cp - copy a file", " cp <src> <dest>\n\nThis copies a file from C<src> to C<dest> where C<dest> is\neither a destination filename or destination directory.");
523   else
524   if (strcasecmp (cmd, "cp_a") == 0 || strcasecmp (cmd, "cp-a") == 0)
525     pod2text ("cp-a - copy a file or directory recursively", " cp-a <src> <dest>\n\nThis copies a file or directory from C<src> to C<dest>\nrecursively using the C<cp -a> command.");
526   else
527   if (strcasecmp (cmd, "mv") == 0)
528     pod2text ("mv - move a file", " mv <src> <dest>\n\nThis moves a file from C<src> to C<dest> where C<dest> is\neither a destination filename or destination directory.");
529   else
530   if (strcasecmp (cmd, "drop_caches") == 0 || strcasecmp (cmd, "drop-caches") == 0)
531     pod2text ("drop-caches - drop kernel page cache, dentries and inodes", " drop-caches <whattodrop>\n\nThis instructs the guest kernel to drop its page cache,\nand/or dentries and inode caches.  The parameter C<whattodrop>\ntells the kernel what precisely to drop, see\nL<http://linux-mm.org/Drop_Caches>\n\nSetting C<whattodrop> to 3 should drop everything.\n\nThis automatically calls L<sync(2)> before the operation,\nso that the maximum guest memory is freed.");
532   else
533   if (strcasecmp (cmd, "dmesg") == 0)
534     pod2text ("dmesg - return kernel messages", " dmesg\n\nThis returns the kernel messages (C<dmesg> output) from\nthe guest kernel.  This is sometimes useful for extended\ndebugging of problems.\n\nAnother way to get the same information is to enable\nverbose messages with C<set_verbose> or by setting\nthe environment variable C<LIBGUESTFS_DEBUG=1> before\nrunning the program.");
535   else
536   if (strcasecmp (cmd, "ping_daemon") == 0 || strcasecmp (cmd, "ping-daemon") == 0)
537     pod2text ("ping-daemon - ping the guest daemon", " ping-daemon\n\nThis is a test probe into the guestfs daemon running inside\nthe qemu subprocess.  Calling this function checks that the\ndaemon responds to the ping message, without affecting the daemon\nor attached block device(s) in any other way.");
538   else
539   if (strcasecmp (cmd, "equal") == 0)
540     pod2text ("equal - test if two files have equal contents", " equal <file1> <file2>\n\nThis compares the two files C<file1> and C<file2> and returns\ntrue if their content is exactly equal, or false otherwise.\n\nThe external L<cmp(1)> program is used for the comparison.");
541   else
542   if (strcasecmp (cmd, "strings") == 0)
543     pod2text ("strings - print the printable strings in a file", " strings <path>\n\nThis runs the L<strings(1)> command on a file and returns\nthe list of printable strings found.\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.");
544   else
545   if (strcasecmp (cmd, "strings_e") == 0 || strcasecmp (cmd, "strings-e") == 0)
546     pod2text ("strings-e - print the printable strings in a file", " strings-e <encoding> <path>\n\nThis is like the C<strings> command, but allows you to\nspecify the encoding.\n\nSee the L<strings(1)> manpage for the full list of encodings.\n\nCommonly useful encodings are C<l> (lower case L) which will\nshow strings inside Windows/x86 files.\n\nThe returned strings are transcoded to UTF-8.\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.");
547   else
548   if (strcasecmp (cmd, "hexdump") == 0)
549     pod2text ("hexdump - dump a file in hexadecimal", " hexdump <path>\n\nThis runs C<hexdump -C> on the given C<path>.  The result is\nthe human-readable, canonical hex dump of the file.\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.");
550   else
551   if (strcasecmp (cmd, "zerofree") == 0)
552     pod2text ("zerofree - zero unused inodes and disk blocks on ext2/3 filesystem", " zerofree <device>\n\nThis runs the I<zerofree> program on C<device>.  This program\nclaims to zero unused inodes and disk blocks on an ext2/3\nfilesystem, thus making it possible to compress the filesystem\nmore effectively.\n\nYou should B<not> run this program if the filesystem is\nmounted.\n\nIt is possible that using this program can damage the filesystem\nor data on the filesystem.");
553   else
554   if (strcasecmp (cmd, "pvresize") == 0)
555     pod2text ("pvresize - resize an LVM physical volume", " pvresize <device>\n\nThis resizes (expands or shrinks) an existing LVM physical\nvolume to match the new size of the underlying device.");
556   else
557   if (strcasecmp (cmd, "sfdisk_N") == 0 || strcasecmp (cmd, "sfdisk-N") == 0)
558     pod2text ("sfdisk-N - modify a single partition on a block device", " sfdisk-N <device> <partnum> <cyls> <heads> <sectors> <line>\n\nThis runs L<sfdisk(8)> option to modify just the single\npartition C<n> (note: C<n> counts from 1).\n\nFor other parameters, see C<sfdisk>.  You should usually\npass C<0> for the cyls/heads/sectors parameters.\n\nB<This command is dangerous.  Without careful use you\ncan easily destroy all your data>.");
559   else
560   if (strcasecmp (cmd, "sfdisk_l") == 0 || strcasecmp (cmd, "sfdisk-l") == 0)
561     pod2text ("sfdisk-l - display the partition table", " sfdisk-l <device>\n\nThis displays the partition table on C<device>, in the\nhuman-readable output of the L<sfdisk(8)> command.  It is\nnot intended to be parsed.");
562   else
563   if (strcasecmp (cmd, "sfdisk_kernel_geometry") == 0 || strcasecmp (cmd, "sfdisk-kernel-geometry") == 0)
564     pod2text ("sfdisk-kernel-geometry - display the kernel geometry", " sfdisk-kernel-geometry <device>\n\nThis displays the kernel's idea of the geometry of C<device>.\n\nThe result is in human-readable format, and not designed to\nbe parsed.");
565   else
566   if (strcasecmp (cmd, "sfdisk_disk_geometry") == 0 || strcasecmp (cmd, "sfdisk-disk-geometry") == 0)
567     pod2text ("sfdisk-disk-geometry - display the disk geometry from the partition table", " sfdisk-disk-geometry <device>\n\nThis displays the disk geometry of C<device> read from the\npartition table.  Especially in the case where the underlying\nblock device has been resized, this can be different from the\nkernel's idea of the geometry (see C<sfdisk_kernel_geometry>).\n\nThe result is in human-readable format, and not designed to\nbe parsed.");
568   else
569   if (strcasecmp (cmd, "vg_activate_all") == 0 || strcasecmp (cmd, "vg-activate-all") == 0)
570     pod2text ("vg-activate-all - activate or deactivate all volume groups", " vg-activate-all <activate>\n\nThis command activates or (if C<activate> is false) deactivates\nall logical volumes in all volume groups.\nIf activated, then they are made known to the\nkernel, ie. they appear as C</dev/mapper> devices.  If deactivated,\nthen those devices disappear.\n\nThis command is the same as running C<vgchange -a y|n>");
571   else
572   if (strcasecmp (cmd, "vg_activate") == 0 || strcasecmp (cmd, "vg-activate") == 0)
573     pod2text ("vg-activate - activate or deactivate some volume groups", " vg-activate <activate> <volgroups>\n\nThis command activates or (if C<activate> is false) deactivates\nall logical volumes in the listed volume groups C<volgroups>.\nIf activated, then they are made known to the\nkernel, ie. they appear as C</dev/mapper> devices.  If deactivated,\nthen those devices disappear.\n\nThis command is the same as running C<vgchange -a y|n volgroups...>\n\nNote that if C<volgroups> is an empty list then B<all> volume groups\nare activated or deactivated.");
574   else
575   if (strcasecmp (cmd, "lvresize") == 0)
576     pod2text ("lvresize - resize an LVM logical volume", " lvresize <device> <mbytes>\n\nThis resizes (expands or shrinks) an existing LVM logical\nvolume to C<mbytes>.  When reducing, data in the reduced part\nis lost.");
577   else
578   if (strcasecmp (cmd, "resize2fs") == 0)
579     pod2text ("resize2fs - resize an ext2/ext3 filesystem", " resize2fs <device>\n\nThis resizes an ext2 or ext3 filesystem to match the size of\nthe underlying device.\n\nI<Note:> It is sometimes required that you run C<e2fsck_f>\non the C<device> before calling this command.  For unknown reasons\nC<resize2fs> sometimes gives an error about this and sometimes not.\nIn any case, it is always safe to call C<e2fsck_f> before\ncalling this function.");
580   else
581   if (strcasecmp (cmd, "find") == 0)
582     pod2text ("find - find all files and directories", " find <directory>\n\nThis command lists out all files and directories, recursively,\nstarting at C<directory>.  It is essentially equivalent to\nrunning the shell command C<find directory -print> but some\npost-processing happens on the output, described below.\n\nThis returns a list of strings I<without any prefix>.  Thus\nif the directory structure was:\n\n /tmp/a\n /tmp/b\n /tmp/c/d\n\nthen the returned list from C<find> C</tmp> would be\n4 elements:\n\n a\n b\n c\n c/d\n\nIf C<directory> is not a directory, then this command returns\nan error.\n\nThe returned list is sorted.");
583   else
584   if (strcasecmp (cmd, "e2fsck_f") == 0 || strcasecmp (cmd, "e2fsck-f") == 0)
585     pod2text ("e2fsck-f - check an ext2/ext3 filesystem", " e2fsck-f <device>\n\nThis runs C<e2fsck -p -f device>, ie. runs the ext2/ext3\nfilesystem checker on C<device>, noninteractively (C<-p>),\neven if the filesystem appears to be clean (C<-f>).\n\nThis command is only needed because of C<resize2fs>\n(q.v.).  Normally you should use C<fsck>.");
586   else
587   if (strcasecmp (cmd, "sleep") == 0)
588     pod2text ("sleep - sleep for some seconds", " sleep <secs>\n\nSleep for C<secs> seconds.");
589   else
590   if (strcasecmp (cmd, "ntfs_3g_probe") == 0 || strcasecmp (cmd, "ntfs-3g-probe") == 0)
591     pod2text ("ntfs-3g-probe - probe NTFS volume", " ntfs-3g-probe <rw> <device>\n\nThis command runs the L<ntfs-3g.probe(8)> command which probes\nan NTFS C<device> for mountability.  (Not all NTFS volumes can\nbe mounted read-write, and some cannot be mounted at all).\n\nC<rw> is a boolean flag.  Set it to true if you want to test\nif the volume can be mounted read-write.  Set it to false if\nyou want to test if the volume can be mounted read-only.\n\nThe return value is an integer which C<0> if the operation\nwould succeed, or some non-zero value documented in the\nL<ntfs-3g.probe(8)> manual page.");
592   else
593   if (strcasecmp (cmd, "sh") == 0)
594     pod2text ("sh - run a command via the shell", " sh <command>\n\nThis call runs a command from the guest filesystem via the\nguest's C</bin/sh>.\n\nThis is like C<command>, but passes the command to:\n\n /bin/sh -c \"command\"\n\nDepending on the guest's shell, this usually results in\nwildcards being expanded, shell expressions being interpolated\nand so on.\n\nAll the provisos about C<command> apply to this call.");
595   else
596   if (strcasecmp (cmd, "sh_lines") == 0 || strcasecmp (cmd, "sh-lines") == 0)
597     pod2text ("sh-lines - run a command via the shell returning lines", " sh-lines <command>\n\nThis is the same as C<sh>, but splits the result\ninto a list of lines.\n\nSee also: C<command_lines>");
598   else
599   if (strcasecmp (cmd, "glob_expand") == 0 || strcasecmp (cmd, "glob-expand") == 0)
600     pod2text ("glob-expand - expand a wildcard path", " glob-expand <pattern>\n\nThis command searches for all the pathnames matching\nC<pattern> according to the wildcard expansion rules\nused by the shell.\n\nIf no paths match, then this returns an empty list\n(note: not an error).\n\nIt is just a wrapper around the C L<glob(3)> function\nwith flags C<GLOB_MARK|GLOB_BRACE>.\nSee that manual page for more details.");
601   else
602   if (strcasecmp (cmd, "scrub_device") == 0 || strcasecmp (cmd, "scrub-device") == 0)
603     pod2text ("scrub-device - scrub (securely wipe) a device", " scrub-device <device>\n\nThis command writes patterns over C<device> to make data retrieval\nmore difficult.\n\nIt is an interface to the L<scrub(1)> program.  See that\nmanual page for more details.\n\nB<This command is dangerous.  Without careful use you\ncan easily destroy all your data>.");
604   else
605   if (strcasecmp (cmd, "scrub_file") == 0 || strcasecmp (cmd, "scrub-file") == 0)
606     pod2text ("scrub-file - scrub (securely wipe) a file", " scrub-file <file>\n\nThis command writes patterns over a file to make data retrieval\nmore difficult.\n\nThe file is I<removed> after scrubbing.\n\nIt is an interface to the L<scrub(1)> program.  See that\nmanual page for more details.");
607   else
608   if (strcasecmp (cmd, "scrub_freespace") == 0 || strcasecmp (cmd, "scrub-freespace") == 0)
609     pod2text ("scrub-freespace - scrub (securely wipe) free space", " scrub-freespace <dir>\n\nThis command creates the directory C<dir> and then fills it\nwith files until the filesystem is full, and scrubs the files\nas for C<scrub_file>, and deletes them.\nThe intention is to scrub any free space on the partition\ncontaining C<dir>.\n\nIt is an interface to the L<scrub(1)> program.  See that\nmanual page for more details.");
610   else
611   if (strcasecmp (cmd, "mkdtemp") == 0)
612     pod2text ("mkdtemp - create a temporary directory", " mkdtemp <template>\n\nThis command creates a temporary directory.  The\nC<template> parameter should be a full pathname for the\ntemporary directory name with the final six characters being\n\"XXXXXX\".\n\nFor example: \"/tmp/myprogXXXXXX\" or \"/Temp/myprogXXXXXX\",\nthe second one being suitable for Windows filesystems.\n\nThe name of the temporary directory that was created\nis returned.\n\nThe temporary directory is created with mode 0700\nand is owned by root.\n\nThe caller is responsible for deleting the temporary\ndirectory and its contents after use.\n\nSee also: L<mkdtemp(3)>");
613   else
614   if (strcasecmp (cmd, "wc_l") == 0 || strcasecmp (cmd, "wc-l") == 0)
615     pod2text ("wc-l - count lines in a file", " wc-l <path>\n\nThis command counts the lines in a file, using the\nC<wc -l> external command.");
616   else
617   if (strcasecmp (cmd, "wc_w") == 0 || strcasecmp (cmd, "wc-w") == 0)
618     pod2text ("wc-w - count words in a file", " wc-w <path>\n\nThis command counts the words in a file, using the\nC<wc -w> external command.");
619   else
620   if (strcasecmp (cmd, "wc_c") == 0 || strcasecmp (cmd, "wc-c") == 0)
621     pod2text ("wc-c - count characters in a file", " wc-c <path>\n\nThis command counts the characters in a file, using the\nC<wc -c> external command.");
622   else
623   if (strcasecmp (cmd, "head") == 0)
624     pod2text ("head - return first 10 lines of a file", " head <path>\n\nThis command returns up to the first 10 lines of a file as\na list of strings.\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.");
625   else
626   if (strcasecmp (cmd, "head_n") == 0 || strcasecmp (cmd, "head-n") == 0)
627     pod2text ("head-n - return first N lines of a file", " head-n <nrlines> <path>\n\nIf the parameter C<nrlines> is a positive number, this returns the first\nC<nrlines> lines of the file C<path>.\n\nIf the parameter C<nrlines> is a negative number, this returns lines\nfrom the file C<path>, excluding the last C<nrlines> lines.\n\nIf the parameter C<nrlines> is zero, this returns an empty list.\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.");
628   else
629   if (strcasecmp (cmd, "tail") == 0)
630     pod2text ("tail - return last 10 lines of a file", " tail <path>\n\nThis command returns up to the last 10 lines of a file as\na list of strings.\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.");
631   else
632   if (strcasecmp (cmd, "tail_n") == 0 || strcasecmp (cmd, "tail-n") == 0)
633     pod2text ("tail-n - return last N lines of a file", " tail-n <nrlines> <path>\n\nIf the parameter C<nrlines> is a positive number, this returns the last\nC<nrlines> lines of the file C<path>.\n\nIf the parameter C<nrlines> is a negative number, this returns lines\nfrom the file C<path>, starting with the C<-nrlines>th line.\n\nIf the parameter C<nrlines> is zero, this returns an empty list.\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.");
634   else
635   if (strcasecmp (cmd, "df") == 0)
636     pod2text ("df - report file system disk space usage", " df\n\nThis command runs the C<df> command to report disk space used.\n\nThis command is mostly useful for interactive sessions.  It\nis I<not> intended that you try to parse the output string.\nUse C<statvfs> from programs.");
637   else
638   if (strcasecmp (cmd, "df_h") == 0 || strcasecmp (cmd, "df-h") == 0)
639     pod2text ("df-h - report file system disk space usage (human readable)", " df-h\n\nThis command runs the C<df -h> command to report disk space used\nin human-readable format.\n\nThis command is mostly useful for interactive sessions.  It\nis I<not> intended that you try to parse the output string.\nUse C<statvfs> from programs.");
640   else
641   if (strcasecmp (cmd, "du") == 0)
642     pod2text ("du - estimate file space usage", " du <path>\n\nThis command runs the C<du -s> command to estimate file space\nusage for C<path>.\n\nC<path> can be a file or a directory.  If C<path> is a directory\nthen the estimate includes the contents of the directory and all\nsubdirectories (recursively).\n\nThe result is the estimated size in I<kilobytes>\n(ie. units of 1024 bytes).");
643   else
644   if (strcasecmp (cmd, "initrd_list") == 0 || strcasecmp (cmd, "initrd-list") == 0)
645     pod2text ("initrd-list - list files in an initrd", " initrd-list <path>\n\nThis command lists out files contained in an initrd.\n\nThe files are listed without any initial C</> character.  The\nfiles are listed in the order they appear (not necessarily\nalphabetical).  Directory names are listed as separate items.\n\nOld Linux kernels (2.4 and earlier) used a compressed ext2\nfilesystem as initrd.  We I<only> support the newer initramfs\nformat (compressed cpio files).");
646   else
647   if (strcasecmp (cmd, "mount_loop") == 0 || strcasecmp (cmd, "mount-loop") == 0)
648     pod2text ("mount-loop - mount a file using the loop device", " mount-loop <file> <mountpoint>\n\nThis command lets you mount C<file> (a filesystem image\nin a file) on a mount point.  It is entirely equivalent to\nthe command C<mount -o loop file mountpoint>.");
649   else
650   if (strcasecmp (cmd, "mkswap") == 0)
651     pod2text ("mkswap - create a swap partition", " mkswap <device>\n\nCreate a swap partition on C<device>.");
652   else
653   if (strcasecmp (cmd, "mkswap_L") == 0 || strcasecmp (cmd, "mkswap-L") == 0)
654     pod2text ("mkswap-L - create a swap partition with a label", " mkswap-L <label> <device>\n\nCreate a swap partition on C<device> with label C<label>.");
655   else
656   if (strcasecmp (cmd, "mkswap_U") == 0 || strcasecmp (cmd, "mkswap-U") == 0)
657     pod2text ("mkswap-U - create a swap partition with an explicit UUID", " mkswap-U <uuid> <device>\n\nCreate a swap partition on C<device> with UUID C<uuid>.");
658   else
659     display_builtin_command (cmd);
660 }
661
662 static void print_pv (struct guestfs_lvm_pv *pv)
663 {
664   int i;
665
666   printf ("pv_name: %s\n", pv->pv_name);
667   printf ("pv_uuid: ");
668   for (i = 0; i < 32; ++i)
669     printf ("%c", pv->pv_uuid[i]);
670   printf ("\n");
671   printf ("pv_fmt: %s\n", pv->pv_fmt);
672   printf ("pv_size: %" PRIu64 "\n", pv->pv_size);
673   printf ("dev_size: %" PRIu64 "\n", pv->dev_size);
674   printf ("pv_free: %" PRIu64 "\n", pv->pv_free);
675   printf ("pv_used: %" PRIu64 "\n", pv->pv_used);
676   printf ("pv_attr: %s\n", pv->pv_attr);
677   printf ("pv_pe_count: %" PRIi64 "\n", pv->pv_pe_count);
678   printf ("pv_pe_alloc_count: %" PRIi64 "\n", pv->pv_pe_alloc_count);
679   printf ("pv_tags: %s\n", pv->pv_tags);
680   printf ("pe_start: %" PRIu64 "\n", pv->pe_start);
681   printf ("pv_mda_count: %" PRIi64 "\n", pv->pv_mda_count);
682   printf ("pv_mda_free: %" PRIu64 "\n", pv->pv_mda_free);
683 }
684
685 static void print_pv_list (struct guestfs_lvm_pv_list *pvs)
686 {
687   int i;
688
689   for (i = 0; i < pvs->len; ++i)
690     print_pv (&pvs->val[i]);
691 }
692
693 static void print_vg (struct guestfs_lvm_vg *vg)
694 {
695   int i;
696
697   printf ("vg_name: %s\n", vg->vg_name);
698   printf ("vg_uuid: ");
699   for (i = 0; i < 32; ++i)
700     printf ("%c", vg->vg_uuid[i]);
701   printf ("\n");
702   printf ("vg_fmt: %s\n", vg->vg_fmt);
703   printf ("vg_attr: %s\n", vg->vg_attr);
704   printf ("vg_size: %" PRIu64 "\n", vg->vg_size);
705   printf ("vg_free: %" PRIu64 "\n", vg->vg_free);
706   printf ("vg_sysid: %s\n", vg->vg_sysid);
707   printf ("vg_extent_size: %" PRIu64 "\n", vg->vg_extent_size);
708   printf ("vg_extent_count: %" PRIi64 "\n", vg->vg_extent_count);
709   printf ("vg_free_count: %" PRIi64 "\n", vg->vg_free_count);
710   printf ("max_lv: %" PRIi64 "\n", vg->max_lv);
711   printf ("max_pv: %" PRIi64 "\n", vg->max_pv);
712   printf ("pv_count: %" PRIi64 "\n", vg->pv_count);
713   printf ("lv_count: %" PRIi64 "\n", vg->lv_count);
714   printf ("snap_count: %" PRIi64 "\n", vg->snap_count);
715   printf ("vg_seqno: %" PRIi64 "\n", vg->vg_seqno);
716   printf ("vg_tags: %s\n", vg->vg_tags);
717   printf ("vg_mda_count: %" PRIi64 "\n", vg->vg_mda_count);
718   printf ("vg_mda_free: %" PRIu64 "\n", vg->vg_mda_free);
719 }
720
721 static void print_vg_list (struct guestfs_lvm_vg_list *vgs)
722 {
723   int i;
724
725   for (i = 0; i < vgs->len; ++i)
726     print_vg (&vgs->val[i]);
727 }
728
729 static void print_lv (struct guestfs_lvm_lv *lv)
730 {
731   int i;
732
733   printf ("lv_name: %s\n", lv->lv_name);
734   printf ("lv_uuid: ");
735   for (i = 0; i < 32; ++i)
736     printf ("%c", lv->lv_uuid[i]);
737   printf ("\n");
738   printf ("lv_attr: %s\n", lv->lv_attr);
739   printf ("lv_major: %" PRIi64 "\n", lv->lv_major);
740   printf ("lv_minor: %" PRIi64 "\n", lv->lv_minor);
741   printf ("lv_kernel_major: %" PRIi64 "\n", lv->lv_kernel_major);
742   printf ("lv_kernel_minor: %" PRIi64 "\n", lv->lv_kernel_minor);
743   printf ("lv_size: %" PRIu64 "\n", lv->lv_size);
744   printf ("seg_count: %" PRIi64 "\n", lv->seg_count);
745   printf ("origin: %s\n", lv->origin);
746   if (lv->snap_percent >= 0) printf ("snap_percent: %g %%\n", lv->snap_percent);
747   else printf ("snap_percent: \n");
748   if (lv->copy_percent >= 0) printf ("copy_percent: %g %%\n", lv->copy_percent);
749   else printf ("copy_percent: \n");
750   printf ("move_pv: %s\n", lv->move_pv);
751   printf ("lv_tags: %s\n", lv->lv_tags);
752   printf ("mirror_log: %s\n", lv->mirror_log);
753   printf ("modules: %s\n", lv->modules);
754 }
755
756 static void print_lv_list (struct guestfs_lvm_lv_list *lvs)
757 {
758   int i;
759
760   for (i = 0; i < lvs->len; ++i)
761     print_lv (&lvs->val[i]);
762 }
763
764 static void print_stat (struct guestfs_stat *stat)
765 {
766   printf ("dev: %" PRIi64 "\n", stat->dev);
767   printf ("ino: %" PRIi64 "\n", stat->ino);
768   printf ("mode: %" PRIi64 "\n", stat->mode);
769   printf ("nlink: %" PRIi64 "\n", stat->nlink);
770   printf ("uid: %" PRIi64 "\n", stat->uid);
771   printf ("gid: %" PRIi64 "\n", stat->gid);
772   printf ("rdev: %" PRIi64 "\n", stat->rdev);
773   printf ("size: %" PRIi64 "\n", stat->size);
774   printf ("blksize: %" PRIi64 "\n", stat->blksize);
775   printf ("blocks: %" PRIi64 "\n", stat->blocks);
776   printf ("atime: %" PRIi64 "\n", stat->atime);
777   printf ("mtime: %" PRIi64 "\n", stat->mtime);
778   printf ("ctime: %" PRIi64 "\n", stat->ctime);
779 }
780
781 static void print_statvfs (struct guestfs_statvfs *statvfs)
782 {
783   printf ("bsize: %" PRIi64 "\n", statvfs->bsize);
784   printf ("frsize: %" PRIi64 "\n", statvfs->frsize);
785   printf ("blocks: %" PRIi64 "\n", statvfs->blocks);
786   printf ("bfree: %" PRIi64 "\n", statvfs->bfree);
787   printf ("bavail: %" PRIi64 "\n", statvfs->bavail);
788   printf ("files: %" PRIi64 "\n", statvfs->files);
789   printf ("ffree: %" PRIi64 "\n", statvfs->ffree);
790   printf ("favail: %" PRIi64 "\n", statvfs->favail);
791   printf ("fsid: %" PRIi64 "\n", statvfs->fsid);
792   printf ("flag: %" PRIi64 "\n", statvfs->flag);
793   printf ("namemax: %" PRIi64 "\n", statvfs->namemax);
794 }
795
796 static int run_launch (const char *cmd, int argc, char *argv[])
797 {
798   int r;
799   if (argc != 0) {
800     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
801     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
802     return -1;
803   }
804   r = launch (g);
805   return r;
806 }
807
808 static int run_kill_subprocess (const char *cmd, int argc, char *argv[])
809 {
810   int r;
811   if (argc != 0) {
812     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
813     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
814     return -1;
815   }
816   r = guestfs_kill_subprocess (g);
817   return r;
818 }
819
820 static int run_add_drive (const char *cmd, int argc, char *argv[])
821 {
822   int r;
823   const char *filename;
824   if (argc != 1) {
825     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
826     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
827     return -1;
828   }
829   filename = argv[0];
830   r = guestfs_add_drive (g, filename);
831   return r;
832 }
833
834 static int run_add_cdrom (const char *cmd, int argc, char *argv[])
835 {
836   int r;
837   const char *filename;
838   if (argc != 1) {
839     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
840     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
841     return -1;
842   }
843   filename = argv[0];
844   r = guestfs_add_cdrom (g, filename);
845   return r;
846 }
847
848 static int run_add_drive_ro (const char *cmd, int argc, char *argv[])
849 {
850   int r;
851   const char *filename;
852   if (argc != 1) {
853     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
854     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
855     return -1;
856   }
857   filename = argv[0];
858   r = guestfs_add_drive_ro (g, filename);
859   return r;
860 }
861
862 static int run_config (const char *cmd, int argc, char *argv[])
863 {
864   int r;
865   const char *qemuparam;
866   const char *qemuvalue;
867   if (argc != 2) {
868     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
869     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
870     return -1;
871   }
872   qemuparam = argv[0];
873   qemuvalue = strcmp (argv[1], "") != 0 ? argv[1] : NULL;
874   r = guestfs_config (g, qemuparam, qemuvalue);
875   return r;
876 }
877
878 static int run_set_qemu (const char *cmd, int argc, char *argv[])
879 {
880   int r;
881   const char *qemu;
882   if (argc != 1) {
883     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
884     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
885     return -1;
886   }
887   qemu = argv[0];
888   r = guestfs_set_qemu (g, qemu);
889   return r;
890 }
891
892 static int run_get_qemu (const char *cmd, int argc, char *argv[])
893 {
894   const char *r;
895   if (argc != 0) {
896     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
897     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
898     return -1;
899   }
900   r = guestfs_get_qemu (g);
901   if (r == NULL) return -1;
902   printf ("%s\n", r);
903   return 0;
904 }
905
906 static int run_set_path (const char *cmd, int argc, char *argv[])
907 {
908   int r;
909   const char *path;
910   if (argc != 1) {
911     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
912     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
913     return -1;
914   }
915   path = argv[0];
916   r = guestfs_set_path (g, path);
917   return r;
918 }
919
920 static int run_get_path (const char *cmd, int argc, char *argv[])
921 {
922   const char *r;
923   if (argc != 0) {
924     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
925     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
926     return -1;
927   }
928   r = guestfs_get_path (g);
929   if (r == NULL) return -1;
930   printf ("%s\n", r);
931   return 0;
932 }
933
934 static int run_set_append (const char *cmd, int argc, char *argv[])
935 {
936   int r;
937   const char *append;
938   if (argc != 1) {
939     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
940     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
941     return -1;
942   }
943   append = argv[0];
944   r = guestfs_set_append (g, append);
945   return r;
946 }
947
948 static int run_get_append (const char *cmd, int argc, char *argv[])
949 {
950   const char *r;
951   if (argc != 0) {
952     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
953     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
954     return -1;
955   }
956   r = guestfs_get_append (g);
957   if (r == NULL) return -1;
958   printf ("%s\n", r);
959   return 0;
960 }
961
962 static int run_set_autosync (const char *cmd, int argc, char *argv[])
963 {
964   int r;
965   int autosync;
966   if (argc != 1) {
967     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
968     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
969     return -1;
970   }
971   autosync = is_true (argv[0]) ? 1 : 0;
972   r = guestfs_set_autosync (g, autosync);
973   return r;
974 }
975
976 static int run_get_autosync (const char *cmd, int argc, char *argv[])
977 {
978   int r;
979   if (argc != 0) {
980     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
981     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
982     return -1;
983   }
984   r = guestfs_get_autosync (g);
985   if (r == -1) return -1;
986   if (r) printf ("true\n"); else printf ("false\n");
987   return 0;
988 }
989
990 static int run_set_verbose (const char *cmd, int argc, char *argv[])
991 {
992   int r;
993   int verbose;
994   if (argc != 1) {
995     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
996     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
997     return -1;
998   }
999   verbose = is_true (argv[0]) ? 1 : 0;
1000   r = guestfs_set_verbose (g, verbose);
1001   return r;
1002 }
1003
1004 static int run_get_verbose (const char *cmd, int argc, char *argv[])
1005 {
1006   int r;
1007   if (argc != 0) {
1008     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1009     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1010     return -1;
1011   }
1012   r = guestfs_get_verbose (g);
1013   if (r == -1) return -1;
1014   if (r) printf ("true\n"); else printf ("false\n");
1015   return 0;
1016 }
1017
1018 static int run_is_ready (const char *cmd, int argc, char *argv[])
1019 {
1020   int r;
1021   if (argc != 0) {
1022     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1023     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1024     return -1;
1025   }
1026   r = guestfs_is_ready (g);
1027   if (r == -1) return -1;
1028   if (r) printf ("true\n"); else printf ("false\n");
1029   return 0;
1030 }
1031
1032 static int run_is_config (const char *cmd, int argc, char *argv[])
1033 {
1034   int r;
1035   if (argc != 0) {
1036     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1037     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1038     return -1;
1039   }
1040   r = guestfs_is_config (g);
1041   if (r == -1) return -1;
1042   if (r) printf ("true\n"); else printf ("false\n");
1043   return 0;
1044 }
1045
1046 static int run_is_launching (const char *cmd, int argc, char *argv[])
1047 {
1048   int r;
1049   if (argc != 0) {
1050     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1051     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1052     return -1;
1053   }
1054   r = guestfs_is_launching (g);
1055   if (r == -1) return -1;
1056   if (r) printf ("true\n"); else printf ("false\n");
1057   return 0;
1058 }
1059
1060 static int run_is_busy (const char *cmd, int argc, char *argv[])
1061 {
1062   int r;
1063   if (argc != 0) {
1064     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1065     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1066     return -1;
1067   }
1068   r = guestfs_is_busy (g);
1069   if (r == -1) return -1;
1070   if (r) printf ("true\n"); else printf ("false\n");
1071   return 0;
1072 }
1073
1074 static int run_get_state (const char *cmd, int argc, char *argv[])
1075 {
1076   int r;
1077   if (argc != 0) {
1078     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1079     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1080     return -1;
1081   }
1082   r = guestfs_get_state (g);
1083   if (r == -1) return -1;
1084   printf ("%d\n", r);
1085   return 0;
1086 }
1087
1088 static int run_set_memsize (const char *cmd, int argc, char *argv[])
1089 {
1090   int r;
1091   int memsize;
1092   if (argc != 1) {
1093     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1094     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1095     return -1;
1096   }
1097   memsize = atoi (argv[0]);
1098   r = guestfs_set_memsize (g, memsize);
1099   return r;
1100 }
1101
1102 static int run_get_memsize (const char *cmd, int argc, char *argv[])
1103 {
1104   int r;
1105   if (argc != 0) {
1106     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1107     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1108     return -1;
1109   }
1110   r = guestfs_get_memsize (g);
1111   if (r == -1) return -1;
1112   printf ("%d\n", r);
1113   return 0;
1114 }
1115
1116 static int run_mount (const char *cmd, int argc, char *argv[])
1117 {
1118   int r;
1119   const char *device;
1120   const char *mountpoint;
1121   if (argc != 2) {
1122     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1123     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1124     return -1;
1125   }
1126   device = argv[0];
1127   mountpoint = argv[1];
1128   r = guestfs_mount (g, device, mountpoint);
1129   return r;
1130 }
1131
1132 static int run_sync (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_sync (g);
1141   return r;
1142 }
1143
1144 static int run_touch (const char *cmd, int argc, char *argv[])
1145 {
1146   int r;
1147   const char *path;
1148   if (argc != 1) {
1149     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1150     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1151     return -1;
1152   }
1153   path = argv[0];
1154   r = guestfs_touch (g, path);
1155   return r;
1156 }
1157
1158 static int run_cat (const char *cmd, int argc, char *argv[])
1159 {
1160   char *r;
1161   const char *path;
1162   if (argc != 1) {
1163     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1164     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1165     return -1;
1166   }
1167   path = argv[0];
1168   r = guestfs_cat (g, path);
1169   if (r == NULL) return -1;
1170   printf ("%s\n", r);
1171   free (r);
1172   return 0;
1173 }
1174
1175 static int run_ll (const char *cmd, int argc, char *argv[])
1176 {
1177   char *r;
1178   const char *directory;
1179   if (argc != 1) {
1180     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1181     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1182     return -1;
1183   }
1184   directory = argv[0];
1185   r = guestfs_ll (g, directory);
1186   if (r == NULL) return -1;
1187   printf ("%s\n", r);
1188   free (r);
1189   return 0;
1190 }
1191
1192 static int run_ls (const char *cmd, int argc, char *argv[])
1193 {
1194   char **r;
1195   const char *directory;
1196   if (argc != 1) {
1197     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1198     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1199     return -1;
1200   }
1201   directory = argv[0];
1202   r = guestfs_ls (g, directory);
1203   if (r == NULL) return -1;
1204   print_strings (r);
1205   free_strings (r);
1206   return 0;
1207 }
1208
1209 static int run_list_devices (const char *cmd, int argc, char *argv[])
1210 {
1211   char **r;
1212   if (argc != 0) {
1213     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1214     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1215     return -1;
1216   }
1217   r = guestfs_list_devices (g);
1218   if (r == NULL) return -1;
1219   print_strings (r);
1220   free_strings (r);
1221   return 0;
1222 }
1223
1224 static int run_list_partitions (const char *cmd, int argc, char *argv[])
1225 {
1226   char **r;
1227   if (argc != 0) {
1228     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1229     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1230     return -1;
1231   }
1232   r = guestfs_list_partitions (g);
1233   if (r == NULL) return -1;
1234   print_strings (r);
1235   free_strings (r);
1236   return 0;
1237 }
1238
1239 static int run_pvs (const char *cmd, int argc, char *argv[])
1240 {
1241   char **r;
1242   if (argc != 0) {
1243     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1244     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1245     return -1;
1246   }
1247   r = guestfs_pvs (g);
1248   if (r == NULL) return -1;
1249   print_strings (r);
1250   free_strings (r);
1251   return 0;
1252 }
1253
1254 static int run_vgs (const char *cmd, int argc, char *argv[])
1255 {
1256   char **r;
1257   if (argc != 0) {
1258     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1259     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1260     return -1;
1261   }
1262   r = guestfs_vgs (g);
1263   if (r == NULL) return -1;
1264   print_strings (r);
1265   free_strings (r);
1266   return 0;
1267 }
1268
1269 static int run_lvs (const char *cmd, int argc, char *argv[])
1270 {
1271   char **r;
1272   if (argc != 0) {
1273     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1274     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1275     return -1;
1276   }
1277   r = guestfs_lvs (g);
1278   if (r == NULL) return -1;
1279   print_strings (r);
1280   free_strings (r);
1281   return 0;
1282 }
1283
1284 static int run_pvs_full (const char *cmd, int argc, char *argv[])
1285 {
1286   struct guestfs_lvm_pv_list *r;
1287   if (argc != 0) {
1288     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1289     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1290     return -1;
1291   }
1292   r = guestfs_pvs_full (g);
1293   if (r == NULL) return -1;
1294   print_pv_list (r);
1295   guestfs_free_lvm_pv_list (r);
1296   return 0;
1297 }
1298
1299 static int run_vgs_full (const char *cmd, int argc, char *argv[])
1300 {
1301   struct guestfs_lvm_vg_list *r;
1302   if (argc != 0) {
1303     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1304     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1305     return -1;
1306   }
1307   r = guestfs_vgs_full (g);
1308   if (r == NULL) return -1;
1309   print_vg_list (r);
1310   guestfs_free_lvm_vg_list (r);
1311   return 0;
1312 }
1313
1314 static int run_lvs_full (const char *cmd, int argc, char *argv[])
1315 {
1316   struct guestfs_lvm_lv_list *r;
1317   if (argc != 0) {
1318     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1319     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1320     return -1;
1321   }
1322   r = guestfs_lvs_full (g);
1323   if (r == NULL) return -1;
1324   print_lv_list (r);
1325   guestfs_free_lvm_lv_list (r);
1326   return 0;
1327 }
1328
1329 static int run_read_lines (const char *cmd, int argc, char *argv[])
1330 {
1331   char **r;
1332   const char *path;
1333   if (argc != 1) {
1334     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1335     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1336     return -1;
1337   }
1338   path = argv[0];
1339   r = guestfs_read_lines (g, path);
1340   if (r == NULL) return -1;
1341   print_strings (r);
1342   free_strings (r);
1343   return 0;
1344 }
1345
1346 static int run_aug_init (const char *cmd, int argc, char *argv[])
1347 {
1348   int r;
1349   const char *root;
1350   int flags;
1351   if (argc != 2) {
1352     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1353     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1354     return -1;
1355   }
1356   root = argv[0];
1357   flags = atoi (argv[1]);
1358   r = guestfs_aug_init (g, root, flags);
1359   return r;
1360 }
1361
1362 static int run_aug_close (const char *cmd, int argc, char *argv[])
1363 {
1364   int r;
1365   if (argc != 0) {
1366     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1367     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1368     return -1;
1369   }
1370   r = guestfs_aug_close (g);
1371   return r;
1372 }
1373
1374 static int run_aug_defvar (const char *cmd, int argc, char *argv[])
1375 {
1376   int r;
1377   const char *name;
1378   const char *expr;
1379   if (argc != 2) {
1380     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1381     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1382     return -1;
1383   }
1384   name = argv[0];
1385   expr = strcmp (argv[1], "") != 0 ? argv[1] : NULL;
1386   r = guestfs_aug_defvar (g, name, expr);
1387   if (r == -1) return -1;
1388   printf ("%d\n", r);
1389   return 0;
1390 }
1391
1392 static int run_aug_defnode (const char *cmd, int argc, char *argv[])
1393 {
1394   struct guestfs_int_bool *r;
1395   const char *name;
1396   const char *expr;
1397   const char *val;
1398   if (argc != 3) {
1399     fprintf (stderr, "%s should have 3 parameter(s)\n", cmd);
1400     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1401     return -1;
1402   }
1403   name = argv[0];
1404   expr = argv[1];
1405   val = argv[2];
1406   r = guestfs_aug_defnode (g, name, expr, val);
1407   if (r == NULL) return -1;
1408   printf ("%d, %s\n", r->i,
1409     r->b ? "true" : "false");
1410   guestfs_free_int_bool (r);
1411   return 0;
1412 }
1413
1414 static int run_aug_get (const char *cmd, int argc, char *argv[])
1415 {
1416   char *r;
1417   const char *path;
1418   if (argc != 1) {
1419     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1420     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1421     return -1;
1422   }
1423   path = argv[0];
1424   r = guestfs_aug_get (g, path);
1425   if (r == NULL) return -1;
1426   printf ("%s\n", r);
1427   free (r);
1428   return 0;
1429 }
1430
1431 static int run_aug_set (const char *cmd, int argc, char *argv[])
1432 {
1433   int r;
1434   const char *path;
1435   const char *val;
1436   if (argc != 2) {
1437     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1438     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1439     return -1;
1440   }
1441   path = argv[0];
1442   val = argv[1];
1443   r = guestfs_aug_set (g, path, val);
1444   return r;
1445 }
1446
1447 static int run_aug_insert (const char *cmd, int argc, char *argv[])
1448 {
1449   int r;
1450   const char *path;
1451   const char *label;
1452   int before;
1453   if (argc != 3) {
1454     fprintf (stderr, "%s should have 3 parameter(s)\n", cmd);
1455     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1456     return -1;
1457   }
1458   path = argv[0];
1459   label = argv[1];
1460   before = is_true (argv[2]) ? 1 : 0;
1461   r = guestfs_aug_insert (g, path, label, before);
1462   return r;
1463 }
1464
1465 static int run_aug_rm (const char *cmd, int argc, char *argv[])
1466 {
1467   int r;
1468   const char *path;
1469   if (argc != 1) {
1470     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1471     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1472     return -1;
1473   }
1474   path = argv[0];
1475   r = guestfs_aug_rm (g, path);
1476   if (r == -1) return -1;
1477   printf ("%d\n", r);
1478   return 0;
1479 }
1480
1481 static int run_aug_mv (const char *cmd, int argc, char *argv[])
1482 {
1483   int r;
1484   const char *src;
1485   const char *dest;
1486   if (argc != 2) {
1487     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1488     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1489     return -1;
1490   }
1491   src = argv[0];
1492   dest = argv[1];
1493   r = guestfs_aug_mv (g, src, dest);
1494   return r;
1495 }
1496
1497 static int run_aug_match (const char *cmd, int argc, char *argv[])
1498 {
1499   char **r;
1500   const char *path;
1501   if (argc != 1) {
1502     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1503     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1504     return -1;
1505   }
1506   path = argv[0];
1507   r = guestfs_aug_match (g, path);
1508   if (r == NULL) return -1;
1509   print_strings (r);
1510   free_strings (r);
1511   return 0;
1512 }
1513
1514 static int run_aug_save (const char *cmd, int argc, char *argv[])
1515 {
1516   int r;
1517   if (argc != 0) {
1518     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1519     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1520     return -1;
1521   }
1522   r = guestfs_aug_save (g);
1523   return r;
1524 }
1525
1526 static int run_aug_load (const char *cmd, int argc, char *argv[])
1527 {
1528   int r;
1529   if (argc != 0) {
1530     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1531     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1532     return -1;
1533   }
1534   r = guestfs_aug_load (g);
1535   return r;
1536 }
1537
1538 static int run_aug_ls (const char *cmd, int argc, char *argv[])
1539 {
1540   char **r;
1541   const char *path;
1542   if (argc != 1) {
1543     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1544     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1545     return -1;
1546   }
1547   path = argv[0];
1548   r = guestfs_aug_ls (g, path);
1549   if (r == NULL) return -1;
1550   print_strings (r);
1551   free_strings (r);
1552   return 0;
1553 }
1554
1555 static int run_rm (const char *cmd, int argc, char *argv[])
1556 {
1557   int r;
1558   const char *path;
1559   if (argc != 1) {
1560     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1561     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1562     return -1;
1563   }
1564   path = argv[0];
1565   r = guestfs_rm (g, path);
1566   return r;
1567 }
1568
1569 static int run_rmdir (const char *cmd, int argc, char *argv[])
1570 {
1571   int r;
1572   const char *path;
1573   if (argc != 1) {
1574     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1575     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1576     return -1;
1577   }
1578   path = argv[0];
1579   r = guestfs_rmdir (g, path);
1580   return r;
1581 }
1582
1583 static int run_rm_rf (const char *cmd, int argc, char *argv[])
1584 {
1585   int r;
1586   const char *path;
1587   if (argc != 1) {
1588     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1589     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1590     return -1;
1591   }
1592   path = argv[0];
1593   r = guestfs_rm_rf (g, path);
1594   return r;
1595 }
1596
1597 static int run_mkdir (const char *cmd, int argc, char *argv[])
1598 {
1599   int r;
1600   const char *path;
1601   if (argc != 1) {
1602     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1603     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1604     return -1;
1605   }
1606   path = argv[0];
1607   r = guestfs_mkdir (g, path);
1608   return r;
1609 }
1610
1611 static int run_mkdir_p (const char *cmd, int argc, char *argv[])
1612 {
1613   int r;
1614   const char *path;
1615   if (argc != 1) {
1616     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1617     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1618     return -1;
1619   }
1620   path = argv[0];
1621   r = guestfs_mkdir_p (g, path);
1622   return r;
1623 }
1624
1625 static int run_chmod (const char *cmd, int argc, char *argv[])
1626 {
1627   int r;
1628   int mode;
1629   const char *path;
1630   if (argc != 2) {
1631     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1632     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1633     return -1;
1634   }
1635   mode = atoi (argv[0]);
1636   path = argv[1];
1637   r = guestfs_chmod (g, mode, path);
1638   return r;
1639 }
1640
1641 static int run_chown (const char *cmd, int argc, char *argv[])
1642 {
1643   int r;
1644   int owner;
1645   int group;
1646   const char *path;
1647   if (argc != 3) {
1648     fprintf (stderr, "%s should have 3 parameter(s)\n", cmd);
1649     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1650     return -1;
1651   }
1652   owner = atoi (argv[0]);
1653   group = atoi (argv[1]);
1654   path = argv[2];
1655   r = guestfs_chown (g, owner, group, path);
1656   return r;
1657 }
1658
1659 static int run_exists (const char *cmd, int argc, char *argv[])
1660 {
1661   int r;
1662   const char *path;
1663   if (argc != 1) {
1664     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1665     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1666     return -1;
1667   }
1668   path = argv[0];
1669   r = guestfs_exists (g, path);
1670   if (r == -1) return -1;
1671   if (r) printf ("true\n"); else printf ("false\n");
1672   return 0;
1673 }
1674
1675 static int run_is_file (const char *cmd, int argc, char *argv[])
1676 {
1677   int r;
1678   const char *path;
1679   if (argc != 1) {
1680     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1681     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1682     return -1;
1683   }
1684   path = argv[0];
1685   r = guestfs_is_file (g, path);
1686   if (r == -1) return -1;
1687   if (r) printf ("true\n"); else printf ("false\n");
1688   return 0;
1689 }
1690
1691 static int run_is_dir (const char *cmd, int argc, char *argv[])
1692 {
1693   int r;
1694   const char *path;
1695   if (argc != 1) {
1696     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1697     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1698     return -1;
1699   }
1700   path = argv[0];
1701   r = guestfs_is_dir (g, path);
1702   if (r == -1) return -1;
1703   if (r) printf ("true\n"); else printf ("false\n");
1704   return 0;
1705 }
1706
1707 static int run_pvcreate (const char *cmd, int argc, char *argv[])
1708 {
1709   int r;
1710   const char *device;
1711   if (argc != 1) {
1712     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1713     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1714     return -1;
1715   }
1716   device = argv[0];
1717   r = guestfs_pvcreate (g, device);
1718   return r;
1719 }
1720
1721 static int run_vgcreate (const char *cmd, int argc, char *argv[])
1722 {
1723   int r;
1724   const char *volgroup;
1725   char **physvols;
1726   if (argc != 2) {
1727     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1728     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1729     return -1;
1730   }
1731   volgroup = argv[0];
1732   physvols = parse_string_list (argv[1]);
1733   r = guestfs_vgcreate (g, volgroup, physvols);
1734   return r;
1735 }
1736
1737 static int run_lvcreate (const char *cmd, int argc, char *argv[])
1738 {
1739   int r;
1740   const char *logvol;
1741   const char *volgroup;
1742   int mbytes;
1743   if (argc != 3) {
1744     fprintf (stderr, "%s should have 3 parameter(s)\n", cmd);
1745     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1746     return -1;
1747   }
1748   logvol = argv[0];
1749   volgroup = argv[1];
1750   mbytes = atoi (argv[2]);
1751   r = guestfs_lvcreate (g, logvol, volgroup, mbytes);
1752   return r;
1753 }
1754
1755 static int run_mkfs (const char *cmd, int argc, char *argv[])
1756 {
1757   int r;
1758   const char *fstype;
1759   const char *device;
1760   if (argc != 2) {
1761     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
1762     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1763     return -1;
1764   }
1765   fstype = argv[0];
1766   device = argv[1];
1767   r = guestfs_mkfs (g, fstype, device);
1768   return r;
1769 }
1770
1771 static int run_sfdisk (const char *cmd, int argc, char *argv[])
1772 {
1773   int r;
1774   const char *device;
1775   int cyls;
1776   int heads;
1777   int sectors;
1778   char **lines;
1779   if (argc != 5) {
1780     fprintf (stderr, "%s should have 5 parameter(s)\n", cmd);
1781     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1782     return -1;
1783   }
1784   device = argv[0];
1785   cyls = atoi (argv[1]);
1786   heads = atoi (argv[2]);
1787   sectors = atoi (argv[3]);
1788   lines = parse_string_list (argv[4]);
1789   r = guestfs_sfdisk (g, device, cyls, heads, sectors, lines);
1790   return r;
1791 }
1792
1793 static int run_write_file (const char *cmd, int argc, char *argv[])
1794 {
1795   int r;
1796   const char *path;
1797   const char *content;
1798   int size;
1799   if (argc != 3) {
1800     fprintf (stderr, "%s should have 3 parameter(s)\n", cmd);
1801     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1802     return -1;
1803   }
1804   path = argv[0];
1805   content = argv[1];
1806   size = atoi (argv[2]);
1807   r = guestfs_write_file (g, path, content, size);
1808   return r;
1809 }
1810
1811 static int run_umount (const char *cmd, int argc, char *argv[])
1812 {
1813   int r;
1814   const char *pathordevice;
1815   if (argc != 1) {
1816     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1817     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1818     return -1;
1819   }
1820   pathordevice = argv[0];
1821   r = guestfs_umount (g, pathordevice);
1822   return r;
1823 }
1824
1825 static int run_mounts (const char *cmd, int argc, char *argv[])
1826 {
1827   char **r;
1828   if (argc != 0) {
1829     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1830     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1831     return -1;
1832   }
1833   r = guestfs_mounts (g);
1834   if (r == NULL) return -1;
1835   print_strings (r);
1836   free_strings (r);
1837   return 0;
1838 }
1839
1840 static int run_umount_all (const char *cmd, int argc, char *argv[])
1841 {
1842   int r;
1843   if (argc != 0) {
1844     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1845     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1846     return -1;
1847   }
1848   r = guestfs_umount_all (g);
1849   return r;
1850 }
1851
1852 static int run_lvm_remove_all (const char *cmd, int argc, char *argv[])
1853 {
1854   int r;
1855   if (argc != 0) {
1856     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
1857     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1858     return -1;
1859   }
1860   r = guestfs_lvm_remove_all (g);
1861   return r;
1862 }
1863
1864 static int run_file (const char *cmd, int argc, char *argv[])
1865 {
1866   char *r;
1867   const char *path;
1868   if (argc != 1) {
1869     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1870     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1871     return -1;
1872   }
1873   path = argv[0];
1874   r = guestfs_file (g, path);
1875   if (r == NULL) return -1;
1876   printf ("%s\n", r);
1877   free (r);
1878   return 0;
1879 }
1880
1881 static int run_command (const char *cmd, int argc, char *argv[])
1882 {
1883   char *r;
1884   char **arguments;
1885   if (argc != 1) {
1886     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1887     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1888     return -1;
1889   }
1890   arguments = parse_string_list (argv[0]);
1891   r = guestfs_command (g, arguments);
1892   if (r == NULL) return -1;
1893   printf ("%s\n", r);
1894   free (r);
1895   return 0;
1896 }
1897
1898 static int run_command_lines (const char *cmd, int argc, char *argv[])
1899 {
1900   char **r;
1901   char **arguments;
1902   if (argc != 1) {
1903     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1904     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1905     return -1;
1906   }
1907   arguments = parse_string_list (argv[0]);
1908   r = guestfs_command_lines (g, arguments);
1909   if (r == NULL) return -1;
1910   print_strings (r);
1911   free_strings (r);
1912   return 0;
1913 }
1914
1915 static int run_stat (const char *cmd, int argc, char *argv[])
1916 {
1917   struct guestfs_stat *r;
1918   const char *path;
1919   if (argc != 1) {
1920     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1921     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1922     return -1;
1923   }
1924   path = argv[0];
1925   r = guestfs_stat (g, path);
1926   if (r == NULL) return -1;
1927   print_stat (r);
1928   free (r);
1929   return 0;
1930 }
1931
1932 static int run_lstat (const char *cmd, int argc, char *argv[])
1933 {
1934   struct guestfs_stat *r;
1935   const char *path;
1936   if (argc != 1) {
1937     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1938     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1939     return -1;
1940   }
1941   path = argv[0];
1942   r = guestfs_lstat (g, path);
1943   if (r == NULL) return -1;
1944   print_stat (r);
1945   free (r);
1946   return 0;
1947 }
1948
1949 static int run_statvfs (const char *cmd, int argc, char *argv[])
1950 {
1951   struct guestfs_statvfs *r;
1952   const char *path;
1953   if (argc != 1) {
1954     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1955     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1956     return -1;
1957   }
1958   path = argv[0];
1959   r = guestfs_statvfs (g, path);
1960   if (r == NULL) return -1;
1961   print_statvfs (r);
1962   free (r);
1963   return 0;
1964 }
1965
1966 static int run_tune2fs_l (const char *cmd, int argc, char *argv[])
1967 {
1968   char **r;
1969   const char *device;
1970   if (argc != 1) {
1971     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1972     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1973     return -1;
1974   }
1975   device = argv[0];
1976   r = guestfs_tune2fs_l (g, device);
1977   if (r == NULL) return -1;
1978   print_table (r);
1979   free_strings (r);
1980   return 0;
1981 }
1982
1983 static int run_blockdev_setro (const char *cmd, int argc, char *argv[])
1984 {
1985   int r;
1986   const char *device;
1987   if (argc != 1) {
1988     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
1989     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
1990     return -1;
1991   }
1992   device = argv[0];
1993   r = guestfs_blockdev_setro (g, device);
1994   return r;
1995 }
1996
1997 static int run_blockdev_setrw (const char *cmd, int argc, char *argv[])
1998 {
1999   int r;
2000   const char *device;
2001   if (argc != 1) {
2002     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2003     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2004     return -1;
2005   }
2006   device = argv[0];
2007   r = guestfs_blockdev_setrw (g, device);
2008   return r;
2009 }
2010
2011 static int run_blockdev_getro (const char *cmd, int argc, char *argv[])
2012 {
2013   int r;
2014   const char *device;
2015   if (argc != 1) {
2016     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2017     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2018     return -1;
2019   }
2020   device = argv[0];
2021   r = guestfs_blockdev_getro (g, device);
2022   if (r == -1) return -1;
2023   if (r) printf ("true\n"); else printf ("false\n");
2024   return 0;
2025 }
2026
2027 static int run_blockdev_getss (const char *cmd, int argc, char *argv[])
2028 {
2029   int r;
2030   const char *device;
2031   if (argc != 1) {
2032     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2033     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2034     return -1;
2035   }
2036   device = argv[0];
2037   r = guestfs_blockdev_getss (g, device);
2038   if (r == -1) return -1;
2039   printf ("%d\n", r);
2040   return 0;
2041 }
2042
2043 static int run_blockdev_getbsz (const char *cmd, int argc, char *argv[])
2044 {
2045   int r;
2046   const char *device;
2047   if (argc != 1) {
2048     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2049     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2050     return -1;
2051   }
2052   device = argv[0];
2053   r = guestfs_blockdev_getbsz (g, device);
2054   if (r == -1) return -1;
2055   printf ("%d\n", r);
2056   return 0;
2057 }
2058
2059 static int run_blockdev_setbsz (const char *cmd, int argc, char *argv[])
2060 {
2061   int r;
2062   const char *device;
2063   int blocksize;
2064   if (argc != 2) {
2065     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2066     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2067     return -1;
2068   }
2069   device = argv[0];
2070   blocksize = atoi (argv[1]);
2071   r = guestfs_blockdev_setbsz (g, device, blocksize);
2072   return r;
2073 }
2074
2075 static int run_blockdev_getsz (const char *cmd, int argc, char *argv[])
2076 {
2077   int64_t r;
2078   const char *device;
2079   if (argc != 1) {
2080     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2081     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2082     return -1;
2083   }
2084   device = argv[0];
2085   r = guestfs_blockdev_getsz (g, device);
2086   if (r == -1) return -1;
2087   printf ("%" PRIi64 "\n", r);
2088   return 0;
2089 }
2090
2091 static int run_blockdev_getsize64 (const char *cmd, int argc, char *argv[])
2092 {
2093   int64_t r;
2094   const char *device;
2095   if (argc != 1) {
2096     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2097     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2098     return -1;
2099   }
2100   device = argv[0];
2101   r = guestfs_blockdev_getsize64 (g, device);
2102   if (r == -1) return -1;
2103   printf ("%" PRIi64 "\n", r);
2104   return 0;
2105 }
2106
2107 static int run_blockdev_flushbufs (const char *cmd, int argc, char *argv[])
2108 {
2109   int r;
2110   const char *device;
2111   if (argc != 1) {
2112     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2113     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2114     return -1;
2115   }
2116   device = argv[0];
2117   r = guestfs_blockdev_flushbufs (g, device);
2118   return r;
2119 }
2120
2121 static int run_blockdev_rereadpt (const char *cmd, int argc, char *argv[])
2122 {
2123   int r;
2124   const char *device;
2125   if (argc != 1) {
2126     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2127     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2128     return -1;
2129   }
2130   device = argv[0];
2131   r = guestfs_blockdev_rereadpt (g, device);
2132   return r;
2133 }
2134
2135 static int run_upload (const char *cmd, int argc, char *argv[])
2136 {
2137   int r;
2138   const char *filename;
2139   const char *remotefilename;
2140   if (argc != 2) {
2141     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2142     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2143     return -1;
2144   }
2145   filename = strcmp (argv[0], "-") != 0 ? argv[0] : "/dev/stdin";
2146   remotefilename = argv[1];
2147   r = guestfs_upload (g, filename, remotefilename);
2148   return r;
2149 }
2150
2151 static int run_download (const char *cmd, int argc, char *argv[])
2152 {
2153   int r;
2154   const char *remotefilename;
2155   const char *filename;
2156   if (argc != 2) {
2157     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2158     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2159     return -1;
2160   }
2161   remotefilename = argv[0];
2162   filename = strcmp (argv[1], "-") != 0 ? argv[1] : "/dev/stdout";
2163   r = guestfs_download (g, remotefilename, filename);
2164   return r;
2165 }
2166
2167 static int run_checksum (const char *cmd, int argc, char *argv[])
2168 {
2169   char *r;
2170   const char *csumtype;
2171   const char *path;
2172   if (argc != 2) {
2173     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2174     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2175     return -1;
2176   }
2177   csumtype = argv[0];
2178   path = argv[1];
2179   r = guestfs_checksum (g, csumtype, path);
2180   if (r == NULL) return -1;
2181   printf ("%s\n", r);
2182   free (r);
2183   return 0;
2184 }
2185
2186 static int run_tar_in (const char *cmd, int argc, char *argv[])
2187 {
2188   int r;
2189   const char *tarfile;
2190   const char *directory;
2191   if (argc != 2) {
2192     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2193     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2194     return -1;
2195   }
2196   tarfile = strcmp (argv[0], "-") != 0 ? argv[0] : "/dev/stdin";
2197   directory = argv[1];
2198   r = guestfs_tar_in (g, tarfile, directory);
2199   return r;
2200 }
2201
2202 static int run_tar_out (const char *cmd, int argc, char *argv[])
2203 {
2204   int r;
2205   const char *directory;
2206   const char *tarfile;
2207   if (argc != 2) {
2208     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2209     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2210     return -1;
2211   }
2212   directory = argv[0];
2213   tarfile = strcmp (argv[1], "-") != 0 ? argv[1] : "/dev/stdout";
2214   r = guestfs_tar_out (g, directory, tarfile);
2215   return r;
2216 }
2217
2218 static int run_tgz_in (const char *cmd, int argc, char *argv[])
2219 {
2220   int r;
2221   const char *tarball;
2222   const char *directory;
2223   if (argc != 2) {
2224     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2225     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2226     return -1;
2227   }
2228   tarball = strcmp (argv[0], "-") != 0 ? argv[0] : "/dev/stdin";
2229   directory = argv[1];
2230   r = guestfs_tgz_in (g, tarball, directory);
2231   return r;
2232 }
2233
2234 static int run_tgz_out (const char *cmd, int argc, char *argv[])
2235 {
2236   int r;
2237   const char *directory;
2238   const char *tarball;
2239   if (argc != 2) {
2240     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2241     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2242     return -1;
2243   }
2244   directory = argv[0];
2245   tarball = strcmp (argv[1], "-") != 0 ? argv[1] : "/dev/stdout";
2246   r = guestfs_tgz_out (g, directory, tarball);
2247   return r;
2248 }
2249
2250 static int run_mount_ro (const char *cmd, int argc, char *argv[])
2251 {
2252   int r;
2253   const char *device;
2254   const char *mountpoint;
2255   if (argc != 2) {
2256     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2257     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2258     return -1;
2259   }
2260   device = argv[0];
2261   mountpoint = argv[1];
2262   r = guestfs_mount_ro (g, device, mountpoint);
2263   return r;
2264 }
2265
2266 static int run_mount_options (const char *cmd, int argc, char *argv[])
2267 {
2268   int r;
2269   const char *options;
2270   const char *device;
2271   const char *mountpoint;
2272   if (argc != 3) {
2273     fprintf (stderr, "%s should have 3 parameter(s)\n", cmd);
2274     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2275     return -1;
2276   }
2277   options = argv[0];
2278   device = argv[1];
2279   mountpoint = argv[2];
2280   r = guestfs_mount_options (g, options, device, mountpoint);
2281   return r;
2282 }
2283
2284 static int run_mount_vfs (const char *cmd, int argc, char *argv[])
2285 {
2286   int r;
2287   const char *options;
2288   const char *vfstype;
2289   const char *device;
2290   const char *mountpoint;
2291   if (argc != 4) {
2292     fprintf (stderr, "%s should have 4 parameter(s)\n", cmd);
2293     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2294     return -1;
2295   }
2296   options = argv[0];
2297   vfstype = argv[1];
2298   device = argv[2];
2299   mountpoint = argv[3];
2300   r = guestfs_mount_vfs (g, options, vfstype, device, mountpoint);
2301   return r;
2302 }
2303
2304 static int run_debug (const char *cmd, int argc, char *argv[])
2305 {
2306   char *r;
2307   const char *subcmd;
2308   char **extraargs;
2309   if (argc != 2) {
2310     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2311     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2312     return -1;
2313   }
2314   subcmd = argv[0];
2315   extraargs = parse_string_list (argv[1]);
2316   r = guestfs_debug (g, subcmd, extraargs);
2317   if (r == NULL) return -1;
2318   printf ("%s\n", r);
2319   free (r);
2320   return 0;
2321 }
2322
2323 static int run_lvremove (const char *cmd, int argc, char *argv[])
2324 {
2325   int r;
2326   const char *device;
2327   if (argc != 1) {
2328     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2329     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2330     return -1;
2331   }
2332   device = argv[0];
2333   r = guestfs_lvremove (g, device);
2334   return r;
2335 }
2336
2337 static int run_vgremove (const char *cmd, int argc, char *argv[])
2338 {
2339   int r;
2340   const char *vgname;
2341   if (argc != 1) {
2342     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2343     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2344     return -1;
2345   }
2346   vgname = argv[0];
2347   r = guestfs_vgremove (g, vgname);
2348   return r;
2349 }
2350
2351 static int run_pvremove (const char *cmd, int argc, char *argv[])
2352 {
2353   int r;
2354   const char *device;
2355   if (argc != 1) {
2356     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2357     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2358     return -1;
2359   }
2360   device = argv[0];
2361   r = guestfs_pvremove (g, device);
2362   return r;
2363 }
2364
2365 static int run_set_e2label (const char *cmd, int argc, char *argv[])
2366 {
2367   int r;
2368   const char *device;
2369   const char *label;
2370   if (argc != 2) {
2371     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2372     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2373     return -1;
2374   }
2375   device = argv[0];
2376   label = argv[1];
2377   r = guestfs_set_e2label (g, device, label);
2378   return r;
2379 }
2380
2381 static int run_get_e2label (const char *cmd, int argc, char *argv[])
2382 {
2383   char *r;
2384   const char *device;
2385   if (argc != 1) {
2386     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2387     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2388     return -1;
2389   }
2390   device = argv[0];
2391   r = guestfs_get_e2label (g, device);
2392   if (r == NULL) return -1;
2393   printf ("%s\n", r);
2394   free (r);
2395   return 0;
2396 }
2397
2398 static int run_set_e2uuid (const char *cmd, int argc, char *argv[])
2399 {
2400   int r;
2401   const char *device;
2402   const char *uuid;
2403   if (argc != 2) {
2404     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2405     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2406     return -1;
2407   }
2408   device = argv[0];
2409   uuid = argv[1];
2410   r = guestfs_set_e2uuid (g, device, uuid);
2411   return r;
2412 }
2413
2414 static int run_get_e2uuid (const char *cmd, int argc, char *argv[])
2415 {
2416   char *r;
2417   const char *device;
2418   if (argc != 1) {
2419     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2420     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2421     return -1;
2422   }
2423   device = argv[0];
2424   r = guestfs_get_e2uuid (g, device);
2425   if (r == NULL) return -1;
2426   printf ("%s\n", r);
2427   free (r);
2428   return 0;
2429 }
2430
2431 static int run_fsck (const char *cmd, int argc, char *argv[])
2432 {
2433   int r;
2434   const char *fstype;
2435   const char *device;
2436   if (argc != 2) {
2437     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2438     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2439     return -1;
2440   }
2441   fstype = argv[0];
2442   device = argv[1];
2443   r = guestfs_fsck (g, fstype, device);
2444   if (r == -1) return -1;
2445   printf ("%d\n", r);
2446   return 0;
2447 }
2448
2449 static int run_zero (const char *cmd, int argc, char *argv[])
2450 {
2451   int r;
2452   const char *device;
2453   if (argc != 1) {
2454     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2455     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2456     return -1;
2457   }
2458   device = argv[0];
2459   r = guestfs_zero (g, device);
2460   return r;
2461 }
2462
2463 static int run_grub_install (const char *cmd, int argc, char *argv[])
2464 {
2465   int r;
2466   const char *root;
2467   const char *device;
2468   if (argc != 2) {
2469     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2470     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2471     return -1;
2472   }
2473   root = argv[0];
2474   device = argv[1];
2475   r = guestfs_grub_install (g, root, device);
2476   return r;
2477 }
2478
2479 static int run_cp (const char *cmd, int argc, char *argv[])
2480 {
2481   int r;
2482   const char *src;
2483   const char *dest;
2484   if (argc != 2) {
2485     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2486     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2487     return -1;
2488   }
2489   src = argv[0];
2490   dest = argv[1];
2491   r = guestfs_cp (g, src, dest);
2492   return r;
2493 }
2494
2495 static int run_cp_a (const char *cmd, int argc, char *argv[])
2496 {
2497   int r;
2498   const char *src;
2499   const char *dest;
2500   if (argc != 2) {
2501     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2502     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2503     return -1;
2504   }
2505   src = argv[0];
2506   dest = argv[1];
2507   r = guestfs_cp_a (g, src, dest);
2508   return r;
2509 }
2510
2511 static int run_mv (const char *cmd, int argc, char *argv[])
2512 {
2513   int r;
2514   const char *src;
2515   const char *dest;
2516   if (argc != 2) {
2517     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2518     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2519     return -1;
2520   }
2521   src = argv[0];
2522   dest = argv[1];
2523   r = guestfs_mv (g, src, dest);
2524   return r;
2525 }
2526
2527 static int run_drop_caches (const char *cmd, int argc, char *argv[])
2528 {
2529   int r;
2530   int whattodrop;
2531   if (argc != 1) {
2532     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2533     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2534     return -1;
2535   }
2536   whattodrop = atoi (argv[0]);
2537   r = guestfs_drop_caches (g, whattodrop);
2538   return r;
2539 }
2540
2541 static int run_dmesg (const char *cmd, int argc, char *argv[])
2542 {
2543   char *r;
2544   if (argc != 0) {
2545     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
2546     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2547     return -1;
2548   }
2549   r = guestfs_dmesg (g);
2550   if (r == NULL) return -1;
2551   printf ("%s\n", r);
2552   free (r);
2553   return 0;
2554 }
2555
2556 static int run_ping_daemon (const char *cmd, int argc, char *argv[])
2557 {
2558   int r;
2559   if (argc != 0) {
2560     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
2561     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2562     return -1;
2563   }
2564   r = guestfs_ping_daemon (g);
2565   return r;
2566 }
2567
2568 static int run_equal (const char *cmd, int argc, char *argv[])
2569 {
2570   int r;
2571   const char *file1;
2572   const char *file2;
2573   if (argc != 2) {
2574     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2575     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2576     return -1;
2577   }
2578   file1 = argv[0];
2579   file2 = argv[1];
2580   r = guestfs_equal (g, file1, file2);
2581   if (r == -1) return -1;
2582   if (r) printf ("true\n"); else printf ("false\n");
2583   return 0;
2584 }
2585
2586 static int run_strings (const char *cmd, int argc, char *argv[])
2587 {
2588   char **r;
2589   const char *path;
2590   if (argc != 1) {
2591     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2592     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2593     return -1;
2594   }
2595   path = argv[0];
2596   r = guestfs_strings (g, path);
2597   if (r == NULL) return -1;
2598   print_strings (r);
2599   free_strings (r);
2600   return 0;
2601 }
2602
2603 static int run_strings_e (const char *cmd, int argc, char *argv[])
2604 {
2605   char **r;
2606   const char *encoding;
2607   const char *path;
2608   if (argc != 2) {
2609     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2610     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2611     return -1;
2612   }
2613   encoding = argv[0];
2614   path = argv[1];
2615   r = guestfs_strings_e (g, encoding, path);
2616   if (r == NULL) return -1;
2617   print_strings (r);
2618   free_strings (r);
2619   return 0;
2620 }
2621
2622 static int run_hexdump (const char *cmd, int argc, char *argv[])
2623 {
2624   char *r;
2625   const char *path;
2626   if (argc != 1) {
2627     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2628     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2629     return -1;
2630   }
2631   path = argv[0];
2632   r = guestfs_hexdump (g, path);
2633   if (r == NULL) return -1;
2634   printf ("%s\n", r);
2635   free (r);
2636   return 0;
2637 }
2638
2639 static int run_zerofree (const char *cmd, int argc, char *argv[])
2640 {
2641   int r;
2642   const char *device;
2643   if (argc != 1) {
2644     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2645     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2646     return -1;
2647   }
2648   device = argv[0];
2649   r = guestfs_zerofree (g, device);
2650   return r;
2651 }
2652
2653 static int run_pvresize (const char *cmd, int argc, char *argv[])
2654 {
2655   int r;
2656   const char *device;
2657   if (argc != 1) {
2658     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2659     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2660     return -1;
2661   }
2662   device = argv[0];
2663   r = guestfs_pvresize (g, device);
2664   return r;
2665 }
2666
2667 static int run_sfdisk_N (const char *cmd, int argc, char *argv[])
2668 {
2669   int r;
2670   const char *device;
2671   int partnum;
2672   int cyls;
2673   int heads;
2674   int sectors;
2675   const char *line;
2676   if (argc != 6) {
2677     fprintf (stderr, "%s should have 6 parameter(s)\n", cmd);
2678     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2679     return -1;
2680   }
2681   device = argv[0];
2682   partnum = atoi (argv[1]);
2683   cyls = atoi (argv[2]);
2684   heads = atoi (argv[3]);
2685   sectors = atoi (argv[4]);
2686   line = argv[5];
2687   r = guestfs_sfdisk_N (g, device, partnum, cyls, heads, sectors, line);
2688   return r;
2689 }
2690
2691 static int run_sfdisk_l (const char *cmd, int argc, char *argv[])
2692 {
2693   char *r;
2694   const char *device;
2695   if (argc != 1) {
2696     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2697     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2698     return -1;
2699   }
2700   device = argv[0];
2701   r = guestfs_sfdisk_l (g, device);
2702   if (r == NULL) return -1;
2703   printf ("%s\n", r);
2704   free (r);
2705   return 0;
2706 }
2707
2708 static int run_sfdisk_kernel_geometry (const char *cmd, int argc, char *argv[])
2709 {
2710   char *r;
2711   const char *device;
2712   if (argc != 1) {
2713     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2714     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2715     return -1;
2716   }
2717   device = argv[0];
2718   r = guestfs_sfdisk_kernel_geometry (g, device);
2719   if (r == NULL) return -1;
2720   printf ("%s\n", r);
2721   free (r);
2722   return 0;
2723 }
2724
2725 static int run_sfdisk_disk_geometry (const char *cmd, int argc, char *argv[])
2726 {
2727   char *r;
2728   const char *device;
2729   if (argc != 1) {
2730     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2731     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2732     return -1;
2733   }
2734   device = argv[0];
2735   r = guestfs_sfdisk_disk_geometry (g, device);
2736   if (r == NULL) return -1;
2737   printf ("%s\n", r);
2738   free (r);
2739   return 0;
2740 }
2741
2742 static int run_vg_activate_all (const char *cmd, int argc, char *argv[])
2743 {
2744   int r;
2745   int activate;
2746   if (argc != 1) {
2747     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2748     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2749     return -1;
2750   }
2751   activate = is_true (argv[0]) ? 1 : 0;
2752   r = guestfs_vg_activate_all (g, activate);
2753   return r;
2754 }
2755
2756 static int run_vg_activate (const char *cmd, int argc, char *argv[])
2757 {
2758   int r;
2759   int activate;
2760   char **volgroups;
2761   if (argc != 2) {
2762     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2763     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2764     return -1;
2765   }
2766   activate = is_true (argv[0]) ? 1 : 0;
2767   volgroups = parse_string_list (argv[1]);
2768   r = guestfs_vg_activate (g, activate, volgroups);
2769   return r;
2770 }
2771
2772 static int run_lvresize (const char *cmd, int argc, char *argv[])
2773 {
2774   int r;
2775   const char *device;
2776   int mbytes;
2777   if (argc != 2) {
2778     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2779     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2780     return -1;
2781   }
2782   device = argv[0];
2783   mbytes = atoi (argv[1]);
2784   r = guestfs_lvresize (g, device, mbytes);
2785   return r;
2786 }
2787
2788 static int run_resize2fs (const char *cmd, int argc, char *argv[])
2789 {
2790   int r;
2791   const char *device;
2792   if (argc != 1) {
2793     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2794     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2795     return -1;
2796   }
2797   device = argv[0];
2798   r = guestfs_resize2fs (g, device);
2799   return r;
2800 }
2801
2802 static int run_find (const char *cmd, int argc, char *argv[])
2803 {
2804   char **r;
2805   const char *directory;
2806   if (argc != 1) {
2807     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2808     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2809     return -1;
2810   }
2811   directory = argv[0];
2812   r = guestfs_find (g, directory);
2813   if (r == NULL) return -1;
2814   print_strings (r);
2815   free_strings (r);
2816   return 0;
2817 }
2818
2819 static int run_e2fsck_f (const char *cmd, int argc, char *argv[])
2820 {
2821   int r;
2822   const char *device;
2823   if (argc != 1) {
2824     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2825     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2826     return -1;
2827   }
2828   device = argv[0];
2829   r = guestfs_e2fsck_f (g, device);
2830   return r;
2831 }
2832
2833 static int run_sleep (const char *cmd, int argc, char *argv[])
2834 {
2835   int r;
2836   int secs;
2837   if (argc != 1) {
2838     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2839     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2840     return -1;
2841   }
2842   secs = atoi (argv[0]);
2843   r = guestfs_sleep (g, secs);
2844   return r;
2845 }
2846
2847 static int run_ntfs_3g_probe (const char *cmd, int argc, char *argv[])
2848 {
2849   int r;
2850   int rw;
2851   const char *device;
2852   if (argc != 2) {
2853     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
2854     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2855     return -1;
2856   }
2857   rw = is_true (argv[0]) ? 1 : 0;
2858   device = argv[1];
2859   r = guestfs_ntfs_3g_probe (g, rw, device);
2860   if (r == -1) return -1;
2861   printf ("%d\n", r);
2862   return 0;
2863 }
2864
2865 static int run_sh (const char *cmd, int argc, char *argv[])
2866 {
2867   char *r;
2868   const char *command;
2869   if (argc != 1) {
2870     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2871     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2872     return -1;
2873   }
2874   command = argv[0];
2875   r = guestfs_sh (g, command);
2876   if (r == NULL) return -1;
2877   printf ("%s\n", r);
2878   free (r);
2879   return 0;
2880 }
2881
2882 static int run_sh_lines (const char *cmd, int argc, char *argv[])
2883 {
2884   char **r;
2885   const char *command;
2886   if (argc != 1) {
2887     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2888     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2889     return -1;
2890   }
2891   command = argv[0];
2892   r = guestfs_sh_lines (g, command);
2893   if (r == NULL) return -1;
2894   print_strings (r);
2895   free_strings (r);
2896   return 0;
2897 }
2898
2899 static int run_glob_expand (const char *cmd, int argc, char *argv[])
2900 {
2901   char **r;
2902   const char *pattern;
2903   if (argc != 1) {
2904     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2905     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2906     return -1;
2907   }
2908   pattern = argv[0];
2909   r = guestfs_glob_expand (g, pattern);
2910   if (r == NULL) return -1;
2911   print_strings (r);
2912   free_strings (r);
2913   return 0;
2914 }
2915
2916 static int run_scrub_device (const char *cmd, int argc, char *argv[])
2917 {
2918   int r;
2919   const char *device;
2920   if (argc != 1) {
2921     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2922     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2923     return -1;
2924   }
2925   device = argv[0];
2926   r = guestfs_scrub_device (g, device);
2927   return r;
2928 }
2929
2930 static int run_scrub_file (const char *cmd, int argc, char *argv[])
2931 {
2932   int r;
2933   const char *file;
2934   if (argc != 1) {
2935     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2936     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2937     return -1;
2938   }
2939   file = argv[0];
2940   r = guestfs_scrub_file (g, file);
2941   return r;
2942 }
2943
2944 static int run_scrub_freespace (const char *cmd, int argc, char *argv[])
2945 {
2946   int r;
2947   const char *dir;
2948   if (argc != 1) {
2949     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2950     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2951     return -1;
2952   }
2953   dir = argv[0];
2954   r = guestfs_scrub_freespace (g, dir);
2955   return r;
2956 }
2957
2958 static int run_mkdtemp (const char *cmd, int argc, char *argv[])
2959 {
2960   char *r;
2961   const char *template;
2962   if (argc != 1) {
2963     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2964     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2965     return -1;
2966   }
2967   template = argv[0];
2968   r = guestfs_mkdtemp (g, template);
2969   if (r == NULL) return -1;
2970   printf ("%s\n", r);
2971   free (r);
2972   return 0;
2973 }
2974
2975 static int run_wc_l (const char *cmd, int argc, char *argv[])
2976 {
2977   int r;
2978   const char *path;
2979   if (argc != 1) {
2980     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2981     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2982     return -1;
2983   }
2984   path = argv[0];
2985   r = guestfs_wc_l (g, path);
2986   if (r == -1) return -1;
2987   printf ("%d\n", r);
2988   return 0;
2989 }
2990
2991 static int run_wc_w (const char *cmd, int argc, char *argv[])
2992 {
2993   int r;
2994   const char *path;
2995   if (argc != 1) {
2996     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
2997     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
2998     return -1;
2999   }
3000   path = argv[0];
3001   r = guestfs_wc_w (g, path);
3002   if (r == -1) return -1;
3003   printf ("%d\n", r);
3004   return 0;
3005 }
3006
3007 static int run_wc_c (const char *cmd, int argc, char *argv[])
3008 {
3009   int r;
3010   const char *path;
3011   if (argc != 1) {
3012     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
3013     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3014     return -1;
3015   }
3016   path = argv[0];
3017   r = guestfs_wc_c (g, path);
3018   if (r == -1) return -1;
3019   printf ("%d\n", r);
3020   return 0;
3021 }
3022
3023 static int run_head (const char *cmd, int argc, char *argv[])
3024 {
3025   char **r;
3026   const char *path;
3027   if (argc != 1) {
3028     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
3029     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3030     return -1;
3031   }
3032   path = argv[0];
3033   r = guestfs_head (g, path);
3034   if (r == NULL) return -1;
3035   print_strings (r);
3036   free_strings (r);
3037   return 0;
3038 }
3039
3040 static int run_head_n (const char *cmd, int argc, char *argv[])
3041 {
3042   char **r;
3043   int nrlines;
3044   const char *path;
3045   if (argc != 2) {
3046     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
3047     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3048     return -1;
3049   }
3050   nrlines = atoi (argv[0]);
3051   path = argv[1];
3052   r = guestfs_head_n (g, nrlines, path);
3053   if (r == NULL) return -1;
3054   print_strings (r);
3055   free_strings (r);
3056   return 0;
3057 }
3058
3059 static int run_tail (const char *cmd, int argc, char *argv[])
3060 {
3061   char **r;
3062   const char *path;
3063   if (argc != 1) {
3064     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
3065     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3066     return -1;
3067   }
3068   path = argv[0];
3069   r = guestfs_tail (g, path);
3070   if (r == NULL) return -1;
3071   print_strings (r);
3072   free_strings (r);
3073   return 0;
3074 }
3075
3076 static int run_tail_n (const char *cmd, int argc, char *argv[])
3077 {
3078   char **r;
3079   int nrlines;
3080   const char *path;
3081   if (argc != 2) {
3082     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
3083     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3084     return -1;
3085   }
3086   nrlines = atoi (argv[0]);
3087   path = argv[1];
3088   r = guestfs_tail_n (g, nrlines, path);
3089   if (r == NULL) return -1;
3090   print_strings (r);
3091   free_strings (r);
3092   return 0;
3093 }
3094
3095 static int run_df (const char *cmd, int argc, char *argv[])
3096 {
3097   char *r;
3098   if (argc != 0) {
3099     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
3100     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3101     return -1;
3102   }
3103   r = guestfs_df (g);
3104   if (r == NULL) return -1;
3105   printf ("%s\n", r);
3106   free (r);
3107   return 0;
3108 }
3109
3110 static int run_df_h (const char *cmd, int argc, char *argv[])
3111 {
3112   char *r;
3113   if (argc != 0) {
3114     fprintf (stderr, "%s should have 0 parameter(s)\n", cmd);
3115     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3116     return -1;
3117   }
3118   r = guestfs_df_h (g);
3119   if (r == NULL) return -1;
3120   printf ("%s\n", r);
3121   free (r);
3122   return 0;
3123 }
3124
3125 static int run_du (const char *cmd, int argc, char *argv[])
3126 {
3127   int64_t r;
3128   const char *path;
3129   if (argc != 1) {
3130     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
3131     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3132     return -1;
3133   }
3134   path = argv[0];
3135   r = guestfs_du (g, path);
3136   if (r == -1) return -1;
3137   printf ("%" PRIi64 "\n", r);
3138   return 0;
3139 }
3140
3141 static int run_initrd_list (const char *cmd, int argc, char *argv[])
3142 {
3143   char **r;
3144   const char *path;
3145   if (argc != 1) {
3146     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
3147     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3148     return -1;
3149   }
3150   path = argv[0];
3151   r = guestfs_initrd_list (g, path);
3152   if (r == NULL) return -1;
3153   print_strings (r);
3154   free_strings (r);
3155   return 0;
3156 }
3157
3158 static int run_mount_loop (const char *cmd, int argc, char *argv[])
3159 {
3160   int r;
3161   const char *file;
3162   const char *mountpoint;
3163   if (argc != 2) {
3164     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
3165     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3166     return -1;
3167   }
3168   file = argv[0];
3169   mountpoint = argv[1];
3170   r = guestfs_mount_loop (g, file, mountpoint);
3171   return r;
3172 }
3173
3174 static int run_mkswap (const char *cmd, int argc, char *argv[])
3175 {
3176   int r;
3177   const char *device;
3178   if (argc != 1) {
3179     fprintf (stderr, "%s should have 1 parameter(s)\n", cmd);
3180     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3181     return -1;
3182   }
3183   device = argv[0];
3184   r = guestfs_mkswap (g, device);
3185   return r;
3186 }
3187
3188 static int run_mkswap_L (const char *cmd, int argc, char *argv[])
3189 {
3190   int r;
3191   const char *label;
3192   const char *device;
3193   if (argc != 2) {
3194     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
3195     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3196     return -1;
3197   }
3198   label = argv[0];
3199   device = argv[1];
3200   r = guestfs_mkswap_L (g, label, device);
3201   return r;
3202 }
3203
3204 static int run_mkswap_U (const char *cmd, int argc, char *argv[])
3205 {
3206   int r;
3207   const char *uuid;
3208   const char *device;
3209   if (argc != 2) {
3210     fprintf (stderr, "%s should have 2 parameter(s)\n", cmd);
3211     fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd);
3212     return -1;
3213   }
3214   uuid = argv[0];
3215   device = argv[1];
3216   r = guestfs_mkswap_U (g, uuid, device);
3217   return r;
3218 }
3219
3220 int run_action (const char *cmd, int argc, char *argv[])
3221 {
3222   if (strcasecmp (cmd, "launch") == 0 || strcasecmp (cmd, "run") == 0)
3223     return run_launch (cmd, argc, argv);
3224   else
3225   if (strcasecmp (cmd, "kill_subprocess") == 0 || strcasecmp (cmd, "kill-subprocess") == 0)
3226     return run_kill_subprocess (cmd, argc, argv);
3227   else
3228   if (strcasecmp (cmd, "add_drive") == 0 || strcasecmp (cmd, "add-drive") == 0 || strcasecmp (cmd, "add") == 0)
3229     return run_add_drive (cmd, argc, argv);
3230   else
3231   if (strcasecmp (cmd, "add_cdrom") == 0 || strcasecmp (cmd, "add-cdrom") == 0 || strcasecmp (cmd, "cdrom") == 0)
3232     return run_add_cdrom (cmd, argc, argv);
3233   else
3234   if (strcasecmp (cmd, "add_drive_ro") == 0 || strcasecmp (cmd, "add-drive-ro") == 0 || strcasecmp (cmd, "add-ro") == 0)
3235     return run_add_drive_ro (cmd, argc, argv);
3236   else
3237   if (strcasecmp (cmd, "config") == 0)
3238     return run_config (cmd, argc, argv);
3239   else
3240   if (strcasecmp (cmd, "set_qemu") == 0 || strcasecmp (cmd, "set-qemu") == 0 || strcasecmp (cmd, "qemu") == 0)
3241     return run_set_qemu (cmd, argc, argv);
3242   else
3243   if (strcasecmp (cmd, "get_qemu") == 0 || strcasecmp (cmd, "get-qemu") == 0)
3244     return run_get_qemu (cmd, argc, argv);
3245   else
3246   if (strcasecmp (cmd, "set_path") == 0 || strcasecmp (cmd, "set-path") == 0 || strcasecmp (cmd, "path") == 0)
3247     return run_set_path (cmd, argc, argv);
3248   else
3249   if (strcasecmp (cmd, "get_path") == 0 || strcasecmp (cmd, "get-path") == 0)
3250     return run_get_path (cmd, argc, argv);
3251   else
3252   if (strcasecmp (cmd, "set_append") == 0 || strcasecmp (cmd, "set-append") == 0 || strcasecmp (cmd, "append") == 0)
3253     return run_set_append (cmd, argc, argv);
3254   else
3255   if (strcasecmp (cmd, "get_append") == 0 || strcasecmp (cmd, "get-append") == 0)
3256     return run_get_append (cmd, argc, argv);
3257   else
3258   if (strcasecmp (cmd, "set_autosync") == 0 || strcasecmp (cmd, "set-autosync") == 0 || strcasecmp (cmd, "autosync") == 0)
3259     return run_set_autosync (cmd, argc, argv);
3260   else
3261   if (strcasecmp (cmd, "get_autosync") == 0 || strcasecmp (cmd, "get-autosync") == 0)
3262     return run_get_autosync (cmd, argc, argv);
3263   else
3264   if (strcasecmp (cmd, "set_verbose") == 0 || strcasecmp (cmd, "set-verbose") == 0 || strcasecmp (cmd, "verbose") == 0)
3265     return run_set_verbose (cmd, argc, argv);
3266   else
3267   if (strcasecmp (cmd, "get_verbose") == 0 || strcasecmp (cmd, "get-verbose") == 0)
3268     return run_get_verbose (cmd, argc, argv);
3269   else
3270   if (strcasecmp (cmd, "is_ready") == 0 || strcasecmp (cmd, "is-ready") == 0)
3271     return run_is_ready (cmd, argc, argv);
3272   else
3273   if (strcasecmp (cmd, "is_config") == 0 || strcasecmp (cmd, "is-config") == 0)
3274     return run_is_config (cmd, argc, argv);
3275   else
3276   if (strcasecmp (cmd, "is_launching") == 0 || strcasecmp (cmd, "is-launching") == 0)
3277     return run_is_launching (cmd, argc, argv);
3278   else
3279   if (strcasecmp (cmd, "is_busy") == 0 || strcasecmp (cmd, "is-busy") == 0)
3280     return run_is_busy (cmd, argc, argv);
3281   else
3282   if (strcasecmp (cmd, "get_state") == 0 || strcasecmp (cmd, "get-state") == 0)
3283     return run_get_state (cmd, argc, argv);
3284   else
3285   if (strcasecmp (cmd, "set_memsize") == 0 || strcasecmp (cmd, "set-memsize") == 0 || strcasecmp (cmd, "memsize") == 0)
3286     return run_set_memsize (cmd, argc, argv);
3287   else
3288   if (strcasecmp (cmd, "get_memsize") == 0 || strcasecmp (cmd, "get-memsize") == 0)
3289     return run_get_memsize (cmd, argc, argv);
3290   else
3291   if (strcasecmp (cmd, "mount") == 0)
3292     return run_mount (cmd, argc, argv);
3293   else
3294   if (strcasecmp (cmd, "sync") == 0)
3295     return run_sync (cmd, argc, argv);
3296   else
3297   if (strcasecmp (cmd, "touch") == 0)
3298     return run_touch (cmd, argc, argv);
3299   else
3300   if (strcasecmp (cmd, "cat") == 0)
3301     return run_cat (cmd, argc, argv);
3302   else
3303   if (strcasecmp (cmd, "ll") == 0)
3304     return run_ll (cmd, argc, argv);
3305   else
3306   if (strcasecmp (cmd, "ls") == 0)
3307     return run_ls (cmd, argc, argv);
3308   else
3309   if (strcasecmp (cmd, "list_devices") == 0 || strcasecmp (cmd, "list-devices") == 0)
3310     return run_list_devices (cmd, argc, argv);
3311   else
3312   if (strcasecmp (cmd, "list_partitions") == 0 || strcasecmp (cmd, "list-partitions") == 0)
3313     return run_list_partitions (cmd, argc, argv);
3314   else
3315   if (strcasecmp (cmd, "pvs") == 0)
3316     return run_pvs (cmd, argc, argv);
3317   else
3318   if (strcasecmp (cmd, "vgs") == 0)
3319     return run_vgs (cmd, argc, argv);
3320   else
3321   if (strcasecmp (cmd, "lvs") == 0)
3322     return run_lvs (cmd, argc, argv);
3323   else
3324   if (strcasecmp (cmd, "pvs_full") == 0 || strcasecmp (cmd, "pvs-full") == 0)
3325     return run_pvs_full (cmd, argc, argv);
3326   else
3327   if (strcasecmp (cmd, "vgs_full") == 0 || strcasecmp (cmd, "vgs-full") == 0)
3328     return run_vgs_full (cmd, argc, argv);
3329   else
3330   if (strcasecmp (cmd, "lvs_full") == 0 || strcasecmp (cmd, "lvs-full") == 0)
3331     return run_lvs_full (cmd, argc, argv);
3332   else
3333   if (strcasecmp (cmd, "read_lines") == 0 || strcasecmp (cmd, "read-lines") == 0)
3334     return run_read_lines (cmd, argc, argv);
3335   else
3336   if (strcasecmp (cmd, "aug_init") == 0 || strcasecmp (cmd, "aug-init") == 0)
3337     return run_aug_init (cmd, argc, argv);
3338   else
3339   if (strcasecmp (cmd, "aug_close") == 0 || strcasecmp (cmd, "aug-close") == 0)
3340     return run_aug_close (cmd, argc, argv);
3341   else
3342   if (strcasecmp (cmd, "aug_defvar") == 0 || strcasecmp (cmd, "aug-defvar") == 0)
3343     return run_aug_defvar (cmd, argc, argv);
3344   else
3345   if (strcasecmp (cmd, "aug_defnode") == 0 || strcasecmp (cmd, "aug-defnode") == 0)
3346     return run_aug_defnode (cmd, argc, argv);
3347   else
3348   if (strcasecmp (cmd, "aug_get") == 0 || strcasecmp (cmd, "aug-get") == 0)
3349     return run_aug_get (cmd, argc, argv);
3350   else
3351   if (strcasecmp (cmd, "aug_set") == 0 || strcasecmp (cmd, "aug-set") == 0)
3352     return run_aug_set (cmd, argc, argv);
3353   else
3354   if (strcasecmp (cmd, "aug_insert") == 0 || strcasecmp (cmd, "aug-insert") == 0)
3355     return run_aug_insert (cmd, argc, argv);
3356   else
3357   if (strcasecmp (cmd, "aug_rm") == 0 || strcasecmp (cmd, "aug-rm") == 0)
3358     return run_aug_rm (cmd, argc, argv);
3359   else
3360   if (strcasecmp (cmd, "aug_mv") == 0 || strcasecmp (cmd, "aug-mv") == 0)
3361     return run_aug_mv (cmd, argc, argv);
3362   else
3363   if (strcasecmp (cmd, "aug_match") == 0 || strcasecmp (cmd, "aug-match") == 0)
3364     return run_aug_match (cmd, argc, argv);
3365   else
3366   if (strcasecmp (cmd, "aug_save") == 0 || strcasecmp (cmd, "aug-save") == 0)
3367     return run_aug_save (cmd, argc, argv);
3368   else
3369   if (strcasecmp (cmd, "aug_load") == 0 || strcasecmp (cmd, "aug-load") == 0)
3370     return run_aug_load (cmd, argc, argv);
3371   else
3372   if (strcasecmp (cmd, "aug_ls") == 0 || strcasecmp (cmd, "aug-ls") == 0)
3373     return run_aug_ls (cmd, argc, argv);
3374   else
3375   if (strcasecmp (cmd, "rm") == 0)
3376     return run_rm (cmd, argc, argv);
3377   else
3378   if (strcasecmp (cmd, "rmdir") == 0)
3379     return run_rmdir (cmd, argc, argv);
3380   else
3381   if (strcasecmp (cmd, "rm_rf") == 0 || strcasecmp (cmd, "rm-rf") == 0)
3382     return run_rm_rf (cmd, argc, argv);
3383   else
3384   if (strcasecmp (cmd, "mkdir") == 0)
3385     return run_mkdir (cmd, argc, argv);
3386   else
3387   if (strcasecmp (cmd, "mkdir_p") == 0 || strcasecmp (cmd, "mkdir-p") == 0)
3388     return run_mkdir_p (cmd, argc, argv);
3389   else
3390   if (strcasecmp (cmd, "chmod") == 0)
3391     return run_chmod (cmd, argc, argv);
3392   else
3393   if (strcasecmp (cmd, "chown") == 0)
3394     return run_chown (cmd, argc, argv);
3395   else
3396   if (strcasecmp (cmd, "exists") == 0)
3397     return run_exists (cmd, argc, argv);
3398   else
3399   if (strcasecmp (cmd, "is_file") == 0 || strcasecmp (cmd, "is-file") == 0)
3400     return run_is_file (cmd, argc, argv);
3401   else
3402   if (strcasecmp (cmd, "is_dir") == 0 || strcasecmp (cmd, "is-dir") == 0)
3403     return run_is_dir (cmd, argc, argv);
3404   else
3405   if (strcasecmp (cmd, "pvcreate") == 0)
3406     return run_pvcreate (cmd, argc, argv);
3407   else
3408   if (strcasecmp (cmd, "vgcreate") == 0)
3409     return run_vgcreate (cmd, argc, argv);
3410   else
3411   if (strcasecmp (cmd, "lvcreate") == 0)
3412     return run_lvcreate (cmd, argc, argv);
3413   else
3414   if (strcasecmp (cmd, "mkfs") == 0)
3415     return run_mkfs (cmd, argc, argv);
3416   else
3417   if (strcasecmp (cmd, "sfdisk") == 0)
3418     return run_sfdisk (cmd, argc, argv);
3419   else
3420   if (strcasecmp (cmd, "write_file") == 0 || strcasecmp (cmd, "write-file") == 0)
3421     return run_write_file (cmd, argc, argv);
3422   else
3423   if (strcasecmp (cmd, "umount") == 0 || strcasecmp (cmd, "unmount") == 0)
3424     return run_umount (cmd, argc, argv);
3425   else
3426   if (strcasecmp (cmd, "mounts") == 0)
3427     return run_mounts (cmd, argc, argv);
3428   else
3429   if (strcasecmp (cmd, "umount_all") == 0 || strcasecmp (cmd, "umount-all") == 0 || strcasecmp (cmd, "unmount-all") == 0)
3430     return run_umount_all (cmd, argc, argv);
3431   else
3432   if (strcasecmp (cmd, "lvm_remove_all") == 0 || strcasecmp (cmd, "lvm-remove-all") == 0)
3433     return run_lvm_remove_all (cmd, argc, argv);
3434   else
3435   if (strcasecmp (cmd, "file") == 0)
3436     return run_file (cmd, argc, argv);
3437   else
3438   if (strcasecmp (cmd, "command") == 0)
3439     return run_command (cmd, argc, argv);
3440   else
3441   if (strcasecmp (cmd, "command_lines") == 0 || strcasecmp (cmd, "command-lines") == 0)
3442     return run_command_lines (cmd, argc, argv);
3443   else
3444   if (strcasecmp (cmd, "stat") == 0)
3445     return run_stat (cmd, argc, argv);
3446   else
3447   if (strcasecmp (cmd, "lstat") == 0)
3448     return run_lstat (cmd, argc, argv);
3449   else
3450   if (strcasecmp (cmd, "statvfs") == 0)
3451     return run_statvfs (cmd, argc, argv);
3452   else
3453   if (strcasecmp (cmd, "tune2fs_l") == 0 || strcasecmp (cmd, "tune2fs-l") == 0)
3454     return run_tune2fs_l (cmd, argc, argv);
3455   else
3456   if (strcasecmp (cmd, "blockdev_setro") == 0 || strcasecmp (cmd, "blockdev-setro") == 0)
3457     return run_blockdev_setro (cmd, argc, argv);
3458   else
3459   if (strcasecmp (cmd, "blockdev_setrw") == 0 || strcasecmp (cmd, "blockdev-setrw") == 0)
3460     return run_blockdev_setrw (cmd, argc, argv);
3461   else
3462   if (strcasecmp (cmd, "blockdev_getro") == 0 || strcasecmp (cmd, "blockdev-getro") == 0)
3463     return run_blockdev_getro (cmd, argc, argv);
3464   else
3465   if (strcasecmp (cmd, "blockdev_getss") == 0 || strcasecmp (cmd, "blockdev-getss") == 0)
3466     return run_blockdev_getss (cmd, argc, argv);
3467   else
3468   if (strcasecmp (cmd, "blockdev_getbsz") == 0 || strcasecmp (cmd, "blockdev-getbsz") == 0)
3469     return run_blockdev_getbsz (cmd, argc, argv);
3470   else
3471   if (strcasecmp (cmd, "blockdev_setbsz") == 0 || strcasecmp (cmd, "blockdev-setbsz") == 0)
3472     return run_blockdev_setbsz (cmd, argc, argv);
3473   else
3474   if (strcasecmp (cmd, "blockdev_getsz") == 0 || strcasecmp (cmd, "blockdev-getsz") == 0)
3475     return run_blockdev_getsz (cmd, argc, argv);
3476   else
3477   if (strcasecmp (cmd, "blockdev_getsize64") == 0 || strcasecmp (cmd, "blockdev-getsize64") == 0)
3478     return run_blockdev_getsize64 (cmd, argc, argv);
3479   else
3480   if (strcasecmp (cmd, "blockdev_flushbufs") == 0 || strcasecmp (cmd, "blockdev-flushbufs") == 0)
3481     return run_blockdev_flushbufs (cmd, argc, argv);
3482   else
3483   if (strcasecmp (cmd, "blockdev_rereadpt") == 0 || strcasecmp (cmd, "blockdev-rereadpt") == 0)
3484     return run_blockdev_rereadpt (cmd, argc, argv);
3485   else
3486   if (strcasecmp (cmd, "upload") == 0)
3487     return run_upload (cmd, argc, argv);
3488   else
3489   if (strcasecmp (cmd, "download") == 0)
3490     return run_download (cmd, argc, argv);
3491   else
3492   if (strcasecmp (cmd, "checksum") == 0)
3493     return run_checksum (cmd, argc, argv);
3494   else
3495   if (strcasecmp (cmd, "tar_in") == 0 || strcasecmp (cmd, "tar-in") == 0)
3496     return run_tar_in (cmd, argc, argv);
3497   else
3498   if (strcasecmp (cmd, "tar_out") == 0 || strcasecmp (cmd, "tar-out") == 0)
3499     return run_tar_out (cmd, argc, argv);
3500   else
3501   if (strcasecmp (cmd, "tgz_in") == 0 || strcasecmp (cmd, "tgz-in") == 0)
3502     return run_tgz_in (cmd, argc, argv);
3503   else
3504   if (strcasecmp (cmd, "tgz_out") == 0 || strcasecmp (cmd, "tgz-out") == 0)
3505     return run_tgz_out (cmd, argc, argv);
3506   else
3507   if (strcasecmp (cmd, "mount_ro") == 0 || strcasecmp (cmd, "mount-ro") == 0)
3508     return run_mount_ro (cmd, argc, argv);
3509   else
3510   if (strcasecmp (cmd, "mount_options") == 0 || strcasecmp (cmd, "mount-options") == 0)
3511     return run_mount_options (cmd, argc, argv);
3512   else
3513   if (strcasecmp (cmd, "mount_vfs") == 0 || strcasecmp (cmd, "mount-vfs") == 0)
3514     return run_mount_vfs (cmd, argc, argv);
3515   else
3516   if (strcasecmp (cmd, "debug") == 0)
3517     return run_debug (cmd, argc, argv);
3518   else
3519   if (strcasecmp (cmd, "lvremove") == 0)
3520     return run_lvremove (cmd, argc, argv);
3521   else
3522   if (strcasecmp (cmd, "vgremove") == 0)
3523     return run_vgremove (cmd, argc, argv);
3524   else
3525   if (strcasecmp (cmd, "pvremove") == 0)
3526     return run_pvremove (cmd, argc, argv);
3527   else
3528   if (strcasecmp (cmd, "set_e2label") == 0 || strcasecmp (cmd, "set-e2label") == 0)
3529     return run_set_e2label (cmd, argc, argv);
3530   else
3531   if (strcasecmp (cmd, "get_e2label") == 0 || strcasecmp (cmd, "get-e2label") == 0)
3532     return run_get_e2label (cmd, argc, argv);
3533   else
3534   if (strcasecmp (cmd, "set_e2uuid") == 0 || strcasecmp (cmd, "set-e2uuid") == 0)
3535     return run_set_e2uuid (cmd, argc, argv);
3536   else
3537   if (strcasecmp (cmd, "get_e2uuid") == 0 || strcasecmp (cmd, "get-e2uuid") == 0)
3538     return run_get_e2uuid (cmd, argc, argv);
3539   else
3540   if (strcasecmp (cmd, "fsck") == 0)
3541     return run_fsck (cmd, argc, argv);
3542   else
3543   if (strcasecmp (cmd, "zero") == 0)
3544     return run_zero (cmd, argc, argv);
3545   else
3546   if (strcasecmp (cmd, "grub_install") == 0 || strcasecmp (cmd, "grub-install") == 0)
3547     return run_grub_install (cmd, argc, argv);
3548   else
3549   if (strcasecmp (cmd, "cp") == 0)
3550     return run_cp (cmd, argc, argv);
3551   else
3552   if (strcasecmp (cmd, "cp_a") == 0 || strcasecmp (cmd, "cp-a") == 0)
3553     return run_cp_a (cmd, argc, argv);
3554   else
3555   if (strcasecmp (cmd, "mv") == 0)
3556     return run_mv (cmd, argc, argv);
3557   else
3558   if (strcasecmp (cmd, "drop_caches") == 0 || strcasecmp (cmd, "drop-caches") == 0)
3559     return run_drop_caches (cmd, argc, argv);
3560   else
3561   if (strcasecmp (cmd, "dmesg") == 0)
3562     return run_dmesg (cmd, argc, argv);
3563   else
3564   if (strcasecmp (cmd, "ping_daemon") == 0 || strcasecmp (cmd, "ping-daemon") == 0)
3565     return run_ping_daemon (cmd, argc, argv);
3566   else
3567   if (strcasecmp (cmd, "equal") == 0)
3568     return run_equal (cmd, argc, argv);
3569   else
3570   if (strcasecmp (cmd, "strings") == 0)
3571     return run_strings (cmd, argc, argv);
3572   else
3573   if (strcasecmp (cmd, "strings_e") == 0 || strcasecmp (cmd, "strings-e") == 0)
3574     return run_strings_e (cmd, argc, argv);
3575   else
3576   if (strcasecmp (cmd, "hexdump") == 0)
3577     return run_hexdump (cmd, argc, argv);
3578   else
3579   if (strcasecmp (cmd, "zerofree") == 0)
3580     return run_zerofree (cmd, argc, argv);
3581   else
3582   if (strcasecmp (cmd, "pvresize") == 0)
3583     return run_pvresize (cmd, argc, argv);
3584   else
3585   if (strcasecmp (cmd, "sfdisk_N") == 0 || strcasecmp (cmd, "sfdisk-N") == 0)
3586     return run_sfdisk_N (cmd, argc, argv);
3587   else
3588   if (strcasecmp (cmd, "sfdisk_l") == 0 || strcasecmp (cmd, "sfdisk-l") == 0)
3589     return run_sfdisk_l (cmd, argc, argv);
3590   else
3591   if (strcasecmp (cmd, "sfdisk_kernel_geometry") == 0 || strcasecmp (cmd, "sfdisk-kernel-geometry") == 0)
3592     return run_sfdisk_kernel_geometry (cmd, argc, argv);
3593   else
3594   if (strcasecmp (cmd, "sfdisk_disk_geometry") == 0 || strcasecmp (cmd, "sfdisk-disk-geometry") == 0)
3595     return run_sfdisk_disk_geometry (cmd, argc, argv);
3596   else
3597   if (strcasecmp (cmd, "vg_activate_all") == 0 || strcasecmp (cmd, "vg-activate-all") == 0)
3598     return run_vg_activate_all (cmd, argc, argv);
3599   else
3600   if (strcasecmp (cmd, "vg_activate") == 0 || strcasecmp (cmd, "vg-activate") == 0)
3601     return run_vg_activate (cmd, argc, argv);
3602   else
3603   if (strcasecmp (cmd, "lvresize") == 0)
3604     return run_lvresize (cmd, argc, argv);
3605   else
3606   if (strcasecmp (cmd, "resize2fs") == 0)
3607     return run_resize2fs (cmd, argc, argv);
3608   else
3609   if (strcasecmp (cmd, "find") == 0)
3610     return run_find (cmd, argc, argv);
3611   else
3612   if (strcasecmp (cmd, "e2fsck_f") == 0 || strcasecmp (cmd, "e2fsck-f") == 0)
3613     return run_e2fsck_f (cmd, argc, argv);
3614   else
3615   if (strcasecmp (cmd, "sleep") == 0)
3616     return run_sleep (cmd, argc, argv);
3617   else
3618   if (strcasecmp (cmd, "ntfs_3g_probe") == 0 || strcasecmp (cmd, "ntfs-3g-probe") == 0)
3619     return run_ntfs_3g_probe (cmd, argc, argv);
3620   else
3621   if (strcasecmp (cmd, "sh") == 0)
3622     return run_sh (cmd, argc, argv);
3623   else
3624   if (strcasecmp (cmd, "sh_lines") == 0 || strcasecmp (cmd, "sh-lines") == 0)
3625     return run_sh_lines (cmd, argc, argv);
3626   else
3627   if (strcasecmp (cmd, "glob_expand") == 0 || strcasecmp (cmd, "glob-expand") == 0)
3628     return run_glob_expand (cmd, argc, argv);
3629   else
3630   if (strcasecmp (cmd, "scrub_device") == 0 || strcasecmp (cmd, "scrub-device") == 0)
3631     return run_scrub_device (cmd, argc, argv);
3632   else
3633   if (strcasecmp (cmd, "scrub_file") == 0 || strcasecmp (cmd, "scrub-file") == 0)
3634     return run_scrub_file (cmd, argc, argv);
3635   else
3636   if (strcasecmp (cmd, "scrub_freespace") == 0 || strcasecmp (cmd, "scrub-freespace") == 0)
3637     return run_scrub_freespace (cmd, argc, argv);
3638   else
3639   if (strcasecmp (cmd, "mkdtemp") == 0)
3640     return run_mkdtemp (cmd, argc, argv);
3641   else
3642   if (strcasecmp (cmd, "wc_l") == 0 || strcasecmp (cmd, "wc-l") == 0)
3643     return run_wc_l (cmd, argc, argv);
3644   else
3645   if (strcasecmp (cmd, "wc_w") == 0 || strcasecmp (cmd, "wc-w") == 0)
3646     return run_wc_w (cmd, argc, argv);
3647   else
3648   if (strcasecmp (cmd, "wc_c") == 0 || strcasecmp (cmd, "wc-c") == 0)
3649     return run_wc_c (cmd, argc, argv);
3650   else
3651   if (strcasecmp (cmd, "head") == 0)
3652     return run_head (cmd, argc, argv);
3653   else
3654   if (strcasecmp (cmd, "head_n") == 0 || strcasecmp (cmd, "head-n") == 0)
3655     return run_head_n (cmd, argc, argv);
3656   else
3657   if (strcasecmp (cmd, "tail") == 0)
3658     return run_tail (cmd, argc, argv);
3659   else
3660   if (strcasecmp (cmd, "tail_n") == 0 || strcasecmp (cmd, "tail-n") == 0)
3661     return run_tail_n (cmd, argc, argv);
3662   else
3663   if (strcasecmp (cmd, "df") == 0)
3664     return run_df (cmd, argc, argv);
3665   else
3666   if (strcasecmp (cmd, "df_h") == 0 || strcasecmp (cmd, "df-h") == 0)
3667     return run_df_h (cmd, argc, argv);
3668   else
3669   if (strcasecmp (cmd, "du") == 0)
3670     return run_du (cmd, argc, argv);
3671   else
3672   if (strcasecmp (cmd, "initrd_list") == 0 || strcasecmp (cmd, "initrd-list") == 0)
3673     return run_initrd_list (cmd, argc, argv);
3674   else
3675   if (strcasecmp (cmd, "mount_loop") == 0 || strcasecmp (cmd, "mount-loop") == 0)
3676     return run_mount_loop (cmd, argc, argv);
3677   else
3678   if (strcasecmp (cmd, "mkswap") == 0)
3679     return run_mkswap (cmd, argc, argv);
3680   else
3681   if (strcasecmp (cmd, "mkswap_L") == 0 || strcasecmp (cmd, "mkswap-L") == 0)
3682     return run_mkswap_L (cmd, argc, argv);
3683   else
3684   if (strcasecmp (cmd, "mkswap_U") == 0 || strcasecmp (cmd, "mkswap-U") == 0)
3685     return run_mkswap_U (cmd, argc, argv);
3686   else
3687     {
3688       fprintf (stderr, "%s: unknown command\n", cmd);
3689       return -1;
3690     }
3691   return 0;
3692 }
3693