Merge branch 'master' of git+ssh://192.168.122.1/home/rjones/d/libguestfs
authorRichard Jones <rjones@centos5x32.home.annexia.org>
Thu, 2 Jul 2009 23:22:14 +0000 (00:22 +0100)
committerRichard Jones <rjones@centos5x32.home.annexia.org>
Thu, 2 Jul 2009 23:22:14 +0000 (00:22 +0100)
121 files changed:
.gitignore
HACKING
Makefile.am
README
TODO
appliance/Makefile.am
appliance/debian/debirf.conf.in [new file with mode: 0644]
appliance/debian/modules/a0_motd [new symlink]
appliance/debian/modules/a0_prep-root [new symlink]
appliance/debian/modules/install_kernel [new file with mode: 0755]
appliance/debian/modules/network [new symlink]
appliance/debian/modules/root-bashrc [new symlink]
appliance/debian/modules/serial-terminal [new symlink]
appliance/debian/modules/y0_install-guestfsd [new file with mode: 0755]
appliance/debian/modules/z0_remove-aptitude [new symlink]
appliance/debian/modules/z0_remove-locales [new symlink]
appliance/debian/modules/z1_clean-root [new symlink]
appliance/debian/modules/z99_final-cleanups [new file with mode: 0755]
appliance/init [new file with mode: 0755]
appliance/kmod.whitelist.in [new file with mode: 0644]
appliance/libguestfs-supermin-helper.in [new file with mode: 0755]
appliance/make-initramfs.sh.in [deleted file]
appliance/make.sh.in [new file with mode: 0755]
appliance/packagelist.in [new file with mode: 0644]
appliance/supermin-make.sh.in [moved from appliance/update-initramfs.sh.in with 73% similarity]
appliance/supermin-split.sh.in [new file with mode: 0755]
appliance/update.sh.in [new file with mode: 0755]
capitests/tests.c [deleted file]
configure.ac
daemon/Makefile.am
daemon/actions.h [deleted file]
daemon/command.c
daemon/configure.ac
daemon/daemon.h
daemon/debug.c
daemon/devsparts.c
daemon/df.c [new file with mode: 0644]
daemon/dir.c
daemon/du.c [new file with mode: 0644]
daemon/file.c
daemon/find.c
daemon/glob.c [new file with mode: 0644]
daemon/guestfsd.c
daemon/headtail.c [new file with mode: 0644]
daemon/initrd.c [new file with mode: 0644]
daemon/lvm.c
daemon/mknod.c [new file with mode: 0644]
daemon/mount.c
daemon/proto.c
daemon/readdir.c [new file with mode: 0644]
daemon/scrub.c [new file with mode: 0644]
daemon/sfdisk.c
daemon/stubs.c [deleted file]
daemon/swap.c [new file with mode: 0644]
daemon/tar.c
daemon/umask.c [new file with mode: 0644]
daemon/wc.c [new file with mode: 0644]
fish/Makefile.am
fish/cmds.c [deleted file]
fish/completion.c [deleted file]
fish/destpaths.c [new file with mode: 0644]
fish/edit.c
fish/fish.c
fish/fish.h
fish/glob.c [new file with mode: 0644]
fish/more.c [new file with mode: 0644]
fish/time.c [new file with mode: 0644]
guestfish-actions.pod [deleted file]
guestfish.pod
guestfs-actions.pod [deleted file]
guestfs-structs.pod [deleted file]
guestfs.pod
haskell/Guestfs.hs [deleted file]
haskell/Makefile.am
haskell/bindtests.hs [deleted file]
haskell/run-bindtests [new file with mode: 0755]
images/Makefile.am
inspector/run-inspector-locally
inspector/virt-inspector.pl
java/Bindtests.java [deleted file]
java/Makefile.am
java/com/redhat/et/libguestfs/GuestFS.java [deleted file]
java/com/redhat/et/libguestfs/LV.java [deleted file]
java/com/redhat/et/libguestfs/PV.java [deleted file]
java/com/redhat/et/libguestfs/Stat.java [deleted file]
java/com/redhat/et/libguestfs/StatVFS.java [deleted file]
java/com/redhat/et/libguestfs/VG.java [deleted file]
java/com_redhat_et_libguestfs_GuestFS.c [deleted file]
libguestfs.3 [new file with mode: 0644]
ocaml/Makefile.am
ocaml/bindtests.ml [deleted file]
ocaml/guestfs.ml [deleted file]
ocaml/guestfs.mli [deleted file]
ocaml/guestfs_c_actions.c [deleted file]
ocaml/t/guestfs_060_readdir.ml [new file with mode: 0644]
perl/Guestfs.xs [deleted file]
perl/Makefile.PL.in
perl/Makefile.am
perl/bindtests.pl [deleted file]
perl/lib/Sys/Guestfs.pm [deleted file]
perl/t/060-readdir.t [new file with mode: 0644]
po/libguestfs.pot
po/pl.po
python/bindtests.py [deleted file]
python/guestfs-py.c [deleted file]
python/guestfs.py [deleted file]
ruby/bindtests.rb [deleted file]
ruby/ext/guestfs/_guestfs.c [deleted file]
ruby/tests/tc_rhbz507346.rb [new file with mode: 0644]
src/MAX_PROC_NR [new file with mode: 0644]
src/Makefile.am
src/generator.ml
src/guestfs-actions.c [deleted file]
src/guestfs-actions.h [deleted file]
src/guestfs-bindtests.c [deleted file]
src/guestfs-structs.h [deleted file]
src/guestfs.c
src/guestfs.h
src/guestfs_protocol.c [deleted file]
src/guestfs_protocol.h [deleted file]
src/guestfs_protocol.x [deleted file]

index 296db62..8bffe89 100644 (file)
@@ -20,15 +20,23 @@ ChangeLog
 Makefile.in
 Makefile
 aclocal.m4
+appliance/debian/debirf.conf
 appliance/initramfs.*.img
-appliance/make-initramfs.sh
-appliance/make-initramfs.sh.in.old
-appliance/update-initramfs.sh
+appliance/initramfs.*.supermin.hostfiles
+appliance/kmod.whitelist
+appliance/libguestfs-supermin-helper
+appliance/make.sh
+appliance/packagelist
+appliance/supermin-make.sh
+appliance/supermin-split.sh
+appliance/supermin.incfiles
+appliance/update.sh
 appliance/vmlinuz.*
 autom4te.cache
 capitests/test-command
 capitests/test*.img
 capitests/test*.tmp
+capitests/tests.c
 capitests/tests
 compile
 config.h
@@ -38,16 +46,27 @@ config.sub
 config.log
 config.status
 configure
+daemon/actions.h
 daemon/guestfsd
 daemon/install-sh
 daemon/missing
+daemon/names.c
+daemon/stubs.c
 depcomp
 emptydisk
 examples/hello
 examples/to-xml
+fish/cmds.c
+fish/completion.c
 fish/guestfish
 guestfish.1
+guestfish-actions.pod
+guestfs-actions.pod
+guestfs-structs.pod
 guestfs.3
+haskell/Bindtests.hs
+haskell/Bindtests
+haskell/Guestfs.hs
 haskell/Guestfs005Load
 haskell/Guestfs010Launch
 haskell/Guestfs050LVCreate
@@ -55,13 +74,28 @@ html/guestfish.1.html
 html/guestfs.3.html
 html/recipes.html
 html/virt-inspector.1.html
+images/100kallzeroes
+images/100kallnewlines
+images/100kallspaces
+images/100krandom
+images/10klines
+images/initrd
 images/test.sqsh
 initramfs
 initramfs.timestamp
 inspector/virt-inspector.1
 install-sh
 java/api
+java/Bindtests.java
 java/com_redhat_et_libguestfs_GuestFS.h
+java/com_redhat_et_libguestfs_GuestFS.c
+java/com/redhat/et/libguestfs/Dirent.java
+java/com/redhat/et/libguestfs/GuestFS.java
+java/com/redhat/et/libguestfs/LV.java
+java/com/redhat/et/libguestfs/PV.java
+java/com/redhat/et/libguestfs/Stat.java
+java/com/redhat/et/libguestfs/StatVFS.java
+java/com/redhat/et/libguestfs/VG.java
 java/doc-stamp
 missing
 libguestfs.pc
@@ -75,16 +109,24 @@ m4/ltsugar.m4
 m4/ltversion.m4
 m4/lt~obsolete.m4
 ocaml/META
+ocaml/bindtests.ml
 ocaml/bindtests
 ocaml/examples/lvs
+ocaml/guestfs.mli
+ocaml/guestfs.ml
+ocaml/guestfs_c_actions.c
 ocaml/t/guestfs_005_load
 ocaml/t/guestfs_010_launch
 ocaml/t/guestfs_050_lvcreate
+ocaml/t/guestfs_060_readdir
+perl/bindtests.pl
+perl/blib
 perl/Guestfs.c
 perl/Guestfs.bs
+perl/Guestfs.xs
+perl/lib/Sys/Guestfs.pm
 perl/Makefile-pl
 perl/Makefile.PL
