Generated code for 'glob-expand'.
[libguestfs.git] / guestfs-actions.pod
index 89aa968..d35d1aa 100644 (file)
@@ -7,6 +7,11 @@ This function adds a virtual CD-ROM disk image to the guest.
 
 This is equivalent to the qemu parameter C<-cdrom filename>.
 
+Note that this call checks for the existence of C<filename>.  This
+stops you from specifying other types of drive which are supported
+by qemu such as C<nbd:> and C<http:> URLs.  To specify those, use
+the general C<guestfs_config> call instead.
+
 This function returns 0 on success or -1 on error.
 
 =head2 guestfs_add_drive
@@ -27,6 +32,35 @@ image).
 
 This is equivalent to the qemu parameter C<-drive file=filename>.
 
+Note that this call checks for the existence of C<filename>.  This
+stops you from specifying other types of drive which are supported
+by qemu such as C<nbd:> and C<http:> URLs.  To specify those, use
+the general C<guestfs_config> call instead.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_add_drive_ro
+
+ int guestfs_add_drive_ro (guestfs_h *handle,
+               const char *filename);
+
+This adds a drive in snapshot mode, making it effectively
+read-only.
+
+Note that writes to the device are allowed, and will be seen for
+the duration of the guestfs handle, but they are written
+to a temporary file which is discarded as soon as the guestfs
+handle is closed.  We don't currently have any method to enable
+changes to be committed, although qemu can support this.
+
+This is equivalent to the qemu parameter
+C<-drive file=filename,snapshot=on>.
+
+Note that this call checks for the existence of C<filename>.  This
+stops you from specifying other types of drive which are supported
+by qemu such as C<nbd:> and C<http:> URLs.  To specify those, use
+the general C<guestfs_config> call instead.
+
 This function returns 0 on success or -1 on error.
 
 =head2 guestfs_aug_close
@@ -58,8 +92,9 @@ On success this returns a pair containing the
 number of nodes in the nodeset, and a boolean flag
 if a node was created.
 
-This function returns a C<struct guestfs_int_bool *>.
-I<The caller must call C<guestfs_free_int_bool> after use.>.
+This function returns a C<struct guestfs_int_bool *>,
+or NULL if there was an error.
+I<The caller must call C<guestfs_free_int_bool> after use>.
 
 =head2 guestfs_aug_defvar
 
@@ -84,7 +119,7 @@ On error this function returns -1.
 Look up the value associated with C<path>.  If C<path>
 matches exactly one node, the C<value> is returned.
 
-This function returns a string or NULL on error.
+This function returns a string, or NULL on error.
 I<The caller must free the returned string after use>.
 
 =head2 guestfs_aug_init
@@ -176,7 +211,7 @@ This function returns 0 on success or -1 on error.
                const char *path);
 
 This is just a shortcut for listing C<guestfs_aug_match>
