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