-perl/blib
 perl/pm_to_blib
 po/*.gmo
 po/Makevars.template
@@ -93,8 +135,22 @@ po/remove-potcdate.sed
 po/stamp-it
 po/stamp-po
 pod2htm?.tmp
+python/bindtests.py
+python/guestfs-py.c
+python/guestfs.py
 python/guestfs.pyc
 ruby/Rakefile
+ruby/bindtests.rb
+ruby/ext/guestfs/_guestfs.c
 ruby/ext/guestfs/extconf.h
 ruby/ext/guestfs/mkmf.log
+src/.pod2text.data
+src/guestfs-actions.c
+src/guestfs-actions.h
+src/guestfs-bindtests.c
+src/guestfs_protocol.c
+src/guestfs_protocol.h
+src/guestfs_protocol.x
+src/guestfs-structs.h
+src/stamp-generator
 stamp-h1
diff --git a/HACKING b/HACKING
index fc9ed38..b42a807 100644 (file)
--- a/HACKING
+++ b/HACKING
@@ -14,10 +14,6 @@ etc. to the big list called 'functions' at the top of this file.
 'do_action' function.  Take a look at one of the numerous examples
 there.
 
-You will need to run src/generator.ml (from the top directory) which
-regenerates all the auto-generated files, and then continue with the
-ordinary build process.
-
 Formatting
 ----------------------------------------------------------------------
 
index 142cf3e..1cb2299 100644 (file)
@@ -61,13 +61,14 @@ EXTRA_DIST = \
        contrib/febootstrap/install.title \
        contrib/febootstrap/install.html \
        contrib/febootstrap/install.sh \
-       bindtests
+       bindtests \
+       libguestfs.3
 
 # Manual pages.
 # guestfs-actions.pod and guestfs-structs are autogenerated.  There is
 # no include mechanism for POD, so we have to do it by hand.
 
-man_MANS = guestfs.3 guestfish.1
+man_MANS = guestfs.3 libguestfs.3 guestfish.1
 
 guestfs.3: guestfs.pod guestfs-actions.pod guestfs-structs.pod
        sed \
diff --git a/README b/README
index f470a58..e376cc7 100644 (file)
--- a/README
+++ b/README
@@ -37,7 +37,7 @@ Requirements
 - recent QEMU >= 0.10 with vmchannel support
   http://lists.gnu.org/archive/html/qemu-devel/2009-02/msg01042.html
 
-- febootstrap >= 2.0
+- febootstrap >= 2.3
 
 - fakeroot
 
@@ -73,6 +73,9 @@ bindings
 
 - (Optional) GHC if you want to build the Haskell bindings
 
+- (Optional) Perl XML::XPath, Sys::Virt modules (for libvirt support
+in virt-inspector).
+
 Running ./configure will check you have all the requirements installed
 on your machine.
 
@@ -120,10 +123,13 @@ or build from our source RPMs.
 Debian
 ----------------------------------------------------------------------
 
-libguestfs should build and run on Debian.  At the moment we don't
-provide Debian packages, and because of the appliance it's rather
-complicated to provide a package which could be accepted into the
-Debian repositories.  Want to help?  Please contact us.
+libguestfs should build and run on Debian.
+
+febootstrap, yum, rpm, fakeroot, fakechroot are all packaged in
+Debian.
+
+Please see the fedora-virt mailing list for the status of libguestfs
+in Debian.
 
 
 qemu
@@ -168,6 +174,62 @@ On some systems, the chmod will not survive a reboot, and you will
 need to make edits to the udev configuration.
 
 
+Supermin appliance
+----------------------------------------------------------------------
+
+If you configure with --enable-supermin then we will build a supermin
+appliance (supermin = super-minimized).  This is a very specialized
+appliance which is built on-the-fly at runtime (specifically, when you
+call guestfs_launch).
+
+The normal appliance is a self-contained Linux operating system, based
+on the Fedora/RHEL/CentOS Linux distro.  So it contains a complete
+copy of all the libraries and programs needed, like kernel, libc,
+bash, coreutils etc etc.
+
+The supermin appliance removes the kernel and all the executable
+libraries and programs from the appliance.  That just leaves a
+skeleton of config files and some data files, which is obviously
+massively smaller than the normal appliance.  At runtime we rebuild
+the appliance on-the-fly from the libraries and programs on the host
+(eg. pulling in the real /lib/libc.so, the real /bin/bash etc.)
+
+Although this process of rebuilding the appliance each time sounds
+slow, it turns out to be faster than using the prebuilt appliance.
+(Most of the saving comes from not compressing the appliance - it
+transpires that decompressing the appliance is the slowest part of the
+whole boot sequence).  On my machine, a new appliance can be built in
+under a fifth of a second, and the boot time is several seconds
+shorter.
+
+The big advantage of the supermin appliance for distributions like
+Fedora is that it gets security fixes automatically from the host, so
+there is no need to rebuild the whole of libguestfs for a security
+update in some underlying library.
+
+There are several DISADVANTAGES:
+
+It won't work at all except in very narrow, controlled cases like the
+Fedora packaging case.  We control the dependencies of the libguestfs
+RPM tightly to ensure that the required binaries are actually present
+on the host.
+
+Furthermore there are certain unlikely changes in the packages on the
+host which could break a supermin appliance, eg. an updated library
+which depends on an additional data file.
+
+Also supermin appliances are subjected to changes in the host kernel
+which might break compatibility with qemu -- these are, of course,
+real bugs in any case.
+
+Lastly, supermin appliances really can't be moved between branches of
+distributions (eg. built on Fedora 12 and moved to Fedora 10) because
+they are not self-contained and they rely on certain libraries being
+around.  You shouldn't do this anyway.
+
+Use supermin appliances with caution.
+
+
 Notes on cross-architecture support
 ----------------------------------------------------------------------
 
diff --git a/TODO b/TODO
index d0e9320..a38a8dc 100644 (file)
--- a/TODO
+++ b/TODO
@@ -54,21 +54,6 @@ ie. CentOS 5.3, Fedora 11, Debian.
 
 ----------------------------------------------------------------------
 
-Qemu options -- After discussion with the KVM developers, they have
-recommended some flags which will improve the safety and reliability
-of KVM.  Need to test that these also work under qemu (or at least, do
-no harm):
-
--no-hpet      HPET support is broken and should be disabled.
-
--rtc-td-hack  Keeps the rtc clock source track time correctly.
-
--drive file=...,if=[ide|virtio],cache=off
-              cache=off is necessary to improve reliability in the
-             event of a system crash when writing.
-
-----------------------------------------------------------------------
-
 "Standalone/local mode"
 
 Instead of running guestfsd (the daemon) inside qemu, there should be
@@ -107,3 +92,90 @@ This is mainly useful from live CDs, ie. virt-p2v.
 
 Should we bother having the daemon at all and just link the guestfsd
 code directly into libguestfs?
+
+----------------------------------------------------------------------
+
+PPC problems:
+
+  ppc (32 bit) works with qemu from git, however there is no serial console
+
+  ppc64 requires extra parameters:
+    -M mac99 -cpu ppc64
+  however it still fails:
+    invalid/unsupported opcode: 01 - 01 - 1a (06301e83) 00000000018c2738 1
+    invalid bits: 00400000 for opcode: 0b - 19 - 15 (2d746572) 0000000000009230
+
+  no serial console in ppc or ppc64 because no one can tell us what
+  console=ttyXX option to use
+
+----------------------------------------------------------------------
+
+Supermin appliance should be moved into febootstrap.
+
+----------------------------------------------------------------------
+
+Extra commands / functionality:
+
+  General glibc / core programs:
+    chgrp
+    grep (do it locally using pipe?)
+    dd (?)
+    ln / ln -s
+    readlink
+    utime / utimes / futimes / futimens / l..
+    more mk*temp calls
+    readdir / readdir-and-stat
+    some sort of alloc/fallocate/posix_fallocate call to create empty space
+    realpath
+    trunc[ate??]
+    getfattr (also useful because gives us access to NTFS datastreams)
+    setfattr
+
+  ext2 properties:
+    chattr
+    lsattr
+    badblocks
+    blkid
+    debugfs
+    dumpe2fs
+    e2image
+    e2undo
+    filefrag
+    findfs
+    logsave
+    mklost+found
+
+  SELinux:
+    chcat
+    restorecon
+    ch???
+
+  Oddball:
+    pivot_root
+    fts(3) / ftw(3)
+
+----------------------------------------------------------------------
+
+Allow swap space from the guest to be used.  Is it a good idea?
+
+----------------------------------------------------------------------
+
+Need a way to query a binary or library file for its architecture.
+Using objdump or readelf?
+What about non-ELF files (eg. Windows, BSD).
+
+To do this properly requires some serious logic, eg. to cover Linux
+and Windows we'd need objdump and i686-pc-mingw32-objdump, and more to
+cover a.out, COFF and 64 bit Windows.  Therefore this cannot be done
+inside the daemon, and should be done by a separate, external program
+similar to virt-inspector.
+
+Probably we should go all the way and have virt-inspector able to
+determine kernel and userspace architectures of guests.
+
+----------------------------------------------------------------------
+
+Other initrd-* commands, such as:
+
+initrd-extract
+initrd-replace
index 066becb..03b2a7b 100644 (file)
 # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
 EXTRA_DIST = \
-       make-initramfs.sh update-initramfs.sh
+       make.sh update.sh supermin-split.sh supermin-make.sh \
+       libguestfs-supermin-helper \
+       kmod.whitelist \
+       kmod.whitelist.in \
+       packagelist.in \
+       init
 
 # Build the root filesystem (appliance).
 # Currently this is arch-dependent, so it seems like putting it in
 # $(libdir) is best.  When we build cross-architecture filesystems we
 # should probably move them to $(datadir).
-
 fsdir = $(libdir)/guestfs
-
+fs_DATA = $(APPLIANCE_FILES)
+
+# These are the resulting output files from the whole process:
+#   VMLINUZ        kernel for the full appliance
+#   INITRAMFSIMG   initramfs (ie. root fs) for the full appliance
+# For details of the supermin appliance, read the README file:
+#   SUPERMINIMG    initramfs (ie. partial root fs) for the supermin appliance
+#   SUPERMINFILES  list of missing files (the ones we will pull out of the
+#                    host filesystem at runtime) in the supermin appliance
+APPLIANCE_FILES = $(INITRAMFSIMG) $(VMLINUZ)
+if SUPERMIN
+APPLIANCE_FILES += $(SUPERMINIMG) $(SUPERMINFILES) kmod.whitelist
+bin_SCRIPTS = libguestfs-supermin-helper
+endif
+
+# Don't change these names - they must be the same as in '*.sh' scripts.
 INITRAMFSIMG = initramfs.$(REPO).$(host_cpu).img
 VMLINUZ = vmlinuz.$(REPO).$(host_cpu)
+if SUPERMIN
+SUPERMINIMG = initramfs.$(REPO).$(host_cpu).supermin.img
+SUPERMINFILES = initramfs.$(REPO).$(host_cpu).supermin.hostfiles
+endif
 
-fs_DATA =  $(INITRAMFSIMG) $(VMLINUZ)
-
+# This is for building the normal appliance:
 $(INITRAMFSIMG) $(VMLINUZ): $(top_builddir)/initramfs/fakeroot.log
 
-$(top_builddir)/initramfs/fakeroot.log: make-initramfs.sh.in
+$(top_builddir)/initramfs/fakeroot.log: make.sh kmod.whitelist packagelist
        -mv $(INITRAMFSIMG) $(INITRAMFSIMG).bak
        -mv $(VMLINUZ) $(VMLINUZ).bak
-       if ! bash make-initramfs.sh; then rm -f $@; exit 1; fi
+       if ! bash make.sh; then rm -f $@; exit 1; fi
 
-$(INITRAMFSIMG): $(top_builddir)/initramfs/fakeroot.log $(top_builddir)/daemon/guestfsd
+$(INITRAMFSIMG): $(top_builddir)/initramfs/fakeroot.log $(top_builddir)/daemon/guestfsd init update.sh
        rm -f $@
-       bash update-initramfs.sh
+       bash update.sh
        touch $@
 
-make-initramfs.sh: make-initramfs.sh.in
-       cd .. && ./config.status appliance/$@
+kmod.whitelist: kmod.whitelist.in
+       grep -v '^[[:space:]]*$$' < $< | grep -v '^#' > $@
+
+packagelist: packagelist.in
+       cpp -undef -D$(DIST)=1 < $< | \
+       grep -v '^[[:space:]]*$$' | grep -v '^#' > $@
+
+# This is for building the supermin appliance.  It has to be enabled
+# specifically with './configure --enable-supermin'.  You really need
+# to read the README file.
+
+if SUPERMIN
+
+# First we need to decide which files go in and out of the supermin
+# appliance.  This decision is made by 'supermin-split.sh'.
+$(SUPERMINFILES): supermin.incfiles
+supermin.incfiles: $(top_builddir)/initramfs/fakeroot.log $(top_builddir)/daemon/guestfsd supermin-split.sh
+       rm -f supermin.incfiles $(SUPERMINFILES)
+       bash supermin-split.sh
+
+# Second we need to create a supermin appliance with just the included
+# files (leaving out the host files, which we'll add back at runtime).
+$(SUPERMINIMG): supermin.incfiles supermin-make.sh
+       rm -f $@
+       bash supermin-make.sh
+
+endif
+
+#----------------------------------------------------------------------
+# Extra rules for testing the appliance.
 
-# Test-boot the image.
+# Test-boot the appliance.
 
 test-boot: emptydisk
        qemu-system-$(host_cpu) \
@@ -66,7 +116,7 @@ test-boot-realistic: emptydisk
          -m 384 \
          -kernel $(VMLINUZ) -initrd $(INITRAMFSIMG) \
          -hda emptydisk \
-         -append "console=ttyS0 guestfs=10.0.2.4:6666" \
+         -append "console=ttyS0 guestfs=10.0.2.4:6666 guestfs_rescue=1" \
          -nographic \
          -serial stdio \
          -net channel,6666:unix:/tmp/sock,server,nowait \
@@ -75,7 +125,7 @@ test-boot-realistic: emptydisk
 
 # Make clean.
 
-CLEANFILES = $(fs_DATA)
+CLEANFILES = $(APPLIANCE_FILES)
 
 clean-local:
        rm -rf $(top_builddir)/initramfs
diff --git a/appliance/debian/debirf.conf.in b/appliance/debian/debirf.conf.in
new file mode 100644 (file)
index 0000000..a3dc16f
--- /dev/null
@@ -0,0 +1,5 @@
+DEBIRF_LABEL="debirf-libguestfs"
+DEBIRF_SUITE=@REPO@
+DEBIRF_MIRROR=@MIRROR@/${DEBIRF_DISTRO}
+DEBIRF_KERNEL_ARCH=486
+
diff --git a/appliance/debian/modules/a0_motd b/appliance/debian/modules/a0_motd
new file mode 120000 (symlink)
index 0000000..8e3ad2f
--- /dev/null
@@ -0,0 +1 @@
+/usr/share/debirf/modules/a0_motd
\ No newline at end of file
diff --git a/appliance/debian/modules/a0_prep-root b/appliance/debian/modules/a0_prep-root
new file mode 120000 (symlink)
index 0000000..654bc70
--- /dev/null
@@ -0,0 +1 @@
+/usr/share/debirf/modules/a0_prep-root
\ No newline at end of file
diff --git a/appliance/debian/modules/install_kernel b/appliance/debian/modules/install_kernel
new file mode 100755 (executable)
index 0000000..c1076ce
--- /dev/null
@@ -0,0 +1,68 @@
+#!/bin/bash -e
+
+# debirf module: install-kernel
+# install a kernel package, indicated by the expected environment
+# variables:
+#  DEBIRF_PATH
+#  DEBIRF_ROOT
+#  DEBIRF_KERNEL_PACKAGE
+#
+# *** REQUIRED MODULE ***
+# WARNING: this module is necessary for proper functioning of debirf.
+#
+# The debirf scripts were written by
+# Jameson Rollins <jrollins@fifthhorseman.net>
+# and
+# Daniel Kahn Gillmor <dkg-debian.org@fifthhorseman.net>.
+#
+# They are Copyright 2007, and are all released under the GPL,
+# version 3 or later.
+
+# clear out old modules if they exist, to avoid confusion
+rm -rf "$DEBIRF_ROOT/lib/modules"
+
+# download/copy in kernel package
+if [ -z "$DEBIRF_KERNEL_PACKAGE" ] ; then
+    # determine kernel to install. assume arch of build host.
+
+    # determine kernel arch.  need everything after the kernel version
+    # and debian version
+    if [ -z "$DEBIRF_KERNEL_ARCH" ]; then
+       KARCH=$(uname -r | cut -d- -f3-)
+    else
+       KARCH="$DEBIRF_KERNEL_ARCH"
+    fi
+
+    # determine the full kernel version from the dependency of the
+    # generic 2.6-ARCH package in the debirf root (since it may be
+    # different than what is installed on the build host)
+    KNAME=$(debirf_exec apt-cache show linux-image-2.6-"$KARCH" | grep '^Depends: ' | sed 's/^Depends: //')
+
+    # download only the desired kernel package directly into the apt
+    # cache for dpkg extraction
+    debirf_exec sh -c "cd /var/cache/apt/archives/ && aptitude download \"$KNAME\""
+else
+    # install kernel deb if given at command line
+    debirf_exec sh -c "cd /var/cache/apt/archives/ && aptitude download \"$DEBIRF_KERNEL_PACKAGE\""
+fi
+
+KPKG=$(basename "$DEBIRF_ROOT"/var/cache/apt/archives/linux-image-2.6.*)
+
+echo "extracting kernel package $KPKG..."
+debirf_exec dpkg --extract /var/cache/apt/archives/"$KPKG" /
+
+# install the module init tools, since they are needed for depmod
+debirf_exec apt-get --assume-yes install module-init-tools
+
+# depmod to create module list
+KVERS=$(ls -1 -t "$DEBIRF_ROOT/lib/modules" | head -n1)
+echo "generating modules.dep..."
+debirf_exec depmod -a "$KVERS"
+
+# extract kernel and debian stock initrd from the build root:
+mv "$DEBIRF_ROOT"/boot/vmlinu* "$DEBIRF_BUILDD"
+
+# remove kernel symlinks
+if [ -L "$DEBIRF_ROOT"/vmlinuz ] ; then
+    rm "$DEBIRF_BUILDD"/vmlinuz
+fi
diff --git a/appliance/debian/modules/network b/appliance/debian/modules/network
new file mode 120000 (symlink)
index 0000000..979418d
--- /dev/null
@@ -0,0 +1 @@
+/usr/share/debirf/modules/network
\ No newline at end of file
diff --git a/appliance/debian/modules/root-bashrc b/appliance/debian/modules/root-bashrc
new file mode 120000 (symlink)
index 0000000..651d030
--- /dev/null
@@ -0,0 +1 @@
+/usr/share/debirf/modules/root-bashrc
\ No newline at end of file
diff --git a/appliance/debian/modules/serial-terminal b/appliance/debian/modules/serial-terminal
new file mode 120000 (symlink)
index 0000000..a5376da
--- /dev/null
@@ -0,0 +1 @@
+/usr/share/debirf/modules/serial-terminal
\ No newline at end of file
diff --git a/appliance/debian/modules/y0_install-guestfsd b/appliance/debian/modules/y0_install-guestfsd
new file mode 100755 (executable)
index 0000000..17bbbdc
--- /dev/null
@@ -0,0 +1,33 @@
+#!/bin/bash -e
+# install guestfsd specific stuff
+
+# Kernel modules take up nearly half of the image.  Only include ones
+# which are on the whitelist.
+exec 5<../appliance/kmod.whitelist
+whitelist=
+while read kmod 0<&5; do
+    whitelist="$whitelist -a -not -name $kmod"
+done
+exec 5<&-
+
+echo "Module whitelist: $whitelist"
+find $DEBIRF_ROOT/lib/modules/*/kernel -name '*.ko' $whitelist -a -exec rm '{}' \;
+
+# install additional packages:
+PKGLIST=$(< packagelist)
+echo "Will add $PKGLIST"
+debirf_exec aptitude -R -y install $PKGLIST
+debirf_exec aptitude -y remove vim-tiny dhcp3-client iptables
+
+debirf_exec mkdir -p --mode=0777 /sysroot
+
+# cleanup some other heavy lifters:
+rm -rf "$DEBIRF_ROOT"/usr/share/doc/
+rm -rf "$DEBIRF_ROOT"/usr/share/zoneinfo/
+rm -rf "$DEBIRF_ROOT"/usr/share/man/
+
+# Install the actual appliance:
+echo $PWD
+install -o root -g root -m 0755 ../daemon/guestfsd "$DEBIRF_ROOT"/sbin/guestfsd
+install -o root -g root -m 0755 init "$DEBIRF_ROOT"/sbin/init
+
diff --git a/appliance/debian/modules/z0_remove-aptitude b/appliance/debian/modules/z0_remove-aptitude
new file mode 120000 (symlink)
index 0000000..7c56260
--- /dev/null
@@ -0,0 +1 @@
+/usr/share/debirf/modules/z0_remove-aptitude
\ No newline at end of file
diff --git a/appliance/debian/modules/z0_remove-locales b/appliance/debian/modules/z0_remove-locales
new file mode 120000 (symlink)
index 0000000..80a82fa
--- /dev/null
@@ -0,0 +1 @@
+/usr/share/debirf/modules/z0_remove-locales
\ No newline at end of file
diff --git a/appliance/debian/modules/z1_clean-root b/appliance/debian/modules/z1_clean-root
new file mode 120000 (symlink)
index 0000000..f0d3aad
--- /dev/null
@@ -0,0 +1 @@
+/usr/share/debirf/modules/z1_clean-root
\ No newline at end of file
diff --git a/appliance/debian/modules/z99_final-cleanups b/appliance/debian/modules/z99_final-cleanups
new file mode 100755 (executable)
index 0000000..ef5fac7
--- /dev/null
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+rm -rf "$DEBIRF_ROOT"/var/lib/dpkg/info
diff --git a/appliance/init b/appliance/init
new file mode 100755 (executable)
index 0000000..dbe53f4
--- /dev/null
@@ -0,0 +1,53 @@
+#!/bin/sh
+
+echo Starting /init script ...
+
+PATH=/sbin:/usr/sbin:$PATH
+
+mount -t proc /proc /proc
+mount -t sysfs /sys /sys
+
+if [ -x /etc/init.d/udev ]; then
+  /etc/init.d/udev start
+elif [ -x /sbin/start_udev ]; then
+  /sbin/start_udev
+else
+  echo No udev, creating /dev manually
+  mount -t tmpfs none /dev
+  mkdir /dev/pts /dev/shm /dev/mapper
+  mount -t devpts -o gid=5,mode=620 /dev/pts /dev/pts
+  # Must do each MAKEDEV individually, because if one device fails,
+  # MAKEDEV will quit without creating the rest (RHBZ#507374).
+  for dev in mem null port zero core full ram tty console fd \
+    hda hdb hdc hdd sda sdb sdc sdd loop sd; do
+    MAKEDEV $dev ||:
+  done
+  mknod /dev/ptmx c 5 2;    chmod 0666 /dev/ptmx
+  mknod /dev/random c 1 8;  chmod 0666 /dev/random
+  mknod /dev/urandom c 1 9; chmod 0444 /dev/urandom
+  ln -sf /proc/self/fd/0 /dev/stdin
+  ln -sf /proc/self/fd/1 /dev/stdout
+  ln -sf /proc/self/fd/2 /dev/stderr
+
+  modprobe virtio_pci
+  modprobe virtio_net
+fi
+
+modprobe dm_mod ||:
+mount
+ls -l /dev
+
+/sbin/ifconfig lo 127.0.0.1
+/sbin/ifconfig eth0 10.0.2.10
+/sbin/route add default gw 10.0.2.2
+
+lvm vgscan --ignorelockingfailure
+lvm vgchange -ay --ignorelockingfailure
+
+# Improve virtio-blk performance (RHBZ#509383).
+for f in /sys/block/vd*/queue/rotational; do echo 1 > $f; done
+
+if grep -sq guestfs_rescue=1 /proc/cmdline; then
+  bash -i
+fi
+exec guestfsd -f
diff --git a/appliance/kmod.whitelist.in b/appliance/kmod.whitelist.in
new file mode 100644 (file)
index 0000000..590285d
--- /dev/null
@@ -0,0 +1,48 @@
+# List of kernel modules that we leave in the appliance.  This has to
+# include any dependencies needed by modules.
+
+# Any kernel module not listed here is deleted from the appliance.
+
+# Wildcards are permitted.
+
+virtio*.ko
+
+# drivers for QEMUs IDE/SCSI device emulation
+cdrom.ko
+i2c-piix4.ko
+i2c-core.ko
+ide-*.ko
+libata.ko
+piix.ko
+scsi_transport_spi.ko
+scsi_mod.ko
+sd_mod.ko
+sym53c8xx.ko
+
+ext2.ko
+ext3.ko
+ext4*.ko
+
+crc16.ko
+jbd.ko
+jbd2.ko
+mbcache.ko
+
+fuse.ko
+
+vfat.ko
+fat.ko
+
+udf.ko
+crc_itu_t.ko
+nls_utf8.ko
+
+dm-*.ko
+
+cramfs.ko
+squashfs.ko
+
+hfsplus.ko
+ufs.ko
+exportfs.ko
+xfs.ko
diff --git a/appliance/libguestfs-supermin-helper.in b/appliance/libguestfs-supermin-helper.in
new file mode 100755 (executable)
index 0000000..2afd0cf
--- /dev/null
@@ -0,0 +1,82 @@
+#!/bin/bash -
+# @configure_input@
+# Copyright (C) 2009 Red Hat Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+# Helper script which constructs the supermin appliance at runtime.
+
+unset CDPATH
+
+set -e
+
+# Source directory containing the supermin input files.
+sourcedir=$(cd "$1" > /dev/null; pwd)
+
+# Output files.
+kernel="$2"
+initrd="$3"
+
+# Kernel:
+# Look for the most recent kernel named vmlinuz-*.<arch>* which has a
+# corresponding directory in /lib/modules/. If the architecture is x86, look
+# for any x86 kernel.
+
+arch=$(echo "@host_cpu@" | sed 's/^i.86$/i?86/')
+for f in $(ls -1vr /boot/vmlinuz-*.$arch* 2>/dev/null | grep -v xen); do
+    b=$(basename "$f")
+    b=$(echo "$b" | sed 's,vmlinuz-,,')
+    modpath="/lib/modules/$b"
+    if [ -d "$modpath" ]; then
+       ln -sf "$f" "$kernel"
+       break
+    fi
+    modpath=
+done
+
+if [ -z "$modpath" ]; then
+    echo "$0: failed to find a suitable kernel" >&2
+    exit 1
+fi
+
+# The initrd consists of these components:
+# (1) The base skeleton appliance that we constructed at build time.
+#     name = initramfs.@REPO@.@host_cpu@.supermin.img
+#     format = compressed cpio
+# (2) The modules from modpath which are on the module whitelist.
+#     format = plain cpio
+# (3) The host files which match wildcards in *.supermin.hostfiles.
+#     format = plain cpio
+
+cp "$sourcedir"/initramfs.@REPO@.@host_cpu@.supermin.img "$initrd"
+
+# Kernel modules (2).
+exec 5<"$sourcedir"/kmod.whitelist
+whitelist=
+while read kmod 0<&5; do
+    whitelist="$whitelist -o -name $kmod"
+done
+exec 5<&-
+
+find "$modpath" \( -not -name '*.ko' $whitelist \) -a -print0 |
+  cpio --quiet -o -0 -H newc >> "$initrd"
+
+# Host files (3).
+
+(cd / && \
+  ls -1df $(
+      cat "$sourcedir"/initramfs.@REPO@.@host_cpu@.supermin.hostfiles
+    ) 2>/dev/null |
+  cpio --quiet -o -H newc ) >> "$initrd"
diff --git a/appliance/make-initramfs.sh.in b/appliance/make-initramfs.sh.in
deleted file mode 100755 (executable)
index b1d3c39..0000000
+++ /dev/null
@@ -1,176 +0,0 @@
-#!/bin/bash -
-# @configure_input@
-# Copyright (C) 2009 Red Hat Inc.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-# This is called from the Makefile to build the initramfs.
-
-unset CDPATH
-
-set -e
-
-cd @top_builddir@
-
-modules="
--i augeas-libs
--i bash
--i binutils
--i coreutils
--i dosfstools
--i file
--i grub
--i iputils
--i kernel
--i lvm2
--i MAKEDEV
--i module-init-tools
--i net-tools
--i ntfs-3g
--i ntfsprogs
--i procps
--i strace
--i util-linux-ng
--i zerofree
-"
-
-# Decide on names for the final output.  These have to match Makefile.am.
-output=appliance/initramfs.@REPO@.@host_cpu@.img
-koutput=appliance/vmlinuz.@REPO@.@host_cpu@
-rm -f $output
-rm -f $koutput
-
-# Create the basic initramfs.
-@FEBOOTSTRAP@ $modules -u @UPDATES@ @REPO@ initramfs @MIRROR@
-
-# /sysroot is where the guest root filesystem will be mounted.
-@FEBOOTSTRAP_RUN@ initramfs -- mkdir -p --mode=0777 /sysroot
-
-# Create /tmp if it is missing.
-@FEBOOTSTRAP_RUN@ initramfs -- mkdir -p --mode=0777 /tmp
-
-# Nuke some stuff.  The kernel pulls mkinitrd and plymouth which pulls in
-# all of Python.  Sheez.
-(cd initramfs && find -name '*plymouth*' -print0) |
-  xargs -0 @FEBOOTSTRAP_RUN@ initramfs -- rm -rf
-(cd initramfs && find -name '*python*' -print0) |
-  xargs -0 @FEBOOTSTRAP_RUN@ initramfs -- rm -rf
-
-# In Fedora >= 11, it pulls in all of Perl from somewhere.  Nuke from orbit.
-@FEBOOTSTRAP_RUN@ initramfs -- rm -rf /usr/lib/perl5 /usr/lib64/perl5
-
-# Anaconda?  JPEG images?
-@FEBOOTSTRAP_RUN@ initramfs -- rm -rf /usr/lib/anaconda-runtime
-
-# Modules take up nearly half of the image.  It's a rough guess that
-# we don't need many drivers (which take up most of the space).
-(cd initramfs && find lib/modules/*/kernel \
-  -name '*.ko' \
-  -a ! -name 'virtio.ko' \
-  -a ! -name 'virtio_net.ko' \
-  -a ! -name 'virtio_pci.ko' \
-  -a ! -name 'virtio_ring.ko' \
-  -a ! -name 'ext2.ko' \
-  -a ! -name 'ext3.ko' \
-  -a ! -name 'ext4*.ko' \
-  -a ! -name 'crc16.ko' \
-  -a ! -name 'jbd.ko' \
-  -a ! -name 'jbd2.ko' \
-  -a ! -name 'fuse.ko' \
-  -a ! -name 'vfat.ko' \
-  -a ! -name 'fat.ko' \
-  -a ! -name 'udf.ko' \
-  -a ! -name 'crc_itu_t.ko' \
-  -a ! -name 'nls_utf8.ko' \
-  -a ! -name 'dm-*.ko' \
-  -a ! -name 'cramfs.ko' \
-  -a ! -name 'squashfs.ko' \
-  -a ! -name 'hfsplus.ko' \
-  -a ! -name 'ufs.ko' \
-  -a ! -name 'exportfs.ko' \
-  -a ! -name 'xfs.ko' \
-  -a -print0 ) |
-  xargs -0 @FEBOOTSTRAP_RUN@ initramfs -- rm
-
-# Pull the kernel out into the current directory.  We don't want it in
-# the initramfs image.
-cp initramfs/boot/vmlinuz* $koutput
-@FEBOOTSTRAP_RUN@ initramfs -- rm -rf boot
-
-# Minimize the image.
-@FEBOOTSTRAP_MINIMIZE@ initramfs
-
-# Add some missing configuration files.
-if [ ! -f initramfs/etc/hosts ]; then
-    cat > hosts.new <<'__EOF__'
-127.0.0.1 guestfs localhost.localdomain localhost
-::1       localhost6.localdomain6 localhost6
-__EOF__
-    @FEBOOTSTRAP_INSTALL@ initramfs hosts.new /etc/hosts 0644 root.root
-    rm hosts.new
-fi
-
-if [ ! -f initramfs/etc/fstab ]; then
-    @FEBOOTSTRAP_RUN@ initramfs -- touch /etc/fstab
-fi
-
-echo nameserver 10.0.2.3 > resolv.conf.new
-@FEBOOTSTRAP_INSTALL@ initramfs resolv.conf.new /etc/resolv.conf 0644 root.root
-rm resolv.conf.new
-
-# Create the init script.
-cat > init.new <<'__EOF__'
-#!/bin/sh
-echo Starting /init script ...
-PATH=/sbin:/usr/sbin:$PATH
-mount -t tmpfs none /dev
-mkdir /dev/pts /dev/shm /dev/mapper
-MAKEDEV mem null port zero core full ram tty console fd \
-  hda hdb hdc hdd sda sdb sdc sdd loop sd
-mknod /dev/ptmx c 5 2; chmod 0666 /dev/ptmx
-mknod /dev/random c 1 8;  chmod 0666 /dev/random
-mknod /dev/urandom c 1 9; chmod 0444 /dev/urandom
-mount -t proc /proc /proc
-mount -t sysfs /sys /sys
-mount -t devpts -o gid=5,mode=620 /dev/pts /dev/pts
-ln -sf /proc/self/fd/0 /dev/stdin
-ln -sf /proc/self/fd/1 /dev/stdout
-ln -sf /proc/self/fd/2 /dev/stderr
-modprobe virtio_pci
-modprobe virtio_net
-modprobe dm_mod ||:
-/sbin/ifconfig lo 127.0.0.1
-/sbin/ifconfig eth0 10.0.2.10
-/sbin/route add default gw 10.0.2.2
-lvm vgscan --ignorelockingfailure
-lvm vgchange -ay --ignorelockingfailure
-exec guestfsd -f
-__EOF__
-
-@FEBOOTSTRAP_INSTALL@ initramfs init.new /init 0755 root.root
-rm init.new
-
-# Just in case the kernel isn't looking for /init, make /sbin/init
-# be our script, not the real init.
-#@FEBOOTSTRAP_RUN@ initramfs -- ln -f /init /sbin/init
-
-# Copy the daemon into the filesystem.
-@FEBOOTSTRAP_INSTALL@ initramfs daemon/guestfsd /sbin/guestfsd 0755 root.root
-
-# Generate final image.
-@FEBOOTSTRAP_TO_INITRAMFS@ initramfs > $output-t
-mv $output-t $output
-ls -lh $output
-ls -lh $koutput
diff --git a/appliance/make.sh.in b/appliance/make.sh.in
new file mode 100755 (executable)
index 0000000..cf772e0
--- /dev/null
@@ -0,0 +1,145 @@
+#!/bin/bash -
+# @configure_input@
+# Copyright (C) 2009 Red Hat Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+# This is called from the Makefile to build the initramfs.
+
+unset CDPATH
+
+set -e
+
+if [ "@DIST@" = "REDHAT" ]; then
+  cd @top_builddir@
+  # Decide on names for the final output.  These have to match Makefile.am.
+  output=appliance/initramfs.@REPO@.@host_cpu@.img
+  koutput=appliance/vmlinuz.@REPO@.@host_cpu@
+  rm -f $output
+  rm -f $koutput
+
+  # Create the basic initramfs.
+  exec 5<appliance/packagelist
+  packages=
+  while read pkg 0<&5; do
+      packages="$packages -i $pkg"
+  done
+  exec 5<&-
+
+  @FEBOOTSTRAP@ $packages -u @UPDATES@ @REPO@ initramfs @MIRROR@
+
+  # /sysroot is where the guest root filesystem will be mounted.
+  @FEBOOTSTRAP_RUN@ initramfs -- mkdir -p --mode=0777 /sysroot
+
+  # Create /tmp if it is missing.
+  @FEBOOTSTRAP_RUN@ initramfs -- mkdir -p --mode=0777 /tmp
+
+  # Nuke some stuff.  The kernel pulls mkinitrd and plymouth which pulls in
+  # all of Python.  Sheez.
+  (cd initramfs && find -name '*plymouth*' -print0) |
+    xargs -0 @FEBOOTSTRAP_RUN@ initramfs -- rm -rf
+  (cd initramfs && find -name '*python*' -print0) |
+    xargs -0 @FEBOOTSTRAP_RUN@ initramfs -- rm -rf
+
+  # In Fedora >= 11, it pulls in all of Perl from somewhere.  Nuke from orbit.
+  @FEBOOTSTRAP_RUN@ initramfs -- rm -rf /usr/lib/perl5 /usr/lib64/perl5
+
+  # Anaconda?  JPEG images?
+  @FEBOOTSTRAP_RUN@ initramfs -- rm -rf /usr/lib/anaconda-runtime
+
+  # Don't need any firmware.
+  @FEBOOTSTRAP_RUN@ initramfs -- rm -rf /lib/firmware
+
+  # Don't need any keyboard maps.
+  @FEBOOTSTRAP_RUN@ initramfs -- rm -rf /lib/kbd
+
+  # Remove anything in home directory.  Because this is potentially
+  # liable to monstrous fuck-ups, we don't put a slash before 'home'.
+  (cd initramfs && echo home/*) |
+    xargs @FEBOOTSTRAP_RUN@ initramfs -- rm -rf
+
+  # Remove /var/lib/yum stuff.
+  @FEBOOTSTRAP_RUN@ initramfs -- rm -rf /var/lib/yum
+
+  # Remove some unreadable binaries which are incompatible with
+  # the supermin appliance.  Since these binaries can't be read
+  # from the host filesystem, they generate warnings like:
+  #   cpio: ./usr/bin/chfn: Cannot open: Permission denied
+  # These binaries are not needed for operation of the appliance.
+  @FEBOOTSTRAP_RUN@ initramfs -- rm -f \
+    /usr/bin/chfn \
+    /usr/bin/chsh \
+    /usr/libexec/pt_chown \
+    /usr/sbin/groupdel \
+    /usr/sbin/groupadd \
+    /usr/sbin/useradd \
+    /usr/sbin/tzdata-update \
+    /usr/sbin/userdel \
+    /usr/sbin/usermod \
+    /usr/sbin/groupmod \
+    /usr/sbin/groupmems \
+    /sbin/unix_update \
+    $(cd initramfs && echo usr/sbin/glibc_post_upgrade.*)
+
+  # Kernel modules take up nearly half of the image.  Only include ones
+  # which are on the whitelist.
+  exec 5<appliance/kmod.whitelist
+  whitelist=
+  while read kmod 0<&5; do
+      whitelist="$whitelist -a -not -name $kmod"
+  done
+  exec 5<&-
+
+  (cd initramfs && \
+    find lib/modules/*/kernel -name '*.ko' $whitelist -a -print0 ) |
+    xargs -0 febootstrap-run initramfs -- rm
+
+  # Pull the kernel out into the current directory.  We don't want it in
+  # the initramfs image.
+  cp initramfs/boot/vmlinuz* $koutput
+  @FEBOOTSTRAP_RUN@ initramfs -- rm -rf boot
+
+  # Minimize the image.
+  @FEBOOTSTRAP_MINIMIZE@ initramfs
+
+  # Add some missing configuration files.
+  if [ ! -f initramfs/etc/hosts ]; then
+      cat > hosts.new <<'__EOF__'
+  127.0.0.1 guestfs localhost.localdomain localhost
+  ::1       localhost6.localdomain6 localhost6
+__EOF__
+      @FEBOOTSTRAP_INSTALL@ initramfs hosts.new /etc/hosts 0644 root.root
+      rm hosts.new
+  fi
+
+  if [ ! -f initramfs/etc/fstab ]; then
+      @FEBOOTSTRAP_RUN@ initramfs -- touch /etc/fstab
+  fi
+
+  echo nameserver 10.0.2.3 > resolv.conf.new
+  @FEBOOTSTRAP_INSTALL@ initramfs resolv.conf.new /etc/resolv.conf 0644 root.root
+  rm resolv.conf.new
+
+  ls -lh $koutput
+
+  # Now directly run the update script to copy/update the daemon in the
+  # initramfs.
+  cd appliance && bash update.sh
+
+elif [ "@DIST@" = "DEBIAN" ]; then
+  cd @top_builddir@/appliance
+  debirf make -n debian
+fi
+
diff --git a/appliance/packagelist.in b/appliance/packagelist.in
new file mode 100644 (file)
index 0000000..9dbef11
--- /dev/null
@@ -0,0 +1,42 @@
+/* This is the list of distro packages which are
+ * installed on the appliance.
+ *
+ * This file is processed by cpp with one of the
+ * following symbols defined (depending on the distro):
+ *
+ *   REDHAT=1     For Fedora, RHEL, EPEL and workalikes.
+ *   DEBIAN=1     For Debian based distros.
+ */
+
+#if REDHAT == 1
+  augeas-libs
+  iputils
+  kernel
+  MAKEDEV
+  ntfsprogs
+  scrub
+  udev
+  util-linux-ng
+#elif DEBIAN == 1
+  bsdmainutils
+  iproute
+  libaugeas0
+  udev
+  util-linux
+#endif
+
+bash
+binutils
+coreutils
+dosfstools
+file
+grub
+lsof
+lvm2
+module-init-tools
+net-tools
+ntfs-3g
+procps
+strace
+zerofree
+
similarity index 73%
rename from appliance/update-initramfs.sh.in
rename to appliance/supermin-make.sh.in
index 3b779f8..c40dec9 100755 (executable)
@@ -16,8 +16,8 @@
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-# Update the daemon inside an existing initramfs.  Avoids the
-# timeconsuming rebuild.
+# Build the supermin appliance.
+# Read the README file!
 
 unset CDPATH
 