-C<path/*> and sorting the files into alphabetical order.
+C<path/*> and sorting the resulting nodes into alphabetical order.
 
 This function returns a NULL-terminated array of strings
 (like L<environ(3)>), or NULL if there was an error.
@@ -238,335 +273,1738 @@ Set the value associated with C<path> to C<value>.
 
 This function returns 0 on success or -1 on error.
 
-=head2 guestfs_cat
+=head2 guestfs_blockdev_flushbufs
 
char *guestfs_cat (guestfs_h *handle,
-               const char *path);
int guestfs_blockdev_flushbufs (guestfs_h *handle,
+               const char *device);
 
-Return the contents of the file named C<path>.
+This tells the kernel to flush internal buffers associated
+with C<device>.
 
-Note that this function cannot correctly handle binary files
-(specifically, files containing C<\0> character which is treated
-as end of string).  For those you need to use the C<guestfs_read_file>
-function which has a more complex interface.
+This uses the L<blockdev(8)> command.
 
-This function returns a string or NULL on error.
-I<The caller must free the returned string after use>.
+This function returns 0 on success or -1 on error.
 
-Because of the message protocol, there is a transfer limit 
-of somewhere between 2MB and 4MB.  To transfer large files you should use
-FTP.
+=head2 guestfs_blockdev_getbsz
 
-=head2 guestfs_config
+ int guestfs_blockdev_getbsz (guestfs_h *handle,
+               const char *device);
 
- int guestfs_config (guestfs_h *handle,
-               const char *qemuparam,
-               const char *qemuvalue);
+This returns the block size of a device.
 
-This can be used to add arbitrary qemu command line parameters
-of the form C<-param value>.  Actually it's not quite arbitrary - we
-prevent you from setting some parameters which would interfere with
-parameters that we use.
+(Note this is different from both I<size in blocks> and
+I<filesystem block size>).
 
-The first character of C<param> string must be a C<-> (dash).
+This uses the L<blockdev(8)> command.
 
-C<value> can be NULL.
+On error this function returns -1.
 
-This function returns 0 on success or -1 on error.
+=head2 guestfs_blockdev_getro
 
-=head2 guestfs_get_autosync
+ int guestfs_blockdev_getro (guestfs_h *handle,
+               const char *device);
 
- int guestfs_get_autosync (guestfs_h *handle);
+Returns a boolean indicating if the block device is read-only
+(true if read-only, false if not).
 
-Get the autosync flag.
+This uses the L<blockdev(8)> command.
 
 This function returns a C truth value on success or -1 on error.
 
-=head2 guestfs_get_path
+=head2 guestfs_blockdev_getsize64
 
- const char *guestfs_get_path (guestfs_h *handle);
+ int64_t guestfs_blockdev_getsize64 (guestfs_h *handle,
+               const char *device);
 
-Return the current search path.
+This returns the size of the device in bytes.
 
-This is always non-NULL.  If it wasn't set already, then this will
-return the default path.
+See also C<guestfs_blockdev_getsz>.
 
-This function returns a string or NULL on error.
-The string is owned by the guest handle and must I<not> be freed.
+This uses the L<blockdev(8)> command.
 
-=head2 guestfs_get_verbose
+On error this function returns -1.
 
- int guestfs_get_verbose (guestfs_h *handle);
+=head2 guestfs_blockdev_getss
 
-This returns the verbose messages flag.
+ int guestfs_blockdev_getss (guestfs_h *handle,
+               const char *device);
 
-This function returns a C truth value on success or -1 on error.
+This returns the size of sectors on a block device.
+Usually 512, but can be larger for modern devices.
 
-=head2 guestfs_kill_subprocess
+(Note, this is not the size in sectors, use C<guestfs_blockdev_getsz>
+for that).
 
- int guestfs_kill_subprocess (guestfs_h *handle);
+This uses the L<blockdev(8)> command.
 
-This kills the qemu subprocess.  You should never need to call this.
+On error this function returns -1.
 
-This function returns 0 on success or -1 on error.
+=head2 guestfs_blockdev_getsz
 
-=head2 guestfs_launch
+ int64_t guestfs_blockdev_getsz (guestfs_h *handle,
+               const char *device);
 
- int guestfs_launch (guestfs_h *handle);
+This returns the size of the device in units of 512-byte sectors
+(even if the sectorsize isn't 512 bytes ... weird).
 
-Internally libguestfs is implemented by running a virtual machine
-using L<qemu(1)>.
+See also C<guestfs_blockdev_getss> for the real sector size of
+the device, and C<guestfs_blockdev_getsize64> for the more
+useful I<size in bytes>.
 
-You should call this after configuring the handle
-(eg. adding drives) but before performing any actions.
+This uses the L<blockdev(8)> command.
+
+On error this function returns -1.
+
+=head2 guestfs_blockdev_rereadpt
+
+ int guestfs_blockdev_rereadpt (guestfs_h *handle,
+               const char *device);
+
+Reread the partition table on C<device>.
+
+This uses the L<blockdev(8)> command.
 
 This function returns 0 on success or -1 on error.
 
-=head2 guestfs_list_devices
+=head2 guestfs_blockdev_setbsz
 
- char **guestfs_list_devices (guestfs_h *handle);
+ int guestfs_blockdev_setbsz (guestfs_h *handle,
+               const char *device,
+               int blocksize);
 
-List all the block devices.
+This sets the block size of a device.
 
-The full block device names are returned, eg. C</dev/sda>
+(Note this is different from both I<size in blocks> and
+I<filesystem block size>).
 
-This function returns a NULL-terminated array of strings
-(like L<environ(3)>), or NULL if there was an error.
-I<The caller must free the strings and the array after use>.
+This uses the L<blockdev(8)> command.
 
-=head2 guestfs_list_partitions
+This function returns 0 on success or -1 on error.
 
- char **guestfs_list_partitions (guestfs_h *handle);
+=head2 guestfs_blockdev_setro
 
-List all the partitions detected on all block devices.
+ int guestfs_blockdev_setro (guestfs_h *handle,
+               const char *device);
 
-The full partition device names are returned, eg. C</dev/sda1>
+Sets the block device named C<device> to read-only.
 
-This does not return logical volumes.  For that you will need to
-call C<guestfs_lvs>.
+This uses the L<blockdev(8)> command.
 
-This function returns a NULL-terminated array of strings
-(like L<environ(3)>), or NULL if there was an error.
-I<The caller must free the strings and the array after use>.
+This function returns 0 on success or -1 on error.
 
-=head2 guestfs_ll
+=head2 guestfs_blockdev_setrw
 
char *guestfs_ll (guestfs_h *handle,
-               const char *directory);
int guestfs_blockdev_setrw (guestfs_h *handle,
+               const char *device);
 
-List the files in C<directory> (relative to the root directory,
-there is no cwd) in the format of 'ls -la'.
+Sets the block device named C<device> to read-write.
 
-This command is mostly useful for interactive sessions.  It
-is I<not> intended that you try to parse the output string.
+This uses the L<blockdev(8)> command.
 
-This function returns a string or NULL on error.
-I<The caller must free the returned string after use>.
+This function returns 0 on success or -1 on error.
 
-=head2 guestfs_ls
+=head2 guestfs_cat
 
- char **guestfs_ls (guestfs_h *handle,
-               const char *directory);
+ char *guestfs_cat (guestfs_h *handle,
+               const char *path);
 
-List the files in C<directory> (relative to the root directory,
-there is no cwd).  The '.' and '..' entries are not returned, but
-hidden files are shown.
+Return the contents of the file named C<path>.
 
-This command is mostly useful for interactive sessions.  Programs
-should probably use C<guestfs_readdir> instead.
+Note that this function cannot correctly handle binary files
+(specifically, files containing C<\0> character which is treated
+as end of string).  For those you need to use the C<guestfs_download>
+function which has a more complex interface.
 
-This function returns a NULL-terminated array of strings
-(like L<environ(3)>), or NULL if there was an error.
-I<The caller must free the strings and the array after use>.
+This function returns a string, or NULL on error.
+I<The caller must free the returned string after use>.
 
-=head2 guestfs_lvs
+Because of the message protocol, there is a transfer limit 
+of somewhere between 2MB and 4MB.  To transfer large files you should use
+FTP.
 
- char **guestfs_lvs (guestfs_h *handle);
+=head2 guestfs_checksum
 
-List all the logical volumes detected.  This is the equivalent
-of the L<lvs(8)> command.
+ char *guestfs_checksum (guestfs_h *handle,
+               const char *csumtype,
+               const char *path);
 
-This returns a list of the logical volume device names
-(eg. C</dev/VolGroup00/LogVol00>).
+This call computes the MD5, SHAx or CRC checksum of the
+file named C<path>.
 
-See also C<guestfs_lvs_full>.
+The type of checksum to compute is given by the C<csumtype>
+parameter which must have one of the following values:
 
-This function returns a NULL-terminated array of strings
-(like L<environ(3)>), or NULL if there was an error.
-I<The caller must free the strings and the array after use>.
+=over 4
 
-=head2 guestfs_lvs_full
+=item C<crc>
 
- struct guestfs_lvm_lv_list *guestfs_lvs_full (guestfs_h *handle);
+Compute the cyclic redundancy check (CRC) specified by POSIX
+for the C<cksum> command.
 
-List all the logical volumes detected.  This is the equivalent
-of the L<lvs(8)> command.  The "full" version includes all fields.
+=item C<md5>
 
-This function returns a C<struct guestfs_lvm_lv_list *>.
-I<The caller must call C<guestfs_free_lvm_lv_list> after use.>.
+Compute the MD5 hash (using the C<md5sum> program).
 
-=head2 guestfs_mount
+=item C<sha1>
 
- int guestfs_mount (guestfs_h *handle,
-               const char *device,
-               const char *mountpoint);
+Compute the SHA1 hash (using the C<sha1sum> program).
 
-Mount a guest disk at a position in the filesystem.  Block devices
-are named C</dev/sda>, C</dev/sdb> and so on, as they were added to
-the guest.  If those block devices contain partitions, they will have
-the usual names (eg. C</dev/sda1>).  Also LVM C</dev/VG/LV>-style
-names can be used.
+=item C<sha224>
 
-The rules are the same as for L<mount(2)>:  A filesystem must
-first be mounted on C</> before others can be mounted.  Other
-filesystems can only be mounted on directories which already
-exist.
+Compute the SHA224 hash (using the C<sha224sum> program).
 
-The mounted filesystem is writable, if we have sufficient permissions
-on the underlying device.
+=item C<sha256>
 
-The filesystem options C<sync> and C<noatime> are set with this
-call, in order to improve reliability.
+Compute the SHA256 hash (using the C<sha256sum> program).
 
-This function returns 0 on success or -1 on error.
+=item C<sha384>
 
-=head2 guestfs_pvs
+Compute the SHA384 hash (using the C<sha384sum> program).
 
- char **guestfs_pvs (guestfs_h *handle);
+=item C<sha512>
 
-List all the physical volumes detected.  This is the equivalent
-of the L<pvs(8)> command.
+Compute the SHA512 hash (using the C<sha512sum> program).
 
-This returns a list of just the device names that contain
-PVs (eg. C</dev/sda2>).
+=back
 
-See also C<guestfs_pvs_full>.
+The checksum is returned as a printable string.
 
-This function returns a NULL-terminated array of strings
-(like L<environ(3)>), or NULL if there was an error.
-I<The caller must free the strings and the array after use>.
+This function returns a string, or NULL on error.
+I<The caller must free the returned string after use>.
 
-=head2 guestfs_pvs_full
+=head2 guestfs_chmod
 
- struct guestfs_lvm_pv_list *guestfs_pvs_full (guestfs_h *handle);
+ int guestfs_chmod (guestfs_h *handle,
+               int mode,
+               const char *path);
 
-List all the physical volumes detected.  This is the equivalent
-of the L<pvs(8)> command.  The "full" version includes all fields.
+Change the mode (permissions) of C<path> to C<mode>.  Only
+numeric modes are supported.
 
-This function returns a C<struct guestfs_lvm_pv_list *>.
-I<The caller must call C<guestfs_free_lvm_pv_list> after use.>.
+This function returns 0 on success or -1 on error.
 
-=head2 guestfs_read_lines
+=head2 guestfs_chown
 
- char **guestfs_read_lines (guestfs_h *handle,
+ int guestfs_chown (guestfs_h *handle,
+               int owner,
+               int group,
                const char *path);
 
-Return the contents of the file named C<path>.
+Change the file owner to C<owner> and group to C<group>.
 
-The file contents are returned as a list of lines.  Trailing
-C<LF> and C<CRLF> character sequences are I<not> returned.
+Only numeric uid and gid are supported.  If you want to use
+names, you will need to locate and parse the password file
+yourself (Augeas support makes this relatively easy).
 
-Note that this function cannot correctly handle binary files
-(specifically, files containing C<\0> character which is treated
-as end of line).  For those you need to use the C<guestfs_read_file>
-function which has a more complex interface.
+This function returns 0 on success or -1 on error.
 
-This function returns a NULL-terminated array of strings
-(like L<environ(3)>), or NULL if there was an error.
-I<The caller must free the strings and the array after use>.
+=head2 guestfs_command
 
-=head2 guestfs_set_autosync
+ char *guestfs_command (guestfs_h *handle,
+               char * const* const arguments);
 
- int guestfs_set_autosync (guestfs_h *handle,
-               int autosync);
+This call runs a command from the guest filesystem.  The
+filesystem must be mounted, and must contain a compatible
+operating system (ie. something Linux, with the same
+or compatible processor architecture).
 
-If C<autosync> is true, this enables autosync.  Libguestfs will make a
-best effort attempt to run C<guestfs_sync> when the handle is closed
-(also if the program exits without closing handles).
+The single parameter is an argv-style list of arguments.
+The first element is the name of the program to run.
+Subsequent elements are parameters.  The list must be
+non-empty (ie. must contain a program name).  Note that
+the command runs directly, and is I<not> invoked via
+the shell (see C<guestfs_sh>).
 
-This function returns 0 on success or -1 on error.
+The return value is anything printed to I<stdout> by
+the command.
 
-=head2 guestfs_set_path
+If the command returns a non-zero exit status, then
+this function returns an error message.  The error message
+string is the content of I<stderr> from the command.
 
- int guestfs_set_path (guestfs_h *handle,
-               const char *path);
+The C<$PATH> environment variable will contain at least
+C</usr/bin> and C</bin>.  If you require a program from
+another location, you should provide the full path in the
+first parameter.
 
-Set the path that libguestfs searches for kernel and initrd.img.
+Shared libraries and data files required by the program
+must be available on filesystems which are mounted in the
+correct places.  It is the caller's responsibility to ensure
+all filesystems that are needed are mounted at the right
+locations.
 
-The default is C<$libdir/guestfs> unless overridden by setting
-C<LIBGUESTFS_PATH> environment variable.
+This function returns a string, or NULL on error.
+I<The caller must free the returned string after use>.
 
-The string C<path> is stashed in the libguestfs handle, so the caller
-must make sure it remains valid for the lifetime of the handle.
+Because of the message protocol, there is a transfer limit 
+of somewhere between 2MB and 4MB.  To transfer large files you should use
+FTP.
 
-Setting C<path> to C<NULL> restores the default path.
+=head2 guestfs_command_lines
 
-This function returns 0 on success or -1 on error.
+ char **guestfs_command_lines (guestfs_h *handle,
+               char * const* const arguments);
 
-=head2 guestfs_set_verbose
+This is the same as C<guestfs_command>, but splits the
+result into a list of lines.
 
- int guestfs_set_verbose (guestfs_h *handle,
-               int verbose);
+See also: C<guestfs_sh_lines>
 
-If C<verbose> is true, this turns on verbose messages (to C<stderr>).
+This function returns a NULL-terminated array of strings
+(like L<environ(3)>), or NULL if there was an error.
+I<The caller must free the strings and the array after use>.
 
-Verbose messages are disabled unless the environment variable
-C<LIBGUESTFS_DEBUG> is defined and set to C<1>.
+Because of the message protocol, there is a transfer limit 
+of somewhere between 2MB and 4MB.  To transfer large files you should use
+FTP.
 
-This function returns 0 on success or -1 on error.
+=head2 guestfs_config
 
-=head2 guestfs_sync
+ int guestfs_config (guestfs_h *handle,
+               const char *qemuparam,
+               const char *qemuvalue);
 
- int guestfs_sync (guestfs_h *handle);
+This can be used to add arbitrary qemu command line parameters
+of the form C<-param value>.  Actually it's not quite arbitrary - we
+prevent you from setting some parameters which would interfere with
+parameters that we use.
 
-This syncs the disk, so that any writes are flushed through to the
-underlying disk image.
+The first character of C<param> string must be a C<-> (dash).
 
-You should always call this if you have modified a disk image, before
-closing the handle.
+C<value> can be NULL.
 
 This function returns 0 on success or -1 on error.
 
-=head2 guestfs_touch
+=head2 guestfs_cp
 
- int guestfs_touch (guestfs_h *handle,
-               const char *path);
+ int guestfs_cp (guestfs_h *handle,
+               const char *src,
+               const char *dest);
 
-Touch acts like the L<touch(1)> command.  It can be used to
-update the timestamps on a file, or, if the file does not exist,
-to create a new zero-length file.
+This copies a file from C<src> to C<dest> where C<dest> is
+either a destination filename or destination directory.
 
 This function returns 0 on success or -1 on error.
 
-=head2 guestfs_vgs
+=head2 guestfs_cp_a
 
- char **guestfs_vgs (guestfs_h *handle);
+ int guestfs_cp_a (guestfs_h *handle,
+               const char *src,
+               const char *dest);
 
-List all the volumes groups detected.  This is the equivalent
-of the L<vgs(8)> command.
+This copies a file or directory from C<src> to C<dest>
+recursively using the C<cp -a> command.
 
-This returns a list of just the volume group names that were
-detected (eg. C<VolGroup00>).
+This function returns 0 on success or -1 on error.
 
-See also C<guestfs_vgs_full>.
+=head2 guestfs_debug
 
-This function returns a NULL-terminated array of strings
-(like L<environ(3)>), or NULL if there was an error.
-I<The caller must free the strings and the array after use>.
+ char *guestfs_debug (guestfs_h *handle,
+               const char *subcmd,
+               char * const* const extraargs);
 
-=head2 guestfs_vgs_full
+The C<guestfs_debug> command exposes some internals of
+C<guestfsd> (the guestfs daemon) that runs inside the
+qemu subprocess.
 
- struct guestfs_lvm_vg_list *guestfs_vgs_full (guestfs_h *handle);
+There is no comprehensive help for this command.  You have
+to look at the file C<daemon/debug.c> in the libguestfs source
+to find out what you can do.
 
-List all the volumes groups detected.  This is the equivalent
-of the L<vgs(8)> command.  The "full" version includes all fields.
+This function returns a string, or NULL on error.
+I<The caller must free the returned string after use>.
 
-This function returns a C<struct guestfs_lvm_vg_list *>.
-I<The caller must call C<guestfs_free_lvm_vg_list> after use.>.
+=head2 guestfs_dmesg
 
-=head2 guestfs_wait_ready
+ char *guestfs_dmesg (guestfs_h *handle);
 
- int guestfs_wait_ready (guestfs_h *handle);
+This returns the kernel messages (C<dmesg> output) from
+the guest kernel.  This is sometimes useful for extended
+debugging of problems.
+
+Another way to get the same information is to enable
+verbose messages with C<guestfs_set_verbose> or by setting
+the environment variable C<LIBGUESTFS_DEBUG=1> before
+running the program.
+
+This function returns a string, or NULL on error.
+I<The caller must free the returned string after use>.
+
+=head2 guestfs_download
+
+ int guestfs_download (guestfs_h *handle,
+               const char *remotefilename,
+               const char *filename);
+
+Download file C<remotefilename> and save it as C<filename>
+on the local machine.
+
+C<filename> can also be a named pipe.
+
+See also C<guestfs_upload>, C<guestfs_cat>.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_drop_caches
+
+ int guestfs_drop_caches (guestfs_h *handle,
+               int whattodrop);
+
+This instructs the guest kernel to drop its page cache,
+and/or dentries and inode caches.  The parameter C<whattodrop>
+tells the kernel what precisely to drop, see
+L<http://linux-mm.org/Drop_Caches>
+
+Setting C<whattodrop> to 3 should drop everything.
+
+This automatically calls L<sync(2)> before the operation,
+so that the maximum guest memory is freed.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_e2fsck_f
+
+ int guestfs_e2fsck_f (guestfs_h *handle,
+               const char *device);
+
+This runs C<e2fsck -p -f device>, ie. runs the ext2/ext3
+filesystem checker on C<device>, noninteractively (C<-p>),
+even if the filesystem appears to be clean (C<-f>).
+
+This command is only needed because of C<guestfs_resize2fs>
+(q.v.).  Normally you should use C<guestfs_fsck>.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_end_busy
+
+ int guestfs_end_busy (guestfs_h *handle);
+
+This sets the state to C<READY>, or if in C<CONFIG> then it leaves the
+state as is.  This is only used when implementing
+actions using the low-level API.
+
+For more information on states, see L<guestfs(3)>.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_equal
+
+ int guestfs_equal (guestfs_h *handle,
+               const char *file1,
+               const char *file2);
+
+This compares the two files C<file1> and C<file2> and returns
+true if their content is exactly equal, or false otherwise.
+
+The external L<cmp(1)> program is used for the comparison.
+
+This function returns a C truth value on success or -1 on error.
+
+=head2 guestfs_exists
+
+ int guestfs_exists (guestfs_h *handle,
+               const char *path);
+
+This returns C<true> if and only if there is a file, directory
+(or anything) with the given C<path> name.
+
+See also C<guestfs_is_file>, C<guestfs_is_dir>, C<guestfs_stat>.
+
+This function returns a C truth value on success or -1 on error.
+
+=head2 guestfs_file
+
+ char *guestfs_file (guestfs_h *handle,
+               const char *path);
+
+This call uses the standard L<file(1)> command to determine
+the type or contents of the file.  This also works on devices,
+for example to find out whether a partition contains a filesystem.
+
+The exact command which runs is C<file -bsL path>.  Note in
+particular that the filename is not prepended to the output
+(the C<-b> option).
+
+This function returns a string, or NULL on error.
+I<The caller must free the returned string after use>.
+
+=head2 guestfs_find
+
+ char **guestfs_find (guestfs_h *handle,
+               const char *directory);
+
+This command lists out all files and directories, recursively,
+starting at C<directory>.  It is essentially equivalent to
+running the shell command C<find directory -print> but some
+post-processing happens on the output, described below.
+
+This returns a list of strings I<without any prefix>.  Thus
+if the directory structure was:
+
+ /tmp/a
+ /tmp/b
+ /tmp/c/d
+
+then the returned list from C<guestfs_find> C</tmp> would be
+4 elements:
+
+ a
+ b
+ c
+ c/d
+
+If C<directory> is not a directory, then this command returns
+an error.
+
+The returned list is sorted.
+
+This function returns a NULL-terminated array of strings
+(like L<environ(3)>), or NULL if there was an error.
+I<The caller must free the strings and the array after use>.
+
+=head2 guestfs_fsck
+
+ int guestfs_fsck (guestfs_h *handle,
+               const char *fstype,
+               const char *device);
+
+This runs the filesystem checker (fsck) on C<device> which
+should have filesystem type C<fstype>.
+
+The returned integer is the status.  See L<fsck(8)> for the
+list of status codes from C<fsck>.
+
+Notes:
+
+=over 4
+
+=item *
+
+Multiple status codes can be summed together.
+
+=item *
+
+A non-zero return code can mean "success", for example if
+errors have been corrected on the filesystem.
+
+=item *
+
+Checking or repairing NTFS volumes is not supported
+(by linux-ntfs).
+
+=back
+
+This command is entirely equivalent to running C<fsck -a -t fstype device>.
+
+On error this function returns -1.
+
+=head2 guestfs_get_append
+
+ const char *guestfs_get_append (guestfs_h *handle);
+
+Return the additional kernel options which are added to the
+guest kernel command line.
+
+If C<NULL> then no options are added.
+
+This function returns a string, or NULL on error.
+The string is owned by the guest handle and must I<not> be freed.
+
+=head2 guestfs_get_autosync
+
+ int guestfs_get_autosync (guestfs_h *handle);
+
+Get the autosync flag.
+
+This function returns a C truth value on success or -1 on error.
+
+=head2 guestfs_get_e2label
+
+ char *guestfs_get_e2label (guestfs_h *handle,
+               const char *device);
+
+This returns the ext2/3/4 filesystem label of the filesystem on
+C<device>.
+
+This function returns a string, or NULL on error.
+I<The caller must free the returned string after use>.
+
+=head2 guestfs_get_e2uuid
+
+ char *guestfs_get_e2uuid (guestfs_h *handle,
+               const char *device);
+
+This returns the ext2/3/4 filesystem UUID of the filesystem on
+C<device>.
+
+This function returns a string, or NULL on error.
+I<The caller must free the returned string after use>.
+
+=head2 guestfs_get_path
+
+ const char *guestfs_get_path (guestfs_h *handle);
+
+Return the current search path.
+
+This is always non-NULL.  If it wasn't set already, then this will
+return the default path.
+
+This function returns a string, or NULL on error.
+The string is owned by the guest handle and must I<not> be freed.
+
+=head2 guestfs_get_qemu
+
+ const char *guestfs_get_qemu (guestfs_h *handle);
+
+Return the current qemu binary.
+
+This is always non-NULL.  If it wasn't set already, then this will
+return the default qemu binary name.
+
+This function returns a string, or NULL on error.
+The string is owned by the guest handle and must I<not> be freed.
+
+=head2 guestfs_get_state
+
+ int guestfs_get_state (guestfs_h *handle);
+
+This returns the current state as an opaque integer.  This is
+only useful for printing debug and internal error messages.
+
+For more information on states, see L<guestfs(3)>.
+
+On error this function returns -1.
+
+=head2 guestfs_get_verbose
+
+ int guestfs_get_verbose (guestfs_h *handle);
+
+This returns the verbose messages flag.
+
+This function returns a C truth value on success or -1 on error.
+
+=head2 guestfs_glob_expand
+
+ char **guestfs_glob_expand (guestfs_h *handle,
+               const char *pattern);
+
+This command searches for all the pathnames matching
+C<pattern> according to the wildcard expansion rules
+used by the shell.
+
+If no paths match, then this returns an empty list
+(note: not an error).
+
+It is just a wrapper around the C L<glob(3)> function
+with flags C<GLOB_MARK|GLOB_BRACE>.
+See that manual page for more details.
+
+This function returns a NULL-terminated array of strings
+(like L<environ(3)>), or NULL if there was an error.
+I<The caller must free the strings and the array after use>.
+
+=head2 guestfs_grub_install
+
+ int guestfs_grub_install (guestfs_h *handle,
+               const char *root,
+               const char *device);
+
+This command installs GRUB (the Grand Unified Bootloader) on
+C<device>, with the root directory being C<root>.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_hexdump
+
+ char *guestfs_hexdump (guestfs_h *handle,
+               const char *path);
+
+This runs C<hexdump -C> on the given C<path>.  The result is
+the human-readable, canonical hex dump of the file.
+
+This function returns a string, or NULL on error.
+I<The caller must free the returned string after use>.
+
+Because of the message protocol, there is a transfer limit 
+of somewhere between 2MB and 4MB.  To transfer large files you should use
+FTP.
+
+=head2 guestfs_is_busy
+
+ int guestfs_is_busy (guestfs_h *handle);
+
+This returns true iff this handle is busy processing a command
+(in the C<BUSY> state).
+
+For more information on states, see L<guestfs(3)>.
+
+This function returns a C truth value on success or -1 on error.
+
+=head2 guestfs_is_config
+
+ int guestfs_is_config (guestfs_h *handle);
+
+This returns true iff this handle is being configured
+(in the C<CONFIG> state).
+
+For more information on states, see L<guestfs(3)>.
+
+This function returns a C truth value on success or -1 on error.
+
+=head2 guestfs_is_dir
+
+ int guestfs_is_dir (guestfs_h *handle,
+               const char *path);
+
+This returns C<true> if and only if there is a directory
+with the given C<path> name.  Note that it returns false for
+other objects like files.
+
+See also C<guestfs_stat>.
+
+This function returns a C truth value on success or -1 on error.
+
+=head2 guestfs_is_file
+
+ int guestfs_is_file (guestfs_h *handle,
+               const char *path);
+
+This returns C<true> if and only if there is a file
+with the given C<path> name.  Note that it returns false for
+other objects like directories.
+
+See also C<guestfs_stat>.
+
+This function returns a C truth value on success or -1 on error.
+
+=head2 guestfs_is_launching
+
+ int guestfs_is_launching (guestfs_h *handle);
+
+This returns true iff this handle is launching the subprocess
+(in the C<LAUNCHING> state).
+
+For more information on states, see L<guestfs(3)>.
+
+This function returns a C truth value on success or -1 on error.
+
+=head2 guestfs_is_ready
+
+ int guestfs_is_ready (guestfs_h *handle);
+
+This returns true iff this handle is ready to accept commands
+(in the C<READY> state).
+
+For more information on states, see L<guestfs(3)>.
+
+This function returns a C truth value on success or -1 on error.
+
+=head2 guestfs_kill_subprocess
+
+ int guestfs_kill_subprocess (guestfs_h *handle);
+
+This kills the qemu subprocess.  You should never need to call this.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_launch
+
+ int guestfs_launch (guestfs_h *handle);
+
+Internally libguestfs is implemented by running a virtual machine
+using L<qemu(1)>.
+
+You should call this after configuring the handle
+(eg. adding drives) but before performing any actions.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_list_devices
+
+ char **guestfs_list_devices (guestfs_h *handle);
+
+List all the block devices.
+
+The full block device names are returned, eg. C</dev/sda>
+
+This function returns a NULL-terminated array of strings
+(like L<environ(3)>), or NULL if there was an error.
+I<The caller must free the strings and the array after use>.
+
+=head2 guestfs_list_partitions
+
+ char **guestfs_list_partitions (guestfs_h *handle);
+
+List all the partitions detected on all block devices.
+
+The full partition device names are returned, eg. C</dev/sda1>
+
+This does not return logical volumes.  For that you will need to
+call C<guestfs_lvs>.
+
+This function returns a NULL-terminated array of strings
+(like L<environ(3)>), or NULL if there was an error.
+I<The caller must free the strings and the array after use>.
+
+=head2 guestfs_ll
+
+ char *guestfs_ll (guestfs_h *handle,
+               const char *directory);
+
+List the files in C<directory> (relative to the root directory,
+there is no cwd) in the format of 'ls -la'.
+
+This command is mostly useful for interactive sessions.  It
+is I<not> intended that you try to parse the output string.
+
+This function returns a string, or NULL on error.
+I<The caller must free the returned string after use>.
+
+=head2 guestfs_ls
+
+ char **guestfs_ls (guestfs_h *handle,
+               const char *directory);
+
+List the files in C<directory> (relative to the root directory,
+there is no cwd).  The '.' and '..' entries are not returned, but
+hidden files are shown.
+
+This command is mostly useful for interactive sessions.  Programs
+should probably use C<guestfs_readdir> instead.
+
+This function returns a NULL-terminated array of strings
+(like L<environ(3)>), or NULL if there was an error.
+I<The caller must free the strings and the array after use>.
+
+=head2 guestfs_lstat
+
+ struct guestfs_stat *guestfs_lstat (guestfs_h *handle,
+               const char *path);
+
+Returns file information for the given C<path>.
+
+This is the same as C<guestfs_stat> except that if C<path>
+is a symbolic link, then the link is stat-ed, not the file it
+refers to.
+
+This is the same as the C<lstat(2)> system call.
+
+This function returns a C<struct guestfs_stat *>
+(see L<stat(2)> and E<lt>guestfs-structs.hE<gt>),
+or NULL if there was an error.
+I<The caller must call C<free> after use>.
+
+=head2 guestfs_lvcreate
+
+ int guestfs_lvcreate (guestfs_h *handle,
+               const char *logvol,
+               const char *volgroup,
+               int mbytes);
+
+This creates an LVM volume group called C<logvol>
+on the volume group C<volgroup>, with C<size> megabytes.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_lvm_remove_all
+
+ int guestfs_lvm_remove_all (guestfs_h *handle);
+
+This command removes all LVM logical volumes, volume groups
+and physical volumes.
+
+This function returns 0 on success or -1 on error.
+
+B<This command is dangerous.  Without careful use you
+can easily destroy all your data>.
+
+=head2 guestfs_lvremove
+
+ int guestfs_lvremove (guestfs_h *handle,
+               const char *device);
+
+Remove an LVM logical volume C<device>, where C<device> is
+the path to the LV, such as C</dev/VG/LV>.
+
+You can also remove all LVs in a volume group by specifying
+the VG name, C</dev/VG>.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_lvresize
+
+ int guestfs_lvresize (guestfs_h *handle,
+               const char *device,
+               int mbytes);
+
+This resizes (expands or shrinks) an existing LVM logical
+volume to C<mbytes>.  When reducing, data in the reduced part
+is lost.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_lvs
+
+ char **guestfs_lvs (guestfs_h *handle);
+
+List all the logical volumes detected.  This is the equivalent
+of the L<lvs(8)> command.
+
+This returns a list of the logical volume device names
+(eg. C</dev/VolGroup00/LogVol00>).
+
+See also C<guestfs_lvs_full>.
+
+This function returns a NULL-terminated array of strings
+(like L<environ(3)>), or NULL if there was an error.
+I<The caller must free the strings and the array after use>.
+
+=head2 guestfs_lvs_full
+
+ struct guestfs_lvm_lv_list *guestfs_lvs_full (guestfs_h *handle);
+
+List all the logical volumes detected.  This is the equivalent
+of the L<lvs(8)> command.  The "full" version includes all fields.
+
+This function returns a C<struct guestfs_lvm_lv_list *>
+(see E<lt>guestfs-structs.hE<gt>),
+or NULL if there was an error.
+I<The caller must call C<guestfs_free_lvm_lv_list> after use>.
+
+=head2 guestfs_mkdir
+
+ int guestfs_mkdir (guestfs_h *handle,
+               const char *path);
+
+Create a directory named C<path>.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_mkdir_p
+
+ int guestfs_mkdir_p (guestfs_h *handle,
+               const char *path);
+
+Create a directory named C<path>, creating any parent directories
+as necessary.  This is like the C<mkdir -p> shell command.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_mkfs
+
+ int guestfs_mkfs (guestfs_h *handle,
+               const char *fstype,
+               const char *device);
+
+This creates a filesystem on C<device> (usually a partition
+or LVM logical volume).  The filesystem type is C<fstype>, for
+example C<ext3>.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_mount
+
+ int guestfs_mount (guestfs_h *handle,
+               const char *device,
+               const char *mountpoint);
+
+Mount a guest disk at a position in the filesystem.  Block devices
+are named C</dev/sda>, C</dev/sdb> and so on, as they were added to
+the guest.  If those block devices contain partitions, they will have
+the usual names (eg. C</dev/sda1>).  Also LVM C</dev/VG/LV>-style
+names can be used.
+
+The rules are the same as for L<mount(2)>:  A filesystem must
+first be mounted on C</> before others can be mounted.  Other
+filesystems can only be mounted on directories which already
+exist.
+
+The mounted filesystem is writable, if we have sufficient permissions
+on the underlying device.
+
+The filesystem options C<sync> and C<noatime> are set with this
+call, in order to improve reliability.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_mount_options
+
+ int guestfs_mount_options (guestfs_h *handle,
+               const char *options,
+               const char *device,
+               const char *mountpoint);
+
+This is the same as the C<guestfs_mount> command, but it
+allows you to set the mount options as for the
+L<mount(8)> I<-o> flag.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_mount_ro
+
+ int guestfs_mount_ro (guestfs_h *handle,
+               const char *device,
+               const char *mountpoint);
+
+This is the same as the C<guestfs_mount> command, but it
+mounts the filesystem with the read-only (I<-o ro>) flag.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_mount_vfs
+
+ int guestfs_mount_vfs (guestfs_h *handle,
+               const char *options,
+               const char *vfstype,
+               const char *device,
+               const char *mountpoint);
+
+This is the same as the C<guestfs_mount> command, but it
+allows you to set both the mount options and the vfstype
+as for the L<mount(8)> I<-o> and I<-t> flags.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_mounts
+
+ char **guestfs_mounts (guestfs_h *handle);
+
+This returns the list of currently mounted filesystems.  It returns
+the list of devices (eg. C</dev/sda1>, C</dev/VG/LV>).
+
+Some internal mounts are not shown.
+
+This function returns a NULL-terminated array of strings
+(like L<environ(3)>), or NULL if there was an error.
+I<The caller must free the strings and the array after use>.
+
+=head2 guestfs_mv
+
+ int guestfs_mv (guestfs_h *handle,
+               const char *src,
+               const char *dest);
+
+This moves a file from C<src> to C<dest> where C<dest> is
+either a destination filename or destination directory.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_ntfs_3g_probe
+
+ int guestfs_ntfs_3g_probe (guestfs_h *handle,
+               int rw,
+               const char *device);
+
+This command runs the L<ntfs-3g.probe(8)> command which probes
+an NTFS C<device> for mountability.  (Not all NTFS volumes can
+be mounted read-write, and some cannot be mounted at all).
+
+C<rw> is a boolean flag.  Set it to true if you want to test
+if the volume can be mounted read-write.  Set it to false if
+you want to test if the volume can be mounted read-only.
+
+The return value is an integer which C<0> if the operation
+would succeed, or some non-zero value documented in the
+L<ntfs-3g.probe(8)> manual page.
+
+On error this function returns -1.
+
+=head2 guestfs_ping_daemon
+
+ int guestfs_ping_daemon (guestfs_h *handle);
+
+This is a test probe into the guestfs daemon running inside
+the qemu subprocess.  Calling this function checks that the
+daemon responds to the ping message, without affecting the daemon
+or attached block device(s) in any other way.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_pvcreate
+
+ int guestfs_pvcreate (guestfs_h *handle,
+               const char *device);
+
+This creates an LVM physical volume on the named C<device>,
+where C<device> should usually be a partition name such
+as C</dev/sda1>.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_pvremove
+
+ int guestfs_pvremove (guestfs_h *handle,
+               const char *device);
+
+This wipes a physical volume C<device> so that LVM will no longer
+recognise it.
+
+The implementation uses the C<pvremove> command which refuses to
+wipe physical volumes that contain any volume groups, so you have
+to remove those first.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_pvresize
+
+ int guestfs_pvresize (guestfs_h *handle,
+               const char *device);
+
+This resizes (expands or shrinks) an existing LVM physical
+volume to match the new size of the underlying device.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_pvs
+
+ char **guestfs_pvs (guestfs_h *handle);
+
+List all the physical volumes detected.  This is the equivalent
+of the L<pvs(8)> command.
+
+This returns a list of just the device names that contain
+PVs (eg. C</dev/sda2>).
+
+See also C<guestfs_pvs_full>.
+
+This function returns a NULL-terminated array of strings
+(like L<environ(3)>), or NULL if there was an error.
+I<The caller must free the strings and the array after use>.
+
+=head2 guestfs_pvs_full
+
+ struct guestfs_lvm_pv_list *guestfs_pvs_full (guestfs_h *handle);
+
+List all the physical volumes detected.  This is the equivalent
+of the L<pvs(8)> command.  The "full" version includes all fields.
+
+This function returns a C<struct guestfs_lvm_pv_list *>
+(see E<lt>guestfs-structs.hE<gt>),
+or NULL if there was an error.
+I<The caller must call C<guestfs_free_lvm_pv_list> after use>.
+
+=head2 guestfs_read_lines
+
+ char **guestfs_read_lines (guestfs_h *handle,
+               const char *path);
+
+Return the contents of the file named C<path>.
+
+The file contents are returned as a list of lines.  Trailing
+C<LF> and C<CRLF> character sequences are I<not> returned.
+
+Note that this function cannot correctly handle binary files
+(specifically, files containing C<\0> character which is treated
+as end of line).  For those you need to use the C<guestfs_read_file>
+function which has a more complex interface.
+
+This function returns a NULL-terminated array of strings
+(like L<environ(3)>), or NULL if there was an error.
+I<The caller must free the strings and the array after use>.
+
+=head2 guestfs_resize2fs
+
+ int guestfs_resize2fs (guestfs_h *handle,
+               const char *device);
+
+This resizes an ext2 or ext3 filesystem to match the size of
+the underlying device.
+
+I<Note:> It is sometimes required that you run C<guestfs_e2fsck_f>
+on the C<device> before calling this command.  For unknown reasons
+C<resize2fs> sometimes gives an error about this and sometimes not.
+In any case, it is always safe to call C<guestfs_e2fsck_f> before
+calling this function.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_rm
+
+ int guestfs_rm (guestfs_h *handle,
+               const char *path);
+
+Remove the single file C<path>.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_rm_rf
+
+ int guestfs_rm_rf (guestfs_h *handle,
+               const char *path);
+
+Remove the file or directory C<path>, recursively removing the
+contents if its a directory.  This is like the C<rm -rf> shell
+command.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_rmdir
+
+ int guestfs_rmdir (guestfs_h *handle,
+               const char *path);
+
+Remove the single directory C<path>.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_set_append
+
+ int guestfs_set_append (guestfs_h *handle,
+               const char *append);
+
+This function is used to add additional options to the
+guest kernel command line.
+
+The default is C<NULL> unless overridden by setting
+C<LIBGUESTFS_APPEND> environment variable.
+
+Setting C<append> to C<NULL> means I<no> additional options
+are passed (libguestfs always adds a few of its own).
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_set_autosync
+
+ int guestfs_set_autosync (guestfs_h *handle,
+               int autosync);
+
+If C<autosync> is true, this enables autosync.  Libguestfs will make a
+best effort attempt to run C<guestfs_umount_all> followed by
+C<guestfs_sync> when the handle is closed
+(also if the program exits without closing handles).
+
+This is disabled by default (except in guestfish where it is
+enabled by default).
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_set_busy
+
+ int guestfs_set_busy (guestfs_h *handle);
+
+This sets the state to C<BUSY>.  This is only used when implementing
+actions using the low-level API.
+
+For more information on states, see L<guestfs(3)>.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_set_e2label
+
+ int guestfs_set_e2label (guestfs_h *handle,
+               const char *device,
+               const char *label);
+
+This sets the ext2/3/4 filesystem label of the filesystem on
+C<device> to C<label>.  Filesystem labels are limited to
+16 characters.
+
+You can use either C<guestfs_tune2fs_l> or C<guestfs_get_e2label>
+to return the existing label on a filesystem.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_set_e2uuid
+
+ int guestfs_set_e2uuid (guestfs_h *handle,
+               const char *device,
+               const char *uuid);
+
+This sets the ext2/3/4 filesystem UUID of the filesystem on
+C<device> to C<uuid>.  The format of the UUID and alternatives
+such as C<clear>, C<random> and C<time> are described in the
+L<tune2fs(8)> manpage.
+
+You can use either C<guestfs_tune2fs_l> or C<guestfs_get_e2uuid>
+to return the existing UUID of a filesystem.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_set_path
+
+ int guestfs_set_path (guestfs_h *handle,
+               const char *path);
+
+Set the path that libguestfs searches for kernel and initrd.img.
+
+The default is C<$libdir/guestfs> unless overridden by setting
+C<LIBGUESTFS_PATH> environment variable.
+
+Setting C<path> to C<NULL> restores the default path.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_set_qemu
+
+ int guestfs_set_qemu (guestfs_h *handle,
+               const char *qemu);
+
+Set the qemu binary that we will use.
+
+The default is chosen when the library was compiled by the
+configure script.
+
+You can also override this by setting the C<LIBGUESTFS_QEMU>
+environment variable.
+
+Setting C<qemu> to C<NULL> restores the default qemu binary.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_set_ready
+
+ int guestfs_set_ready (guestfs_h *handle);
+
+This sets the state to C<READY>.  This is only used when implementing
+actions using the low-level API.
+
+For more information on states, see L<guestfs(3)>.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_set_verbose
+
+ int guestfs_set_verbose (guestfs_h *handle,
+               int verbose);
+
+If C<verbose> is true, this turns on verbose messages (to C<stderr>).
+
+Verbose messages are disabled unless the environment variable
+C<LIBGUESTFS_DEBUG> is defined and set to C<1>.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_sfdisk
+
+ int guestfs_sfdisk (guestfs_h *handle,
+               const char *device,
+               int cyls,
+               int heads,
+               int sectors,
+               char * const* const lines);
+
+This is a direct interface to the L<sfdisk(8)> program for creating
+partitions on block devices.
+
+C<device> should be a block device, for example C</dev/sda>.
+
+C<cyls>, C<heads> and C<sectors> are the number of cylinders, heads
+and sectors on the device, which are passed directly to sfdisk as
+the I<-C>, I<-H> and I<-S> parameters.  If you pass C<0> for any
+of these, then the corresponding parameter is omitted.  Usually for
+'large' disks, you can just pass C<0> for these, but for small
+(floppy-sized) disks, sfdisk (or rather, the kernel) cannot work
+out the right geometry and you will need to tell it.
+
+C<lines> is a list of lines that we feed to C<sfdisk>.  For more
+information refer to the L<sfdisk(8)> manpage.
+
+To create a single partition occupying the whole disk, you would
+pass C<lines> as a single element list, when the single element being
+the string C<,> (comma).
+
+See also: C<guestfs_sfdisk_l>, C<guestfs_sfdisk_N>
+
+This function returns 0 on success or -1 on error.
+
+B<This command is dangerous.  Without careful use you
+can easily destroy all your data>.
+
+=head2 guestfs_sfdisk_N
+
+ int guestfs_sfdisk_N (guestfs_h *handle,
+               const char *device,
+               int n,
+               int cyls,
+               int heads,
+               int sectors,
+               const char *line);
+
+This runs L<sfdisk(8)> option to modify just the single
+partition C<n> (note: C<n> counts from 1).
+
+For other parameters, see C<guestfs_sfdisk>.  You should usually
+pass C<0> for the cyls/heads/sectors parameters.
+
+This function returns 0 on success or -1 on error.
+
+B<This command is dangerous.  Without careful use you
+can easily destroy all your data>.
+
+=head2 guestfs_sfdisk_disk_geometry
+
+ char *guestfs_sfdisk_disk_geometry (guestfs_h *handle,
+               const char *device);
+
+This displays the disk geometry of C<device> read from the
+partition table.  Especially in the case where the underlying
+block device has been resized, this can be different from the
+kernel's idea of the geometry (see C<guestfs_sfdisk_kernel_geometry>).
+
+The result is in human-readable format, and not designed to
+be parsed.
+
+This function returns a string, or NULL on error.
+I<The caller must free the returned string after use>.
+
+=head2 guestfs_sfdisk_kernel_geometry
+
+ char *guestfs_sfdisk_kernel_geometry (guestfs_h *handle,
+               const char *device);
+
+This displays the kernel's idea of the geometry of C<device>.
+
+The result is in human-readable format, and not designed to
+be parsed.
+
+This function returns a string, or NULL on error.
+I<The caller must free the returned string after use>.
+
+=head2 guestfs_sfdisk_l
+
+ char *guestfs_sfdisk_l (guestfs_h *handle,
+               const char *device);
+
+This displays the partition table on C<device>, in the
+human-readable output of the L<sfdisk(8)> command.  It is
+not intended to be parsed.
+
+This function returns a string, or NULL on error.
+I<The caller must free the returned string after use>.
+
+=head2 guestfs_sh
+
+ char *guestfs_sh (guestfs_h *handle,
+               const char *command);
+
+This call runs a command from the guest filesystem via the
+guest's C</bin/sh>.
+
+This is like C<guestfs_command>, but passes the command to:
+
+ /bin/sh -c "command"
+
+Depending on the guest's shell, this usually results in
+wildcards being expanded, shell expressions being interpolated
+and so on.
+
+All the provisos about C<guestfs_command> apply to this call.
+
+This function returns a string, or NULL on error.
+I<The caller must free the returned string after use>.
+
+=head2 guestfs_sh_lines
+
+ char **guestfs_sh_lines (guestfs_h *handle,
+               const char *command);
+
+This is the same as C<guestfs_sh>, but splits the result
+into a list of lines.
+
+See also: C<guestfs_command_lines>
+
+This function returns a NULL-terminated array of strings
+(like L<environ(3)>), or NULL if there was an error.
+I<The caller must free the strings and the array after use>.
+
+=head2 guestfs_sleep
+
+ int guestfs_sleep (guestfs_h *handle,
+               int secs);
+
+Sleep for C<secs> seconds.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_stat
+
+ struct guestfs_stat *guestfs_stat (guestfs_h *handle,
+               const char *path);
+
+Returns file information for the given C<path>.
+
+This is the same as the C<stat(2)> system call.
+
+This function returns a C<struct guestfs_stat *>
+(see L<stat(2)> and E<lt>guestfs-structs.hE<gt>),
+or NULL if there was an error.
+I<The caller must call C<free> after use>.
+
+=head2 guestfs_statvfs
+
+ struct guestfs_statvfs *guestfs_statvfs (guestfs_h *handle,
+               const char *path);
+
+Returns file system statistics for any mounted file system.
+C<path> should be a file or directory in the mounted file system
+(typically it is the mount point itself, but it doesn't need to be).
+
+This is the same as the C<statvfs(2)> system call.
+
+This function returns a C<struct guestfs_statvfs *>
+(see L<statvfs(2)> and E<lt>guestfs-structs.hE<gt>),
+or NULL if there was an error.
+I<The caller must call C<free> after use>.
+
+=head2 guestfs_strings
+
+ char **guestfs_strings (guestfs_h *handle,
+               const char *path);
+
+This runs the L<strings(1)> command on a file and returns
+the list of printable strings found.
+
+This function returns a NULL-terminated array of strings
+(like L<environ(3)>), or NULL if there was an error.
+I<The caller must free the strings and the array after use>.
+
+Because of the message protocol, there is a transfer limit 
+of somewhere between 2MB and 4MB.  To transfer large files you should use
+FTP.
+
+=head2 guestfs_strings_e
+
+ char **guestfs_strings_e (guestfs_h *handle,
+               const char *encoding,
+               const char *path);
+
+This is like the C<guestfs_strings> command, but allows you to
+specify the encoding.
+
+See the L<strings(1)> manpage for the full list of encodings.
+
+Commonly useful encodings are C<l> (lower case L) which will
+show strings inside Windows/x86 files.
+
+The returned strings are transcoded to UTF-8.
+
+This function returns a NULL-terminated array of strings
+(like L<environ(3)>), or NULL if there was an error.
+I<The caller must free the strings and the array after use>.
+
+Because of the message protocol, there is a transfer limit 
+of somewhere between 2MB and 4MB.  To transfer large files you should use
+FTP.
+
+=head2 guestfs_sync
+
+ int guestfs_sync (guestfs_h *handle);
+
+This syncs the disk, so that any writes are flushed through to the
+underlying disk image.
+
+You should always call this if you have modified a disk image, before
+closing the handle.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_tar_in
+
+ int guestfs_tar_in (guestfs_h *handle,
+               const char *tarfile,
+               const char *directory);
+
+This command uploads and unpacks local file C<tarfile> (an
+I<uncompressed> tar file) into C<directory>.
+
+To upload a compressed tarball, use C<guestfs_tgz_in>.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_tar_out
+
+ int guestfs_tar_out (guestfs_h *handle,
+               const char *directory,
+               const char *tarfile);
+
+This command packs the contents of C<directory> and downloads
+it to local file C<tarfile>.
+
+To download a compressed tarball, use C<guestfs_tgz_out>.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_tgz_in
+
+ int guestfs_tgz_in (guestfs_h *handle,
+               const char *tarball,
+               const char *directory);
+
+This command uploads and unpacks local file C<tarball> (a
+I<gzip compressed> tar file) into C<directory>.
+
+To upload an uncompressed tarball, use C<guestfs_tar_in>.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_tgz_out
+
+ int guestfs_tgz_out (guestfs_h *handle,
+               const char *directory,
+               const char *tarball);
+
+This command packs the contents of C<directory> and downloads
+it to local file C<tarball>.
+
+To download an uncompressed tarball, use C<guestfs_tar_out>.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_touch
+
+ int guestfs_touch (guestfs_h *handle,
+               const char *path);
+
+Touch acts like the L<touch(1)> command.  It can be used to
+update the timestamps on a file, or, if the file does not exist,
+to create a new zero-length file.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_tune2fs_l
+
+ char **guestfs_tune2fs_l (guestfs_h *handle,
+               const char *device);
+
+This returns the contents of the ext2, ext3 or ext4 filesystem
+superblock on C<device>.
+
+It is the same as running C<tune2fs -l device>.  See L<tune2fs(8)>
+manpage for more details.  The list of fields returned isn't
+clearly defined, and depends on both the version of C<tune2fs>
+that libguestfs was built against, and the filesystem itself.
+
+This function returns a NULL-terminated array of
+strings, or NULL if there was an error.
+The array of strings will always have length C<2n+1>, where
+C<n> keys and values alternate, followed by the trailing NULL entry.
+I<The caller must free the strings and the array after use>.
+
+=head2 guestfs_umount
+
+ int guestfs_umount (guestfs_h *handle,
+               const char *pathordevice);
+
+This unmounts the given filesystem.  The filesystem may be
+specified either by its mountpoint (path) or the device which
+contains the filesystem.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_umount_all
+
+ int guestfs_umount_all (guestfs_h *handle);
+
+This unmounts all mounted filesystems.
+
+Some internal mounts are not unmounted by this call.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_upload
+
+ int guestfs_upload (guestfs_h *handle,
+               const char *filename,
+               const char *remotefilename);
+
+Upload local file C<filename> to C<remotefilename> on the
+filesystem.
+
+C<filename> can also be a named pipe.
+
+See also C<guestfs_download>.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_vg_activate
+
+ int guestfs_vg_activate (guestfs_h *handle,
+               int activate,
+               char * const* const volgroups);
+
+This command activates or (if C<activate> is false) deactivates
+all logical volumes in the listed volume groups C<volgroups>.
+If activated, then they are made known to the
+kernel, ie. they appear as C</dev/mapper> devices.  If deactivated,
+then those devices disappear.
+
+This command is the same as running C<vgchange -a y|n volgroups...>
+
+Note that if C<volgroups> is an empty list then B<all> volume groups
+are activated or deactivated.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_vg_activate_all
+
+ int guestfs_vg_activate_all (guestfs_h *handle,
+               int activate);
+
+This command activates or (if C<activate> is false) deactivates
+all logical volumes in all volume groups.
+If activated, then they are made known to the
+kernel, ie. they appear as C</dev/mapper> devices.  If deactivated,
+then those devices disappear.
+
+This command is the same as running C<vgchange -a y|n>
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_vgcreate
+
+ int guestfs_vgcreate (guestfs_h *handle,
+               const char *volgroup,
+               char * const* const physvols);
+
+This creates an LVM volume group called C<volgroup>
+from the non-empty list of physical volumes C<physvols>.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_vgremove
+
+ int guestfs_vgremove (guestfs_h *handle,
+               const char *vgname);
+
+Remove an LVM volume group C<vgname>, (for example C<VG>).
+
+This also forcibly removes all logical volumes in the volume
+group (if any).
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_vgs
+
+ char **guestfs_vgs (guestfs_h *handle);
+
+List all the volumes groups detected.  This is the equivalent
+of the L<vgs(8)> command.
+
+This returns a list of just the volume group names that were
+detected (eg. C<VolGroup00>).
+
+See also C<guestfs_vgs_full>.
+
+This function returns a NULL-terminated array of strings
+(like L<environ(3)>), or NULL if there was an error.
+I<The caller must free the strings and the array after use>.
+
+=head2 guestfs_vgs_full
+
+ struct guestfs_lvm_vg_list *guestfs_vgs_full (guestfs_h *handle);
+
+List all the volumes groups detected.  This is the equivalent
+of the L<vgs(8)> command.  The "full" version includes all fields.
+
+This function returns a C<struct guestfs_lvm_vg_list *>
+(see E<lt>guestfs-structs.hE<gt>),
+or NULL if there was an error.
+I<The caller must call C<guestfs_free_lvm_vg_list> after use>.
+
+=head2 guestfs_wait_ready
+
+ int guestfs_wait_ready (guestfs_h *handle);
 
 Internally libguestfs is implemented by running a virtual machine
 using L<qemu(1)>.
@@ -576,3 +2014,60 @@ to complete.
 
 This function returns 0 on success or -1 on error.
 
+=head2 guestfs_write_file
+
+ int guestfs_write_file (guestfs_h *handle,
+               const char *path,
+               const char *content,
+               int size);
+
+This call creates a file called C<path>.  The contents of the
+file is the string C<content> (which can contain any 8 bit data),
+with length C<size>.
+
+As a special case, if C<size> is C<0>
+then the length is calculated using C<strlen> (so in this case
+the content cannot contain embedded ASCII NULs).
+
+I<NB.> Owing to a bug, writing content containing ASCII NUL
+characters does I<not> work, even if the length is specified.
+We hope to resolve this bug in a future version.  In the meantime
+use C<guestfs_upload>.
+
+This function returns 0 on success or -1 on error.
+
+Because of the message protocol, there is a transfer limit 
+of somewhere between 2MB and 4MB.  To transfer large files you should use
+FTP.
+
+=head2 guestfs_zero
+
+ int guestfs_zero (guestfs_h *handle,
+               const char *device);
+
+This command writes zeroes over the first few blocks of C<device>.
+
+How many blocks are zeroed isn't specified (but it's I<not> enough
+to securely wipe the device).  It should be sufficient to remove
+any partition tables, filesystem superblocks and so on.
+
+This function returns 0 on success or -1 on error.
+
+=head2 guestfs_zerofree
+
+ int guestfs_zerofree (guestfs_h *handle,
+               const char *device);
+
+This runs the I<zerofree> program on C<device>.  This program
+claims to zero unused inodes and disk blocks on an ext2/3
+filesystem, thus making it possible to compress the filesystem
+more effectively.
+
+You should B<not> run this program if the filesystem is
+mounted.
+
+It is possible that using this program can damage the filesystem
+or data on the filesystem.
+
+This function returns 0 on success or -1 on error.
+