@@ -25,12 +25,12 @@ set -e
 
 cd @top_builddir@
 
-output=appliance/initramfs.@REPO@.@host_cpu@.img
-
-# Copy the daemon into the filesystem.
-@FEBOOTSTRAP_INSTALL@ initramfs daemon/guestfsd /sbin/guestfsd 0755 root.root
+output=appliance/initramfs.@REPO@.@host_cpu@.supermin.img
 
 # Generate final image.
-@FEBOOTSTRAP_TO_INITRAMFS@ initramfs > $output-t
+@FEBOOTSTRAP_TO_INITRAMFS@ \
+  --nocompress \
+  --files=$(pwd)/appliance/supermin.incfiles \
+  initramfs > $output-t
 mv $output-t $output
 ls -lh $output
diff --git a/appliance/supermin-split.sh.in b/appliance/supermin-split.sh.in
new file mode 100755 (executable)
index 0000000..fe4ab6e
--- /dev/null
@@ -0,0 +1,93 @@
+#!/bin/bash -
+# @configure_input@
+# Copyright (C) 2009 Red Hat Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+# Decide which files will stay in the supermin appliance and which
+# files will be pulled out of the host at runtime.
+#
+# Read the README file!
+#
+# The basic idea is that we create two output files, one containing
+# the files that will stay, and the other listing the files that
+# will be pulled from the host (ie. not go into the appliance now).
+#
+# The list of files that stay ('supermin.incfiles') is just a straight
+# list of files and directories.
+#
+# The list of files that come from the host ('*.supermin.hostfiles')
+# can include wildcards, to allow libraries to be upgraded on the
+# host.
+
+unset CDPATH
+
+set -e
+
+cd @top_builddir@/initramfs
+
+incfiles=../appliance/supermin.incfiles
+hostfiles=../appliance/initramfs.@REPO@.@host_cpu@.supermin.hostfiles
+
+exec 5>$incfiles
+exec 6>$hostfiles
+
+# Note currently the initramfs contains ~2500 files, and none have
+# "funny characters" in the names.  So this is reasonable just to
+# simplify the script.
+for path in $(find -not -name fakeroot.log); do
+    dir=$(dirname "$path")
+    file=$(basename "$path")
+
+    # All we're going to keep are the special files /init, the daemon,
+    # configuration files (/etc), devices and modifiable stuff (/var).
+    if [ "$path" = "./init" -o "$file" = "guestfsd" ]; then
+       echo "$path" >&5
+
+    elif [[ "$path" =~ '^\./etc' || "$path" =~ '^./dev' || "$path" =~ '^\./var' ]]; then
+       echo "$path" >&5
+
+    # Kernel modules are always copied in from the host, including all
+    # the dependency files.
+    elif [[ "$path" =~ '^\./lib/modules/' ]]; then
+       :
+
+    elif [ -d "$path" ]; then
+       # Always write directory names to both output files.
+       echo "$path" >&5
+       echo "$path" >&6
+
+    # Some libraries need fixed version numbers replaced by wildcards.
+
+    elif [[ "$file" =~ '^ld-[.0-9]+\.so$' ]]; then
+       echo "$dir/ld-*.so" >&6
+
+    # libfoo-1.2.3.so
+    elif [[ "$file" =~ '^lib(.*)-[-.0-9]+\.so$' ]]; then
+       echo "$dir/lib${BASH_REMATCH[1]}-*.so" >&6
+
+    # libfoo-1.2.3.so.1.2.3 (but NOT '*.so.N')
+    elif [[ "$file" =~ '^lib(.*)-[-.0-9]+\.so\.([0-9]+)\.' ]]; then
+       echo "$dir/lib${BASH_REMATCH[1]}-*.so.${BASH_REMATCH[2]}.*" >&6
+
+    # libfoo.so.1.2.3 (but NOT '*.so.N')
+    elif [[ "$file" =~ '^lib(.*)\.so\.([0-9]+)\.' ]]; then
+       echo "$dir/lib${BASH_REMATCH[1]}.so.${BASH_REMATCH[2]}.*" >&6
+
+    else
+       # Anything else comes from the host directly.
+       echo "$path" >&6
+    fi
+done
diff --git a/appliance/update.sh.in b/appliance/update.sh.in
new file mode 100755 (executable)
index 0000000..01e22b6
--- /dev/null
@@ -0,0 +1,49 @@
+#!/bin/bash -
+# @configure_input@
+# Copyright (C) 2009 Red Hat Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+# Update the init script or daemon inside an existing initramfs.
+# Avoids the timeconsuming rebuild.
+
+unset CDPATH
+
+set -e
+
+if [ "@DIST@" = "REDHAT" ]; then
+  cd @top_builddir@
+  output=appliance/initramfs.@REPO@.@host_cpu@.img
+
+  # Create the init script.
+  @FEBOOTSTRAP_INSTALL@ initramfs appliance/init /init 0755 root.root
+
+  # Copy the daemon into the filesystem.
+  @FEBOOTSTRAP_INSTALL@ initramfs daemon/guestfsd /sbin/guestfsd 0755 root.root
+
+  # Generate final image.
+  @FEBOOTSTRAP_TO_INITRAMFS@ initramfs > $output-t
+  mv $output-t $output
+  ls -lh $output
+elif [ "@DIST@" = "DEBIAN" ]; then
+  cd @top_builddir@/appliance
+
+  output=initramfs.@REPO@.@host_cpu@.img
+  vmlinuz=vmlinuz.@REPO@.@host_cpu@
+
+  ln -sf debian/debirf-libguestfs_@REPO@*.cgz $output
+  ln -sf debian/vmlinuz-* $vmlinuz
+fi
+
diff --git a/capitests/tests.c b/capitests/tests.c
deleted file mode 100644 (file)
index 536da7f..0000000
+++ /dev/null
@@ -1,16651 +0,0 @@
-/* libguestfs generated file
- * WARNING: THIS FILE IS GENERATED BY 'src/generator.ml'.
- * ANY CHANGES YOU MAKE TO THIS FILE WILL BE LOST.
- *
- * Copyright (C) 2009 Red Hat Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <fcntl.h>
-
-#include "guestfs.h"
-
-static guestfs_h *g;
-static int suppress_error = 0;
-
-static void print_error (guestfs_h *g, void *data, const char *msg)
-{
-  if (!suppress_error)
-    fprintf (stderr, "%s\n", msg);
-}
-
-static void print_strings (char * const * const argv)
-{
-  int argc;
-
-  for (argc = 0; argv[argc] != NULL; ++argc)
-    printf ("\t%s\n", argv[argc]);
-}
-
-/*
-static void print_table (char * const * const argv)
-{
-  int i;
-
-  for (i = 0; argv[i] != NULL; i += 2)
-    printf ("%s: %s\n", argv[i], argv[i+1]);
-}
-*/
-
-static void no_test_warnings (void)
-{
-  fprintf (stderr, "warning: \"guestfs_test0\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_test0rint\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_test0rinterr\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_test0rint64\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_test0rint64err\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_test0rbool\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_test0rboolerr\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_test0rconststring\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_test0rconststringerr\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_test0rstring\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_test0rstringerr\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_test0rstringlist\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_test0rstringlisterr\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_test0rintbool\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_test0rintboolerr\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_test0rpvlist\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_test0rpvlisterr\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_test0rvglist\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_test0rvglisterr\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_test0rlvlist\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_test0rlvlisterr\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_test0rstat\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_test0rstaterr\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_test0rstatvfs\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_test0rstatvfserr\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_test0rhashtable\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_test0rhashtableerr\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_launch\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_wait_ready\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_kill_subprocess\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_add_drive\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_add_cdrom\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_add_drive_ro\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_config\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_set_qemu\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_get_qemu\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_set_path\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_get_path\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_set_append\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_get_append\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_set_autosync\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_get_autosync\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_set_verbose\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_get_verbose\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_is_ready\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_is_config\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_is_launching\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_is_busy\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_get_state\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_set_busy\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_set_ready\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_end_busy\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_ll\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_pvs_full\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_vgs_full\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_lvs_full\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_aug_init\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_aug_close\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_aug_defvar\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_aug_defnode\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_aug_get\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_aug_set\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_aug_insert\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_aug_rm\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_aug_mv\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_aug_match\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_aug_save\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_aug_load\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_aug_ls\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_chmod\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_chown\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_sfdisk\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_lvm_remove_all\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_tune2fs_l\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_blockdev_setbsz\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_tar_out\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_tgz_out\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_mount_options\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_mount_vfs\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_debug\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_get_e2label\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_get_e2uuid\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_pvresize\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_sfdisk_N\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_sfdisk_l\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_sfdisk_kernel_geometry\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_sfdisk_disk_geometry\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_vg_activate_all\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_vg_activate\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_resize2fs\" has no tests\n");
-  fprintf (stderr, "warning: \"guestfs_e2fsck_f\" has no tests\n");
-}
-
-static int test_ntfs_3g_probe_0_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_NTFS_3G_PROBE_0");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_NTFS_3G_PROBE");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_ntfs_3g_probe_0 (void)
-{
-  if (test_ntfs_3g_probe_0_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_ntfs_3g_probe_0");
-    return 0;
-  }
-
-  /* InitNone|InitEmpty for test_ntfs_3g_probe_0 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputInt for ntfs_3g_probe (0) */
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ntfs";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_ntfs_3g_probe (g, 1, device);
-    if (r == -1)
-      return -1;
-    if (r != 0) {
-      fprintf (stderr, "test_ntfs_3g_probe_0: expected 0 but got %d\n",               (int) r);
-      return -1;
-    }
-  }
-  return 0;
-}
-
-static int test_ntfs_3g_probe_1_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_NTFS_3G_PROBE_1");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_NTFS_3G_PROBE");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_ntfs_3g_probe_1 (void)
-{
-  if (test_ntfs_3g_probe_1_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_ntfs_3g_probe_1");
-    return 0;
-  }
-
-  /* InitNone|InitEmpty for test_ntfs_3g_probe_1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputInt for ntfs_3g_probe (1) */
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_ntfs_3g_probe (g, 1, device);
-    if (r == -1)
-      return -1;
-    if (r != 12) {
-      fprintf (stderr, "test_ntfs_3g_probe_1: expected 12 but got %d\n",               (int) r);
-      return -1;
-    }
-  }
-  return 0;
-}
-
-static int test_sleep_0_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_SLEEP_0");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_SLEEP");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_sleep_0 (void)
-{
-  if (test_sleep_0_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_sleep_0");
-    return 0;
-  }
-
-  /* InitNone|InitEmpty for test_sleep_0 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  /* TestRun for sleep (0) */
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_sleep (g, 1);
-    if (r == -1)
-      return -1;
-  }
-  return 0;
-}
-
-static int test_find_0_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_FIND_0");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_FIND");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_find_0 (void)
-{
-  if (test_find_0_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_find_0");
-    return 0;
-  }
-
-  /* InitBasicFS for test_find_0: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputList for find (0) */
-  {
-    char directory[] = "/";
-    char **r;
-    int i;
-    suppress_error = 0;
-    r = guestfs_find (g, directory);
-    if (r == NULL)
-      return -1;
-    if (!r[0]) {
-      fprintf (stderr, "test_find_0: short list returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    {
-      char expected[] = "lost+found";
-      if (strcmp (r[0], expected) != 0) {
-        fprintf (stderr, "test_find_0: expected \"%s\" but got \"%s\"\n", expected, r[0]);
-        return -1;
-      }
-    }
-    if (r[1] != NULL) {
-      fprintf (stderr, "test_find_0: extra elements returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    for (i = 0; r[i] != NULL; ++i)
-      free (r[i]);
-    free (r);
-  }
-  return 0;
-}
-
-static int test_find_1_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_FIND_1");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_FIND");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_find_1 (void)
-{
-  if (test_find_1_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_find_1");
-    return 0;
-  }
-
-  /* InitBasicFS for test_find_1: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputList for find (1) */
-  {
-    char path[] = "/a";
-    int r;
-    suppress_error = 0;
-    r = guestfs_touch (g, path);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/b";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkdir (g, path);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/b/c";
-    int r;
-    suppress_error = 0;
-    r = guestfs_touch (g, path);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char directory[] = "/";
-    char **r;
-    int i;
-    suppress_error = 0;
-    r = guestfs_find (g, directory);
-    if (r == NULL)
-      return -1;
-    if (!r[0]) {
-      fprintf (stderr, "test_find_1: short list returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    {
-      char expected[] = "a";
-      if (strcmp (r[0], expected) != 0) {
-        fprintf (stderr, "test_find_1: expected \"%s\" but got \"%s\"\n", expected, r[0]);
-        return -1;
-      }
-    }
-    if (!r[1]) {
-      fprintf (stderr, "test_find_1: short list returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    {
-      char expected[] = "b";
-      if (strcmp (r[1], expected) != 0) {
-        fprintf (stderr, "test_find_1: expected \"%s\" but got \"%s\"\n", expected, r[1]);
-        return -1;
-      }
-    }
-    if (!r[2]) {
-      fprintf (stderr, "test_find_1: short list returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    {
-      char expected[] = "b/c";
-      if (strcmp (r[2], expected) != 0) {
-        fprintf (stderr, "test_find_1: expected \"%s\" but got \"%s\"\n", expected, r[2]);
-        return -1;
-      }
-    }
-    if (!r[3]) {
-      fprintf (stderr, "test_find_1: short list returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    {
-      char expected[] = "lost+found";
-      if (strcmp (r[3], expected) != 0) {
-        fprintf (stderr, "test_find_1: expected \"%s\" but got \"%s\"\n", expected, r[3]);
-        return -1;
-      }
-    }
-    if (r[4] != NULL) {
-      fprintf (stderr, "test_find_1: extra elements returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    for (i = 0; r[i] != NULL; ++i)
-      free (r[i]);
-    free (r);
-  }
-  return 0;
-}
-
-static int test_find_2_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_FIND_2");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_FIND");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_find_2 (void)
-{
-  if (test_find_2_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_find_2");
-    return 0;
-  }
-
-  /* InitBasicFS for test_find_2: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputList for find (2) */
-  {
-    char path[] = "/a/b/c";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkdir_p (g, path);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/a/b/c/d";
-    int r;
-    suppress_error = 0;
-    r = guestfs_touch (g, path);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char directory[] = "/a/b/";
-    char **r;
-    int i;
-    suppress_error = 0;
-    r = guestfs_find (g, directory);
-    if (r == NULL)
-      return -1;
-    if (!r[0]) {
-      fprintf (stderr, "test_find_2: short list returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    {
-      char expected[] = "c";
-      if (strcmp (r[0], expected) != 0) {
-        fprintf (stderr, "test_find_2: expected \"%s\" but got \"%s\"\n", expected, r[0]);
-        return -1;
-      }
-    }
-    if (!r[1]) {
-      fprintf (stderr, "test_find_2: short list returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    {
-      char expected[] = "c/d";
-      if (strcmp (r[1], expected) != 0) {
-        fprintf (stderr, "test_find_2: expected \"%s\" but got \"%s\"\n", expected, r[1]);
-        return -1;
-      }
-    }
-    if (r[2] != NULL) {
-      fprintf (stderr, "test_find_2: extra elements returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    for (i = 0; r[i] != NULL; ++i)
-      free (r[i]);
-    free (r);
-  }
-  return 0;
-}
-
-static int test_lvresize_0_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_LVRESIZE_0");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_LVRESIZE");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_lvresize_0 (void)
-{
-  if (test_lvresize_0_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_lvresize_0");
-    return 0;
-  }
-
-  /* InitNone|InitEmpty for test_lvresize_0 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutput for lvresize (0) */
-  char expected[] = "test content";
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_pvcreate (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char volgroup[] = "VG";
-    char physvols_0[] = "/dev/sda1";
-    char *physvols[] = {
-      physvols_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_vgcreate (g, volgroup, physvols);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char logvol[] = "LV";
-    char volgroup[] = "VG";
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvcreate (g, logvol, volgroup, 10);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/VG/LV";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/VG/LV";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/new";
-    char content[] = "test content";
-    int r;
-    suppress_error = 0;
-    r = guestfs_write_file (g, path, content, 0);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char pathordevice[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount (g, pathordevice);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/VG/LV";
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvresize (g, device, 20);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/VG/LV";
-    int r;
-    suppress_error = 0;
-    r = guestfs_e2fsck_f (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/VG/LV";
-    int r;
-    suppress_error = 0;
-    r = guestfs_resize2fs (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/VG/LV";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/new";
-    char *r;
-    suppress_error = 0;
-    r = guestfs_cat (g, path);
-    if (r == NULL)
-      return -1;
-    if (strcmp (r, expected) != 0) {
-      fprintf (stderr, "test_lvresize_0: expected \"%s\" but got \"%s\"\n", expected, r);
-      return -1;
-    }
-    free (r);
-  }
-  return 0;
-}
-
-static int test_zerofree_0_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_ZEROFREE_0");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_ZEROFREE");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_zerofree_0 (void)
-{
-  if (test_zerofree_0_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_zerofree_0");
-    return 0;
-  }
-
-  /* InitNone|InitEmpty for test_zerofree_0 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutput for zerofree (0) */
-  char expected[] = "test file";
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext3";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/new";
-    char content[] = "test file";
-    int r;
-    suppress_error = 0;
-    r = guestfs_write_file (g, path, content, 0);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char pathordevice[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount (g, pathordevice);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_zerofree (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/new";
-    char *r;
-    suppress_error = 0;
-    r = guestfs_cat (g, path);
-    if (r == NULL)
-      return -1;
-    if (strcmp (r, expected) != 0) {
-      fprintf (stderr, "test_zerofree_0: expected \"%s\" but got \"%s\"\n", expected, r);
-      return -1;
-    }
-    free (r);
-  }
-  return 0;
-}
-
-static int test_hexdump_0_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_HEXDUMP_0");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_HEXDUMP");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_hexdump_0 (void)
-{
-  if (test_hexdump_0_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_hexdump_0");
-    return 0;
-  }
-
-  /* InitBasicFS for test_hexdump_0: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutput for hexdump (0) */
-  char expected[] = "00000000  68 65 6c 6c 6f 0a 77 6f  72 6c 64 0a              |hello.world.|\n0000000c\n";
-  {
-    char path[] = "/new";
-    char content[] = "hello\nworld\n";
-    int r;
-    suppress_error = 0;
-    r = guestfs_write_file (g, path, content, 12);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/new";
-    char *r;
-    suppress_error = 0;
-    r = guestfs_hexdump (g, path);
-    if (r == NULL)
-      return -1;
-    if (strcmp (r, expected) != 0) {
-      fprintf (stderr, "test_hexdump_0: expected \"%s\" but got \"%s\"\n", expected, r);
-      return -1;
-    }
-    free (r);
-  }
-  return 0;
-}
-
-static int test_strings_e_0_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_STRINGS_E_0");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_STRINGS_E");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_strings_e_0 (void)
-{
-  if (test_strings_e_0_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_strings_e_0");
-    return 0;
-  }
-
-  /* InitBasicFS for test_strings_e_0: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputList for strings_e (0) */
-  {
-    char path[] = "/new";
-    char content[] = "hello\nworld\n";
-    int r;
-    suppress_error = 0;
-    r = guestfs_write_file (g, path, content, 0);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char encoding[] = "b";
-    char path[] = "/new";
-    char **r;
-    int i;
-    suppress_error = 0;
-    r = guestfs_strings_e (g, encoding, path);
-    if (r == NULL)
-      return -1;
-    if (r[0] != NULL) {
-      fprintf (stderr, "test_strings_e_0: extra elements returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    for (i = 0; r[i] != NULL; ++i)
-      free (r[i]);
-    free (r);
-  }
-  return 0;
-}
-
-static int test_strings_e_1_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_STRINGS_E_1");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_STRINGS_E");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_strings_e_1 (void)
-{
-  if (test_strings_e_1_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_strings_e_1");
-    return 0;
-  }
-
-  printf ("%s skipped (reason: test disabled in generator)\n", "test_strings_e_1");
-  return 0;
-}
-
-static int test_strings_0_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_STRINGS_0");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_STRINGS");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_strings_0 (void)
-{
-  if (test_strings_0_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_strings_0");
-    return 0;
-  }
-
-  /* InitBasicFS for test_strings_0: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputList for strings (0) */
-  {
-    char path[] = "/new";
-    char content[] = "hello\nworld\n";
-    int r;
-    suppress_error = 0;
-    r = guestfs_write_file (g, path, content, 0);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/new";
-    char **r;
-    int i;
-    suppress_error = 0;
-    r = guestfs_strings (g, path);
-    if (r == NULL)
-      return -1;
-    if (!r[0]) {
-      fprintf (stderr, "test_strings_0: short list returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    {
-      char expected[] = "hello";
-      if (strcmp (r[0], expected) != 0) {
-        fprintf (stderr, "test_strings_0: expected \"%s\" but got \"%s\"\n", expected, r[0]);
-        return -1;
-      }
-    }
-    if (!r[1]) {
-      fprintf (stderr, "test_strings_0: short list returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    {
-      char expected[] = "world";
-      if (strcmp (r[1], expected) != 0) {
-        fprintf (stderr, "test_strings_0: expected \"%s\" but got \"%s\"\n", expected, r[1]);
-        return -1;
-      }
-    }
-    if (r[2] != NULL) {
-      fprintf (stderr, "test_strings_0: extra elements returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    for (i = 0; r[i] != NULL; ++i)
-      free (r[i]);
-    free (r);
-  }
-  return 0;
-}
-
-static int test_strings_1_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_STRINGS_1");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_STRINGS");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_strings_1 (void)
-{
-  if (test_strings_1_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_strings_1");
-    return 0;
-  }
-
-  /* InitBasicFS for test_strings_1: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputList for strings (1) */
-  {
-    char path[] = "/new";
-    int r;
-    suppress_error = 0;
-    r = guestfs_touch (g, path);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/new";
-    char **r;
-    int i;
-    suppress_error = 0;
-    r = guestfs_strings (g, path);
-    if (r == NULL)
-      return -1;
-    if (r[0] != NULL) {
-      fprintf (stderr, "test_strings_1: extra elements returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    for (i = 0; r[i] != NULL; ++i)
-      free (r[i]);
-    free (r);
-  }
-  return 0;
-}
-
-static int test_equal_0_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_EQUAL_0");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_EQUAL");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_equal_0 (void)
-{
-  if (test_equal_0_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_equal_0");
-    return 0;
-  }
-
-  /* InitBasicFS for test_equal_0: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputTrue for equal (0) */
-  {
-    char path[] = "/file1";
-    char content[] = "contents of a file";
-    int r;
-    suppress_error = 0;
-    r = guestfs_write_file (g, path, content, 0);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char src[] = "/file1";
-    char dest[] = "/file2";
-    int r;
-    suppress_error = 0;
-    r = guestfs_cp (g, src, dest);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char file1[] = "/file1";
-    char file2[] = "/file2";
-    int r;
-    suppress_error = 0;
-    r = guestfs_equal (g, file1, file2);
-    if (r == -1)
-      return -1;
-    if (!r) {
-      fprintf (stderr, "test_equal_0: expected true, got false\n");
-      return -1;
-    }
-  }
-  return 0;
-}
-
-static int test_equal_1_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_EQUAL_1");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_EQUAL");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_equal_1 (void)
-{
-  if (test_equal_1_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_equal_1");
-    return 0;
-  }
-
-  /* InitBasicFS for test_equal_1: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputFalse for equal (1) */
-  {
-    char path[] = "/file1";
-    char content[] = "contents of a file";
-    int r;
-    suppress_error = 0;
-    r = guestfs_write_file (g, path, content, 0);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/file2";
-    char content[] = "contents of another file";
-    int r;
-    suppress_error = 0;
-    r = guestfs_write_file (g, path, content, 0);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char file1[] = "/file1";
-    char file2[] = "/file2";
-    int r;
-    suppress_error = 0;
-    r = guestfs_equal (g, file1, file2);
-    if (r == -1)
-      return -1;
-    if (r) {
-      fprintf (stderr, "test_equal_1: expected false, got true\n");
-      return -1;
-    }
-  }
-  return 0;
-}
-
-static int test_equal_2_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_EQUAL_2");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_EQUAL");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_equal_2 (void)
-{
-  if (test_equal_2_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_equal_2");
-    return 0;
-  }
-
-  /* InitBasicFS for test_equal_2: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestLastFail for equal (2) */
-  {
-    char file1[] = "/file1";
-    char file2[] = "/file2";
-    int r;
-    suppress_error = 1;
-    r = guestfs_equal (g, file1, file2);
-    if (r != -1)
-      return -1;
-  }
-  return 0;
-}
-
-static int test_ping_daemon_0_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_PING_DAEMON_0");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_PING_DAEMON");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_ping_daemon_0 (void)
-{
-  if (test_ping_daemon_0_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_ping_daemon_0");
-    return 0;
-  }
-
-  /* InitNone|InitEmpty for test_ping_daemon_0 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  /* TestRun for ping_daemon (0) */
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_ping_daemon (g);
-    if (r == -1)
-      return -1;
-  }
-  return 0;
-}
-
-static int test_dmesg_0_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_DMESG_0");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_DMESG");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_dmesg_0 (void)
-{
-  if (test_dmesg_0_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_dmesg_0");
-    return 0;
-  }
-
-  /* InitNone|InitEmpty for test_dmesg_0 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  /* TestRun for dmesg (0) */
-  {
-    char *r;
-    suppress_error = 0;
-    r = guestfs_dmesg (g);
-    if (r == NULL)
-      return -1;
-    free (r);
-  }
-  return 0;
-}
-
-static int test_drop_caches_0_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_DROP_CACHES_0");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_DROP_CACHES");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_drop_caches_0 (void)
-{
-  if (test_drop_caches_0_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_drop_caches_0");
-    return 0;
-  }
-
-  /* InitNone|InitEmpty for test_drop_caches_0 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  /* TestRun for drop_caches (0) */
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_drop_caches (g, 3);
-    if (r == -1)
-      return -1;
-  }
-  return 0;
-}
-
-static int test_mv_0_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_MV_0");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_MV");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_mv_0 (void)
-{
-  if (test_mv_0_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_mv_0");
-    return 0;
-  }
-
-  /* InitBasicFS for test_mv_0: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutput for mv (0) */
-  char expected[] = "file content";
-  {
-    char path[] = "/old";
-    char content[] = "file content";
-    int r;
-    suppress_error = 0;
-    r = guestfs_write_file (g, path, content, 0);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char src[] = "/old";
-    char dest[] = "/new";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mv (g, src, dest);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/new";
-    char *r;
-    suppress_error = 0;
-    r = guestfs_cat (g, path);
-    if (r == NULL)
-      return -1;
-    if (strcmp (r, expected) != 0) {
-      fprintf (stderr, "test_mv_0: expected \"%s\" but got \"%s\"\n", expected, r);
-      return -1;
-    }
-    free (r);
-  }
-  return 0;
-}
-
-static int test_mv_1_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_MV_1");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_MV");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_mv_1 (void)
-{
-  if (test_mv_1_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_mv_1");
-    return 0;
-  }
-
-  /* InitBasicFS for test_mv_1: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputFalse for mv (1) */
-  {
-    char path[] = "/old";
-    char content[] = "file content";
-    int r;
-    suppress_error = 0;
-    r = guestfs_write_file (g, path, content, 0);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char src[] = "/old";
-    char dest[] = "/new";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mv (g, src, dest);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/old";
-    int r;
-    suppress_error = 0;
-    r = guestfs_is_file (g, path);
-    if (r == -1)
-      return -1;
-    if (r) {
-      fprintf (stderr, "test_mv_1: expected false, got true\n");
-      return -1;
-    }
-  }
-  return 0;
-}
-
-static int test_cp_a_0_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_CP_A_0");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_CP_A");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_cp_a_0 (void)
-{
-  if (test_cp_a_0_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_cp_a_0");
-    return 0;
-  }
-
-  /* InitBasicFS for test_cp_a_0: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutput for cp_a (0) */
-  char expected[] = "file content";
-  {
-    char path[] = "/olddir";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkdir (g, path);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/newdir";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkdir (g, path);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/olddir/file";
-    char content[] = "file content";
-    int r;
-    suppress_error = 0;
-    r = guestfs_write_file (g, path, content, 0);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char src[] = "/olddir";
-    char dest[] = "/newdir";
-    int r;
-    suppress_error = 0;
-    r = guestfs_cp_a (g, src, dest);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/newdir/olddir/file";
-    char *r;
-    suppress_error = 0;
-    r = guestfs_cat (g, path);
-    if (r == NULL)
-      return -1;
-    if (strcmp (r, expected) != 0) {
-      fprintf (stderr, "test_cp_a_0: expected \"%s\" but got \"%s\"\n", expected, r);
-      return -1;
-    }
-    free (r);
-  }
-  return 0;
-}
-
-static int test_cp_0_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_CP_0");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_CP");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_cp_0 (void)
-{
-  if (test_cp_0_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_cp_0");
-    return 0;
-  }
-
-  /* InitBasicFS for test_cp_0: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutput for cp (0) */
-  char expected[] = "file content";
-  {
-    char path[] = "/old";
-    char content[] = "file content";
-    int r;
-    suppress_error = 0;
-    r = guestfs_write_file (g, path, content, 0);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char src[] = "/old";
-    char dest[] = "/new";
-    int r;
-    suppress_error = 0;
-    r = guestfs_cp (g, src, dest);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/new";
-    char *r;
-    suppress_error = 0;
-    r = guestfs_cat (g, path);
-    if (r == NULL)
-      return -1;
-    if (strcmp (r, expected) != 0) {
-      fprintf (stderr, "test_cp_0: expected \"%s\" but got \"%s\"\n", expected, r);
-      return -1;
-    }
-    free (r);
-  }
-  return 0;
-}
-
-static int test_cp_1_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_CP_1");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_CP");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_cp_1 (void)
-{
-  if (test_cp_1_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_cp_1");
-    return 0;
-  }
-
-  /* InitBasicFS for test_cp_1: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputTrue for cp (1) */
-  {
-    char path[] = "/old";
-    char content[] = "file content";
-    int r;
-    suppress_error = 0;
-    r = guestfs_write_file (g, path, content, 0);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char src[] = "/old";
-    char dest[] = "/new";
-    int r;
-    suppress_error = 0;
-    r = guestfs_cp (g, src, dest);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/old";
-    int r;
-    suppress_error = 0;
-    r = guestfs_is_file (g, path);
-    if (r == -1)
-      return -1;
-    if (!r) {
-      fprintf (stderr, "test_cp_1: expected true, got false\n");
-      return -1;
-    }
-  }
-  return 0;
-}
-
-static int test_cp_2_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_CP_2");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_CP");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_cp_2 (void)
-{
-  if (test_cp_2_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_cp_2");
-    return 0;
-  }
-
-  /* InitBasicFS for test_cp_2: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutput for cp (2) */
-  char expected[] = "file content";
-  {
-    char path[] = "/old";
-    char content[] = "file content";
-    int r;
-    suppress_error = 0;
-    r = guestfs_write_file (g, path, content, 0);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/dir";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkdir (g, path);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char src[] = "/old";
-    char dest[] = "/dir/new";
-    int r;
-    suppress_error = 0;
-    r = guestfs_cp (g, src, dest);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/dir/new";
-    char *r;
-    suppress_error = 0;
-    r = guestfs_cat (g, path);
-    if (r == NULL)
-      return -1;
-    if (strcmp (r, expected) != 0) {
-      fprintf (stderr, "test_cp_2: expected \"%s\" but got \"%s\"\n", expected, r);
-      return -1;
-    }
-    free (r);
-  }
-  return 0;
-}
-
-static int test_grub_install_0_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_GRUB_INSTALL_0");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_GRUB_INSTALL");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_grub_install_0 (void)
-{
-  if (test_grub_install_0_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_grub_install_0");
-    return 0;
-  }
-
-  /* InitBasicFS for test_grub_install_0: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputTrue for grub_install (0) */
-  {
-    char root[] = "/";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_grub_install (g, root, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/boot";
-    int r;
-    suppress_error = 0;
-    r = guestfs_is_dir (g, path);
-    if (r == -1)
-      return -1;
-    if (!r) {
-      fprintf (stderr, "test_grub_install_0: expected true, got false\n");
-      return -1;
-    }
-  }
-  return 0;
-}
-
-static int test_zero_0_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_ZERO_0");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_ZERO");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_zero_0 (void)
-{
-  if (test_zero_0_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_zero_0");
-    return 0;
-  }
-
-  /* InitBasicFS for test_zero_0: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutput for zero (0) */
-  char expected[] = "data";
-  {
-    char pathordevice[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount (g, pathordevice);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_zero (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/dev/sda1";
-    char *r;
-    suppress_error = 0;
-    r = guestfs_file (g, path);
-    if (r == NULL)
-      return -1;
-    if (strcmp (r, expected) != 0) {
-      fprintf (stderr, "test_zero_0: expected \"%s\" but got \"%s\"\n", expected, r);
-      return -1;
-    }
-    free (r);
-  }
-  return 0;
-}
-
-static int test_fsck_0_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_FSCK_0");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_FSCK");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_fsck_0 (void)
-{
-  if (test_fsck_0_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_fsck_0");
-    return 0;
-  }
-
-  /* InitBasicFS for test_fsck_0: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputInt for fsck (0) */
-  {
-    char pathordevice[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount (g, pathordevice);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_fsck (g, fstype, device);
-    if (r == -1)
-      return -1;
-    if (r != 0) {
-      fprintf (stderr, "test_fsck_0: expected 0 but got %d\n",               (int) r);
-      return -1;
-    }
-  }
-  return 0;
-}
-
-static int test_fsck_1_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_FSCK_1");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_FSCK");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_fsck_1 (void)
-{
-  if (test_fsck_1_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_fsck_1");
-    return 0;
-  }
-
-  /* InitBasicFS for test_fsck_1: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputInt for fsck (1) */
-  {
-    char pathordevice[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount (g, pathordevice);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_zero (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_fsck (g, fstype, device);
-    if (r == -1)
-      return -1;
-    if (r != 8) {
-      fprintf (stderr, "test_fsck_1: expected 8 but got %d\n",               (int) r);
-      return -1;
-    }
-  }
-  return 0;
-}
-
-static int test_set_e2uuid_0_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_SET_E2UUID_0");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_SET_E2UUID");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_set_e2uuid_0 (void)
-{
-  if (test_set_e2uuid_0_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_set_e2uuid_0");
-    return 0;
-  }
-
-  /* InitBasicFS for test_set_e2uuid_0: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutput for set_e2uuid (0) */
-  char expected[] = "a3a61220-882b-4f61-89f4-cf24dcc7297d";
-  {
-    char device[] = "/dev/sda1";
-    char uuid[] = "a3a61220-882b-4f61-89f4-cf24dcc7297d";
-    int r;
-    suppress_error = 0;
-    r = guestfs_set_e2uuid (g, device, uuid);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char *r;
-    suppress_error = 0;
-    r = guestfs_get_e2uuid (g, device);
-    if (r == NULL)
-      return -1;
-    if (strcmp (r, expected) != 0) {
-      fprintf (stderr, "test_set_e2uuid_0: expected \"%s\" but got \"%s\"\n", expected, r);
-      return -1;
-    }
-    free (r);
-  }
-  return 0;
-}
-
-static int test_set_e2uuid_1_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_SET_E2UUID_1");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_SET_E2UUID");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_set_e2uuid_1 (void)
-{
-  if (test_set_e2uuid_1_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_set_e2uuid_1");
-    return 0;
-  }
-
-  /* InitBasicFS for test_set_e2uuid_1: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutput for set_e2uuid (1) */
-  char expected[] = "";
-  {
-    char device[] = "/dev/sda1";
-    char uuid[] = "clear";
-    int r;
-    suppress_error = 0;
-    r = guestfs_set_e2uuid (g, device, uuid);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char *r;
-    suppress_error = 0;
-    r = guestfs_get_e2uuid (g, device);
-    if (r == NULL)
-      return -1;
-    if (strcmp (r, expected) != 0) {
-      fprintf (stderr, "test_set_e2uuid_1: expected \"%s\" but got \"%s\"\n", expected, r);
-      return -1;
-    }
-    free (r);
-  }
-  return 0;
-}
-
-static int test_set_e2uuid_2_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_SET_E2UUID_2");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_SET_E2UUID");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_set_e2uuid_2 (void)
-{
-  if (test_set_e2uuid_2_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_set_e2uuid_2");
-    return 0;
-  }
-
-  /* InitBasicFS for test_set_e2uuid_2: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestRun for set_e2uuid (2) */
-  {
-    char device[] = "/dev/sda1";
-    char uuid[] = "random";
-    int r;
-    suppress_error = 0;
-    r = guestfs_set_e2uuid (g, device, uuid);
-    if (r == -1)
-      return -1;
-  }
-  return 0;
-}
-
-static int test_set_e2uuid_3_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_SET_E2UUID_3");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_SET_E2UUID");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_set_e2uuid_3 (void)
-{
-  if (test_set_e2uuid_3_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_set_e2uuid_3");
-    return 0;
-  }
-
-  /* InitBasicFS for test_set_e2uuid_3: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestRun for set_e2uuid (3) */
-  {
-    char device[] = "/dev/sda1";
-    char uuid[] = "time";
-    int r;
-    suppress_error = 0;
-    r = guestfs_set_e2uuid (g, device, uuid);
-    if (r == -1)
-      return -1;
-  }
-  return 0;
-}
-
-static int test_set_e2label_0_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_SET_E2LABEL_0");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_SET_E2LABEL");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_set_e2label_0 (void)
-{
-  if (test_set_e2label_0_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_set_e2label_0");
-    return 0;
-  }
-
-  /* InitBasicFS for test_set_e2label_0: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutput for set_e2label (0) */
-  char expected[] = "testlabel";
-  {
-    char device[] = "/dev/sda1";
-    char label[] = "testlabel";
-    int r;
-    suppress_error = 0;
-    r = guestfs_set_e2label (g, device, label);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char *r;
-    suppress_error = 0;
-    r = guestfs_get_e2label (g, device);
-    if (r == NULL)
-      return -1;
-    if (strcmp (r, expected) != 0) {
-      fprintf (stderr, "test_set_e2label_0: expected \"%s\" but got \"%s\"\n", expected, r);
-      return -1;
-    }
-    free (r);
-  }
-  return 0;
-}
-
-static int test_pvremove_0_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_PVREMOVE_0");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_PVREMOVE");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_pvremove_0 (void)
-{
-  if (test_pvremove_0_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_pvremove_0");
-    return 0;
-  }
-
-  /* InitNone|InitEmpty for test_pvremove_0 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputListOfDevices for pvremove (0) */
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_pvcreate (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char volgroup[] = "VG";
-    char physvols_0[] = "/dev/sda1";
-    char *physvols[] = {
-      physvols_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_vgcreate (g, volgroup, physvols);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char logvol[] = "LV1";
-    char volgroup[] = "VG";
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvcreate (g, logvol, volgroup, 50);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char logvol[] = "LV2";
-    char volgroup[] = "VG";
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvcreate (g, logvol, volgroup, 50);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char vgname[] = "VG";
-    int r;
-    suppress_error = 0;
-    r = guestfs_vgremove (g, vgname);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_pvremove (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char **r;
-    int i;
-    suppress_error = 0;
-    r = guestfs_lvs (g);
-    if (r == NULL)
-      return -1;
-    if (r[0] != NULL) {
-      fprintf (stderr, "test_pvremove_0: extra elements returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    for (i = 0; r[i] != NULL; ++i)
-      free (r[i]);
-    free (r);
-  }
-  return 0;
-}
-
-static int test_pvremove_1_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_PVREMOVE_1");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_PVREMOVE");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_pvremove_1 (void)
-{
-  if (test_pvremove_1_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_pvremove_1");
-    return 0;
-  }
-
-  /* InitNone|InitEmpty for test_pvremove_1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputListOfDevices for pvremove (1) */
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_pvcreate (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char volgroup[] = "VG";
-    char physvols_0[] = "/dev/sda1";
-    char *physvols[] = {
-      physvols_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_vgcreate (g, volgroup, physvols);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char logvol[] = "LV1";
-    char volgroup[] = "VG";
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvcreate (g, logvol, volgroup, 50);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char logvol[] = "LV2";
-    char volgroup[] = "VG";
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvcreate (g, logvol, volgroup, 50);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char vgname[] = "VG";
-    int r;
-    suppress_error = 0;
-    r = guestfs_vgremove (g, vgname);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_pvremove (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char **r;
-    int i;
-    suppress_error = 0;
-    r = guestfs_vgs (g);
-    if (r == NULL)
-      return -1;
-    if (r[0] != NULL) {
-      fprintf (stderr, "test_pvremove_1: extra elements returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    for (i = 0; r[i] != NULL; ++i)
-      free (r[i]);
-    free (r);
-  }
-  return 0;
-}
-
-static int test_pvremove_2_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_PVREMOVE_2");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_PVREMOVE");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_pvremove_2 (void)
-{
-  if (test_pvremove_2_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_pvremove_2");
-    return 0;
-  }
-
-  /* InitNone|InitEmpty for test_pvremove_2 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputListOfDevices for pvremove (2) */
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_pvcreate (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char volgroup[] = "VG";
-    char physvols_0[] = "/dev/sda1";
-    char *physvols[] = {
-      physvols_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_vgcreate (g, volgroup, physvols);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char logvol[] = "LV1";
-    char volgroup[] = "VG";
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvcreate (g, logvol, volgroup, 50);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char logvol[] = "LV2";
-    char volgroup[] = "VG";
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvcreate (g, logvol, volgroup, 50);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char vgname[] = "VG";
-    int r;
-    suppress_error = 0;
-    r = guestfs_vgremove (g, vgname);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_pvremove (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char **r;
-    int i;
-    suppress_error = 0;
-    r = guestfs_pvs (g);
-    if (r == NULL)
-      return -1;
-    if (r[0] != NULL) {
-      fprintf (stderr, "test_pvremove_2: extra elements returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    for (i = 0; r[i] != NULL; ++i)
-      free (r[i]);
-    free (r);
-  }
-  return 0;
-}
-
-static int test_vgremove_0_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_VGREMOVE_0");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_VGREMOVE");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_vgremove_0 (void)
-{
-  if (test_vgremove_0_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_vgremove_0");
-    return 0;
-  }
-
-  /* InitNone|InitEmpty for test_vgremove_0 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputList for vgremove (0) */
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_pvcreate (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char volgroup[] = "VG";
-    char physvols_0[] = "/dev/sda1";
-    char *physvols[] = {
-      physvols_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_vgcreate (g, volgroup, physvols);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char logvol[] = "LV1";
-    char volgroup[] = "VG";
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvcreate (g, logvol, volgroup, 50);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char logvol[] = "LV2";
-    char volgroup[] = "VG";
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvcreate (g, logvol, volgroup, 50);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char vgname[] = "VG";
-    int r;
-    suppress_error = 0;
-    r = guestfs_vgremove (g, vgname);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char **r;
-    int i;
-    suppress_error = 0;
-    r = guestfs_lvs (g);
-    if (r == NULL)
-      return -1;
-    if (r[0] != NULL) {
-      fprintf (stderr, "test_vgremove_0: extra elements returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    for (i = 0; r[i] != NULL; ++i)
-      free (r[i]);
-    free (r);
-  }
-  return 0;
-}
-
-static int test_vgremove_1_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_VGREMOVE_1");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_VGREMOVE");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_vgremove_1 (void)
-{
-  if (test_vgremove_1_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_vgremove_1");
-    return 0;
-  }
-
-  /* InitNone|InitEmpty for test_vgremove_1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputList for vgremove (1) */
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_pvcreate (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char volgroup[] = "VG";
-    char physvols_0[] = "/dev/sda1";
-    char *physvols[] = {
-      physvols_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_vgcreate (g, volgroup, physvols);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char logvol[] = "LV1";
-    char volgroup[] = "VG";
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvcreate (g, logvol, volgroup, 50);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char logvol[] = "LV2";
-    char volgroup[] = "VG";
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvcreate (g, logvol, volgroup, 50);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char vgname[] = "VG";
-    int r;
-    suppress_error = 0;
-    r = guestfs_vgremove (g, vgname);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char **r;
-    int i;
-    suppress_error = 0;
-    r = guestfs_vgs (g);
-    if (r == NULL)
-      return -1;
-    if (r[0] != NULL) {
-      fprintf (stderr, "test_vgremove_1: extra elements returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    for (i = 0; r[i] != NULL; ++i)
-      free (r[i]);
-    free (r);
-  }
-  return 0;
-}
-
-static int test_lvremove_0_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_LVREMOVE_0");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_LVREMOVE");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_lvremove_0 (void)
-{
-  if (test_lvremove_0_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_lvremove_0");
-    return 0;
-  }
-
-  /* InitNone|InitEmpty for test_lvremove_0 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputList for lvremove (0) */
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_pvcreate (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char volgroup[] = "VG";
-    char physvols_0[] = "/dev/sda1";
-    char *physvols[] = {
-      physvols_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_vgcreate (g, volgroup, physvols);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char logvol[] = "LV1";
-    char volgroup[] = "VG";
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvcreate (g, logvol, volgroup, 50);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char logvol[] = "LV2";
-    char volgroup[] = "VG";
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvcreate (g, logvol, volgroup, 50);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/VG/LV1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvremove (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char **r;
-    int i;
-    suppress_error = 0;
-    r = guestfs_lvs (g);
-    if (r == NULL)
-      return -1;
-    if (!r[0]) {
-      fprintf (stderr, "test_lvremove_0: short list returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    {
-      char expected[] = "/dev/VG/LV2";
-      if (strcmp (r[0], expected) != 0) {
-        fprintf (stderr, "test_lvremove_0: expected \"%s\" but got \"%s\"\n", expected, r[0]);
-        return -1;
-      }
-    }
-    if (r[1] != NULL) {
-      fprintf (stderr, "test_lvremove_0: extra elements returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    for (i = 0; r[i] != NULL; ++i)
-      free (r[i]);
-    free (r);
-  }
-  return 0;
-}
-
-static int test_lvremove_1_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_LVREMOVE_1");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_LVREMOVE");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_lvremove_1 (void)
-{
-  if (test_lvremove_1_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_lvremove_1");
-    return 0;
-  }
-
-  /* InitNone|InitEmpty for test_lvremove_1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputList for lvremove (1) */
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_pvcreate (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char volgroup[] = "VG";
-    char physvols_0[] = "/dev/sda1";
-    char *physvols[] = {
-      physvols_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_vgcreate (g, volgroup, physvols);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char logvol[] = "LV1";
-    char volgroup[] = "VG";
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvcreate (g, logvol, volgroup, 50);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char logvol[] = "LV2";
-    char volgroup[] = "VG";
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvcreate (g, logvol, volgroup, 50);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/VG";
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvremove (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char **r;
-    int i;
-    suppress_error = 0;
-    r = guestfs_lvs (g);
-    if (r == NULL)
-      return -1;
-    if (r[0] != NULL) {
-      fprintf (stderr, "test_lvremove_1: extra elements returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    for (i = 0; r[i] != NULL; ++i)
-      free (r[i]);
-    free (r);
-  }
-  return 0;
-}
-
-static int test_lvremove_2_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_LVREMOVE_2");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_LVREMOVE");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_lvremove_2 (void)
-{
-  if (test_lvremove_2_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_lvremove_2");
-    return 0;
-  }
-
-  /* InitNone|InitEmpty for test_lvremove_2 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputList for lvremove (2) */
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_pvcreate (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char volgroup[] = "VG";
-    char physvols_0[] = "/dev/sda1";
-    char *physvols[] = {
-      physvols_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_vgcreate (g, volgroup, physvols);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char logvol[] = "LV1";
-    char volgroup[] = "VG";
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvcreate (g, logvol, volgroup, 50);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char logvol[] = "LV2";
-    char volgroup[] = "VG";
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvcreate (g, logvol, volgroup, 50);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/VG";
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvremove (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char **r;
-    int i;
-    suppress_error = 0;
-    r = guestfs_vgs (g);
-    if (r == NULL)
-      return -1;
-    if (!r[0]) {
-      fprintf (stderr, "test_lvremove_2: short list returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    {
-      char expected[] = "VG";
-      if (strcmp (r[0], expected) != 0) {
-        fprintf (stderr, "test_lvremove_2: expected \"%s\" but got \"%s\"\n", expected, r[0]);
-        return -1;
-      }
-    }
-    if (r[1] != NULL) {
-      fprintf (stderr, "test_lvremove_2: extra elements returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    for (i = 0; r[i] != NULL; ++i)
-      free (r[i]);
-    free (r);
-  }
-  return 0;
-}
-
-static int test_mount_ro_0_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_MOUNT_RO_0");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_MOUNT_RO");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_mount_ro_0 (void)
-{
-  if (test_mount_ro_0_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_mount_ro_0");
-    return 0;
-  }
-
-  /* InitBasicFS for test_mount_ro_0: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestLastFail for mount_ro (0) */
-  {
-    char pathordevice[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount (g, pathordevice);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount_ro (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/new";
-    int r;
-    suppress_error = 1;
-    r = guestfs_touch (g, path);
-    if (r != -1)
-      return -1;
-  }
-  return 0;
-}
-
-static int test_mount_ro_1_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_MOUNT_RO_1");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_MOUNT_RO");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_mount_ro_1 (void)
-{
-  if (test_mount_ro_1_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_mount_ro_1");
-    return 0;
-  }
-
-  /* InitBasicFS for test_mount_ro_1: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutput for mount_ro (1) */
-  char expected[] = "data";
-  {
-    char path[] = "/new";
-    char content[] = "data";
-    int r;
-    suppress_error = 0;
-    r = guestfs_write_file (g, path, content, 0);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char pathordevice[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount (g, pathordevice);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount_ro (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/new";
-    char *r;
-    suppress_error = 0;
-    r = guestfs_cat (g, path);
-    if (r == NULL)
-      return -1;
-    if (strcmp (r, expected) != 0) {
-      fprintf (stderr, "test_mount_ro_1: expected \"%s\" but got \"%s\"\n", expected, r);
-      return -1;
-    }
-    free (r);
-  }
-  return 0;
-}
-
-static int test_tgz_in_0_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_TGZ_IN_0");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_TGZ_IN");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_tgz_in_0 (void)
-{
-  if (test_tgz_in_0_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_tgz_in_0");
-    return 0;
-  }
-
-  /* InitBasicFS for test_tgz_in_0: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutput for tgz_in (0) */
-  char expected[] = "hello\n";
-  {
-    char directory[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_tgz_in (g, "../images/helloworld.tar.gz", directory);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/hello";
-    char *r;
-    suppress_error = 0;
-    r = guestfs_cat (g, path);
-    if (r == NULL)
-      return -1;
-    if (strcmp (r, expected) != 0) {
-      fprintf (stderr, "test_tgz_in_0: expected \"%s\" but got \"%s\"\n", expected, r);
-      return -1;
-    }
-    free (r);
-  }
-  return 0;
-}
-
-static int test_tar_in_0_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_TAR_IN_0");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_TAR_IN");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_tar_in_0 (void)
-{
-  if (test_tar_in_0_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_tar_in_0");
-    return 0;
-  }
-
-  /* InitBasicFS for test_tar_in_0: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutput for tar_in (0) */
-  char expected[] = "hello\n";
-  {
-    char directory[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_tar_in (g, "../images/helloworld.tar", directory);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/hello";
-    char *r;
-    suppress_error = 0;
-    r = guestfs_cat (g, path);
-    if (r == NULL)
-      return -1;
-    if (strcmp (r, expected) != 0) {
-      fprintf (stderr, "test_tar_in_0: expected \"%s\" but got \"%s\"\n", expected, r);
-      return -1;
-    }
-    free (r);
-  }
-  return 0;
-}
-
-static int test_checksum_0_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_CHECKSUM_0");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_CHECKSUM");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_checksum_0 (void)
-{
-  if (test_checksum_0_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_checksum_0");
-    return 0;
-  }
-
-  /* InitBasicFS for test_checksum_0: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutput for checksum (0) */
-  char expected[] = "935282863";
-  {
-    char path[] = "/new";
-    char content[] = "test\n";
-    int r;
-    suppress_error = 0;
-    r = guestfs_write_file (g, path, content, 0);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char csumtype[] = "crc";
-    char path[] = "/new";
-    char *r;
-    suppress_error = 0;
-    r = guestfs_checksum (g, csumtype, path);
-    if (r == NULL)
-      return -1;
-    if (strcmp (r, expected) != 0) {
-      fprintf (stderr, "test_checksum_0: expected \"%s\" but got \"%s\"\n", expected, r);
-      return -1;
-    }
-    free (r);
-  }
-  return 0;
-}
-
-static int test_checksum_1_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_CHECKSUM_1");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_CHECKSUM");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_checksum_1 (void)
-{
-  if (test_checksum_1_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_checksum_1");
-    return 0;
-  }
-
-  /* InitBasicFS for test_checksum_1: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestLastFail for checksum (1) */
-  {
-    char csumtype[] = "crc";
-    char path[] = "/new";
-    char *r;
-    suppress_error = 1;
-    r = guestfs_checksum (g, csumtype, path);
-    if (r != NULL)
-      return -1;
-    free (r);
-  }
-  return 0;
-}
-
-static int test_checksum_2_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_CHECKSUM_2");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_CHECKSUM");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_checksum_2 (void)
-{
-  if (test_checksum_2_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_checksum_2");
-    return 0;
-  }
-
-  /* InitBasicFS for test_checksum_2: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutput for checksum (2) */
-  char expected[] = "d8e8fca2dc0f896fd7cb4cb0031ba249";
-  {
-    char path[] = "/new";
-    char content[] = "test\n";
-    int r;
-    suppress_error = 0;
-    r = guestfs_write_file (g, path, content, 0);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char csumtype[] = "md5";
-    char path[] = "/new";
-    char *r;
-    suppress_error = 0;
-    r = guestfs_checksum (g, csumtype, path);
-    if (r == NULL)
-      return -1;
-    if (strcmp (r, expected) != 0) {
-      fprintf (stderr, "test_checksum_2: expected \"%s\" but got \"%s\"\n", expected, r);
-      return -1;
-    }
-    free (r);
-  }
-  return 0;
-}
-
-static int test_checksum_3_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_CHECKSUM_3");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_CHECKSUM");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_checksum_3 (void)
-{
-  if (test_checksum_3_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_checksum_3");
-    return 0;
-  }
-
-  /* InitBasicFS for test_checksum_3: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutput for checksum (3) */
-  char expected[] = "4e1243bd22c66e76c2ba9eddc1f91394e57f9f83";
-  {
-    char path[] = "/new";
-    char content[] = "test\n";
-    int r;
-    suppress_error = 0;
-    r = guestfs_write_file (g, path, content, 0);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char csumtype[] = "sha1";
-    char path[] = "/new";
-    char *r;
-    suppress_error = 0;
-    r = guestfs_checksum (g, csumtype, path);
-    if (r == NULL)
-      return -1;
-    if (strcmp (r, expected) != 0) {
-      fprintf (stderr, "test_checksum_3: expected \"%s\" but got \"%s\"\n", expected, r);
-      return -1;
-    }
-    free (r);
-  }
-  return 0;
-}
-
-static int test_checksum_4_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_CHECKSUM_4");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_CHECKSUM");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_checksum_4 (void)
-{
-  if (test_checksum_4_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_checksum_4");
-    return 0;
-  }
-
-  /* InitBasicFS for test_checksum_4: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutput for checksum (4) */
-  char expected[] = "52f1bf093f4b7588726035c176c0cdb4376cfea53819f1395ac9e6ec";
-  {
-    char path[] = "/new";
-    char content[] = "test\n";
-    int r;
-    suppress_error = 0;
-    r = guestfs_write_file (g, path, content, 0);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char csumtype[] = "sha224";
-    char path[] = "/new";
-    char *r;
-    suppress_error = 0;
-    r = guestfs_checksum (g, csumtype, path);
-    if (r == NULL)
-      return -1;
-    if (strcmp (r, expected) != 0) {
-      fprintf (stderr, "test_checksum_4: expected \"%s\" but got \"%s\"\n", expected, r);
-      return -1;
-    }
-    free (r);
-  }
-  return 0;
-}
-
-static int test_checksum_5_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_CHECKSUM_5");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_CHECKSUM");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_checksum_5 (void)
-{
-  if (test_checksum_5_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_checksum_5");
-    return 0;
-  }
-
-  /* InitBasicFS for test_checksum_5: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutput for checksum (5) */
-  char expected[] = "f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2";
-  {
-    char path[] = "/new";
-    char content[] = "test\n";
-    int r;
-    suppress_error = 0;
-    r = guestfs_write_file (g, path, content, 0);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char csumtype[] = "sha256";
-    char path[] = "/new";
-    char *r;
-    suppress_error = 0;
-    r = guestfs_checksum (g, csumtype, path);
-    if (r == NULL)
-      return -1;
-    if (strcmp (r, expected) != 0) {
-      fprintf (stderr, "test_checksum_5: expected \"%s\" but got \"%s\"\n", expected, r);
-      return -1;
-    }
-    free (r);
-  }
-  return 0;
-}
-
-static int test_checksum_6_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_CHECKSUM_6");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_CHECKSUM");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_checksum_6 (void)
-{
-  if (test_checksum_6_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_checksum_6");
-    return 0;
-  }
-
-  /* InitBasicFS for test_checksum_6: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutput for checksum (6) */
-  char expected[] = "109bb6b5b6d5547c1ce03c7a8bd7d8f80c1cb0957f50c4f7fda04692079917e4f9cad52b878f3d8234e1a170b154b72d";
-  {
-    char path[] = "/new";
-    char content[] = "test\n";
-    int r;
-    suppress_error = 0;
-    r = guestfs_write_file (g, path, content, 0);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char csumtype[] = "sha384";
-    char path[] = "/new";
-    char *r;
-    suppress_error = 0;
-    r = guestfs_checksum (g, csumtype, path);
-    if (r == NULL)
-      return -1;
-    if (strcmp (r, expected) != 0) {
-      fprintf (stderr, "test_checksum_6: expected \"%s\" but got \"%s\"\n", expected, r);
-      return -1;
-    }
-    free (r);
-  }
-  return 0;
-}
-
-static int test_checksum_7_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_CHECKSUM_7");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_CHECKSUM");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_checksum_7 (void)
-{
-  if (test_checksum_7_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_checksum_7");
-    return 0;
-  }
-
-  /* InitBasicFS for test_checksum_7: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutput for checksum (7) */
-  char expected[] = "0e3e75234abc68f4378a86b3f4b32a198ba301845b0cd6e50106e874345700cc6663a86c1ea125dc5e92be17c98f9a0f85ca9d5f595db2012f7cc3571945c123";
-  {
-    char path[] = "/new";
-    char content[] = "test\n";
-    int r;
-    suppress_error = 0;
-    r = guestfs_write_file (g, path, content, 0);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char csumtype[] = "sha512";
-    char path[] = "/new";
-    char *r;
-    suppress_error = 0;
-    r = guestfs_checksum (g, csumtype, path);
-    if (r == NULL)
-      return -1;
-    if (strcmp (r, expected) != 0) {
-      fprintf (stderr, "test_checksum_7: expected \"%s\" but got \"%s\"\n", expected, r);
-      return -1;
-    }
-    free (r);
-  }
-  return 0;
-}
-
-static int test_checksum_8_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_CHECKSUM_8");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_CHECKSUM");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_checksum_8 (void)
-{
-  if (test_checksum_8_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_checksum_8");
-    return 0;
-  }
-
-  /* InitBasicFS for test_checksum_8: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutput for checksum (8) */
-  char expected[] = "46d6ca27ee07cdc6fa99c2e138cc522c";
-  {
-    char options[] = "ro";
-    char vfstype[] = "squashfs";
-    char device[] = "/dev/sdd";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount_vfs (g, options, vfstype, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char csumtype[] = "md5";
-    char path[] = "/known-3";
-    char *r;
-    suppress_error = 0;
-    r = guestfs_checksum (g, csumtype, path);
-    if (r == NULL)
-      return -1;
-    if (strcmp (r, expected) != 0) {
-      fprintf (stderr, "test_checksum_8: expected \"%s\" but got \"%s\"\n", expected, r);
-      return -1;
-    }
-    free (r);
-  }
-  return 0;
-}
-
-static int test_download_0_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_DOWNLOAD_0");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_DOWNLOAD");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_download_0 (void)
-{
-  if (test_download_0_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_download_0");
-    return 0;
-  }
-
-  /* InitBasicFS for test_download_0: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutput for download (0) */
-  char expected[] = "e3eda01d9815f8d24aae2dbd89b68b06";
-  {
-    char remotefilename[] = "/COPYING.LIB";
-    int r;
-    suppress_error = 0;
-    r = guestfs_upload (g, "../COPYING.LIB", remotefilename);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char remotefilename[] = "/COPYING.LIB";
-    int r;
-    suppress_error = 0;
-    r = guestfs_download (g, remotefilename, "testdownload.tmp");
-    if (r == -1)
-      return -1;
-  }
-  {
-    char remotefilename[] = "/upload";
-    int r;
-    suppress_error = 0;
-    r = guestfs_upload (g, "testdownload.tmp", remotefilename);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char csumtype[] = "md5";
-    char path[] = "/upload";
-    char *r;
-    suppress_error = 0;
-    r = guestfs_checksum (g, csumtype, path);
-    if (r == NULL)
-      return -1;
-    if (strcmp (r, expected) != 0) {
-      fprintf (stderr, "test_download_0: expected \"%s\" but got \"%s\"\n", expected, r);
-      return -1;
-    }
-    free (r);
-  }
-  return 0;
-}
-
-static int test_upload_0_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_UPLOAD_0");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_UPLOAD");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_upload_0 (void)
-{
-  if (test_upload_0_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_upload_0");
-    return 0;
-  }
-
-  /* InitBasicFS for test_upload_0: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutput for upload (0) */
-  char expected[] = "e3eda01d9815f8d24aae2dbd89b68b06";
-  {
-    char remotefilename[] = "/COPYING.LIB";
-    int r;
-    suppress_error = 0;
-    r = guestfs_upload (g, "../COPYING.LIB", remotefilename);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char csumtype[] = "md5";
-    char path[] = "/COPYING.LIB";
-    char *r;
-    suppress_error = 0;
-    r = guestfs_checksum (g, csumtype, path);
-    if (r == NULL)
-      return -1;
-    if (strcmp (r, expected) != 0) {
-      fprintf (stderr, "test_upload_0: expected \"%s\" but got \"%s\"\n", expected, r);
-      return -1;
-    }
-    free (r);
-  }
-  return 0;
-}
-
-static int test_blockdev_rereadpt_0_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_BLOCKDEV_REREADPT_0");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_BLOCKDEV_REREADPT");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_blockdev_rereadpt_0 (void)
-{
-  if (test_blockdev_rereadpt_0_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_blockdev_rereadpt_0");
-    return 0;
-  }
-
-  /* InitNone|InitEmpty for test_blockdev_rereadpt_0 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  /* TestRun for blockdev_rereadpt (0) */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_rereadpt (g, device);
-    if (r == -1)
-      return -1;
-  }
-  return 0;
-}
-
-static int test_blockdev_flushbufs_0_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_BLOCKDEV_FLUSHBUFS_0");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_BLOCKDEV_FLUSHBUFS");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_blockdev_flushbufs_0 (void)
-{
-  if (test_blockdev_flushbufs_0_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_blockdev_flushbufs_0");
-    return 0;
-  }
-
-  /* InitNone|InitEmpty for test_blockdev_flushbufs_0 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  /* TestRun for blockdev_flushbufs (0) */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_flushbufs (g, device);
-    if (r == -1)
-      return -1;
-  }
-  return 0;
-}
-
-static int test_blockdev_getsize64_0_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_BLOCKDEV_GETSIZE64_0");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_BLOCKDEV_GETSIZE64");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_blockdev_getsize64_0 (void)
-{
-  if (test_blockdev_getsize64_0_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_blockdev_getsize64_0");
-    return 0;
-  }
-
-  /* InitNone|InitEmpty for test_blockdev_getsize64_0 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputInt for blockdev_getsize64 (0) */
-  {
-    char device[] = "/dev/sda";
-    int64_t r;
-    suppress_error = 0;
-    r = guestfs_blockdev_getsize64 (g, device);
-    if (r == -1)
-      return -1;
-    if (r != 524288000) {
-      fprintf (stderr, "test_blockdev_getsize64_0: expected 524288000 but got %d\n",               (int) r);
-      return -1;
-    }
-  }
-  return 0;
-}
-
-static int test_blockdev_getsz_0_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_BLOCKDEV_GETSZ_0");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_BLOCKDEV_GETSZ");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_blockdev_getsz_0 (void)
-{
-  if (test_blockdev_getsz_0_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_blockdev_getsz_0");
-    return 0;
-  }
-
-  /* InitNone|InitEmpty for test_blockdev_getsz_0 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputInt for blockdev_getsz (0) */
-  {
-    char device[] = "/dev/sda";
-    int64_t r;
-    suppress_error = 0;
-    r = guestfs_blockdev_getsz (g, device);
-    if (r == -1)
-      return -1;
-    if (r != 1024000) {
-      fprintf (stderr, "test_blockdev_getsz_0: expected 1024000 but got %d\n",               (int) r);
-      return -1;
-    }
-  }
-  return 0;
-}
-
-static int test_blockdev_getbsz_0_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_BLOCKDEV_GETBSZ_0");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_BLOCKDEV_GETBSZ");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_blockdev_getbsz_0 (void)
-{
-  if (test_blockdev_getbsz_0_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_blockdev_getbsz_0");
-    return 0;
-  }
-
-  /* InitNone|InitEmpty for test_blockdev_getbsz_0 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputInt for blockdev_getbsz (0) */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_getbsz (g, device);
-    if (r == -1)
-      return -1;
-    if (r != 4096) {
-      fprintf (stderr, "test_blockdev_getbsz_0: expected 4096 but got %d\n",               (int) r);
-      return -1;
-    }
-  }
-  return 0;
-}
-
-static int test_blockdev_getss_0_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_BLOCKDEV_GETSS_0");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_BLOCKDEV_GETSS");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_blockdev_getss_0 (void)
-{
-  if (test_blockdev_getss_0_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_blockdev_getss_0");
-    return 0;
-  }
-
-  /* InitNone|InitEmpty for test_blockdev_getss_0 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputInt for blockdev_getss (0) */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_getss (g, device);
-    if (r == -1)
-      return -1;
-    if (r != 512) {
-      fprintf (stderr, "test_blockdev_getss_0: expected 512 but got %d\n",               (int) r);
-      return -1;
-    }
-  }
-  return 0;
-}
-
-static int test_blockdev_getro_0_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_BLOCKDEV_GETRO_0");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_BLOCKDEV_GETRO");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_blockdev_getro_0 (void)
-{
-  if (test_blockdev_getro_0_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_blockdev_getro_0");
-    return 0;
-  }
-
-  /* InitNone|InitEmpty for test_blockdev_getro_0 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputTrue for blockdev_getro (0) */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setro (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_getro (g, device);
-    if (r == -1)
-      return -1;
-    if (!r) {
-      fprintf (stderr, "test_blockdev_getro_0: expected true, got false\n");
-      return -1;
-    }
-  }
-  return 0;
-}
-
-static int test_blockdev_setrw_0_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_BLOCKDEV_SETRW_0");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_BLOCKDEV_SETRW");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_blockdev_setrw_0 (void)
-{
-  if (test_blockdev_setrw_0_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_blockdev_setrw_0");
-    return 0;
-  }
-
-  /* InitNone|InitEmpty for test_blockdev_setrw_0 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputFalse for blockdev_setrw (0) */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_getro (g, device);
-    if (r == -1)
-      return -1;
-    if (r) {
-      fprintf (stderr, "test_blockdev_setrw_0: expected false, got true\n");
-      return -1;
-    }
-  }
-  return 0;
-}
-
-static int test_blockdev_setro_0_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_BLOCKDEV_SETRO_0");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_BLOCKDEV_SETRO");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_blockdev_setro_0 (void)
-{
-  if (test_blockdev_setro_0_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_blockdev_setro_0");
-    return 0;
-  }
-
-  /* InitNone|InitEmpty for test_blockdev_setro_0 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputTrue for blockdev_setro (0) */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setro (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_getro (g, device);
-    if (r == -1)
-      return -1;
-    if (!r) {
-      fprintf (stderr, "test_blockdev_setro_0: expected true, got false\n");
-      return -1;
-    }
-  }
-  return 0;
-}
-
-static int test_statvfs_0_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_STATVFS_0");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_STATVFS");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_statvfs_0 (void)
-{
-  if (test_statvfs_0_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_statvfs_0");
-    return 0;
-  }
-
-  /* InitBasicFS for test_statvfs_0: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputStruct for statvfs (0) */
-  {
-    char path[] = "/";
-    struct guestfs_statvfs *r;
-    suppress_error = 0;
-    r = guestfs_statvfs (g, path);
-    if (r == NULL)
-      return -1;
-    if (r->bfree != 487702) {
-      fprintf (stderr, "test_statvfs_0: bfree was %d, expected 487702\n",
-               (int) r->bfree);
-      return -1;
-    }
-    if (r->blocks != 490020) {
-      fprintf (stderr, "test_statvfs_0: blocks was %d, expected 490020\n",
-               (int) r->blocks);
-      return -1;
-    }
-    if (r->bsize != 1024) {
-      fprintf (stderr, "test_statvfs_0: bsize was %d, expected 1024\n",
-               (int) r->bsize);
-      return -1;
-    }
-    free (r);
-  }
-  return 0;
-}
-
-static int test_lstat_0_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_LSTAT_0");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_LSTAT");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_lstat_0 (void)
-{
-  if (test_lstat_0_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_lstat_0");
-    return 0;
-  }
-
-  /* InitBasicFS for test_lstat_0: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputStruct for lstat (0) */
-  {
-    char path[] = "/new";
-    int r;
-    suppress_error = 0;
-    r = guestfs_touch (g, path);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/new";
-    struct guestfs_stat *r;
-    suppress_error = 0;
-    r = guestfs_lstat (g, path);
-    if (r == NULL)
-      return -1;
-    if (r->size != 0) {
-      fprintf (stderr, "test_lstat_0: size was %d, expected 0\n",
-               (int) r->size);
-      return -1;
-    }
-    free (r);
-  }
-  return 0;
-}
-
-static int test_stat_0_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_STAT_0");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_STAT");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_stat_0 (void)
-{
-  if (test_stat_0_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_stat_0");
-    return 0;
-  }
-
-  /* InitBasicFS for test_stat_0: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputStruct for stat (0) */
-  {
-    char path[] = "/new";
-    int r;
-    suppress_error = 0;
-    r = guestfs_touch (g, path);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/new";
-    struct guestfs_stat *r;
-    suppress_error = 0;
-    r = guestfs_stat (g, path);
-    if (r == NULL)
-      return -1;
-    if (r->size != 0) {
-      fprintf (stderr, "test_stat_0: size was %d, expected 0\n",
-               (int) r->size);
-      return -1;
-    }
-    free (r);
-  }
-  return 0;
-}
-
-static int test_command_lines_0_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_COMMAND_LINES_0");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_COMMAND_LINES");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_command_lines_0 (void)
-{
-  if (test_command_lines_0_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_command_lines_0");
-    return 0;
-  }
-
-  /* InitBasicFS for test_command_lines_0: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputList for command_lines (0) */
-  {
-    char remotefilename[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_upload (g, "test-command", remotefilename);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_chmod (g, 493, path);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char arguments_0[] = "/test-command";
-    char arguments_1[] = "1";
-    char *arguments[] = {
-      arguments_0,
-      arguments_1,
-      NULL
-    };
-    char **r;
-    int i;
-    suppress_error = 0;
-    r = guestfs_command_lines (g, arguments);
-    if (r == NULL)
-      return -1;
-    if (!r[0]) {
-      fprintf (stderr, "test_command_lines_0: short list returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    {
-      char expected[] = "Result1";
-      if (strcmp (r[0], expected) != 0) {
-        fprintf (stderr, "test_command_lines_0: expected \"%s\" but got \"%s\"\n", expected, r[0]);
-        return -1;
-      }
-    }
-    if (r[1] != NULL) {
-      fprintf (stderr, "test_command_lines_0: extra elements returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    for (i = 0; r[i] != NULL; ++i)
-      free (r[i]);
-    free (r);
-  }
-  return 0;
-}
-
-static int test_command_lines_1_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_COMMAND_LINES_1");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_COMMAND_LINES");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_command_lines_1 (void)
-{
-  if (test_command_lines_1_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_command_lines_1");
-    return 0;
-  }
-
-  /* InitBasicFS for test_command_lines_1: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputList for command_lines (1) */
-  {
-    char remotefilename[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_upload (g, "test-command", remotefilename);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_chmod (g, 493, path);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char arguments_0[] = "/test-command";
-    char arguments_1[] = "2";
-    char *arguments[] = {
-      arguments_0,
-      arguments_1,
-      NULL
-    };
-    char **r;
-    int i;
-    suppress_error = 0;
-    r = guestfs_command_lines (g, arguments);
-    if (r == NULL)
-      return -1;
-    if (!r[0]) {
-      fprintf (stderr, "test_command_lines_1: short list returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    {
-      char expected[] = "Result2";
-      if (strcmp (r[0], expected) != 0) {
-        fprintf (stderr, "test_command_lines_1: expected \"%s\" but got \"%s\"\n", expected, r[0]);
-        return -1;
-      }
-    }
-    if (r[1] != NULL) {
-      fprintf (stderr, "test_command_lines_1: extra elements returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    for (i = 0; r[i] != NULL; ++i)
-      free (r[i]);
-    free (r);
-  }
-  return 0;
-}
-
-static int test_command_lines_2_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_COMMAND_LINES_2");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_COMMAND_LINES");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_command_lines_2 (void)
-{
-  if (test_command_lines_2_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_command_lines_2");
-    return 0;
-  }
-
-  /* InitBasicFS for test_command_lines_2: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputList for command_lines (2) */
-  {
-    char remotefilename[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_upload (g, "test-command", remotefilename);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_chmod (g, 493, path);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char arguments_0[] = "/test-command";
-    char arguments_1[] = "3";
-    char *arguments[] = {
-      arguments_0,
-      arguments_1,
-      NULL
-    };
-    char **r;
-    int i;
-    suppress_error = 0;
-    r = guestfs_command_lines (g, arguments);
-    if (r == NULL)
-      return -1;
-    if (!r[0]) {
-      fprintf (stderr, "test_command_lines_2: short list returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    {
-      char expected[] = "";
-      if (strcmp (r[0], expected) != 0) {
-        fprintf (stderr, "test_command_lines_2: expected \"%s\" but got \"%s\"\n", expected, r[0]);
-        return -1;
-      }
-    }
-    if (!r[1]) {
-      fprintf (stderr, "test_command_lines_2: short list returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    {
-      char expected[] = "Result3";
-      if (strcmp (r[1], expected) != 0) {
-        fprintf (stderr, "test_command_lines_2: expected \"%s\" but got \"%s\"\n", expected, r[1]);
-        return -1;
-      }
-    }
-    if (r[2] != NULL) {
-      fprintf (stderr, "test_command_lines_2: extra elements returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    for (i = 0; r[i] != NULL; ++i)
-      free (r[i]);
-    free (r);
-  }
-  return 0;
-}
-
-static int test_command_lines_3_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_COMMAND_LINES_3");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_COMMAND_LINES");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_command_lines_3 (void)
-{
-  if (test_command_lines_3_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_command_lines_3");
-    return 0;
-  }
-
-  /* InitBasicFS for test_command_lines_3: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputList for command_lines (3) */
-  {
-    char remotefilename[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_upload (g, "test-command", remotefilename);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_chmod (g, 493, path);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char arguments_0[] = "/test-command";
-    char arguments_1[] = "4";
-    char *arguments[] = {
-      arguments_0,
-      arguments_1,
-      NULL
-    };
-    char **r;
-    int i;
-    suppress_error = 0;
-    r = guestfs_command_lines (g, arguments);
-    if (r == NULL)
-      return -1;
-    if (!r[0]) {
-      fprintf (stderr, "test_command_lines_3: short list returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    {
-      char expected[] = "";
-      if (strcmp (r[0], expected) != 0) {
-        fprintf (stderr, "test_command_lines_3: expected \"%s\" but got \"%s\"\n", expected, r[0]);
-        return -1;
-      }
-    }
-    if (!r[1]) {
-      fprintf (stderr, "test_command_lines_3: short list returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    {
-      char expected[] = "Result4";
-      if (strcmp (r[1], expected) != 0) {
-        fprintf (stderr, "test_command_lines_3: expected \"%s\" but got \"%s\"\n", expected, r[1]);
-        return -1;
-      }
-    }
-    if (r[2] != NULL) {
-      fprintf (stderr, "test_command_lines_3: extra elements returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    for (i = 0; r[i] != NULL; ++i)
-      free (r[i]);
-    free (r);
-  }
-  return 0;
-}
-
-static int test_command_lines_4_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_COMMAND_LINES_4");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_COMMAND_LINES");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_command_lines_4 (void)
-{
-  if (test_command_lines_4_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_command_lines_4");
-    return 0;
-  }
-
-  /* InitBasicFS for test_command_lines_4: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputList for command_lines (4) */
-  {
-    char remotefilename[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_upload (g, "test-command", remotefilename);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_chmod (g, 493, path);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char arguments_0[] = "/test-command";
-    char arguments_1[] = "5";
-    char *arguments[] = {
-      arguments_0,
-      arguments_1,
-      NULL
-    };
-    char **r;
-    int i;
-    suppress_error = 0;
-    r = guestfs_command_lines (g, arguments);
-    if (r == NULL)
-      return -1;
-    if (!r[0]) {
-      fprintf (stderr, "test_command_lines_4: short list returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    {
-      char expected[] = "";
-      if (strcmp (r[0], expected) != 0) {
-        fprintf (stderr, "test_command_lines_4: expected \"%s\" but got \"%s\"\n", expected, r[0]);
-        return -1;
-      }
-    }
-    if (!r[1]) {
-      fprintf (stderr, "test_command_lines_4: short list returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    {
-      char expected[] = "Result5";
-      if (strcmp (r[1], expected) != 0) {
-        fprintf (stderr, "test_command_lines_4: expected \"%s\" but got \"%s\"\n", expected, r[1]);
-        return -1;
-      }
-    }
-    if (!r[2]) {
-      fprintf (stderr, "test_command_lines_4: short list returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    {
-      char expected[] = "";
-      if (strcmp (r[2], expected) != 0) {
-        fprintf (stderr, "test_command_lines_4: expected \"%s\" but got \"%s\"\n", expected, r[2]);
-        return -1;
-      }
-    }
-    if (r[3] != NULL) {
-      fprintf (stderr, "test_command_lines_4: extra elements returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    for (i = 0; r[i] != NULL; ++i)
-      free (r[i]);
-    free (r);
-  }
-  return 0;
-}
-
-static int test_command_lines_5_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_COMMAND_LINES_5");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_COMMAND_LINES");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_command_lines_5 (void)
-{
-  if (test_command_lines_5_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_command_lines_5");
-    return 0;
-  }
-
-  /* InitBasicFS for test_command_lines_5: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputList for command_lines (5) */
-  {
-    char remotefilename[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_upload (g, "test-command", remotefilename);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_chmod (g, 493, path);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char arguments_0[] = "/test-command";
-    char arguments_1[] = "6";
-    char *arguments[] = {
-      arguments_0,
-      arguments_1,
-      NULL
-    };
-    char **r;
-    int i;
-    suppress_error = 0;
-    r = guestfs_command_lines (g, arguments);
-    if (r == NULL)
-      return -1;
-    if (!r[0]) {
-      fprintf (stderr, "test_command_lines_5: short list returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    {
-      char expected[] = "";
-      if (strcmp (r[0], expected) != 0) {
-        fprintf (stderr, "test_command_lines_5: expected \"%s\" but got \"%s\"\n", expected, r[0]);
-        return -1;
-      }
-    }
-    if (!r[1]) {
-      fprintf (stderr, "test_command_lines_5: short list returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    {
-      char expected[] = "";
-      if (strcmp (r[1], expected) != 0) {
-        fprintf (stderr, "test_command_lines_5: expected \"%s\" but got \"%s\"\n", expected, r[1]);
-        return -1;
-      }
-    }
-    if (!r[2]) {
-      fprintf (stderr, "test_command_lines_5: short list returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    {
-      char expected[] = "Result6";
-      if (strcmp (r[2], expected) != 0) {
-        fprintf (stderr, "test_command_lines_5: expected \"%s\" but got \"%s\"\n", expected, r[2]);
-        return -1;
-      }
-    }
-    if (!r[3]) {
-      fprintf (stderr, "test_command_lines_5: short list returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    {
-      char expected[] = "";
-      if (strcmp (r[3], expected) != 0) {
-        fprintf (stderr, "test_command_lines_5: expected \"%s\" but got \"%s\"\n", expected, r[3]);
-        return -1;
-      }
-    }
-    if (r[4] != NULL) {
-      fprintf (stderr, "test_command_lines_5: extra elements returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    for (i = 0; r[i] != NULL; ++i)
-      free (r[i]);
-    free (r);
-  }
-  return 0;
-}
-
-static int test_command_lines_6_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_COMMAND_LINES_6");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_COMMAND_LINES");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_command_lines_6 (void)
-{
-  if (test_command_lines_6_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_command_lines_6");
-    return 0;
-  }
-
-  /* InitBasicFS for test_command_lines_6: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputList for command_lines (6) */
-  {
-    char remotefilename[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_upload (g, "test-command", remotefilename);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_chmod (g, 493, path);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char arguments_0[] = "/test-command";
-    char arguments_1[] = "7";
-    char *arguments[] = {
-      arguments_0,
-      arguments_1,
-      NULL
-    };
-    char **r;
-    int i;
-    suppress_error = 0;
-    r = guestfs_command_lines (g, arguments);
-    if (r == NULL)
-      return -1;
-    if (r[0] != NULL) {
-      fprintf (stderr, "test_command_lines_6: extra elements returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    for (i = 0; r[i] != NULL; ++i)
-      free (r[i]);
-    free (r);
-  }
-  return 0;
-}
-
-static int test_command_lines_7_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_COMMAND_LINES_7");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_COMMAND_LINES");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_command_lines_7 (void)
-{
-  if (test_command_lines_7_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_command_lines_7");
-    return 0;
-  }
-
-  /* InitBasicFS for test_command_lines_7: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputList for command_lines (7) */
-  {
-    char remotefilename[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_upload (g, "test-command", remotefilename);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_chmod (g, 493, path);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char arguments_0[] = "/test-command";
-    char arguments_1[] = "8";
-    char *arguments[] = {
-      arguments_0,
-      arguments_1,
-      NULL
-    };
-    char **r;
-    int i;
-    suppress_error = 0;
-    r = guestfs_command_lines (g, arguments);
-    if (r == NULL)
-      return -1;
-    if (!r[0]) {
-      fprintf (stderr, "test_command_lines_7: short list returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    {
-      char expected[] = "";
-      if (strcmp (r[0], expected) != 0) {
-        fprintf (stderr, "test_command_lines_7: expected \"%s\" but got \"%s\"\n", expected, r[0]);
-        return -1;
-      }
-    }
-    if (r[1] != NULL) {
-      fprintf (stderr, "test_command_lines_7: extra elements returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    for (i = 0; r[i] != NULL; ++i)
-      free (r[i]);
-    free (r);
-  }
-  return 0;
-}
-
-static int test_command_lines_8_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_COMMAND_LINES_8");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_COMMAND_LINES");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_command_lines_8 (void)
-{
-  if (test_command_lines_8_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_command_lines_8");
-    return 0;
-  }
-
-  /* InitBasicFS for test_command_lines_8: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputList for command_lines (8) */
-  {
-    char remotefilename[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_upload (g, "test-command", remotefilename);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_chmod (g, 493, path);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char arguments_0[] = "/test-command";
-    char arguments_1[] = "9";
-    char *arguments[] = {
-      arguments_0,
-      arguments_1,
-      NULL
-    };
-    char **r;
-    int i;
-    suppress_error = 0;
-    r = guestfs_command_lines (g, arguments);
-    if (r == NULL)
-      return -1;
-    if (!r[0]) {
-      fprintf (stderr, "test_command_lines_8: short list returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    {
-      char expected[] = "";
-      if (strcmp (r[0], expected) != 0) {
-        fprintf (stderr, "test_command_lines_8: expected \"%s\" but got \"%s\"\n", expected, r[0]);
-        return -1;
-      }
-    }
-    if (!r[1]) {
-      fprintf (stderr, "test_command_lines_8: short list returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    {
-      char expected[] = "";
-      if (strcmp (r[1], expected) != 0) {
-        fprintf (stderr, "test_command_lines_8: expected \"%s\" but got \"%s\"\n", expected, r[1]);
-        return -1;
-      }
-    }
-    if (r[2] != NULL) {
-      fprintf (stderr, "test_command_lines_8: extra elements returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    for (i = 0; r[i] != NULL; ++i)
-      free (r[i]);
-    free (r);
-  }
-  return 0;
-}
-
-static int test_command_lines_9_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_COMMAND_LINES_9");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_COMMAND_LINES");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_command_lines_9 (void)
-{
-  if (test_command_lines_9_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_command_lines_9");
-    return 0;
-  }
-
-  /* InitBasicFS for test_command_lines_9: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputList for command_lines (9) */
-  {
-    char remotefilename[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_upload (g, "test-command", remotefilename);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_chmod (g, 493, path);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char arguments_0[] = "/test-command";
-    char arguments_1[] = "10";
-    char *arguments[] = {
-      arguments_0,
-      arguments_1,
-      NULL
-    };
-    char **r;
-    int i;
-    suppress_error = 0;
-    r = guestfs_command_lines (g, arguments);
-    if (r == NULL)
-      return -1;
-    if (!r[0]) {
-      fprintf (stderr, "test_command_lines_9: short list returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    {
-      char expected[] = "Result10-1";
-      if (strcmp (r[0], expected) != 0) {
-        fprintf (stderr, "test_command_lines_9: expected \"%s\" but got \"%s\"\n", expected, r[0]);
-        return -1;
-      }
-    }
-    if (!r[1]) {
-      fprintf (stderr, "test_command_lines_9: short list returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    {
-      char expected[] = "Result10-2";
-      if (strcmp (r[1], expected) != 0) {
-        fprintf (stderr, "test_command_lines_9: expected \"%s\" but got \"%s\"\n", expected, r[1]);
-        return -1;
-      }
-    }
-    if (r[2] != NULL) {
-      fprintf (stderr, "test_command_lines_9: extra elements returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    for (i = 0; r[i] != NULL; ++i)
-      free (r[i]);
-    free (r);
-  }
-  return 0;
-}
-
-static int test_command_lines_10_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_COMMAND_LINES_10");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_COMMAND_LINES");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_command_lines_10 (void)
-{
-  if (test_command_lines_10_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_command_lines_10");
-    return 0;
-  }
-
-  /* InitBasicFS for test_command_lines_10: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputList for command_lines (10) */
-  {
-    char remotefilename[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_upload (g, "test-command", remotefilename);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_chmod (g, 493, path);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char arguments_0[] = "/test-command";
-    char arguments_1[] = "11";
-    char *arguments[] = {
-      arguments_0,
-      arguments_1,
-      NULL
-    };
-    char **r;
-    int i;
-    suppress_error = 0;
-    r = guestfs_command_lines (g, arguments);
-    if (r == NULL)
-      return -1;
-    if (!r[0]) {
-      fprintf (stderr, "test_command_lines_10: short list returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    {
-      char expected[] = "Result11-1";
-      if (strcmp (r[0], expected) != 0) {
-        fprintf (stderr, "test_command_lines_10: expected \"%s\" but got \"%s\"\n", expected, r[0]);
-        return -1;
-      }
-    }
-    if (!r[1]) {
-      fprintf (stderr, "test_command_lines_10: short list returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    {
-      char expected[] = "Result11-2";
-      if (strcmp (r[1], expected) != 0) {
-        fprintf (stderr, "test_command_lines_10: expected \"%s\" but got \"%s\"\n", expected, r[1]);
-        return -1;
-      }
-    }
-    if (r[2] != NULL) {
-      fprintf (stderr, "test_command_lines_10: extra elements returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    for (i = 0; r[i] != NULL; ++i)
-      free (r[i]);
-    free (r);
-  }
-  return 0;
-}
-
-static int test_command_0_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_COMMAND_0");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_COMMAND");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_command_0 (void)
-{
-  if (test_command_0_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_command_0");
-    return 0;
-  }
-
-  /* InitBasicFS for test_command_0: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutput for command (0) */
-  char expected[] = "Result1";
-  {
-    char remotefilename[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_upload (g, "test-command", remotefilename);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_chmod (g, 493, path);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char arguments_0[] = "/test-command";
-    char arguments_1[] = "1";
-    char *arguments[] = {
-      arguments_0,
-      arguments_1,
-      NULL
-    };
-    char *r;
-    suppress_error = 0;
-    r = guestfs_command (g, arguments);
-    if (r == NULL)
-      return -1;
-    if (strcmp (r, expected) != 0) {
-      fprintf (stderr, "test_command_0: expected \"%s\" but got \"%s\"\n", expected, r);
-      return -1;
-    }
-    free (r);
-  }
-  return 0;
-}
-
-static int test_command_1_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_COMMAND_1");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_COMMAND");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_command_1 (void)
-{
-  if (test_command_1_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_command_1");
-    return 0;
-  }
-
-  /* InitBasicFS for test_command_1: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutput for command (1) */
-  char expected[] = "Result2\n";
-  {
-    char remotefilename[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_upload (g, "test-command", remotefilename);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_chmod (g, 493, path);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char arguments_0[] = "/test-command";
-    char arguments_1[] = "2";
-    char *arguments[] = {
-      arguments_0,
-      arguments_1,
-      NULL
-    };
-    char *r;
-    suppress_error = 0;
-    r = guestfs_command (g, arguments);
-    if (r == NULL)
-      return -1;
-    if (strcmp (r, expected) != 0) {
-      fprintf (stderr, "test_command_1: expected \"%s\" but got \"%s\"\n", expected, r);
-      return -1;
-    }
-    free (r);
-  }
-  return 0;
-}
-
-static int test_command_2_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_COMMAND_2");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_COMMAND");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_command_2 (void)
-{
-  if (test_command_2_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_command_2");
-    return 0;
-  }
-
-  /* InitBasicFS for test_command_2: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutput for command (2) */
-  char expected[] = "\nResult3";
-  {
-    char remotefilename[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_upload (g, "test-command", remotefilename);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_chmod (g, 493, path);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char arguments_0[] = "/test-command";
-    char arguments_1[] = "3";
-    char *arguments[] = {
-      arguments_0,
-      arguments_1,
-      NULL
-    };
-    char *r;
-    suppress_error = 0;
-    r = guestfs_command (g, arguments);
-    if (r == NULL)
-      return -1;
-    if (strcmp (r, expected) != 0) {
-      fprintf (stderr, "test_command_2: expected \"%s\" but got \"%s\"\n", expected, r);
-      return -1;
-    }
-    free (r);
-  }
-  return 0;
-}
-
-static int test_command_3_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_COMMAND_3");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_COMMAND");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_command_3 (void)
-{
-  if (test_command_3_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_command_3");
-    return 0;
-  }
-
-  /* InitBasicFS for test_command_3: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutput for command (3) */
-  char expected[] = "\nResult4\n";
-  {
-    char remotefilename[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_upload (g, "test-command", remotefilename);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_chmod (g, 493, path);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char arguments_0[] = "/test-command";
-    char arguments_1[] = "4";
-    char *arguments[] = {
-      arguments_0,
-      arguments_1,
-      NULL
-    };
-    char *r;
-    suppress_error = 0;
-    r = guestfs_command (g, arguments);
-    if (r == NULL)
-      return -1;
-    if (strcmp (r, expected) != 0) {
-      fprintf (stderr, "test_command_3: expected \"%s\" but got \"%s\"\n", expected, r);
-      return -1;
-    }
-    free (r);
-  }
-  return 0;
-}
-
-static int test_command_4_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_COMMAND_4");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_COMMAND");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_command_4 (void)
-{
-  if (test_command_4_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_command_4");
-    return 0;
-  }
-
-  /* InitBasicFS for test_command_4: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutput for command (4) */
-  char expected[] = "\nResult5\n\n";
-  {
-    char remotefilename[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_upload (g, "test-command", remotefilename);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_chmod (g, 493, path);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char arguments_0[] = "/test-command";
-    char arguments_1[] = "5";
-    char *arguments[] = {
-      arguments_0,
-      arguments_1,
-      NULL
-    };
-    char *r;
-    suppress_error = 0;
-    r = guestfs_command (g, arguments);
-    if (r == NULL)
-      return -1;
-    if (strcmp (r, expected) != 0) {
-      fprintf (stderr, "test_command_4: expected \"%s\" but got \"%s\"\n", expected, r);
-      return -1;
-    }
-    free (r);
-  }
-  return 0;
-}
-
-static int test_command_5_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_COMMAND_5");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_COMMAND");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_command_5 (void)
-{
-  if (test_command_5_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_command_5");
-    return 0;
-  }
-
-  /* InitBasicFS for test_command_5: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutput for command (5) */
-  char expected[] = "\n\nResult6\n\n";
-  {
-    char remotefilename[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_upload (g, "test-command", remotefilename);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_chmod (g, 493, path);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char arguments_0[] = "/test-command";
-    char arguments_1[] = "6";
-    char *arguments[] = {
-      arguments_0,
-      arguments_1,
-      NULL
-    };
-    char *r;
-    suppress_error = 0;
-    r = guestfs_command (g, arguments);
-    if (r == NULL)
-      return -1;
-    if (strcmp (r, expected) != 0) {
-      fprintf (stderr, "test_command_5: expected \"%s\" but got \"%s\"\n", expected, r);
-      return -1;
-    }
-    free (r);
-  }
-  return 0;
-}
-
-static int test_command_6_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_COMMAND_6");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_COMMAND");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_command_6 (void)
-{
-  if (test_command_6_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_command_6");
-    return 0;
-  }
-
-  /* InitBasicFS for test_command_6: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutput for command (6) */
-  char expected[] = "";
-  {
-    char remotefilename[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_upload (g, "test-command", remotefilename);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_chmod (g, 493, path);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char arguments_0[] = "/test-command";
-    char arguments_1[] = "7";
-    char *arguments[] = {
-      arguments_0,
-      arguments_1,
-      NULL
-    };
-    char *r;
-    suppress_error = 0;
-    r = guestfs_command (g, arguments);
-    if (r == NULL)
-      return -1;
-    if (strcmp (r, expected) != 0) {
-      fprintf (stderr, "test_command_6: expected \"%s\" but got \"%s\"\n", expected, r);
-      return -1;
-    }
-    free (r);
-  }
-  return 0;
-}
-
-static int test_command_7_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_COMMAND_7");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_COMMAND");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_command_7 (void)
-{
-  if (test_command_7_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_command_7");
-    return 0;
-  }
-
-  /* InitBasicFS for test_command_7: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutput for command (7) */
-  char expected[] = "\n";
-  {
-    char remotefilename[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_upload (g, "test-command", remotefilename);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_chmod (g, 493, path);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char arguments_0[] = "/test-command";
-    char arguments_1[] = "8";
-    char *arguments[] = {
-      arguments_0,
-      arguments_1,
-      NULL
-    };
-    char *r;
-    suppress_error = 0;
-    r = guestfs_command (g, arguments);
-    if (r == NULL)
-      return -1;
-    if (strcmp (r, expected) != 0) {
-      fprintf (stderr, "test_command_7: expected \"%s\" but got \"%s\"\n", expected, r);
-      return -1;
-    }
-    free (r);
-  }
-  return 0;
-}
-
-static int test_command_8_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_COMMAND_8");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_COMMAND");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_command_8 (void)
-{
-  if (test_command_8_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_command_8");
-    return 0;
-  }
-
-  /* InitBasicFS for test_command_8: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutput for command (8) */
-  char expected[] = "\n\n";
-  {
-    char remotefilename[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_upload (g, "test-command", remotefilename);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_chmod (g, 493, path);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char arguments_0[] = "/test-command";
-    char arguments_1[] = "9";
-    char *arguments[] = {
-      arguments_0,
-      arguments_1,
-      NULL
-    };
-    char *r;
-    suppress_error = 0;
-    r = guestfs_command (g, arguments);
-    if (r == NULL)
-      return -1;
-    if (strcmp (r, expected) != 0) {
-      fprintf (stderr, "test_command_8: expected \"%s\" but got \"%s\"\n", expected, r);
-      return -1;
-    }
-    free (r);
-  }
-  return 0;
-}
-
-static int test_command_9_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_COMMAND_9");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_COMMAND");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_command_9 (void)
-{
-  if (test_command_9_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_command_9");
-    return 0;
-  }
-
-  /* InitBasicFS for test_command_9: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutput for command (9) */
-  char expected[] = "Result10-1\nResult10-2\n";
-  {
-    char remotefilename[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_upload (g, "test-command", remotefilename);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_chmod (g, 493, path);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char arguments_0[] = "/test-command";
-    char arguments_1[] = "10";
-    char *arguments[] = {
-      arguments_0,
-      arguments_1,
-      NULL
-    };
-    char *r;
-    suppress_error = 0;
-    r = guestfs_command (g, arguments);
-    if (r == NULL)
-      return -1;
-    if (strcmp (r, expected) != 0) {
-      fprintf (stderr, "test_command_9: expected \"%s\" but got \"%s\"\n", expected, r);
-      return -1;
-    }
-    free (r);
-  }
-  return 0;
-}
-
-static int test_command_10_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_COMMAND_10");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_COMMAND");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_command_10 (void)
-{
-  if (test_command_10_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_command_10");
-    return 0;
-  }
-
-  /* InitBasicFS for test_command_10: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutput for command (10) */
-  char expected[] = "Result11-1\nResult11-2";
-  {
-    char remotefilename[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_upload (g, "test-command", remotefilename);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_chmod (g, 493, path);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char arguments_0[] = "/test-command";
-    char arguments_1[] = "11";
-    char *arguments[] = {
-      arguments_0,
-      arguments_1,
-      NULL
-    };
-    char *r;
-    suppress_error = 0;
-    r = guestfs_command (g, arguments);
-    if (r == NULL)
-      return -1;
-    if (strcmp (r, expected) != 0) {
-      fprintf (stderr, "test_command_10: expected \"%s\" but got \"%s\"\n", expected, r);
-      return -1;
-    }
-    free (r);
-  }
-  return 0;
-}
-
-static int test_command_11_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_COMMAND_11");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_COMMAND");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_command_11 (void)
-{
-  if (test_command_11_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_command_11");
-    return 0;
-  }
-
-  /* InitBasicFS for test_command_11: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestLastFail for command (11) */
-  {
-    char remotefilename[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_upload (g, "test-command", remotefilename);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/test-command";
-    int r;
-    suppress_error = 0;
-    r = guestfs_chmod (g, 493, path);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char arguments_0[] = "/test-command";
-    char *arguments[] = {
-      arguments_0,
-      NULL
-    };
-    char *r;
-    suppress_error = 1;
-    r = guestfs_command (g, arguments);
-    if (r != NULL)
-      return -1;
-    free (r);
-  }
-  return 0;
-}
-
-static int test_file_0_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_FILE_0");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_FILE");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_file_0 (void)
-{
-  if (test_file_0_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_file_0");
-    return 0;
-  }
-
-  /* InitBasicFS for test_file_0: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutput for file (0) */
-  char expected[] = "empty";
-  {
-    char path[] = "/new";
-    int r;
-    suppress_error = 0;
-    r = guestfs_touch (g, path);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/new";
-    char *r;
-    suppress_error = 0;
-    r = guestfs_file (g, path);
-    if (r == NULL)
-      return -1;
-    if (strcmp (r, expected) != 0) {
-      fprintf (stderr, "test_file_0: expected \"%s\" but got \"%s\"\n", expected, r);
-      return -1;
-    }
-    free (r);
-  }
-  return 0;
-}
-
-static int test_file_1_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_FILE_1");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_FILE");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_file_1 (void)
-{
-  if (test_file_1_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_file_1");
-    return 0;
-  }
-
-  /* InitBasicFS for test_file_1: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutput for file (1) */
-  char expected[] = "ASCII text";
-  {
-    char path[] = "/new";
-    char content[] = "some content\n";
-    int r;
-    suppress_error = 0;
-    r = guestfs_write_file (g, path, content, 0);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/new";
-    char *r;
-    suppress_error = 0;
-    r = guestfs_file (g, path);
-    if (r == NULL)
-      return -1;
-    if (strcmp (r, expected) != 0) {
-      fprintf (stderr, "test_file_1: expected \"%s\" but got \"%s\"\n", expected, r);
-      return -1;
-    }
-    free (r);
-  }
-  return 0;
-}
-
-static int test_file_2_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_FILE_2");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_FILE");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_file_2 (void)
-{
-  if (test_file_2_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_file_2");
-    return 0;
-  }
-
-  /* InitBasicFS for test_file_2: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestLastFail for file (2) */
-  {
-    char path[] = "/nofile";
-    char *r;
-    suppress_error = 1;
-    r = guestfs_file (g, path);
-    if (r != NULL)
-      return -1;
-    free (r);
-  }
-  return 0;
-}
-
-static int test_umount_all_0_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_UMOUNT_ALL_0");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_UMOUNT_ALL");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_umount_all_0 (void)
-{
-  if (test_umount_all_0_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_umount_all_0");
-    return 0;
-  }
-
-  /* InitBasicFS for test_umount_all_0: create ext2 on /dev/sda1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",";
-    char *lines[] = {
-      lines_0,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputList for umount_all (0) */
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char **r;
-    int i;
-    suppress_error = 0;
-    r = guestfs_mounts (g);
-    if (r == NULL)
-      return -1;
-    if (r[0] != NULL) {
-      fprintf (stderr, "test_umount_all_0: extra elements returned from command\n");
-      print_strings (r);
-      return -1;
-    }
-    for (i = 0; r[i] != NULL; ++i)
-      free (r[i]);
-    free (r);
-  }
-  return 0;
-}
-
-static int test_umount_all_1_skip (void)
-{
-  const char *str;
-
-  str = getenv ("SKIP_TEST_UMOUNT_ALL_1");
-  if (str && strcmp (str, "1") == 0) return 1;
-  str = getenv ("SKIP_TEST_UMOUNT_ALL");
-  if (str && strcmp (str, "1") == 0) return 1;
-  return 0;
-}
-
-static int test_umount_all_1 (void)
-{
-  if (test_umount_all_1_skip ()) {
-    printf ("%s skipped (reason: SKIP_TEST_* variable set)\n", "test_umount_all_1");
-    return 0;
-  }
-
-  /* InitNone|InitEmpty for test_umount_all_1 */
-  {
-    char device[] = "/dev/sda";
-    int r;
-    suppress_error = 0;
-    r = guestfs_blockdev_setrw (g, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_umount_all (g);
-    if (r == -1)
-      return -1;
-  }
-  {
-    int r;
-    suppress_error = 0;
-    r = guestfs_lvm_remove_all (g);
-    if (r == -1)
-      return -1;
-  }
-  /* TestOutputList for umount_all (1) */
-  {
-    char device[] = "/dev/sda";
-    char lines_0[] = ",10";
-    char lines_1[] = ",20";
-    char lines_2[] = ",";
-    char *lines[] = {
-      lines_0,
-      lines_1,
-      lines_2,
-      NULL
-    };
-    int r;
-    suppress_error = 0;
-    r = guestfs_sfdisk (g, device, 0, 0, 0, lines);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda2";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char fstype[] = "ext2";
-    char device[] = "/dev/sda3";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkfs (g, fstype, device);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char device[] = "/dev/sda1";
-    char mountpoint[] = "/";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mount (g, device, mountpoint);
-    if (r == -1)
-      return -1;
-  }
-  {
-    char path[] = "/mp1";
-    int r;
-    suppress_error = 0;
-    r = guestfs_mkdir (g, path);
-    if (r == -1)
-      retu