diff options
50 files changed, 3485 insertions, 3485 deletions
@@ -28,74 +28,74 @@ Directories ---------------------------------------------------------------------- appliance/ - The qemu appliance, build scripts and so on. + The qemu appliance, build scripts and so on. cat/ - The virt-cat tool. + The virt-cat tool. capitests/ - Automated tests of the C API. + Automated tests of the C API. contrib/ - Outside contributions, experimental parts. + Outside contributions, experimental parts. daemon/ - The daemon that runs inside the guest and carries out actions. + The daemon that runs inside the guest and carries out actions. df/ - The virt-df tool. + The virt-df tool. examples/ - The examples. + The examples. fish/ - Guestfish (the command-line program / shell) + Guestfish (the command-line program / shell) haskell/ - Haskell bindings. + Haskell bindings. images/ - Some guest images to test against. These are gzipped to save - space. You have to unzip them before use. + Some guest images to test against. These are gzipped to save + space. You have to unzip them before use. - Also contains some files used by the test suite. + Also contains some files used by the test suite. inspector/ - Virtual machine image inspector (virt-inspector). + Virtual machine image inspector (virt-inspector). java/ - Java bindings. + Java bindings. m4/ - M4 macros used by autoconf. + M4 macros used by autoconf. ocaml/ - OCaml bindings. + OCaml bindings. po/ - Translations. + Translations. perl/ - Perl bindings. + Perl bindings. python/ - Python bindings. + Python bindings. regressions/ - Regression tests. + Regression tests. ruby/ - Ruby bindings. + Ruby bindings. src/ - Source code to the C library. - Also contains the crucial generator program. + Source code to the C library. + Also contains the crucial generator program. test-tool/ - Interactive qemu/kernel test tool. + Interactive qemu/kernel test tool. v2v/ - Xen to KVM (V2V) conversion tool. + Xen to KVM (V2V) conversion tool. Debugging ---------------------------------------------------------------------- diff --git a/appliance/libguestfs-supermin-helper.in b/appliance/libguestfs-supermin-helper.in index e521020b..a096ea42 100755 --- a/appliance/libguestfs-supermin-helper.in +++ b/appliance/libguestfs-supermin-helper.in @@ -44,8 +44,8 @@ for f in $kernels; do b=$(echo "$b" | sed 's,vmlinuz-,,') modpath="/lib/modules/$b" if [ -d "$modpath" ]; then - ln -sf "$f" "$kernel" - break + ln -sf "$f" "$kernel" + break fi modpath= done diff --git a/appliance/supermin-split.sh.in b/appliance/supermin-split.sh.in index fe4ab6ef..61df8913 100755 --- a/appliance/supermin-split.sh.in +++ b/appliance/supermin-split.sh.in @@ -54,40 +54,40 @@ for path in $(find -not -name fakeroot.log); do # 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 + echo "$path" >&5 elif [[ "$path" =~ '^\./etc' || "$path" =~ '^./dev' || "$path" =~ '^\./var' ]]; then - echo "$path" >&5 + 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 + # 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 + 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 + 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 + 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 + echo "$dir/lib${BASH_REMATCH[1]}.so.${BASH_REMATCH[2]}.*" >&6 else - # Anything else comes from the host directly. - echo "$path" >&6 + # Anything else comes from the host directly. + echo "$path" >&6 fi done @@ -46,7 +46,7 @@ case ${GNULIB_SRCDIR--} in # Redirect the gnulib submodule to the directory on the command line # if possible. if test -d "$GNULIB_SRCDIR"/.git && \ - git config --file .gitmodules submodule.gnulib.url >/dev/null; then + git config --file .gitmodules submodule.gnulib.url >/dev/null; then git submodule init GNULIB_SRCDIR=`cd $GNULIB_SRCDIR && pwd` git config --replace-all submodule.gnulib.url $GNULIB_SRCDIR diff --git a/cat/virt-cat.pl b/cat/virt-cat.pl index 1ac720c2..10178760 100755 --- a/cat/virt-cat.pl +++ b/cat/virt-cat.pl @@ -116,8 +116,8 @@ at all. =cut GetOptions ("help|?" => \$help, - "version" => \$version, - "connect|c=s" => \$uri, + "version" => \$version, + "connect|c=s" => \$uri, ) or pod2usage (2); pod2usage (1) if $help; if ($version) { diff --git a/configure.ac b/configure.ac index df466fa8..28514b62 100644 --- a/configure.ac +++ b/configure.ac @@ -62,8 +62,8 @@ dnl Check for rpcgen and XDR library. rpcgen is optional. AC_CHECK_PROG([RPCGEN],[rpcgen],[rpcgen],[no]) AM_CONDITIONAL([HAVE_RPCGEN],[test "x$RPCGEN" != "xno"]) AC_CHECK_LIB([portablexdr],[xdrmem_create],[],[ - AC_SEARCH_LIBS([xdrmem_create],[rpc xdr nsl]) - ]) + AC_SEARCH_LIBS([xdrmem_create],[rpc xdr nsl]) + ]) dnl Check for pod2man and pod2text. AC_CHECK_PROG([POD2MAN],[pod2man],[pod2man],[no]) @@ -75,19 +75,19 @@ test "x$POD2TEXT" = "xno" && dnl Check for mksquashfs. AC_PATH_PROGS([MKSQUASHFS],[mksquashfs],[no], - [$PATH$PATH_SEPARATOR/usr/sbin$PATH_SEPARATOR/sbin]) + [$PATH$PATH_SEPARATOR/usr/sbin$PATH_SEPARATOR/sbin]) test "x$MKSQUASHFS" = "xno" && AC_MSG_ERROR([mksquashfs must be installed]) dnl Check for QEMU for running binaries on this $host_cpu, fall dnl back to basic 'qemu'. Allow the user to override it. default_qemu="qemu-kvm qemu-system-$host_cpu qemu" AC_ARG_WITH([qemu], - [AS_HELP_STRING([--with-qemu], - [set default QEMU binary @<:@default=[qemu-kvm] qemu-system-<host> qemu@:>@])], - [], - [with_qemu="$default_qemu"]) + [AS_HELP_STRING([--with-qemu], + [set default QEMU binary @<:@default=[qemu-kvm] qemu-system-<host> qemu@:>@])], + [], + [with_qemu="$default_qemu"]) AC_PATH_PROGS([QEMU],[$with_qemu],[no], - [$PATH$PATH_SEPARATOR/usr/sbin$PATH_SEPARATOR/sbin$PATH_SEPARATOR/usr/libexec]) + [$PATH$PATH_SEPARATOR/usr/sbin$PATH_SEPARATOR/sbin$PATH_SEPARATOR/usr/libexec]) test "x$QEMU" = "xno" && AC_MSG_ERROR([qemu must be installed]) AC_DEFINE_UNQUOTED([QEMU],["$QEMU"],[Location of qemu binary.]) @@ -100,13 +100,13 @@ if test "x$vmchannel_test" != "xno"; then else AC_MSG_RESULT([no]) AC_MSG_CHECKING([for "-net channel" support in $QEMU]) - vmchannelout=`$QEMU -net channel /dev/zero 2>&1 ||:` - echo "vmchannel test command output: $vmchannelout" >&AS_MESSAGE_LOG_FD - if echo "$vmchannelout" | grep -sq "vmchannel wrong port number" ; then - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - AC_MSG_FAILURE( + vmchannelout=`$QEMU -net channel /dev/zero 2>&1 ||:` + echo "vmchannel test command output: $vmchannelout" >&AS_MESSAGE_LOG_FD + if echo "$vmchannelout" | grep -sq "vmchannel wrong port number" ; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + AC_MSG_FAILURE( [I did not find vmchannel support in $QEMU. vmchannel support is vital for libguestfs to operate. You need a version @@ -122,7 +122,7 @@ If I am using the wrong qemu or you want to compile qemu from source and install it in another location, then you should configure with the --with-qemu option. ]) - fi + fi fi fi @@ -132,37 +132,37 @@ dnl dnl NB. We will change the default in future to virtio, but at the dnl moment this causes a performance problem, RHBZ#509383. AC_ARG_WITH([drive-if], - [AS_HELP_STRING([--with-drive-if], - [set default driver (ide|scsi|virtio) @<:@default=ide@:>@])], - [], - [with_drive_if=ide]) + [AS_HELP_STRING([--with-drive-if], + [set default driver (ide|scsi|virtio) @<:@default=ide@:>@])], + [], + [with_drive_if=ide]) AC_DEFINE_UNQUOTED([DRIVE_IF],["$with_drive_if"],[Default drive interface.]) dnl Check for febootstrap etc. AC_CHECK_PROG([FEBOOTSTRAP], - [febootstrap],[febootstrap],[no]) + [febootstrap],[febootstrap],[no]) if test "x$FEBOOTSTRAP" != "xno"; then AC_CHECK_PROG([FEBOOTSTRAP_RUN], - [febootstrap-run],[febootstrap-run],[no]) + [febootstrap-run],[febootstrap-run],[no]) test "x$FEBOOTSTRAP_RUN" = "xno" && \ AC_MSG_ERROR([febootstrap-run must be installed]) AC_CHECK_PROG([FEBOOTSTRAP_INSTALL], - [febootstrap-install],[febootstrap-install],[no]) + [febootstrap-install],[febootstrap-install],[no]) test "x$FEBOOTSTRAP_INSTALL" = "xno" && \ AC_MSG_ERROR([febootstrap-install must be installed]) AC_CHECK_PROG([FEBOOTSTRAP_MINIMIZE], - [febootstrap-minimize],[febootstrap-minimize],[no]) + [febootstrap-minimize],[febootstrap-minimize],[no]) test "x$FEBOOTSTRAP_MINIMIZE" = "xno" && \ AC_MSG_ERROR([febootstrap-minimize must be installed]) AC_CHECK_PROG([FEBOOTSTRAP_TO_INITRAMFS], - [febootstrap-to-initramfs],[febootstrap-to-initramfs],[no]) + [febootstrap-to-initramfs],[febootstrap-to-initramfs],[no]) test "x$FEBOOTSTRAP_TO_INITRAMFS" = "xno" && \ AC_MSG_ERROR([febootstrap-to-initramfs must be installed]) dnl Check we have fakechroot >= 2.9 (it's an indirect requirement dnl of febootstrap, but old versions will fail with yum). AC_CHECK_PROG([FAKECHROOT], - [fakechroot],[fakechroot],[no]) + [fakechroot],[fakechroot],[no]) test "x$FAKECHROOT" = "xno" && \ AC_MSG_ERROR([fakechroot must be installed]) @@ -184,9 +184,9 @@ if test "x$FEBOOTSTRAP" != "xno"; then else # check for debootstrap and debirf AC_CHECK_PROG([DEBOOTSTRAP], - [debootstrap],[debootstrap],[no]) + [debootstrap],[debootstrap],[no]) test "x$DEBOOTSTRAP" = "xno" && \ - AC_MSG_ERROR([Either febootstrap or debootstrap must be installed]) + AC_MSG_ERROR([Either febootstrap or debootstrap must be installed]) AC_CHECK_PROG([DEBIRF],[debirf],[debirf],[no]) test "x$DEBIRF" = "xno" && AC_MSG_ERROR([debirf must be installed]) @@ -209,20 +209,20 @@ AC_SUBST(DIST) dnl --with-repo to specify a Fedora repository. AC_ARG_WITH([repo], - [AS_HELP_STRING([--with-repo], - [set name of Fedora repository @<:@default=fedora-11@:>@])], - [], - [with_repo=fedora-11]) + [AS_HELP_STRING([--with-repo], + [set name of Fedora repository @<:@default=fedora-11@:>@])], + [], + [with_repo=fedora-11]) REPO="$with_repo" AC_SUBST(REPO) AC_DEFINE_UNQUOTED([REPO],["$REPO"],[Name of Fedora repository.]) dnl --with-updates to specify a Fedora updates repository. AC_ARG_WITH([updates], - [AS_HELP_STRING([--with-updates], - [set name of Fedora updates repository @<:@default=updates-released-f11@:>@])], - [], - [with_updates=updates-released-f11]) + [AS_HELP_STRING([--with-updates], + [set name of Fedora updates repository @<:@default=updates-released-f11@:>@])], + [], + [with_updates=updates-released-f11]) UPDATES="$with_updates" AC_SUBST(UPDATES) @@ -231,20 +231,20 @@ AC_DEFINE_UNQUOTED([host_cpu],["$host_cpu"],[Host architecture.]) dnl --with-mirror to specify a local Fedora mirror. AC_ARG_WITH([mirror], - [AS_HELP_STRING([--with-mirror], - [set URI of a local Fedora mirror])], - [], - [with_mirror=]) + [AS_HELP_STRING([--with-mirror], + [set URI of a local Fedora mirror])], + [], + [with_mirror=]) MIRROR="$with_mirror" AC_SUBST(MIRROR) dnl Build the supermin appliance? Please see README file before dnl enabling this option. AC_ARG_ENABLE([supermin], - [AS_HELP_STRING([--enable-supermin], - [enable supermin appliance (see README) @<:@default=no@:>@])], - [], - [enable_supermin=no]) + [AS_HELP_STRING([--enable-supermin], + [enable supermin appliance (see README) @<:@default=no@:>@])], + [], + [enable_supermin=no]) AM_CONDITIONAL([SUPERMIN],[test "x$enable_supermin" = "xyes"]) if test "x$enable_supermin" = "xyes"; then @@ -255,7 +255,7 @@ if test "x$enable_supermin" = "xyes"; then echo "febootstrap_to_initramfs test command output: $out" >&AS_MESSAGE_LOG_FD if ! echo "$out" | grep -sq -e --files ; then AC_MSG_RESULT([no]) - AC_MSG_FAILURE( + AC_MSG_FAILURE( [febootstrap-to-initramfs does not support the --files option. To build the supermin appliance, you need to upgrade to the latest @@ -271,7 +271,7 @@ version of febootstrap. echo "febootstrap_to_initramfs test command output: $out" >&AS_MESSAGE_LOG_FD if ! echo "$out" | grep -sq -e --nocompress ; then AC_MSG_RESULT([no]) - AC_MSG_FAILURE( + AC_MSG_FAILURE( [febootstrap-to-initramfs does not support the --nocompress option. To build the supermin appliance, you need to upgrade to the latest @@ -351,11 +351,11 @@ if test "x$PYTHON" != "xno"; then do AC_MSG_CHECKING([Python.h in $d]) if test -r "$d/Python.h"; then - AC_MSG_RESULT([found]) - PYTHON_INCLUDEDIR=$d - break - fi - AC_MSG_RESULT([not found]) + AC_MSG_RESULT([found]) + PYTHON_INCLUDEDIR=$d + break + fi + AC_MSG_RESULT([not found]) done for d in \ $PYTHON_PREFIX/lib64/python$PYTHON_VERSION/site-packages \ @@ -366,11 +366,11 @@ if test "x$PYTHON" != "xno"; then do AC_MSG_CHECKING([for $d]) if test -d "$d"; then - AC_MSG_RESULT([found]) - PYTHON_SITE_PACKAGES=$d - break - fi - AC_MSG_RESULT([not found]) + AC_MSG_RESULT([found]) + PYTHON_SITE_PACKAGES=$d + break + fi + AC_MSG_RESULT([not found]) done fi @@ -399,46 +399,46 @@ AC_ARG_WITH(java_home, if test "x$with_java_home" != "xno"; then if test "x$with_java_home" != "xyes" -a "x$with_java_home" != "xcheck" then - # Reject unsafe characters in $JAVA_HOME - jh_lf=' + # Reject unsafe characters in $JAVA_HOME + jh_lf=' ' - case $JAVA_HOME in - *[\\\"\#\$\&\'\`$jh_lf\ \ ]*) + case $JAVA_HOME in + *[\\\"\#\$\&\'\`$jh_lf\ \ ]*) AC_MSG_FAILURE([unsafe \$JAVA_HOME directory (use --with-java-home=no to disable Java support)]);; - esac + esac if test -d "$with_java_home"; then - JAVA_HOME="$with_java_home" - else + JAVA_HOME="$with_java_home" + else AC_MSG_FAILURE([$with_java_home is not a directory (use --with-java-home=no to disable Java support)]) - fi + fi fi if test "x$JAVA_HOME" = "x"; then # Look for Java in some likely locations. - for d in \ - /usr/lib/jvm/java \ - /usr/lib/jvm/java-6-openjdk - do - if test -d $d -a -f $d/bin/java; then + for d in \ + /usr/lib/jvm/java \ + /usr/lib/jvm/java-6-openjdk + do + if test -d $d -a -f $d/bin/java; then JAVA_HOME=$d - break - fi - done + break + fi + done fi if test "x$JAVA_HOME" != "x"; then AC_MSG_CHECKING(for JDK in $JAVA_HOME) - if test ! -x "$JAVA_HOME/bin/java"; then + if test ! -x "$JAVA_HOME/bin/java"; then AC_MSG_ERROR([missing $JAVA_HOME/bin/java binary (use --with-java-home=no to disable Java support)]) - else - JAVA="$JAVA_HOME/bin/java" - fi - if test ! -x "$JAVA_HOME/bin/javac"; then + else + JAVA="$JAVA_HOME/bin/java" + fi + if test ! -x "$JAVA_HOME/bin/javac"; then AC_MSG_ERROR([missing $JAVA_HOME/bin/javac binary]) - else - JAVAC="$JAVA_HOME/bin/javac" + else + JAVAC="$JAVA_HOME/bin/javac" fi - if test ! -x "$JAVA_HOME/bin/javah"; then + if test ! -x "$JAVA_HOME/bin/javah"; then AC_MSG_ERROR([missing $JAVA_HOME/bin/javah binary]) else JAVAH="$JAVA_HOME/bin/javah" @@ -463,10 +463,10 @@ if test "x$with_java_home" != "xno"; then else if test "`find $JAVA_HOME -name jni.h`" != ""; then head=`find $JAVA_HOME -name jni.h | tail -1` - dir=`dirname "$head"` - JNI_CFLAGS="-I$dir" + dir=`dirname "$head"` + JNI_CFLAGS="-I$dir" else - AC_MSG_FAILURE([missing jni.h header file]) + AC_MSG_FAILURE([missing jni.h header file]) fi fi AC_MSG_RESULT([$JNI_CFLAGS]) @@ -570,37 +570,37 @@ dnl Produce output files. AC_CONFIG_HEADERS([config.h]) dnl http://www.mail-archive.com/automake@gnu.org/msg10204.html AC_CONFIG_FILES([appliance/make.sh], - [chmod +x appliance/make.sh]) + [chmod +x appliance/make.sh]) AC_CONFIG_FILES([appliance/update.sh], - [chmod +x appliance/update.sh]) + [chmod +x appliance/update.sh]) AC_CONFIG_FILES([appliance/supermin-split.sh], - [chmod +x appliance/supermin-split.sh]) + [chmod +x appliance/supermin-split.sh]) AC_CONFIG_FILES([appliance/supermin-make.sh], - [chmod +x appliance/supermin-make.sh]) + [chmod +x appliance/supermin-make.sh]) AC_CONFIG_FILES([appliance/libguestfs-supermin-helper], - [chmod +x appliance/libguestfs-supermin-helper]) + [chmod +x appliance/libguestfs-supermin-helper]) AC_CONFIG_FILES([Makefile - src/Makefile fish/Makefile po/Makefile.in examples/Makefile - appliance/Makefile - appliance/debian/debirf.conf - images/Makefile - capitests/Makefile - regressions/Makefile - test-tool/Makefile - ocaml/Makefile ocaml/examples/Makefile - perl/Makefile - python/Makefile - ruby/Makefile ruby/Rakefile - java/Makefile - haskell/Makefile - cat/Makefile - df/Makefile - inspector/Makefile - v2v/Makefile - libguestfs.pc - gnulib/lib/Makefile - gnulib/tests/Makefile - ocaml/META perl/Makefile.PL]) + src/Makefile fish/Makefile po/Makefile.in examples/Makefile + appliance/Makefile + appliance/debian/debirf.conf + images/Makefile + capitests/Makefile + regressions/Makefile + test-tool/Makefile + ocaml/Makefile ocaml/examples/Makefile + perl/Makefile + python/Makefile + ruby/Makefile ruby/Rakefile + java/Makefile + haskell/Makefile + cat/Makefile + df/Makefile + inspector/Makefile + v2v/Makefile + libguestfs.pc + gnulib/lib/Makefile + gnulib/tests/Makefile + ocaml/META perl/Makefile.PL]) AC_OUTPUT dnl Produce summary. diff --git a/contrib/README b/contrib/README index 0d9bf0b9..4f7329fa 100644 --- a/contrib/README +++ b/contrib/README @@ -1,15 +1,15 @@ centos5.3-libguestfs.spec - [REMOVED] - This used to be a centos5.3 specfile. Please use the specfile - from EL-5 here: - http://cvs.fedoraproject.org/viewvc/rpms/libguestfs/EL-5/ + [REMOVED] + This used to be a centos5.3 specfile. Please use the specfile + from EL-5 here: + http://cvs.fedoraproject.org/viewvc/rpms/libguestfs/EL-5/ febootstrap/ - An experimental, non-working attempt to use febootstrap - to install operating systems. + An experimental, non-working attempt to use febootstrap + to install operating systems. fedora-libguestfs.spec - [REMOVED] - This used to be a Fedora 10+ specfile. Please use the specfile - from Fedora instead: - http://cvs.fedoraproject.org/viewvc/rpms/libguestfs/devel/ + [REMOVED] + This used to be a Fedora 10+ specfile. Please use the specfile + from Fedora instead: + http://cvs.fedoraproject.org/viewvc/rpms/libguestfs/devel/ diff --git a/daemon/configure.ac b/daemon/configure.ac index 243f353a..3bfd2ed2 100644 --- a/daemon/configure.ac +++ b/daemon/configure.ac @@ -48,19 +48,19 @@ AM_PROG_CC_C_O dnl Check for Augeas (now optional). AC_CHECK_LIB([augeas],[aug_match],[ - LIBS="-laugeas $LIBS" - have_augeas=yes - dnl Check for functions not available in earlier versions of Augeas. - AC_CHECK_FUNCS([aug_load aug_defvar aug_defnode]) - ],[have_augeas=no]) + LIBS="-laugeas $LIBS" + have_augeas=yes + dnl Check for functions not available in earlier versions of Augeas. + AC_CHECK_FUNCS([aug_load aug_defvar aug_defnode]) + ],[have_augeas=no]) if test "x$have_augeas" = "xyes"; then - AC_DEFINE([HAVE_AUGEAS],[1],[Define to 1 if you have Augeas]) + AC_DEFINE([HAVE_AUGEAS],[1],[Define to 1 if you have Augeas]) fi dnl Check for XDR library. AC_CHECK_LIB([portablexdr],[xdrmem_create],[],[ - AC_SEARCH_LIBS([xdrmem_create],[rpc xdr nsl]) - ]) + AC_SEARCH_LIBS([xdrmem_create],[rpc xdr nsl]) + ]) dnl Functions which may not be available in older distributions. AC_CHECK_FUNCS([futimens listxattr llistxattr getxattr lgetxattr setxattr lsetxattr removexattr lremovexattr]) @@ -68,14 +68,14 @@ AC_CHECK_FUNCS([futimens listxattr llistxattr getxattr lgetxattr setxattr lsetxa dnl For modified printf, we need glibc either (old-style) dnl register_printf_function or (new-style) register_printf_specifier. AC_CHECK_FUNC([register_printf_specifier],[ - AC_DEFINE([HAVE_REGISTER_PRINTF_SPECIFIER],[1], - [Define to 1 if you have new-style register_printf_specifier]) - ],[ - AC_CHECK_FUNC([register_printf_function],[ - AC_DEFINE([HAVE_REGISTER_PRINTF_FUNCTION],[1], - [Define to 1 if you have old-style register_printf_function]) - ],[ - AC_MSG_FAILURE( + AC_DEFINE([HAVE_REGISTER_PRINTF_SPECIFIER],[1], + [Define to 1 if you have new-style register_printf_specifier]) + ],[ + AC_CHECK_FUNC([register_printf_function],[ + AC_DEFINE([HAVE_REGISTER_PRINTF_FUNCTION],[1], + [Define to 1 if you have old-style register_printf_function]) + ],[ + AC_MSG_FAILURE( [No support for glibc-style extended printf formatters. This means you either have a very old glibc (pre-2.0) or you diff --git a/daemon/daemon.h b/daemon/daemon.h index 9aa831a5..70a23519 100644 --- a/daemon/daemon.h +++ b/daemon/daemon.h @@ -48,9 +48,9 @@ extern void free_stringslen (char **argv, int len); extern int command (char **stdoutput, char **stderror, const char *name, ...); extern int commandr (char **stdoutput, char **stderror, const char *name, ...); extern int commandv (char **stdoutput, char **stderror, - char * const* const argv); + char * const* const argv); extern int commandrv (char **stdoutput, char **stderror, - char * const* const argv); + char * const* const argv); extern char **split_lines (char *str); diff --git a/daemon/debug.c b/daemon/debug.c index 68320a31..13b7240f 100644 --- a/daemon/debug.c +++ b/daemon/debug.c @@ -157,11 +157,11 @@ debug_fds (const char *subcmd, int argc, char *const *const argv) if (S_ISLNK (statbuf.st_mode)) { r = readlink (fname, link, sizeof link - 1); if (r == -1) { - reply_with_perror ("readline: %s", fname); - fclose (fp); - free (out); - closedir (dir); - return NULL; + reply_with_perror ("readline: %s", fname); + fclose (fp); + free (out); + closedir (dir); + return NULL; } link[r] = '\0'; diff --git a/daemon/devsparts.c b/daemon/devsparts.c index 33579ba5..1970e7d0 100644 --- a/daemon/devsparts.c +++ b/daemon/devsparts.c @@ -46,8 +46,8 @@ do_list_devices (void) while ((d = readdir (dir)) != NULL) { if (strncmp (d->d_name, "sd", 2) == 0 || - strncmp (d->d_name, "hd", 2) == 0 || - strncmp (d->d_name, "vd", 2) == 0) { + strncmp (d->d_name, "hd", 2) == 0 || + strncmp (d->d_name, "vd", 2) == 0) { snprintf (buf, sizeof buf, "/dev/%s", d->d_name); /* RHBZ#514505: Some versions of qemu <= 0.10 add a @@ -56,14 +56,14 @@ do_list_devices (void) */ int fd = open (buf, O_RDONLY); if (fd == -1) { - perror (buf); - continue; + perror (buf); + continue; } close (fd); if (add_string (&r, &size, &alloc, buf) == -1) { - closedir (dir); - return NULL; + closedir (dir); + return NULL; } } } @@ -100,8 +100,8 @@ do_list_partitions (void) while ((d = readdir (dir)) != NULL) { if (strncmp (d->d_name, "sd", 2) == 0 || - strncmp (d->d_name, "hd", 2) == 0 || - strncmp (d->d_name, "vd", 2) == 0) { + strncmp (d->d_name, "hd", 2) == 0 || + strncmp (d->d_name, "vd", 2) == 0) { snprintf (buf, sizeof buf, "/dev/%s", d->d_name); /* RHBZ#514505: Some versions of qemu <= 0.10 add a @@ -110,8 +110,8 @@ do_list_partitions (void) */ int fd = open (buf, O_RDONLY); if (fd == -1) { - perror (buf); - continue; + perror (buf); + continue; } close (fd); @@ -122,26 +122,26 @@ do_list_partitions (void) dir2 = opendir (buf); if (!dir2) { - reply_with_perror ("opendir: %s", buf); - free_stringslen (r, size); - return NULL; + reply_with_perror ("opendir: %s", buf); + free_stringslen (r, size); + return NULL; } while ((d = readdir (dir2)) != NULL) { - if (strncmp (d->d_name, devname, strlen (devname)) == 0) { - snprintf (buf, sizeof buf, "/dev/%s", d->d_name); - - if (add_string (&r, &size, &alloc, buf) == -1) { - closedir (dir2); - closedir (dir); - return NULL; - } - } + if (strncmp (d->d_name, devname, strlen (devname)) == 0) { + snprintf (buf, sizeof buf, "/dev/%s", d->d_name); + + if (add_string (&r, &size, &alloc, buf) == -1) { + closedir (dir2); + closedir (dir); + return NULL; + } + } } if (closedir (dir2) == -1) { - reply_with_perror ("closedir: /sys/block/%s", devname); - free_stringslen (r, size); - return NULL; + reply_with_perror ("closedir: /sys/block/%s", devname); + free_stringslen (r, size); + return NULL; } } } diff --git a/daemon/dir.c b/daemon/dir.c index a8f066fd..5945862e 100644 --- a/daemon/dir.c +++ b/daemon/dir.c @@ -123,8 +123,8 @@ recursive_mkdir (const char *path) r = lstat (path, &buf); if (r == -1) return -1; if (!S_ISDIR (buf.st_mode)) { - errno = ENOTDIR; - return -1; + errno = ENOTDIR; + return -1; } return 0; /* OK - directory exists here already. */ } diff --git a/daemon/ext2.c b/daemon/ext2.c index 5a1d0fdb..0f7a66c1 100644 --- a/daemon/ext2.c +++ b/daemon/ext2.c @@ -77,31 +77,31 @@ do_tune2fs_l (char *device) do { colon++; } while (*colon && isspace (*colon)); if (add_string (&ret, &size, &alloc, p) == -1) { - free (out); - return NULL; + free (out); + return NULL; } if (strcmp (colon, "<none>") == 0 || - strcmp (colon, "<not available>") == 0 || - strcmp (colon, "(none)") == 0) { - if (add_string (&ret, &size, &alloc, "") == -1) { - free (out); - return NULL; - } + strcmp (colon, "<not available>") == 0 || + strcmp (colon, "(none)") == 0) { + if (add_string (&ret, &size, &alloc, "") == -1) { + free (out); + return NULL; + } } else { - if (add_string (&ret, &size, &alloc, colon) == -1) { - free (out); - return NULL; - } + if (add_string (&ret, &size, &alloc, colon) == -1) { + free (out); + return NULL; + } } } else { if (add_string (&ret, &size, &alloc, p) == -1) { - free (out); - return NULL; + free (out); + return NULL; } if (add_string (&ret, &size, &alloc, "") == -1) { - free (out); - return NULL; + free (out); + return NULL; } } diff --git a/daemon/file.c b/daemon/file.c index aab7e93e..63d8dd2d 100644 --- a/daemon/file.c +++ b/daemon/file.c @@ -97,18 +97,18 @@ do_cat (char *path) if (size >= alloc) { alloc += 8192; if (alloc > max) { - reply_with_error ("cat: %s: file is too large for message buffer", - path); - free (buf); - close (fd); - return NULL; + reply_with_error ("cat: %s: file is too large for message buffer", + path); + free (buf); + close (fd); + return NULL; } buf2 = realloc (buf, alloc); if (buf2 == NULL) { - reply_with_perror ("realloc"); - free (buf); - close (fd); - return NULL; + reply_with_perror ("realloc"); + free (buf); + close (fd); + return NULL; } buf = buf2; } diff --git a/daemon/guestfsd.c b/daemon/guestfsd.c index e8fb48fc..07a1c5e0 100644 --- a/daemon/guestfsd.c +++ b/daemon/guestfsd.c @@ -159,11 +159,11 @@ main (int argc, char *argv[]) p += 8; p2 = strchr (p, ':'); if (p2) { - *p2++ = '\0'; - host = p; - r = strcspn (p2, " \n"); - p2[r] = '\0'; - port = p2; + *p2++ = '\0'; + host = p; + r = strcspn (p2, " \n"); + p2[r] = '\0'; + port = p2; } } } @@ -209,7 +209,7 @@ main (int argc, char *argv[]) sock = socket (rr->ai_family, rr->ai_socktype, rr->ai_protocol); if (sock != -1) { if (connect (sock, rr->ai_addr, rr->ai_addrlen) == 0) - break; + break; perror ("connect"); close (sock); @@ -578,40 +578,40 @@ commandrv (char **stdoutput, char **stderror, char * const* const argv) if (FD_ISSET (so_fd[0], &rset2)) { /* something on stdout */ r = read (so_fd[0], buf, sizeof buf); if (r == -1) { - perror ("read"); - goto quit; + perror ("read"); + goto quit; } if (r == 0) { FD_CLR (so_fd[0], &rset); quit++; } if (r > 0 && stdoutput) { - so_size += r; - p = realloc (*stdoutput, so_size); - if (p == NULL) { - perror ("realloc"); - goto quit; - } - *stdoutput = p; - memcpy (*stdoutput + so_size - r, buf, r); + so_size += r; + p = realloc (*stdoutput, so_size); + if (p == NULL) { + perror ("realloc"); + goto quit; + } + *stdoutput = p; + memcpy (*stdoutput + so_size - r, buf, r); } } if (FD_ISSET (se_fd[0], &rset2)) { /* something on stderr */ r = read (se_fd[0], buf, sizeof buf); if (r == -1) { - perror ("read"); - goto quit; + perror ("read"); + goto quit; } if (r == 0) { FD_CLR (se_fd[0], &rset); quit++; } if (r > 0 && stderror) { - se_size += r; - p = realloc (*stderror, se_size); - if (p == NULL) { - perror ("realloc"); - goto quit; - } - *stderror = p; - memcpy (*stderror + se_size - r, buf, r); + se_size += r; + p = realloc (*stderror, se_size); + if (p == NULL) { + perror ("realloc"); + goto quit; + } + *stderror = p; + memcpy (*stderror + se_size - r, buf, r); } } } @@ -643,7 +643,7 @@ commandrv (char **stdoutput, char **stderror, char * const* const argv) (*stderror)[se_size] = '\0'; se_size--; while (se_size >= 0 && (*stderror)[se_size] == '\n') - (*stderror)[se_size--] = '\0'; + (*stderror)[se_size--] = '\0'; } } @@ -722,7 +722,7 @@ print_shell_quote (FILE *stream, const void *const *args) { #define SAFE(c) (isalnum((c)) || \ - (c) == '/' || (c) == '-' || (c) == '_' || (c) == '.') + (c) == '/' || (c) == '-' || (c) == '_' || (c) == '.') int i, len; const char *str = *((const char **) (args[0])); @@ -740,11 +740,11 @@ print_shell_quote (FILE *stream, static int print_sysroot_shell_quote (FILE *stream, - const struct printf_info *info, - const void *const *args) + const struct printf_info *info, + const void *const *args) { #define SAFE(c) (isalnum((c)) || \ - (c) == '/' || (c) == '-' || (c) == '_' || (c) == '.') + (c) == '/' || (c) == '-' || (c) == '_' || (c) == '.') fputs (sysroot, stream); return sysroot_len + print_shell_quote (stream, info, args); } @@ -752,7 +752,7 @@ print_sysroot_shell_quote (FILE *stream, #ifdef HAVE_REGISTER_PRINTF_SPECIFIER static int print_arginfo (const struct printf_info *info, - size_t n, int *argtypes, int *size) + size_t n, int *argtypes, int *size) { if (n > 0) { argtypes[0] = PA_STRING; diff --git a/daemon/inotify.c b/daemon/inotify.c index 43f282db..4bc6f179 100644 --- a/daemon/inotify.c +++ b/daemon/inotify.c @@ -165,10 +165,10 @@ do_inotify_read (void) int n, r; r = read (inotify_fd, inotify_buf + inotify_posn, - sizeof (inotify_buf) - inotify_posn); + sizeof (inotify_buf) - inotify_posn); if (r == -1) { if (errno == EWOULDBLOCK || errno == EAGAIN) /* End of list. */ - break; + break; reply_with_perror ("read"); goto error; } @@ -190,18 +190,18 @@ do_inotify_read (void) /* Have we got a complete event in the buffer? */ #ifdef __GNUC__ if (n + sizeof (struct inotify_event) > inotify_posn || - n + sizeof (struct inotify_event) + event->len > inotify_posn) - break; + n + sizeof (struct inotify_event) + event->len > inotify_posn) + break; #else #error "this code needs fixing so it works on non-GCC compilers" #endif np = realloc (ret->guestfs_int_inotify_event_list_val, - (ret->guestfs_int_inotify_event_list_len + 1) * - sizeof (guestfs_int_inotify_event)); + (ret->guestfs_int_inotify_event_list_len + 1) * + sizeof (guestfs_int_inotify_event)); if (np == NULL) { - reply_with_perror ("realloc"); - goto error; + reply_with_perror ("realloc"); + goto error; } ret->guestfs_int_inotify_event_list_val = np; in = &ret->guestfs_int_inotify_event_list_val[ret->guestfs_int_inotify_event_list_len]; @@ -212,12 +212,12 @@ do_inotify_read (void) in->in_cookie = event->cookie; if (event->len > 0) - in->in_name = strdup (event->name); + in->in_name = strdup (event->name); else - in->in_name = strdup (""); /* Should have optional string fields XXX. */ + in->in_name = strdup (""); /* Should have optional string fields XXX. */ if (in->in_name == NULL) { - reply_with_perror ("strdup"); - goto error; + reply_with_perror ("strdup"); + goto error; } /* Estimate space used by this event in the message. */ @@ -279,7 +279,7 @@ do_inotify_files (void) const char *name = events->guestfs_int_inotify_event_list_val[i].in_name; if (name[0] != '\0') - fprintf (fp, "%s\n", name); + fprintf (fp, "%s\n", name); } xdr_free ((xdrproc_t) xdr_guestfs_int_inotify_event_list, (char *) events); diff --git a/daemon/link.c b/daemon/link.c index 57e35384..29ae6794 100644 --- a/daemon/link.c +++ b/daemon/link.c @@ -90,19 +90,19 @@ _link (const char *flag, int symbolic, const char *target, const char *linkname) if (flag) r = command (NULL, &err, - "ln", flag, "--", /* target could begin with '-' */ - buf_target ? : target, buf_linkname, NULL); + "ln", flag, "--", /* target could begin with '-' */ + buf_target ? : target, buf_linkname, NULL); else r = command (NULL, &err, - "ln", "--", - buf_target ? : target, buf_linkname, NULL); + "ln", "--", + buf_target ? : target, buf_linkname, NULL); free (buf_linkname); free (buf_target); if (r == -1) { reply_with_error ("ln%s%s: %s: %s: %s", - flag ? " " : "", - flag ? : "", - target, linkname, err); + flag ? " " : "", + flag ? : "", + target, linkname, err); free (err); return -1; } diff --git a/daemon/lvm.c b/daemon/lvm.c index 01b6435e..624dcf34 100644 --- a/daemon/lvm.c +++ b/daemon/lvm.c @@ -93,7 +93,7 @@ do_pvs (void) int r; r = command (&out, &err, - "/sbin/lvm", "pvs", "-o", "pv_name", "--noheadings", NULL); + "/sbin/lvm", "pvs", "-o", "pv_name", "--noheadings", NULL); if (r == -1) { reply_with_error ("%s", err); free (out); @@ -113,7 +113,7 @@ do_vgs (void) int r; r = command (&out, &err, - "/sbin/lvm", "vgs", "-o", "vg_name", "--noheadings", NULL); + "/sbin/lvm", "vgs", "-o", "vg_name", "--noheadings", NULL); if (r == -1) { reply_with_error ("%s", err); free (out); @@ -133,9 +133,9 @@ do_lvs (void) int r; r = command (&out, &err, - "/sbin/lvm", "lvs", - "-o", "vg_name,lv_name", "--noheadings", - "--separator", "/", NULL); + "/sbin/lvm", "lvs", + "-o", "vg_name,lv_name", "--noheadings", + "--separator", "/", NULL); if (r == -1) { reply_with_error ("%s", err); free (out); @@ -179,7 +179,7 @@ do_pvcreate (char *device) IS_DEVICE (device, -1); r = command (NULL, &err, - "/sbin/lvm", "pvcreate", device, NULL); + "/sbin/lvm", "pvcreate", device, NULL); if (r == -1) { reply_with_error ("%s", err); free (err); @@ -240,8 +240,8 @@ do_lvcreate (char *logvol, char *volgroup, int mbytes) snprintf (size, sizeof size, "%d", mbytes); r = command (NULL, &err, - "/sbin/lvm", "lvcreate", - "-L", size, "-n", logvol, volgroup, NULL); + "/sbin/lvm", "lvcreate", + "-L", size, "-n", logvol, volgroup, NULL); if (r == -1) { reply_with_error ("%s", err); free (err); @@ -267,8 +267,8 @@ do_lvresize (char *logvol, int mbytes) snprintf (size, sizeof size, "%d", mbytes); r = command (NULL, &err, - "/sbin/lvm", "lvresize", - "-L", size, logvol, NULL); + "/sbin/lvm", "lvresize", + "-L", size, logvol, NULL); if (r == -1) { reply_with_error ("lvresize: %s", err); free (err); @@ -355,7 +355,7 @@ do_lvremove (char *device) IS_DEVICE (device, -1); r = command (NULL, &err, - "/sbin/lvm", "lvremove", "-f", device, NULL); + "/sbin/lvm", "lvremove", "-f", device, NULL); if (r == -1) { reply_with_error ("%s", err); free (err); @@ -376,7 +376,7 @@ do_vgremove (char *device) int r; r = command (NULL, &err, - "/sbin/lvm", "vgremove", "-f", device, NULL); + "/sbin/lvm", "vgremove", "-f", device, NULL); if (r == -1) { reply_with_error ("%s", err); free (err); @@ -399,7 +399,7 @@ do_pvremove (char *device) IS_DEVICE (device, -1); r = command (NULL, &err, - "/sbin/lvm", "pvremove", "-ff", device, NULL); + "/sbin/lvm", "pvremove", "-ff", device, NULL); if (r == -1) { reply_with_error ("%s", err); free (err); @@ -422,7 +422,7 @@ do_pvresize (char *device) IS_DEVICE (device, -1); r = command (NULL, &err, - "/sbin/lvm", "pvresize", device, NULL); + "/sbin/lvm", "pvresize", device, NULL); if (r == -1) { reply_with_error ("pvresize: %s: %s", device, err); free (err); diff --git a/daemon/mount.c b/daemon/mount.c index e7265fe2..9754ca9a 100644 --- a/daemon/mount.c +++ b/daemon/mount.c @@ -42,7 +42,7 @@ int root_mounted = 0; int do_mount_vfs (char *options, char *vfstype, - char *device, char *mountpoint) + char *device, char *mountpoint) { int r, is_root; char *mp; @@ -65,10 +65,10 @@ do_mount_vfs (char *options, char *vfstype, if (vfstype) r = command (NULL, &error, - "mount", "-o", options, "-t", vfstype, device, mp, NULL); + "mount", "-o", options, "-t", vfstype, device, mp, NULL); else r = command (NULL, &error, - "mount", "-o", options, device, mp, NULL); + "mount", "-o", options, device, mp, NULL); free (mp); if (r == -1) { reply_with_error ("mount: %s on %s: %s", device, mountpoint, error); @@ -96,7 +96,7 @@ do_mount_ro (char *device, char *mountpoint) int do_mount_options (char *options, char *device, - char *mountpoint) + char *mountpoint) { return do_mount_vfs (options, NULL, device, mountpoint); } @@ -176,22 +176,22 @@ mounts_or_mountpoints (int mp) if (p2 != NULL) { *p2 = '\0'; if (add_string (&ret, &size, &alloc, p) == -1) { - free (out); - return NULL; + free (out); + return NULL; } if (mp) { - p2 += 4 + sysroot_len; /* skip " on /sysroot" */ - len = strcspn (p2, " "); - - if (len == 0) /* .. just /sysroot, so we turn it into "/" */ - p2 = (char *) "/"; - else - p2[len] = '\0'; - - if (add_string (&ret, &size, &alloc, p2) == -1) { - free (out); - return NULL; - } + p2 += 4 + sysroot_len; /* skip " on /sysroot" */ + len = strcspn (p2, " "); + + if (len == 0) /* .. just /sysroot, so we turn it into "/" */ + p2 = (char *) "/"; + else + p2[len] = '\0'; + + if (add_string (&ret, &size, &alloc, p2) == -1) { + free (out); + return NULL; + } } } @@ -277,8 +277,8 @@ do_umount_all (void) p3 = p2 + strcspn (p2, " "); *p3 = '\0'; if (add_string (&mounts, &size, &alloc, p2) == -1) { - free (out); - return -1; + free (out); + return -1; } } diff --git a/daemon/proto.c b/daemon/proto.c index acd66017..709f978f 100644 --- a/daemon/proto.c +++ b/daemon/proto.c @@ -69,7 +69,7 @@ main_loop (int _sock) if (len > GUESTFS_MESSAGE_MAX) { fprintf (stderr, "guestfsd: incoming message is too long (%u bytes)\n", - len); + len); exit (1); } @@ -86,20 +86,20 @@ main_loop (int _sock) int i, j; for (i = 0; i < len; i += 16) { - printf ("%04x: ", i); - for (j = i; j < MIN (i+16, len); ++j) - printf ("%02x ", (unsigned char) buf[j]); - for (; j < i+16; ++j) - printf (" "); - printf ("|"); - for (j = i; j < MIN (i+16, len); ++j) - if (isprint (buf[j])) - printf ("%c", buf[j]); - else - printf ("."); - for (; j < i+16; ++j) - printf (" "); - printf ("|\n"); + printf ("%04x: ", i); + for (j = i; j < MIN (i+16, len); ++j) + printf ("%02x ", (unsigned char) buf[j]); + for (; j < i+16; ++j) + printf (" "); + printf ("|"); + for (j = i; j < MIN (i+16, len); ++j) + if (isprint (buf[j])) + printf ("%c", buf[j]); + else + printf ("."); + for (; j < i+16; ++j) + printf (" "); + printf ("|\n"); } } #endif @@ -147,11 +147,11 @@ main_loop (int _sock) end_us = (int64_t) end_t.tv_sec * 1000000 + end_t.tv_usec; elapsed_us = end_us - start_us; fprintf (stderr, "proc %d (%s) took %d.%02d seconds\n", - proc_nr, - proc_nr >= 0 && proc_nr < GUESTFS_PROC_NR_PROCS - ? function_names[proc_nr] : "UNKNOWN PROCEDURE", - (int) (elapsed_us / 1000000), - (int) ((elapsed_us / 10000) % 100)); + proc_nr, + proc_nr >= 0 && proc_nr < GUESTFS_PROC_NR_PROCS + ? function_names[proc_nr] : "UNKNOWN PROCEDURE", + (int) (elapsed_us / 1000000), + (int) ((elapsed_us / 10000) % 100)); } cont: @@ -317,7 +317,7 @@ receive_file (receive_cb cb, void *opaque) if (len > GUESTFS_MESSAGE_MAX) { fprintf (stderr, "guestfsd: incoming message is too long (%u bytes)\n", - len); + len); exit (1); } @@ -341,7 +341,7 @@ receive_file (receive_cb cb, void *opaque) if (verbose) printf ("receive_file: got chunk: cancel = %d, len = %d, buf = %p\n", - chunk.cancel, chunk.data.data_len, chunk.data.data_val); + chunk.cancel, chunk.data.data_len, chunk.data.data_val); if (chunk.cancel) { fprintf (stderr, "receive_file: received cancellation from library\n"); @@ -397,7 +397,7 @@ send_file_write (const void *buf, int len) if (len > GUESTFS_MAX_CHUNK_SIZE) { fprintf (stderr, "send_file_write: len (%d) > GUESTFS_MAX_CHUNK_SIZE (%d)\n", - len, GUESTFS_MAX_CHUNK_SIZE); + len, GUESTFS_MAX_CHUNK_SIZE); return -1; } @@ -455,7 +455,7 @@ check_for_library_cancellation (void) if (flag != GUESTFS_CANCEL_FLAG) { fprintf (stderr, "check_for_library_cancellation: read 0x%x from library, expected 0x%x\n", - flag, GUESTFS_CANCEL_FLAG); + flag, GUESTFS_CANCEL_FLAG); return 0; } diff --git a/daemon/readdir.c b/daemon/readdir.c index e3851db4..17fc6190 100644 --- a/daemon/readdir.c +++ b/daemon/readdir.c @@ -63,7 +63,7 @@ do_readdir (char *path) guestfs_int_dirent *p; p = realloc (ret->guestfs_int_dirent_list_val, - sizeof (guestfs_int_dirent) * (i+1)); + sizeof (guestfs_int_dirent) * (i+1)); v.name = strdup (d->d_name); if (!p || !v.name) { reply_with_perror ("allocate"); diff --git a/daemon/sfdisk.c b/daemon/sfdisk.c index f512e26b..e06d0bf0 100644 --- a/daemon/sfdisk.c +++ b/daemon/sfdisk.c @@ -31,8 +31,8 @@ static int sfdisk (char *device, int n, int cyls, int heads, int sectors, - const char *extra_flag, - char * const* const lines) + const char *extra_flag, + char * const* const lines) { FILE *fp; char buf[256]; @@ -85,14 +85,14 @@ sfdisk (char *device, int n, int cyls, int heads, int sectors, int do_sfdisk (char *device, int cyls, int heads, int sectors, - char **lines) + char **lines) { return sfdisk (device, 0, cyls, heads, sectors, NULL, lines); } int do_sfdisk_N (char *device, int n, int cyls, int heads, int sectors, - char *line) + char *line) { const char *lines[2] = { line, NULL }; diff --git a/daemon/xattr.c b/daemon/xattr.c index 23b00d82..a908a44b 100644 --- a/daemon/xattr.c +++ b/daemon/xattr.c @@ -107,9 +107,9 @@ do_lremovexattr (char *xattr, char *path) static guestfs_int_xattr_list * getxattrs (char *path, - ssize_t (*listxattr) (const char *path, char *list, size_t size), - ssize_t (*getxattr) (const char *path, const char *name, - void *value, size_t size)) + ssize_t (*listxattr) (const char *path, char *list, size_t size), + ssize_t (*getxattr) (const char *path, const char *name, + void *value, size_t size)) { ssize_t len, vlen; char *buf = NULL; @@ -175,15 +175,15 @@ getxattrs (char *path, r->guestfs_int_xattr_list_val[j].attrval.attrval_len = vlen; if (r->guestfs_int_xattr_list_val[j].attrname == NULL || - r->guestfs_int_xattr_list_val[j].attrval.attrval_val == NULL) { + r->guestfs_int_xattr_list_val[j].attrval.attrval_val == NULL) { reply_with_perror ("malloc"); goto error; } CHROOT_IN; vlen = getxattr (path, &buf[i], - r->guestfs_int_xattr_list_val[j].attrval.attrval_val, - vlen); + r->guestfs_int_xattr_list_val[j].attrval.attrval_val, + vlen); CHROOT_OUT; if (vlen == -1) { reply_with_perror ("getxattr"); @@ -200,8 +200,8 @@ getxattrs (char *path, if (r) { if (r->guestfs_int_xattr_list_val) for (i = 0; i < r->guestfs_int_xattr_list_len; ++i) { - free (r->guestfs_int_xattr_list_val[i].attrname); - free (r->guestfs_int_xattr_list_val[i].attrval.attrval_val); + free (r->guestfs_int_xattr_list_val[i].attrname); + free (r->guestfs_int_xattr_list_val[i].attrval.attrval_val); } free (r->guestfs_int_xattr_list_val); } @@ -211,8 +211,8 @@ getxattrs (char *path, static int _setxattr (char *xattr, char *val, int vallen, char *path, - int (*setxattr) (const char *path, const char *name, - const void *value, size_t size, int flags)) + int (*setxattr) (const char *path, const char *name, + const void *value, size_t size, int flags)) { int r; @@ -229,7 +229,7 @@ _setxattr (char *xattr, char *val, int vallen, char *path, static int _removexattr (char *xattr, char *path, - int (*removexattr) (const char *path, const char *name)) + int (*removexattr) (const char *path, const char *name)) { int r; diff --git a/df/virt-df.pl b/df/virt-df.pl index 25fd6a82..a1b22286 100755 --- a/df/virt-df.pl +++ b/df/virt-df.pl @@ -131,8 +131,8 @@ Print inodes instead of blocks. =cut GetOptions ("help|?" => \$help, - "version" => \$version, - "connect|c=s" => \$uri, + "version" => \$version, + "connect|c=s" => \$uri, "csv" => \$csv, "human-readable|human|h" => \$human, "inodes|i" => \$inodes, @@ -151,9 +151,9 @@ if (@ARGV == 0) { my $conn; if ($uri) { - $conn = Sys::Virt->new (readonly => 1, address => $uri); + $conn = Sys::Virt->new (readonly => 1, address => $uri); } else { - $conn = Sys::Virt->new (readonly => 1); + $conn = Sys::Virt->new (readonly => 1); } my @doms = $conn->list_defined_domains (); @@ -162,10 +162,10 @@ if (@ARGV == 0) { my @domnames = map { $_->get_name () } @doms; if (@domnames) { - print_title (); - foreach (@domnames) { - do_df ($_); - } + print_title (); + foreach (@domnames) { + do_df ($_); + } } } else { print_title (); @@ -177,9 +177,9 @@ sub do_df my $g; if ($uri) { - $g = open_guest (\@_, address => $uri); + $g = open_guest (\@_, address => $uri); } else { - $g = open_guest (\@_); + $g = open_guest (\@_); } $g->launch (); @@ -195,15 +195,15 @@ sub do_df # Mount each partition in turn, and if mountable, do a statvfs on it. foreach my $partition (@partitions) { - my %stat; - eval { - $g->mount_ro ($partition, "/"); - %stat = $g->statvfs ("/"); - }; - if (!$@) { - print_stat ($domname, $partition, \%stat); - } - $g->umount_all (); + my %stat; + eval { + $g->mount_ro ($partition, "/"); + %stat = $g->statvfs ("/"); + }; + if (!$@) { + print_stat ($domname, $partition, \%stat); + } + $g->umount_all (); } } @@ -216,38 +216,38 @@ sub print_stat my @cols = ($domname, $partition); if (!$inodes) { - my $bsize = $stat->{bsize}; # block size - my $blocks = $stat->{blocks}; # total number of blocks - my $bfree = $stat->{bfree}; # blocks free (total) - my $bavail = $stat->{bavail}; # blocks free (for non-root users) - - my $factor = $bsize / 1024; - - push @cols, $blocks*$factor; # total 1K blocks - push @cols, ($blocks-$bfree)*$factor; # total 1K blocks used - push @cols, $bavail*$factor; # total 1K blocks available - - # XXX %used column comes out different from the native 'df' - # program. Need to check how 'df' calculates this. - push @cols, 100.0 - 100.0 * $bavail / $blocks; - - if ($human) { - $cols[2] = human_size ($cols[2]); - $cols[3] = human_size ($cols[3]); - $cols[4] = human_size ($cols[4]); - } + my $bsize = $stat->{bsize}; # block size + my $blocks = $stat->{blocks}; # total number of blocks + my $bfree = $stat->{bfree}; # blocks free (total) + my $bavail = $stat->{bavail}; # blocks free (for non-root users) + + my $factor = $bsize / 1024; + + push @cols, $blocks*$factor; # total 1K blocks + push @cols, ($blocks-$bfree)*$factor; # total 1K blocks used + push @cols, $bavail*$factor; # total 1K blocks available + + # XXX %used column comes out different from the native 'df' + # program. Need to check how 'df' calculates this. + push @cols, 100.0 - 100.0 * $bavail / $blocks; + + if ($human) { + $cols[2] = human_size ($cols[2]); + $cols[3] = human_size ($cols[3]); + $cols[4] = human_size ($cols[4]); + } } else { - my $files = $stat->{files}; # total number of inodes - my $ffree = $stat->{ffree}; # inodes free (total) - my $favail = $stat->{favail}; # inodes free (for non-root users) + my $files = $stat->{files}; # total number of inodes + my $ffree = $stat->{ffree}; # inodes free (total) + my $favail = $stat->{favail}; # inodes free (for non-root users) - push @cols, $files; - push @cols, $files-$ffree; - push @cols, $ffree; + push @cols, $files; + push @cols, $files-$ffree; + push @cols, $ffree; - # XXX %used column comes out different from the native 'df' - # program. Need to check how 'df' calculates this. - push @cols, 100.0 - 100.0 * $favail / $files; + # XXX %used column comes out different from the native 'df' + # program. Need to check how 'df' calculates this. + push @cols, 100.0 - 100.0 * $favail / $files; } print_cols (@cols); @@ -257,42 +257,42 @@ sub print_title { my @cols = (__"Virtual Machine", __"Filesystem"); if (!$inodes) { - if (!$human) { - push @cols, __"1K-blocks"; - } else { - push @cols, __"Size"; - } - push @cols, __"Used"; - push @cols, __"Available"; - push @cols, __"Use%"; + if (!$human) { + push @cols, __"1K-blocks"; + } else { + push @cols, __"Size"; + } + push @cols, __"Used"; + push @cols, __"Available"; + push @cols, __"Use%"; } else { - push @cols, __"Inodes"; - push @cols, __"IUsed"; - push @cols, __"IFree"; - push @cols, __"IUse%"; + push @cols, __"Inodes"; + push @cols, __"IUsed"; + push @cols, __"IFree"; + push @cols, __"IUse%"; } if (!$csv) { - # ignore $cols[0] in this mode - printf "%-36s%10s %10s %10s %5s\n", - $cols[1], $cols[2], $cols[3], $cols[4], $cols[5]; + # ignore $cols[0] in this mode + printf "%-36s%10s %10s %10s %5s\n", + $cols[1], $cols[2], $cols[3], $cols[4], $cols[5]; } else { - print (join (",", @cols), "\n"); + print (join (",", @cols), "\n"); } } sub print_cols { if (!$csv) { - my $label = sprintf "%s:%s", $_[0], $_[1]; + my $label = sprintf "%s:%s", $_[0], $_[1]; - printf ("%-36s", $label); - print "\n"," "x36 if length ($label) > 36; + printf ("%-36s", $label); + print "\n"," "x36 if length ($label) > 36; - my $percent = sprintf "%3.1f%%", $_[5]; - printf ("%10s %10s %10s %5s\n", $_[2], $_[3], $_[4], $percent); + my $percent = sprintf "%3.1f%%", $_[5]; + printf ("%10s %10s %10s %5s\n", $_[2], $_[3], $_[4], $percent); } else { - printf ("\"%s\",\"%s\",%d,%d,%d,%.1f%%\n", @_); + printf ("\"%s\",\"%s\",%d,%d,%d,%.1f%%\n", @_); } } @@ -302,11 +302,11 @@ sub human_size local $_ = shift; if ($_ < 1024) { - sprintf "%dK", $_; + sprintf "%dK", $_; } elsif ($_ < 1024 * 1024) { - sprintf "%.1fM", ($_ / 1024); + sprintf "%.1fM", ($_ / 1024); } else { - sprintf "%.1fG", ($_ / 1024 / 1024); + sprintf "%.1fG", ($_ / 1024 / 1024); } } diff --git a/examples/to-xml.c b/examples/to-xml.c index a62660ce..2cf3de89 100644 --- a/examples/to-xml.c +++ b/examples/to-xml.c @@ -89,14 +89,14 @@ main (int argc, char *argv[]) int j; for (j = 0; lvs[j] != NULL; ++j) { if (strncmp (lvs[j], "/dev/", 5) == 0 && - strncmp (&lvs[j][5], vgs[i], len) == 0 && - lvs[j][len+5] == '/') { - int64_t size; - CALL (size = guestfs_blockdev_getsize64 (g, lvs[j]), -1); - printf ("<logvol name=\"%s\" size=\"%" PRIi64 "\">\n", lvs[j], size); - display_partition (g, lvs[j]); - printf ("</logvol>\n"); - free (lvs[j]); + strncmp (&lvs[j][5], vgs[i], len) == 0 && + lvs[j][len+5] == '/') { + int64_t size; + CALL (size = guestfs_blockdev_getsize64 (g, lvs[j]), -1); + printf ("<logvol name=\"%s\" size=\"%" PRIi64 "\">\n", lvs[j], size); + display_partition (g, lvs[j]); + printf ("</logvol>\n"); + free (lvs[j]); } } diff --git a/fish/destpaths.c b/fish/destpaths.c index a9d65a51..f4f13188 100644 --- a/fish/destpaths.c +++ b/fish/destpaths.c @@ -112,24 +112,24 @@ complete_dest_paths_generator (const char *text, int state) if (strs) { \ size_t i; \ size_t n = count_strings (strs); \ - \ + \ if ( ! xalloc_oversized (nr_words + n, sizeof (struct word))) { \ - struct word *w; \ - w = realloc (words, sizeof (struct word) * (nr_words + n)); \ - \ - if (w == NULL) { \ - free_words (words, nr_words); \ - words = NULL; \ - nr_words = 0; \ - } else { \ - words = w; \ - for (i = 0; i < n; ++i) { \ - words[nr_words].name = strs[i]; \ - words[nr_words].is_dir = 0; \ - nr_words++; \ - } \ - } \ - free (strs); \ + struct word *w; \ + w = realloc (words, sizeof (struct word) * (nr_words + n)); \ + \ + if (w == NULL) { \ + free_words (words, nr_words); \ + words = NULL; \ + nr_words = 0; \ + } else { \ + words = w; \ + for (i = 0; i < n; ++i) { \ + words[nr_words].name = strs[i]; \ + words[nr_words].is_dir = 0; \ + nr_words++; \ + } \ + } \ + free (strs); \ } \ } \ } while (0) @@ -157,46 +157,46 @@ complete_dest_paths_generator (const char *text, int state) p = strrchr (text, '/'); dir = p && p > text ? strndup (text, p - text) : strdup ("/"); if (dir) { - dirents = guestfs_readdir (g, dir); - - /* Prepend directory to names before adding them to the list - * of words. - */ - if (dirents) { - size_t i; - - for (i = 0; i < dirents->len; ++i) { - int err; - - if (strcmp (dirents->val[i].name, ".") != 0 && - strcmp (dirents->val[i].name, "..") != 0) { - if (strcmp (dir, "/") == 0) - err = asprintf (&p, "/%s", dirents->val[i].name); - else - err = asprintf (&p, "%s/%s", dir, dirents->val[i].name); - if (err >= 0) { - if (!xalloc_oversized (nr_words+1, sizeof (struct word))) { - struct word *w; - - w = realloc (words, sizeof (struct word) * (nr_words+1)); - if (w == NULL) { - free_words (words, nr_words); - words = NULL; - nr_words = 0; - } - else { - words = w; - words[nr_words].name = p; - words[nr_words].is_dir = dirents->val[i].ftyp == 'd'; - nr_words++; - } - } - } - } - } - - guestfs_free_dirent_list (dirents); - } + dirents = guestfs_readdir (g, dir); + + /* Prepend directory to names before adding them to the list + * of words. + */ + if (dirents) { + size_t i; + + for (i = 0; i < dirents->len; ++i) { + int err; + + if (strcmp (dirents->val[i].name, ".") != 0 && + strcmp (dirents->val[i].name, "..") != 0) { + if (strcmp (dir, "/") == 0) + err = asprintf (&p, "/%s", dirents->val[i].name); + else + err = asprintf (&p, "%s/%s", dir, dirents->val[i].name); + if (err >= 0) { + if (!xalloc_oversized (nr_words+1, sizeof (struct word))) { + struct word *w; + + w = realloc (words, sizeof (struct word) * (nr_words+1)); + if (w == NULL) { + free_words (words, nr_words); + words = NULL; + nr_words = 0; + } + else { + words = w; + words[nr_words].name = p; + words[nr_words].is_dir = dirents->val[i].ftyp == 'd'; + nr_words++; + } + } + } + } + } + + guestfs_free_dirent_list (dirents); + } } } @@ -219,7 +219,7 @@ complete_dest_paths_generator (const char *text, int state) if (strncasecmp (word->name, text, len) == 0) { if (word->is_dir) - rl_completion_append_character = '/'; + rl_completion_append_character = '/'; return strdup (word->name); } diff --git a/fish/fish.c b/fish/fish.c index b0d123d4..f245de17 100644 --- a/fish/fish.c +++ b/fish/fish.c @@ -91,36 +91,36 @@ static void usage (void) { fprintf (stderr, - _("guestfish: guest filesystem shell\n" - "guestfish lets you edit virtual machine filesystems\n" - "Copyright (C) 2009 Red Hat Inc.\n" - "Usage:\n" - " guestfish [--options] cmd [: cmd : cmd ...]\n" - " guestfish -i libvirt-domain\n" - " guestfish -i disk-image(s)\n" - "or for interactive use:\n" - " guestfish\n" - "or from a shell script:\n" - " guestfish <<EOF\n" - " cmd\n" - " ...\n" - " EOF\n" - "Options:\n" - " -h|--cmd-help List available commands\n" - " -h|--cmd-help cmd Display detailed help on 'cmd'\n" - " -a|--add image Add image\n" - " -D|--no-dest-paths Don't tab-complete paths from guest fs\n" - " -f|--file file Read commands from file\n" - " -i|--inspector Run virt-inspector to get disk mountpoints\n" - " --listen Listen for remote commands\n" - " -m|--mount dev[:mnt] Mount dev on mnt (if omitted, /)\n" - " -n|--no-sync Don't autosync\n" - " --remote[=pid] Send commands to remote guestfish\n" - " -r|--ro Mount read-only\n" - " -v|--verbose Verbose messages\n" - " -x Echo each command before executing it\n" - " -V|--version Display version and exit\n" - "For more information, see the manpage guestfish(1).\n")); + _("guestfish: guest filesystem shell\n" + "guestfish lets you edit virtual machine filesystems\n" + "Copyright (C) 2009 Red Hat Inc.\n" + "Usage:\n" + " guestfish [--options] cmd [: cmd : cmd ...]\n" + " guestfish -i libvirt-domain\n" + " guestfish -i disk-image(s)\n" + "or for interactive use:\n" + " guestfish\n" + "or from a shell script:\n" + " guestfish <<EOF\n" + " cmd\n" + " ...\n" + " EOF\n" + "Options:\n" + " -h|--cmd-help List available commands\n" + " -h|--cmd-help cmd Display detailed help on 'cmd'\n" + " -a|--add image Add image\n" + " -D|--no-dest-paths Don't tab-complete paths from guest fs\n" + " -f|--file file Read commands from file\n" + " -i|--inspector Run virt-inspector to get disk mountpoints\n" + " --listen Listen for remote commands\n" + " -m|--mount dev[:mnt] Mount dev on mnt (if omitted, /)\n" + " -n|--no-sync Don't autosync\n" + " --remote[=pid] Send commands to remote guestfish\n" + " -r|--ro Mount read-only\n" + " -v|--verbose Verbose messages\n" + " -x Echo each command before executing it\n" + " -V|--version Display version and exit\n" + "For more information, see the manpage guestfish(1).\n")); } int @@ -191,31 +191,31 @@ main (int argc, char *argv[]) switch (c) { case 0: /* options which are long only */ if (strcmp (long_options[option_index].name, "listen") == 0) - remote_control_listen = 1; + remote_control_listen = 1; else if (strcmp (long_options[option_index].name, "remote") == 0) { - if (optarg) { - if (sscanf (optarg, "%d", &remote_control) != 1) { - fprintf (stderr, _("guestfish: --listen=PID: PID was not a number: %s\n"), optarg); - exit (1); - } - } else { - p = getenv ("GUESTFISH_PID"); - if (!p || sscanf (p, "%d", &remote_control) != 1) { - fprintf (stderr, _("guestfish: remote: $GUESTFISH_PID must be set to the PID of the remote process\n")); - exit (1); - } - } + if (optarg) { + if (sscanf (optarg, "%d", &remote_control) != 1) { + fprintf (stderr, _("guestfish: --listen=PID: PID was not a number: %s\n"), optarg); + exit (1); + } + } else { + p = getenv ("GUESTFISH_PID"); + if (!p || sscanf (p, "%d", &remote_control) != 1) { + fprintf (stderr, _("guestfish: remote: $GUESTFISH_PID must be set to the PID of the remote process\n")); + exit (1); + } + } } else { - fprintf (stderr, _("guestfish: unknown long option: %s (%d)\n"), - long_options[option_index].name, option_index); - exit (1); + fprintf (stderr, _("guestfish: unknown long option: %s (%d)\n"), + long_options[option_index].name, option_index); + exit (1); } break; case 'a': if (access (optarg, R_OK) != 0) { - perror (optarg); - exit (1); + perror (optarg); + exit (1); } drv = malloc (sizeof (struct drv)); if (!drv) { @@ -233,19 +233,19 @@ main (int argc, char *argv[]) case 'f': if (file) { - fprintf (stderr, _("guestfish: only one -f parameter can be given\n")); - exit (1); + fprintf (stderr, _("guestfish: only one -f parameter can be given\n")); + exit (1); } file = optarg; break; case 'h': if (optarg) - display_command (optarg); + display_command (optarg); else if (argv[optind] && argv[optind][0] != '-') - display_command (argv[optind++]); + display_command (argv[optind++]); else - list_commands (); + list_commands (); exit (0); case 'i': @@ -255,15 +255,15 @@ main (int argc, char *argv[]) case 'm': mp = malloc (sizeof (struct mp)); if (!mp) { - perror ("malloc"); - exit (1); + perror ("malloc"); + exit (1); } p = strchr (optarg, ':'); if (p) { - *p = '\0'; - mp->mountpoint = p+1; + *p = '\0'; + mp->mountpoint = p+1; } else - mp->mountpoint = "/"; + mp->mountpoint = "/"; mp->device = optarg; mp->next = mps; mps = mp; @@ -296,7 +296,7 @@ main (int argc, char *argv[]) default: fprintf (stderr, _("guestfish: unexpected command line option 0x%x\n"), - c); + c); exit (1); } } @@ -318,9 +318,9 @@ main (int argc, char *argv[]) strcpy (cmd, "a=`virt-inspector"); while (optind < argc) { if (strlen (cmd) + strlen (argv[optind]) + strlen (argv[0]) + 60 - >= sizeof cmd) { - fprintf (stderr, _("guestfish: virt-inspector command too long for fixed-size buffer\n")); - exit (1); + >= sizeof cmd) { + fprintf (stderr, _("guestfish: virt-inspector command too long for fixed-size buffer\n")); + exit (1); } strcat (cmd, " '"); strcat (cmd, argv[optind]); @@ -342,7 +342,7 @@ main (int argc, char *argv[]) if (verbose) fprintf (stderr, - "guestfish -i: running virt-inspector command:\n%s\n", cmd); + "guestfish -i: running virt-inspector command:\n%s\n", cmd); r = system (cmd); if (r == -1) { @@ -518,12 +518,12 @@ script (int prompt) if (prompt) printf (_("\n" - "Welcome to guestfish, the libguestfs filesystem interactive shell for\n" - "editing virtual machine filesystems.\n" - "\n" - "Type: 'help' for help with commands\n" - " 'quit' to quit the shell\n" - "\n")); + "Welcome to guestfish, the libguestfs filesystem interactive shell for\n" + "editing virtual machine filesystems.\n" + "\n" + "Type: 'help' for help with commands\n" + " 'quit' to quit the shell\n" + "\n")); while (!quit) { char *pipe = NULL; @@ -552,11 +552,11 @@ script (int prompt) r = system (buf+1); if (exit_on_error) { - if (r == -1 || - (WIFSIGNALED (r) && - (WTERMSIG (r) == SIGINT || WTERMSIG (r) == SIGQUIT)) || - WEXITSTATUS (r) != 0) - exit (1); + if (r == -1 || + (WIFSIGNALED (r) && + (WTERMSIG (r) == SIGINT || WTERMSIG (r) == SIGQUIT)) || + WEXITSTATUS (r) != 0) + exit (1); } continue; } @@ -594,88 +594,88 @@ script (int prompt) * specially. Bare parameters are delimited by whitespace. */ if (*p == '"') { - p++; - len = strcspn (p, "\""); - if (p[len] == '\0') { - fprintf (stderr, _("guestfish: unterminated double quote\n")); - if (exit_on_error) exit (1); - goto next_command; - } - if (p[len+1] && (p[len+1] != ' ' && p[len+1] != '\t')) { - fprintf (stderr, _("guestfish: command arguments not separated by whitespace\n")); - if (exit_on_error) exit (1); - goto next_command; - } - p[len] = '\0'; - pend = p[len+1] ? &p[len+2] : &p[len+1]; + p++; + len = strcspn (p, "\""); + if (p[len] == '\0') { + fprintf (stderr, _("guestfish: unterminated double quote\n")); + if (exit_on_error) exit (1); + goto next_command; + } + if (p[len+1] && (p[len+1] != ' ' && p[len+1] != '\t')) { + fprintf (stderr, _("guestfish: command arguments not separated by whitespace\n")); + if (exit_on_error) exit (1); + goto next_command; + } + p[len] = '\0'; + pend = p[len+1] ? &p[len+2] : &p[len+1]; } else if (*p == '\'') { - p++; - len = strcspn (p, "'"); - if (p[len] == '\0') { - fprintf (stderr, _("guestfish: unterminated single quote\n")); - if (exit_on_error) exit (1); - goto next_command; - } - if (p[len+1] && (p[len+1] != ' ' && p[len+1] != '\t')) { - fprintf (stderr, _("guestfish: command arguments not separated by whitespace\n")); - if (exit_on_error) exit (1); - goto next_command; - } - p[len] = '\0'; - pend = p[len+1] ? &p[len+2] : &p[len+1]; + p++; + len = strcspn (p, "'"); + if (p[len] == '\0') { + fprintf (stderr, _("guestfish: unterminated single quote\n")); + if (exit_on_error) exit (1); + goto next_command; + } + if (p[len+1] && (p[len+1] != ' ' && p[len+1] != '\t')) { + fprintf (stderr, _("guestfish: command arguments not separated by whitespace\n")); + if (exit_on_error) exit (1); + goto next_command; + } + p[len] = '\0'; + pend = p[len+1] ? &p[len+2] : &p[len+1]; } else if (*p == '|') { - *p = '\0'; - pipe = p+1; - continue; - /* + *p = '\0'; + pipe = p+1; + continue; + /* } else if (*p == '[') { - int c = 1; - p++; - pend = p; - while (*pend && c != 0) { - if (*pend == '[') c++; - else if (*pend == ']') c--; - pend++; - } - if (c != 0) { - fprintf (stderr, _("guestfish: unterminated \"[...]\" sequence\n")); - if (exit_on_error) exit (1); - goto next_command; - } - if (*pend && (*pend != ' ' && *pend != '\t')) { - fprintf (stderr, _("guestfish: command arguments not separated by whitespace\n")); - if (exit_on_error) exit (1); - goto next_command; - } - *(pend-1) = '\0'; - */ + int c = 1; + p++; + pend = p; + while (*pend && c != 0) { + if (*pend == '[') c++; + else if (*pend == ']') c--; + pend++; + } + if (c != 0) { + fprintf (stderr, _("guestfish: unterminated \"[...]\" sequence\n")); + if (exit_on_error) exit (1); + goto next_command; + } + if (*pend && (*pend != ' ' && *pend != '\t')) { + fprintf (stderr, _("guestfish: command arguments not separated by whitespace\n")); + if (exit_on_error) exit (1); + goto next_command; + } + *(pend-1) = '\0'; + */ } else if (*p != ' ' && *p != '\t') { - /* If the first character is a ~ then note that this parameter - * is a candidate for ~username expansion. NB this does not - * apply to quoted parameters. - */ - tilde_candidate = *p == '~'; - len = strcspn (p, " \t"); - if (p[len]) { - p[len] = '\0'; - pend = &p[len+1]; - } else - pend = &p[len]; + /* If the first character is a ~ then note that this parameter + * is a candidate for ~username expansion. NB this does not + * apply to quoted parameters. + */ + tilde_candidate = *p == '~'; + len = strcspn (p, " \t"); + if (p[len]) { + p[len] = '\0'; + pend = &p[len+1]; + } else + pend = &p[len]; } else { - fprintf (stderr, _("guestfish: internal error parsing string at '%s'\n"), - p); - abort (); + fprintf (stderr, _("guestfish: internal error parsing string at '%s'\n"), + p); + abort (); } if (!tilde_candidate) - argv[i] = p; + argv[i] = p; else - argv[i] = try_tilde_expansion (p); + argv[i] = try_tilde_expansion (p); i++; p = pend; if (*p) - p += strspn (p, " \t"); + p += strspn (p, " \t"); } if (i == sizeof argv / sizeof argv[0]) { @@ -759,8 +759,8 @@ issue_command (const char *cmd, char *argv[], const char *pipecmd) r = system (pipecmd); if (r == -1) { - perror (pipecmd); - _exit (1); + perror (pipecmd); + _exit (1); } _exit (WEXITSTATUS (r)); } @@ -787,26 +787,26 @@ issue_command (const char *cmd, char *argv[], const char *pipecmd) r = 0; } else if (strcasecmp (cmd, "quit") == 0 || - strcasecmp (cmd, "exit") == 0 || - strcasecmp (cmd, "q") == 0) { + strcasecmp (cmd, "exit") == 0 || + strcasecmp (cmd, "q") == 0) { quit = 1; r = 0; } else if (strcasecmp (cmd, "alloc") == 0 || - strcasecmp (cmd, "allocate") == 0) + strcasecmp (cmd, "allocate") == 0) r = do_alloc (cmd, argc, argv); else if (strcasecmp (cmd, "echo") == 0) r = do_echo (cmd, argc, argv); else if (strcasecmp (cmd, "edit") == 0 || - strcasecmp (cmd, "vi") == 0 || - strcasecmp (cmd, "emacs") == 0) + strcasecmp (cmd, "vi") == 0 || + strcasecmp (cmd, "emacs") == 0) r = do_edit (cmd, argc, argv); else if (strcasecmp (cmd, "lcd") == 0) r = do_lcd (cmd, argc, argv); else if (strcasecmp (cmd, "glob") == 0) r = do_glob (cmd, argc, argv); else if (strcasecmp (cmd, "more") == 0 || - strcasecmp (cmd, "less") == 0) + strcasecmp (cmd, "less") == 0) r = do_more (cmd, argc, argv); else if (strcasecmp (cmd, "reopen") == 0) r = do_reopen (cmd, argc, argv); @@ -835,26 +835,26 @@ list_builtin_commands (void) { /* help and quit should appear at the top */ printf ("%-20s %s\n", - "help", _("display a list of commands or help on a command")); + "help", _("display a list of commands or help on a command")); printf ("%-20s %s\n", - "quit", _("quit guestfish")); + "quit", _("quit guestfish")); printf ("%-20s %s\n", - "alloc", _("allocate an image")); + "alloc", _("allocate an image")); printf ("%-20s %s\n", - "echo", _("display a line of text")); + "echo", _("display a line of text")); printf ("%-20s %s\n", - "edit", _("edit a file in the image")); + "edit", _("edit a file in the image")); printf ("%-20s %s\n", - "lcd", _("local change directory")); + "lcd", _("local change directory")); printf ("%-20s %s\n", - "glob", _("expand wildcards in command")); + "glob", _("expand wildcards in command")); printf ("%-20s %s\n", - "more", _("view a file in the pager")); + "more", _("view a file in the pager")); printf ("%-20s %s\n", - "reopen", _("close and reopen libguestfs handle")); + "reopen", _("close and reopen libguestfs handle")); printf ("%-20s %s\n", - "time", _("measure time taken to run command")); + "time", _("measure time taken to run command")); /* actions are printed after this (see list_commands) */ } @@ -867,95 +867,95 @@ display_builtin_command (const char *cmd) if (strcasecmp (cmd, "alloc") == 0 || strcasecmp (cmd, "allocate") == 0) printf (_("alloc - allocate an image\n" - " alloc <filename> <size>\n" - "\n" - " This creates an empty (zeroed) file of the given size,\n" - " and then adds so it can be further examined.\n" - "\n" - " For more advanced image creation, see qemu-img utility.\n" - "\n" - " Size can be specified (where <nn> means a number):\n" - " <nn> number of kilobytes\n" - " eg: 1440 standard 3.5\" floppy\n" - " <nn>K or <nn>KB number of kilobytes\n" - " <nn>M or <nn>MB number of megabytes\n" - " <nn>G or <nn>GB number of gigabytes\n" - " <nn>sects number of 512 byte sectors\n")); + " alloc <filename> <size>\n" + "\n" + " This creates an empty (zeroed) file of the given size,\n" + " and then adds so it can be further examined.\n" + "\n" + " For more advanced image creation, see qemu-img utility.\n" + "\n" + " Size can be specified (where <nn> means a number):\n" + " <nn> number of kilobytes\n" + " eg: 1440 standard 3.5\" floppy\n" + " <nn>K or <nn>KB number of kilobytes\n" + " <nn>M or <nn>MB number of megabytes\n" + " <nn>G or <nn>GB number of gigabytes\n" + " <nn>sects number of 512 byte sectors\n")); else if (strcasecmp (cmd, "echo") == 0) printf (_("echo - display a line of text\n" - " echo [<params> ...]\n" - "\n" - " This echos the parameters to the terminal.\n")); + " echo [<params> ...]\n" + "\n" + " This echos the parameters to the terminal.\n")); else if (strcasecmp (cmd, "edit") == 0 || - strcasecmp (cmd, "vi") == 0 || - strcasecmp (cmd, "emacs") == 0) + strcasecmp (cmd, "vi") == 0 || + strcasecmp (cmd, "emacs") == 0) printf (_("edit - edit a file in the image\n" - " edit <filename>\n" - "\n" - " This is used to edit a file.\n" - "\n" - " It is the equivalent of (and is implemented by)\n" - " running \"cat\", editing locally, and then \"write-file\".\n" - "\n" - " Normally it uses $EDITOR, but if you use the aliases\n" - " \"vi\" or \"emacs\" you will get those editors.\n" - "\n" - " NOTE: This will not work reliably for large files\n" - " (> 2 MB) or binary files containing \\0 bytes.\n")); + " edit <filename>\n" + "\n" + " This is used to edit a file.\n" + "\n" + " It is the equivalent of (and is implemented by)\n" + " running \"cat\", editing locally, and then \"write-file\".\n" + "\n" + " Normally it uses $EDITOR, but if you use the aliases\n" + " \"vi\" or \"emacs\" you will get those editors.\n" + "\n" + " NOTE: This will not work reliably for large files\n" + " (> 2 MB) or binary files containing \\0 bytes.\n")); else if (strcasecmp (cmd, "lcd") == 0) printf (_("lcd - local change directory\n" - " lcd <directory>\n" - "\n" - " Change guestfish's current directory. This command is\n" - " useful if you want to download files to a particular\n" - " place.\n")); + " lcd <directory>\n" + "\n" + " Change guestfish's current directory. This command is\n" + " useful if you want to download files to a particular\n" + " place.\n")); else if (strcasecmp (cmd, "glob") == 0) printf (_("glob - expand wildcards in command\n" - " glob <command> [<args> ...]\n" - "\n" - " Glob runs <command> with wildcards expanded in any\n" - " command args. Note that the command is run repeatedly\n" - " once for each expanded argument.\n")); + " glob <command> [<args> ...]\n" + "\n" + " Glob runs <command> with wildcards expanded in any\n" + " command args. Note that the command is run repeatedly\n" + " once for each expanded argument.\n")); else if (strcasecmp (cmd, "help") == 0) printf (_("help - display a list of commands or help on a command\n" - " help cmd\n" - " help\n")); + " help cmd\n" + " help\n")); else if (strcasecmp (cmd, "more") == 0 || - strcasecmp (cmd, "less") == 0) + strcasecmp (cmd, "less") == 0) printf (_("more - view a file in the pager\n" - " more <filename>\n" - "\n" - " This is used to view a file in the pager.\n" - "\n" - " It is the equivalent of (and is implemented by)\n" - " running \"cat\" and using the pager.\n" - "\n" - " Normally it uses $PAGER, but if you use the alias\n" - " \"less\" then it always uses \"less\".\n" - "\n" - " NOTE: This will not work reliably for large files\n" - " (> 2 MB) or binary files containing \\0 bytes.\n")); + " more <filename>\n" + "\n" + " This is used to view a file in the pager.\n" + "\n" + " It is the equivalent of (and is implemented by)\n" + " running \"cat\" and using the pager.\n" + "\n" + " Normally it uses $PAGER, but if you use the alias\n" + " \"less\" then it always uses \"less\".\n" + "\n" + " NOTE: This will not work reliably for large files\n" + " (> 2 MB) or binary files containing \\0 bytes.\n")); else if (strcasecmp (cmd, "quit") == 0 || - strcasecmp (cmd, "exit") == 0 || - strcasecmp (cmd, "q") == 0) + strcasecmp (cmd, "exit") == 0 || + strcasecmp (cmd, "q") == 0) printf (_("quit - quit guestfish\n" - " quit\n")); + " quit\n")); else if (strcasecmp (cmd, "reopen") == 0) printf (_("reopen - close and reopen the libguestfs handle\n" - " reopen\n" - "\n" - "Close and reopen the libguestfs handle. It is not necessary to use\n" - "this normally, because the handle is closed properly when guestfish\n" - "exits. However this is occasionally useful for testing.\n")); + " reopen\n" + "\n" + "Close and reopen the libguestfs handle. It is not necessary to use\n" + "this normally, because the handle is closed properly when guestfish\n" + "exits. However this is occasionally useful for testing.\n")); else if (strcasecmp (cmd, "time") == 0) printf (_("time - measure time taken to run command\n" - " time <command> [<args> ...]\n" - "\n" - " This runs <command> as usual, and prints the elapsed\n" - " time afterwards.\n")); + " time <command> [<args> ...]\n" + "\n" + " This runs <command> as usual, and prints the elapsed\n" + " time afterwards.\n")); else fprintf (stderr, _("%s: command not known, use -h to list all commands\n"), - cmd); + cmd); } void diff --git a/fish/fish.h b/fish/fish.h index a65fe1b8..772d2001 100644 --- a/fish/fish.h +++ b/fish/fish.h @@ -80,7 +80,7 @@ extern int do_more (const char *cmd, int argc, char *argv[]); /* in rc.c (remote control) */ extern void rc_listen (void); extern int rc_remote (int pid, const char *cmd, int argc, char *argv[], - int exit_on_error); + int exit_on_error); /* in reopen.c */ extern int do_reopen (const char *cmd, int argc, char *argv[]); diff --git a/fish/glob.c b/fish/glob.c index 581bc286..2731b2f9 100644 --- a/fish/glob.c +++ b/fish/glob.c @@ -69,46 +69,46 @@ do_glob (const char *cmd, int argc, char *argv[]) if (argv[i][0] == '/') { pp = guestfs_glob_expand (g, argv[i]); if (pp == NULL) { /* real error in glob_expand */ - fprintf (stderr, _("glob: guestfs_glob_expand call failed: %s\n"), - argv[i]); - goto error0; + fprintf (stderr, _("glob: guestfs_glob_expand call failed: %s\n"), + argv[i]); + goto error0; } /* If there were no matches, then we add a single element list * containing just the original argv[i] string. */ if (pp[0] == NULL) { - char **pp2; - - pp2 = realloc (pp, sizeof (char *) * 2); - if (pp2 == NULL) { - perror ("realloc"); - free (pp); - goto error0; - } - pp = pp2; - - pp[0] = strdup (argv[i]); - if (pp[0] == NULL) { - perror ("strdup"); - free (pp); - goto error0; - } - pp[1] = NULL; + char **pp2; + + pp2 = realloc (pp, sizeof (char *) * 2); + if (pp2 == NULL) { + perror ("realloc"); + free (pp); + goto error0; + } + pp = pp2; + + pp[0] = strdup (argv[i]); + if (pp[0] == NULL) { + perror ("strdup"); + free (pp); + goto error0; + } + pp[1] = NULL; } } /* Doesn't begin with '/' */ else { pp = malloc (sizeof (char *) * 2); if (pp == NULL) { - perror ("malloc"); - goto error0; + perror ("malloc"); + goto error0; } pp[0] = strdup (argv[i]); if (pp[0] == NULL) { - perror ("strdup"); - free (pp); - goto error0; + perror ("strdup"); + free (pp); + goto error0; } pp[1] = NULL; } @@ -130,8 +130,8 @@ do_glob (const char *cmd, int argc, char *argv[]) static void glob_issue (char *cmd, int argc, - char ***globs, int *posn, int *count, - int *r) + char ***globs, int *posn, int *count, + int *r) { int i; char *argv[argc+1]; @@ -131,52 +131,52 @@ rc_listen (void) xdrstdio_create (&xdr, fp, XDR_DECODE); if (!xdr_guestfish_hello (&xdr, &hello)) { - fprintf (stderr, _("guestfish: protocol error: could not read 'hello' message\n")); - goto error; + fprintf (stderr, _("guestfish: protocol error: could not read 'hello' message\n")); + goto error; } if (strcmp (hello.vers, PACKAGE_VERSION) != 0) { - fprintf (stderr, _("guestfish: protocol error: version mismatch, server version '%s' does not match client version '%s'. The two versions must match exactly.\n"), - PACKAGE_VERSION, - hello.vers); - xdr_free ((xdrproc_t) xdr_guestfish_hello, (char *) &hello); - goto error; + fprintf (stderr, _("guestfish: protocol error: version mismatch, server version '%s' does not match client version '%s'. The two versions must match exactly.\n"), + PACKAGE_VERSION, + hello.vers); + xdr_free ((xdrproc_t) xdr_guestfish_hello, (char *) &hello); + goto error; } xdr_free ((xdrproc_t) xdr_guestfish_hello, (char *) &hello); while (xdr_guestfish_call (&xdr, &call)) { - /* We have to extend and NULL-terminate the argv array. */ - argc = call.args.args_len; - argv = realloc (call.args.args_val, (argc+1) * sizeof (char *)); - if (argv == NULL) { - perror ("realloc"); - exit (1); - } - call.args.args_val = argv; - argv[argc] = NULL; - - if (verbose) { - fprintf (stderr, "guestfish(%d): %s", pid, call.cmd); - for (i = 0; i < argc; ++i) - fprintf (stderr, " %s", argv[i]); - fprintf (stderr, "\n"); - } - - /* Run the command. */ - reply.r = issue_command (call.cmd, argv, NULL); - - xdr_free ((xdrproc_t) xdr_guestfish_call, (char *) &call); - - /* Send the reply. */ - xdrstdio_create (&xdr2, fp, XDR_ENCODE); - (void) xdr_guestfish_reply (&xdr2, &reply); - xdr_destroy (&xdr2); - - /* Exit on error? */ - if (call.exit_on_error && reply.r == -1) { - unlink (sockpath); - exit (1); - } + /* We have to extend and NULL-terminate the argv array. */ + argc = call.args.args_len; + argv = realloc (call.args.args_val, (argc+1) * sizeof (char *)); + if (argv == NULL) { + perror ("realloc"); + exit (1); + } + call.args.args_val = argv; + argv[argc] = NULL; + + if (verbose) { + fprintf (stderr, "guestfish(%d): %s", pid, call.cmd); + for (i = 0; i < argc; ++i) + fprintf (stderr, " %s", argv[i]); + fprintf (stderr, "\n"); + } + + /* Run the command. */ + reply.r = issue_command (call.cmd, argv, NULL); + + xdr_free ((xdrproc_t) xdr_guestfish_call, (char *) &call); + + /* Send the reply. */ + xdrstdio_create (&xdr2, fp, XDR_ENCODE); + (void) xdr_guestfish_reply (&xdr2, &reply); + xdr_destroy (&xdr2); + + /* Exit on error? */ + if (call.exit_on_error && reply.r == -1) { + unlink (sockpath); + exit (1); + } } error: @@ -192,7 +192,7 @@ rc_listen (void) /* Remote control client. */ int rc_remote (int pid, const char *cmd, int argc, char *argv[], - int exit_on_error) + int exit_on_error) { guestfish_hello hello; guestfish_call call; diff --git a/fish/tilde.c b/fish/tilde.c index 13e6cd8f..f0a22590 100644 --- a/fish/tilde.c +++ b/fish/tilde.c @@ -64,8 +64,8 @@ try_tilde_expansion (char *str) len = strlen (home) + strlen (rest); str = malloc (len); if (str == NULL) { - perror ("malloc"); - exit (1); + perror ("malloc"); + exit (1); } strcpy (str, home); strcat (str, rest); @@ -113,7 +113,7 @@ find_home_for_username (const char *username, int ulen) setpwent (); while ((pw = getpwent ()) != NULL) { if (strlen (pw->pw_name) == ulen && - strncmp (username, pw->pw_name, ulen) == 0) + strncmp (username, pw->pw_name, ulen) == 0) return pw->pw_dir; } diff --git a/fish/time.c b/fish/time.c index aae9afe0..ed00c18e 100644 --- a/fish/time.c +++ b/fish/time.c @@ -47,8 +47,8 @@ do_time (const char *cmd, int argc, char *argv[]) end_us = (int64_t) end_t.tv_sec * 1000000 + end_t.tv_usec; elapsed_us = end_us - start_us; printf ("elapsed time: %d.%02d seconds\n", - (int) (elapsed_us / 1000000), - (int) ((elapsed_us / 10000) % 100)); + (int) (elapsed_us / 1000000), + (int) ((elapsed_us / 10000) % 100)); return 0; } diff --git a/inspector/virt-inspector.pl b/inspector/virt-inspector.pl index 17c63759..943f32e4 100755 --- a/inspector/virt-inspector.pl +++ b/inspector/virt-inspector.pl @@ -181,19 +181,19 @@ default. =cut GetOptions ("help|?" => \$help, - "version" => \$version, - "connect|c=s" => \$uri, - "text" => sub { $output = "text" }, - "none" => sub { $output = "none" }, - "xml" => sub { $output = "xml" }, - "yaml" => sub { $output = "yaml" }, - "perl" => sub { $output = "perl" }, - "fish" => sub { $output = "fish" }, - "guestfish" => sub { $output = "fish" }, - "ro-fish" => sub { $output = "ro-fish" }, - "ro-guestfish" => sub { $output = "ro-fish" }, - "query" => sub { $output = "query" }, - "windows-registry" => \$windows_registry, + "version" => \$version, + "connect|c=s" => \$uri, + "text" => sub { $output = "text" }, + "none" => sub { $output = "none" }, + "xml" => sub { $output = "xml" }, + "yaml" => sub { $output = "yaml" }, + "perl" => sub { $output = "perl" }, + "fish" => sub { $output = "fish" }, + "guestfish" => sub { $output = "fish" }, + "ro-fish" => sub { $output = "ro-fish" }, + "ro-guestfish" => sub { $output = "ro-fish" }, + "query" => sub { $output = "query" }, + "windows-registry" => \$windows_registry, ) or pod2usage (2); pod2usage (1) if $help; if ($version) { @@ -211,11 +211,11 @@ my @images; if ($uri) { my ($conn, $dom); ($g, $conn, $dom, @images) = - open_guest (\@ARGV, rw => $rw, address => $uri); + open_guest (\@ARGV, rw => $rw, address => $uri); } else { my ($conn, $dom); ($g, $conn, $dom, @images) = - open_guest (\@ARGV, rw => $rw); + open_guest (\@ARGV, rw => $rw); } $g->launch (); @@ -286,10 +286,10 @@ my $oses = inspect_operating_systems ($g, \%fses); if ($output !~ /.*fish$/) { my $root_dev; foreach $root_dev (sort keys %$oses) { - my $os = $oses->{$root_dev}; - mount_operating_system ($g, $os); - inspect_in_detail ($g, $os); - $g->umount_all (); + my $os = $oses->{$root_dev}; + mount_operating_system ($g, $os); + inspect_in_detail ($g, $os); + $g->umount_all (); } } @@ -304,7 +304,7 @@ if ($output eq "fish" || $output eq "ro-fish") { my $root_dev = $osdevs[0]; if ($output eq "ro-fish") { - print "--ro "; + print "--ro "; } print "-a $_ " foreach @images; @@ -313,7 +313,7 @@ if ($output eq "fish" || $output eq "ro-fish") { # Have to mount / first. Luckily '/' is early in the ASCII # character set, so this should be OK. foreach (sort keys %$mounts) { - print "-m $mounts->{$_}:$_ " if $_ ne "swap" && $_ ne "none"; + print "-m $mounts->{$_}:$_ " if $_ ne "swap" && $_ ne "none"; } print "\n" } @@ -326,7 +326,7 @@ elsif ($output eq "perl") { # YAML output elsif ($output eq "yaml") { die __"virt-inspector: no YAML support\n" - unless exists $INC{"YAML/Any.pm"}; + unless exists $INC{"YAML/Any.pm"}; print Dump(%$oses); } @@ -366,69 +366,69 @@ sub output_text_os print __" Mountpoints:\n"; my $mounts = $os->{mounts}; foreach (sort keys %$mounts) { - printf " %-30s %s\n", $mounts->{$_}, $_ + printf " %-30s %s\n", $mounts->{$_}, $_ } print __" Filesystems:\n"; my $filesystems = $os->{filesystems}; foreach (sort keys %$filesystems) { - print " $_:\n"; - print " label: $filesystems->{$_}{label}\n" - if exists $filesystems->{$_}{label}; - print " UUID: $filesystems->{$_}{uuid}\n" - if exists $filesystems->{$_}{uuid}; - print " type: $filesystems->{$_}{fstype}\n" - if exists $filesystems->{$_}{fstype}; - print " content: $filesystems->{$_}{content}\n" - if exists $filesystems->{$_}{content}; + print " $_:\n"; + print " label: $filesystems->{$_}{label}\n" + if exists $filesystems->{$_}{label}; + print " UUID: $filesystems->{$_}{uuid}\n" + if exists $filesystems->{$_}{uuid}; + print " type: $filesystems->{$_}{fstype}\n" + if exists $filesystems->{$_}{fstype}; + print " content: $filesystems->{$_}{content}\n" + if exists $filesystems->{$_}{content}; } if (exists $os->{modprobe_aliases}) { - my %aliases = %{$os->{modprobe_aliases}}; - my @keys = sort keys %aliases; - if (@keys) { - print __" Modprobe aliases:\n"; - foreach (@keys) { - printf " %-30s %s\n", $_, $aliases{$_}->{modulename} - } - } + my %aliases = %{$os->{modprobe_aliases}}; + my @keys = sort keys %aliases; + if (@keys) { + print __" Modprobe aliases:\n"; + foreach (@keys) { + printf " %-30s %s\n", $_, $aliases{$_}->{modulename} + } + } } if (exists $os->{initrd_modules}) { - my %modvers = %{$os->{initrd_modules}}; - my @keys = sort keys %modvers; - if (@keys) { - print __" Initrd modules:\n"; - foreach (@keys) { - my @modules = @{$modvers{$_}}; - print " $_:\n"; - print " $_\n" foreach @modules; - } - } + my %modvers = %{$os->{initrd_modules}}; + my @keys = sort keys %modvers; + if (@keys) { + print __" Initrd modules:\n"; + foreach (@keys) { + my @modules = @{$modvers{$_}}; + print " $_:\n"; + print " $_\n" foreach @modules; + } + } } print __" Applications:\n"; my @apps = @{$os->{apps}}; foreach (@apps) { - print " $_->{name} $_->{version}\n" + print " $_->{name} $_->{version}\n" } print __" Kernels:\n"; my @kernels = @{$os->{kernels}}; foreach (@kernels) { - print " $_->{version} ($_->{arch})\n"; - my @modules = @{$_->{modules}}; - foreach (@modules) { - print " $_\n"; - } + print " $_->{version} ($_->{arch})\n"; + my @modules = @{$_->{modules}}; + foreach (@modules) { + print " $_\n"; + } } if (exists $os->{root}->{registry}) { - print __" Windows Registry entries:\n"; - # These are just lumps of text - dump them out. - foreach (@{$os->{root}->{registry}}) { - print "$_\n"; - } + print __" Windows Registry entries:\n"; + # These are just lumps of text - dump them out. + foreach (@{$os->{root}->{registry}}) { + print "$_\n"; + } } } @@ -486,11 +486,11 @@ sub output_xml_os $xml->endTag("filesystems"); if (exists $os->{modprobe_aliases}) { - my %aliases = %{$os->{modprobe_aliases}}; - my @keys = sort keys %aliases; - if (@keys) { + my %aliases = %{$os->{modprobe_aliases}}; + my @keys = sort keys %aliases; + if (@keys) { $xml->startTag("modprobealiases"); - foreach (@keys) { + foreach (@keys) { $xml->startTag("alias", "device" => $_); foreach my $field ( [ "modulename" => "modulename" ], @@ -500,24 +500,24 @@ sub output_xml_os } $xml->endTag("alias"); - } + } $xml->endTag("modprobealiases"); - } + } } if (exists $os->{initrd_modules}) { - my %modvers = %{$os->{initrd_modules}}; - my @keys = sort keys %modvers; - if (@keys) { + my %modvers = %{$os->{initrd_modules}}; + my @keys = sort keys %modvers; + if (@keys) { $xml->startTag("initrds"); - foreach (@keys) { - my @modules = @{$modvers{$_}}; + foreach (@keys) { + my @modules = @{$modvers{$_}}; $xml->startTag("initrd", "version" => $_); $xml->dataElement("module", $_) foreach @modules; $xml->endTag("initrd"); - } + } $xml->endTag("initrds"); - } + } } $xml->startTag("applications"); @@ -555,13 +555,13 @@ sub output_xml_os my @kernels = @{$os->{kernels}}; foreach (@kernels) { $xml->startTag("kernel", - "version" => $_->{version}, - "arch" => $_->{arch}); + "version" => $_->{version}, + "arch" => $_->{arch}); $xml->startTag("modules"); - my @modules = @{$_->{modules}}; - foreach (@modules) { + my @modules = @{$_->{modules}}; + foreach (@modules) { $xml->dataElement("module", $_); - } + } $xml->endTag("modules"); $xml->dataElement("path", $_->{path}) if(defined($_->{path})); $xml->dataElement("package", $_->{package}) if(defined($_->{package})); @@ -571,10 +571,10 @@ sub output_xml_os if (exists $os->{root}->{registry}) { $xml->startTag("windowsregistryentries"); - # These are just lumps of text - dump them out. - foreach (@{$os->{root}->{registry}}) { + # These are just lumps of text - dump them out. + foreach (@{$os->{root}->{registry}}) { $xml->dataElement("windowsregistryentry", $_); - } + } $xml->endTag("windowsregistryentries"); } @@ -632,7 +632,7 @@ sub output_query_windows { my $windows = "no"; foreach my $os (keys %$oses) { - $windows="yes" if $oses->{$os}->{os} eq "windows"; + $windows="yes" if $oses->{$os}->{os} eq "windows"; } print "windows=$windows\n"; } @@ -647,7 +647,7 @@ sub output_query_linux { my $linux = "no"; foreach my $os (keys %$oses) { - $linux="yes" if $oses->{$os}->{os} eq "linux"; + $linux="yes" if $oses->{$os}->{os} eq "linux"; } print "linux=$linux\n"; } @@ -662,7 +662,7 @@ sub output_query_rhel { my $rhel = "no"; foreach my $os (keys %$oses) { - $rhel="yes" if ($oses->{$os}->{os} eq "linux" && + $rhel="yes" if ($oses->{$os}->{os} eq "linux" && $oses->{$os}->{distro} eq "rhel"); } print "rhel=$rhel\n"; @@ -678,7 +678,7 @@ sub output_query_fedora { my $fedora = "no"; foreach my $os (keys %$oses) { - $fedora="yes" if $oses->{$os}->{os} eq "linux" && $oses->{$os}->{distro} eq "fedora"; + $fedora="yes" if $oses->{$os}->{os} eq "linux" && $oses->{$os}->{distro} eq "fedora"; } print "fedora=$fedora\n"; } @@ -693,7 +693,7 @@ sub output_query_debian { my $debian = "no"; foreach my $os (keys %$oses) { - $debian="yes" if $oses->{$os}->{os} eq "linux" && $oses->{$os}->{distro} eq "debian"; + $debian="yes" if $oses->{$os}->{os} eq "linux" && $oses->{$os}->{distro} eq "debian"; } print "debian=$debian\n"; } @@ -712,13 +712,13 @@ sub output_query_fullvirt # are identified as paravirt. # XXX Fails on Windows guests. foreach my $os (keys %$oses) { - foreach my $kernel (@{$oses->{$os}->{kernels}}) { - my $is_pv = $kernel->{version} =~ m/xen/; - unless ($is_pv) { - print "fullvirt=yes\n"; - return; - } - } + foreach my $kernel (@{$oses->{$os}->{kernels}}) { + my $is_pv = $kernel->{version} =~ m/xen/; + unless ($is_pv) { + print "fullvirt=yes\n"; + return; + } + } } print "fullvirt=no\n"; } @@ -734,13 +734,13 @@ guest). sub output_query_xen_domU_kernel { foreach my $os (keys %$oses) { - foreach my $kernel (@{$oses->{$os}->{kernels}}) { - my $is_xen = $kernel->{version} =~ m/xen/; - if ($is_xen) { - print "xen_domU_kernel=yes\n"; - return; - } - } + foreach my $kernel (@{$oses->{$os}->{kernels}}) { + my $is_xen = $kernel->{version} =~ m/xen/; + if ($is_xen) { + print "xen_domU_kernel=yes\n"; + return; + } + } } print "xen_domU_kernel=no\n"; } @@ -757,14 +757,14 @@ reasons). sub output_query_xen_pv_drivers { foreach my $os (keys %$oses) { - foreach my $kernel (@{$oses->{$os}->{kernels}}) { - foreach my $module (@{$kernel->{modules}}) { - if ($module =~ m/xen-/) { - print "xen_pv_drivers=yes\n"; - return; - } - } - } + foreach my $kernel (@{$oses->{$os}->{kernels}}) { + foreach my $module (@{$kernel->{modules}}) { + if ($module =~ m/xen-/) { + print "xen_pv_drivers=yes\n"; + return; + } + } + } } print "xen_pv_drivers=no\n"; } @@ -780,14 +780,14 @@ performance of KVM. sub output_query_virtio_drivers { foreach my $os (keys %$oses) { - foreach my $kernel (@{$oses->{$os}->{kernels}}) { - foreach my $module (@{$kernel->{modules}}) { - if ($module =~ m/virtio_/) { - print "virtio_drivers=yes\n"; - return; - } - } - } + foreach my $kernel (@{$oses->{$os}->{kernels}}) { + foreach my $module (@{$kernel->{modules}}) { + if ($module =~ m/virtio_/) { + print "virtio_drivers=yes\n"; + return; + } + } + } } print "virtio_drivers=no\n"; } @@ -805,11 +805,11 @@ sub output_query_userspace_arch my %arches; foreach my $os (keys %$oses) { - $arches{$oses->{$os}->{arch}} = 1 if exists $oses->{$os}->{arch}; + $arches{$oses->{$os}->{arch}} = 1 if exists $oses->{$os}->{arch}; } foreach (sort keys %arches) { - print "userspace_arch=$_\n"; + print "userspace_arch=$_\n"; } } @@ -826,13 +826,13 @@ sub output_query_kernel_arch my %arches; foreach my $os (keys %$oses) { - foreach my $kernel (@{$oses->{$os}->{kernels}}) { - $arches{$kernel->{arch}} = 1 if exists $kernel->{arch}; - } + foreach my $kernel (@{$oses->{$os}->{kernels}}) { + $arches{$kernel->{arch}} = 1 if exists $kernel->{arch}; + } } foreach (sort keys %arches) { - print "kernel_arch=$_\n"; + print "kernel_arch=$_\n"; } } diff --git a/java/com/redhat/et/libguestfs/LibGuestFSException.java b/java/com/redhat/et/libguestfs/LibGuestFSException.java index 1c7a224b..c7bcc058 100644 --- a/java/com/redhat/et/libguestfs/LibGuestFSException.java +++ b/java/com/redhat/et/libguestfs/LibGuestFSException.java @@ -31,6 +31,6 @@ public class LibGuestFSException extends Exception { public LibGuestFSException (String msg) { - super (msg); + super (msg); } } diff --git a/java/t/GuestFS005Load.java b/java/t/GuestFS005Load.java index a1d1c072..23f1611d 100644 --- a/java/t/GuestFS005Load.java +++ b/java/t/GuestFS005Load.java @@ -21,13 +21,13 @@ import com.redhat.et.libguestfs.*; public class GuestFS005Load { public static void main (String[] argv) { - try { - GuestFS g = new GuestFS (); - g.close (); - } - catch (Exception exn) { - System.err.println (exn); - System.exit (1); - } + try { + GuestFS g = new GuestFS (); + g.close (); + } + catch (Exception exn) { + System.err.println (exn); + System.exit (1); + } } } diff --git a/java/t/GuestFS010Launch.java b/java/t/GuestFS010Launch.java index 3d145bb3..198ea857 100644 --- a/java/t/GuestFS010Launch.java +++ b/java/t/GuestFS010Launch.java @@ -22,21 +22,21 @@ import com.redhat.et.libguestfs.*; public class GuestFS010Launch { public static void main (String[] argv) { - try { - GuestFS g = new GuestFS (); - RandomAccessFile f = new RandomAccessFile ("test.img", "rw"); - f.setLength (500 * 1024 * 1024); - f.close (); - g.add_drive ("test.img"); - g.launch (); - g.wait_ready (); - g.close (); - File f2 = new File ("test.img"); - f2.delete (); - } - catch (Exception exn) { - System.err.println (exn); - System.exit (1); - } + try { + GuestFS g = new GuestFS (); + RandomAccessFile f = new RandomAccessFile ("test.img", "rw"); + f.setLength (500 * 1024 * 1024); + f.close (); + g.add_drive ("test.img"); + g.launch (); + g.wait_ready (); + g.close (); + File f2 = new File ("test.img"); + f2.delete (); + } + catch (Exception exn) { + System.err.println (exn); + System.exit (1); + } } } diff --git a/java/t/GuestFS050LVCreate.java b/java/t/GuestFS050LVCreate.java index 7430386b..012d68b5 100644 --- a/java/t/GuestFS050LVCreate.java +++ b/java/t/GuestFS050LVCreate.java @@ -22,35 +22,35 @@ import com.redhat.et.libguestfs.*; public class GuestFS050LVCreate { public static void main (String[] argv) { - try { - GuestFS g = new GuestFS (); - - RandomAccessFile f = new RandomAccessFile ("test.img", "rw"); - f.setLength (500 * 1024 * 1024); - f.close (); - - g.add_drive ("test.img"); - g.launch (); - g.wait_ready (); - - g.pvcreate ("/dev/sda"); - g.vgcreate ("VG", new String[] {"/dev/sda"}); - g.lvcreate ("LV1", "VG", 200); - g.lvcreate ("LV2", "VG", 200); - - String[] lvs = g.lvs (); - assert lvs[0].equals ("/dev/VG/LV1"); - assert lvs[1].equals ("/dev/VG/LV2"); - - g.sync (); - g.close (); - - File f2 = new File ("test.img"); - f2.delete (); - } - catch (Exception exn) { - System.err.println (exn); - System.exit (1); - } + try { + GuestFS g = new GuestFS (); + + RandomAccessFile f = new RandomAccessFile ("test.img", "rw"); + f.setLength (500 * 1024 * 1024); + f.close (); + + g.add_drive ("test.img"); + g.launch (); + g.wait_ready (); + + g.pvcreate ("/dev/sda"); + g.vgcreate ("VG", new String[] {"/dev/sda"}); + g.lvcreate ("LV1", "VG", 200); + g.lvcreate ("LV2", "VG", 200); + + String[] lvs = g.lvs (); + assert lvs[0].equals ("/dev/VG/LV1"); + assert lvs[1].equals ("/dev/VG/LV2"); + + g.sync (); + g.close (); + + File f2 = new File ("test.img"); + f2.delete (); + } + catch (Exception exn) { + System.err.println (exn); + System.exit (1); + } } } diff --git a/m4/ocaml.m4 b/m4/ocaml.m4 index fa8c4cef..fddd6a0c 100644 --- a/m4/ocaml.m4 +++ b/m4/ocaml.m4 @@ -26,15 +26,15 @@ AC_DEFUN([AC_PROG_OCAML], AC_CHECK_TOOL([OCAMLOPT],[ocamlopt],[no]) OCAMLBEST=byte if test "$OCAMLOPT" = "no"; then - AC_MSG_WARN([Cannot find ocamlopt; bytecode compilation only.]) + AC_MSG_WARN([Cannot find ocamlopt; bytecode compilation only.]) else - TMPVERSION=`$OCAMLOPT -v | sed -n -e 's|.*version* *\(.*\)$|\1|p' ` - if test "$TMPVERSION" != "$OCAMLVERSION" ; then - AC_MSG_RESULT([versions differs from ocamlc; ocamlopt discarded.]) - OCAMLOPT=no - else - OCAMLBEST=opt - fi + TMPVERSION=`$OCAMLOPT -v | sed -n -e 's|.*version* *\(.*\)$|\1|p' ` + if test "$TMPVERSION" != "$OCAMLVERSION" ; then + AC_MSG_RESULT([versions differs from ocamlc; ocamlopt discarded.]) + OCAMLOPT=no + else + OCAMLBEST=opt + fi fi AC_SUBST([OCAMLBEST]) @@ -42,24 +42,24 @@ AC_DEFUN([AC_PROG_OCAML], # checking for ocamlc.opt AC_CHECK_TOOL([OCAMLCDOTOPT],[ocamlc.opt],[no]) if test "$OCAMLCDOTOPT" != "no"; then - TMPVERSION=`$OCAMLCDOTOPT -v | sed -n -e 's|.*version* *\(.*\)$|\1|p' ` - if test "$TMPVERSION" != "$OCAMLVERSION" ; then - AC_MSG_RESULT([versions differs from ocamlc; ocamlc.opt discarded.]) - else - OCAMLC=$OCAMLCDOTOPT - fi + TMPVERSION=`$OCAMLCDOTOPT -v | sed -n -e 's|.*version* *\(.*\)$|\1|p' ` + if test "$TMPVERSION" != "$OCAMLVERSION" ; then + AC_MSG_RESULT([versions differs from ocamlc; ocamlc.opt discarded.]) + else + OCAMLC=$OCAMLCDOTOPT + fi fi # checking for ocamlopt.opt if test "$OCAMLOPT" != "no" ; then - AC_CHECK_TOOL([OCAMLOPTDOTOPT],[ocamlopt.opt],[no]) - if test "$OCAMLOPTDOTOPT" != "no"; then - TMPVERSION=`$OCAMLOPTDOTOPT -v | sed -n -e 's|.*version* *\(.*\)$|\1|p' ` - if test "$TMPVERSION" != "$OCAMLVERSION" ; then - AC_MSG_RESULT([version differs from ocamlc; ocamlopt.opt discarded.]) - else - OCAMLOPT=$OCAMLOPTDOTOPT - fi + AC_CHECK_TOOL([OCAMLOPTDOTOPT],[ocamlopt.opt],[no]) + if test "$OCAMLOPTDOTOPT" != "no"; then + TMPVERSION=`$OCAMLOPTDOTOPT -v | sed -n -e 's|.*version* *\(.*\)$|\1|p' ` + if test "$TMPVERSION" != "$OCAMLVERSION" ; then + AC_MSG_RESULT([version differs from ocamlc; ocamlopt.opt discarded.]) + else + OCAMLOPT=$OCAMLOPTDOTOPT + fi fi fi @@ -92,7 +92,7 @@ AC_DEFUN([AC_PROG_OCAMLLEX], if test "$OCAMLLEX" != "no"; then AC_CHECK_TOOL([OCAMLLEXDOTOPT],[ocamllex.opt],[no]) if test "$OCAMLLEXDOTOPT" != "no"; then - OCAMLLEX=$OCAMLLEXDOTOPT + OCAMLLEX=$OCAMLLEXDOTOPT fi fi AC_SUBST([OCAMLLEX]) @@ -114,7 +114,7 @@ AC_DEFUN([AC_PROG_CAMLP4], if test "$CAMLP4" != "no"; then TMPVERSION=`$CAMLP4 -v 2>&1| sed -n -e 's|.*version *\(.*\)$|\1|p'` if test "$TMPVERSION" != "$OCAMLVERSION" ; then - AC_MSG_RESULT([versions differs from ocamlc]) + AC_MSG_RESULT([versions differs from ocamlc]) CAMLP4=no fi fi diff --git a/make-recipes.sh b/make-recipes.sh index ebed325a..b93b0b2d 100755 --- a/make-recipes.sh +++ b/make-recipes.sh @@ -43,8 +43,8 @@ for f in recipes/*.sh; do b=`basename $f .sh` echo -n ' <li> <a href="#'$b'">'$b.sh if [ -r recipes/$b.title ]; then - echo -n ': ' - cat recipes/$b.title + echo -n ': ' + cat recipes/$b.title fi echo '</a> </li>' done @@ -57,23 +57,23 @@ for f in recipes/*.sh; do echo -n '<a name="'$b'"></a>' echo -n '<h2>'$b'.sh' if [ -r recipes/$b.title ]; then - echo -n ': ' - cat recipes/$b.title + echo -n ': ' + cat recipes/$b.title fi echo -n '<small style="font-size: 8pt; margin-left: 2em;"><a href="#'$b'">permalink</a></small>' echo '</h2>' if [ -r recipes/$b.html ]; then - cat recipes/$b.html + cat recipes/$b.html fi echo '<h3>'$b'.sh</h3>' echo '<pre class="example">' sed -e 's,&,\&,g' -e 's,<,\<,g' -e 's,>,\>,g' < $f echo '</pre>' if [ -r recipes/$b.example ]; then - echo '<h3>Example output</h3>' - echo '<pre>' - sed -e 's,&,\&,g' -e 's,<,\<,g' -e 's,>,\>,g' < recipes/$b.example - echo '</pre>' + echo '<h3>Example output</h3>' + echo '<pre>' + sed -e 's,&,\&,g' -e 's,<,\<,g' -e 's,>,\>,g' < recipes/$b.example + echo '</pre>' fi done diff --git a/ocaml/t/guestfs_060_readdir.ml b/ocaml/t/guestfs_060_readdir.ml index f333810e..e9368a81 100644 --- a/ocaml/t/guestfs_060_readdir.ml +++ b/ocaml/t/guestfs_060_readdir.ml @@ -44,10 +44,10 @@ let () = ) dirs in if dirs <> [ ".", 'd'; - "..", 'd'; - "lost+found", 'd'; - "p", 'd'; - "q", 'r' ] then + "..", 'd'; + "lost+found", 'd'; + "p", 'd'; + "q", 'r' ] then failwith "Guestfs.readdir returned incorrect result"; Guestfs.close g; diff --git a/perl/lib/Sys/Guestfs/Lib.pm b/perl/lib/Sys/Guestfs/Lib.pm index 8e205937..72b0f7df 100644 --- a/perl/lib/Sys/Guestfs/Lib.pm +++ b/perl/lib/Sys/Guestfs/Lib.pm @@ -128,80 +128,80 @@ sub open_guest my @images = (); if (ref ($first) eq "ARRAY") { - @images = @$first; + @images = @$first; } elsif (ref ($first) eq "SCALAR") { - @images = ($first); + @images = ($first); } else { - die __"open_guest: first parameter must be a string or an arrayref" + die __"open_guest: first parameter must be a string or an arrayref" } my ($conn, $dom); if (-e $images[0]) { - foreach (@images) { - die __x("guest image {imagename} does not exist or is not readable", - imagename => $_) - unless -r $_; - } + foreach (@images) { + die __x("guest image {imagename} does not exist or is not readable", + imagename => $_) + unless -r $_; + } } else { - die __"open_guest: no libvirt support (install Sys::Virt, XML::XPath and XML::XPath::XMLParser)" - unless exists $INC{"Sys/Virt.pm"} && - exists $INC{"XML/XPath.pm"} && - exists $INC{"XML/XPath/XMLParser.pm"}; - - die __"open_guest: too many domains listed on command line" - if @images > 1; - - $conn = Sys::Virt->new (readonly => 1, @_); - die __"open_guest: cannot connect to libvirt" unless $conn; - - my @doms = $conn->list_defined_domains (); - my $isitinactive = 1; - unless ($readwrite) { - # In the case where we want read-only access to a domain, - # allow the user to specify an active domain too. - push @doms, $conn->list_domains (); - $isitinactive = 0; - } - foreach (@doms) { - if ($_->get_name () eq $images[0]) { - $dom = $_; - last; - } - } - - unless ($dom) { - if ($isitinactive) { - die __x("{imagename} is not the name of an inactive libvirt domain\n", - imagename => $images[0]); - } else { - die __x("{imagename} is not the name of a libvirt domain\n", - imagename => $images[0]); - } - } - - # Get the names of the image(s). - my $xml = $dom->get_xml_description (); - - my $p = XML::XPath->new (xml => $xml); - my @disks = $p->findnodes ('//devices/disk/source/@dev'); - push (@disks, $p->findnodes ('//devices/disk/source/@file')); - - die __x("{imagename} seems to have no disk devices\n", - imagename => $images[0]) - unless @disks; - - @images = map { $_->getData } @disks; + die __"open_guest: no libvirt support (install Sys::Virt, XML::XPath and XML::XPath::XMLParser)" + unless exists $INC{"Sys/Virt.pm"} && + exists $INC{"XML/XPath.pm"} && + exists $INC{"XML/XPath/XMLParser.pm"}; + + die __"open_guest: too many domains listed on command line" + if @images > 1; + + $conn = Sys::Virt->new (readonly => 1, @_); + die __"open_guest: cannot connect to libvirt" unless $conn; + + my @doms = $conn->list_defined_domains (); + my $isitinactive = 1; + unless ($readwrite) { + # In the case where we want read-only access to a domain, + # allow the user to specify an active domain too. + push @doms, $conn->list_domains (); + $isitinactive = 0; + } + foreach (@doms) { + if ($_->get_name () eq $images[0]) { + $dom = $_; + last; + } + } + + unless ($dom) { + if ($isitinactive) { + die __x("{imagename} is not the name of an inactive libvirt domain\n", + imagename => $images[0]); + } else { + die __x("{imagename} is not the name of a libvirt domain\n", + imagename => $images[0]); + } + } + + # Get the names of the image(s). + my $xml = $dom->get_xml_description (); + + my $p = XML::XPath->new (xml => $xml); + my @disks = $p->findnodes ('//devices/disk/source/@dev'); + push (@disks, $p->findnodes ('//devices/disk/source/@file')); + + die __x("{imagename} seems to have no disk devices\n", + imagename => $images[0]) + unless @disks; + + @images = map { $_->getData } @disks; } # We've now got the list of @images, so feed them to libguestfs. my $g = Sys::Guestfs->new (); foreach (@images) { - if ($readwrite) { - $g->add_drive ($_); - } else { - $g->add_drive_ro ($_); - } + if ($readwrite) { + $g->add_drive ($_); + } else { + $g->add_drive_ro ($_); + } } return wantarray ? ($g, $conn, $dom, @images) : $g @@ -239,7 +239,7 @@ sub _is_pv { my $t = shift; foreach (@_) { - return 1 if $_ eq $t; + return 1 if $_ eq $t; } 0; } @@ -271,8 +271,8 @@ sub resolve_windows_path my $path = shift; if (substr ($path, 0, 1) ne "/") { - warn __"resolve_windows_path: path must start with a / character"; - return undef; + warn __"resolve_windows_path: path must start with a / character"; + return undef; } my @elems = split (/\//, $path); @@ -282,19 +282,19 @@ sub resolve_windows_path $path = "/"; foreach my $dir (@elems) { - my $found = 0; - foreach ($g->ls ($path)) { - if (lc ($_) eq lc ($dir)) { - if ($path eq "/") { - $path = "/$_"; - $found = 1; - } else { - $path = "$path/$_"; - $found = 1; - } - } - } - return undef unless $found; + my $found = 0; + foreach ($g->ls ($path)) { + if (lc ($_) eq lc ($dir)) { + if ($path eq "/") { + $path = "/$_"; + $found = 1; + } else { + $path = "$path/$_"; + $found = 1; + } + } + } + return undef unless $found; } return $path; @@ -376,27 +376,27 @@ sub _elf_arch_to_canonical local $_ = shift; if ($_ eq "Intel 80386") { - return "i386"; + return "i386"; } elsif ($_ eq "Intel 80486") { - return "i486"; # probably not in the wild + return "i486"; # probably not in the wild } elsif ($_ eq "x86-64") { - return "x86_64"; + return "x86_64"; } elsif ($_ eq "AMD x86-64") { - return "x86_64"; + return "x86_64"; } elsif (/SPARC32/) { - return "sparc"; + return "sparc"; } elsif (/SPARC V9/) { - return "sparc64"; + return "sparc64"; } elsif ($_ eq "IA-64") { - return "ia64"; + return "ia64"; } elsif (/64.*PowerPC/) { - return "ppc64"; + return "ppc64"; } elsif (/PowerPC/) { - return "ppc"; + return "ppc"; } else { - warn __x("returning non-canonical architecture type '{arch}'", - arch => $_); - return $_; + warn __x("returning non-canonical architecture type '{arch}'", + arch => $_); + return $_; } } @@ -412,49 +412,49 @@ sub file_architecture my $file = $g->file ($path); if ($file =~ /ELF.*(?:executable|shared object|relocatable), (.+?),/) { - # ELF executable or shared object. We need to convert - # what file(1) prints into the canonical form. - return _elf_arch_to_canonical ($1); + # ELF executable or shared object. We need to convert + # what file(1) prints into the canonical form. + return _elf_arch_to_canonical ($1); } elsif ($file =~ /PE32 executable/) { - return "i386"; # Win32 executable or DLL + return "i386"; # Win32 executable or DLL } elsif ($file =~ /PE32\+ executable/) { - return "x86_64"; # Win64 executable or DLL + return "x86_64"; # Win64 executable or DLL } elsif ($file =~ /cpio archive/) { - # Probably an initrd. - my $zcat = "cat"; - if ($file =~ /gzip/) { - $zcat = "zcat"; - } elsif ($file =~ /bzip2/) { - $zcat = "bzcat"; - } - - # Download and unpack it to find a binary file. - my $dir = tempdir (CLEANUP => 1); - $g->download ($path, "$dir/initrd"); - - my $bins = join " ", map { "bin/$_" } @_initrd_binaries; - my $cmd = "cd $dir && $zcat initrd | cpio --quiet -id $bins"; - my $r = system ($cmd); - die __x("cpio command failed: {error}", error => $?) - unless $r == 0; - - foreach my $bin (@_initrd_binaries) { - if (-f "$dir/bin/$bin") { - $_ = `file $dir/bin/$bin`; - if (/ELF.*executable, (.+?),/) { - return _elf_arch_to_canonical ($1); - } - } - } - - die __x("file_architecture: no known binaries found in initrd image: {path}", - path => $path); + # Probably an initrd. + my $zcat = "cat"; + if ($file =~ /gzip/) { + $zcat = "zcat"; + } elsif ($file =~ /bzip2/) { + $zcat = "bzcat"; + } + + # Download and unpack it to find a binary file. + my $dir = tempdir (CLEANUP => 1); + $g->download ($path, "$dir/initrd"); + + my $bins = join " ", map { "bin/$_" } @_initrd_binaries; + my $cmd = "cd $dir && $zcat initrd | cpio --quiet -id $bins"; + my $r = system ($cmd); + die __x("cpio command failed: {error}", error => $?) + unless $r == 0; + + foreach my $bin (@_initrd_binaries) { + if (-f "$dir/bin/$bin") { + $_ = `file $dir/bin/$bin`; + if (/ELF.*executable, (.+?),/) { + return _elf_arch_to_canonical ($1); + } + } + } + + die __x("file_architecture: no known binaries found in initrd image: {path}", + path => $path); } die __x("file_architecture: unknown architecture: {path}", - path => $path); + path => $path); } =head1 OPERATING SYSTEM INSPECTION FUNCTIONS @@ -689,84 +689,84 @@ sub inspect_partition # First try 'file(1)' on it. my $file = $g->file ($dev); if ($file =~ /ext2 filesystem data/) { - $r{fstype} = "ext2"; - $r{fsos} = "linux"; + $r{fstype} = "ext2"; + $r{fsos} = "linux"; } elsif ($file =~ /ext3 filesystem data/) { - $r{fstype} = "ext3"; - $r{fsos} = "linux"; + $r{fstype} = "ext3"; + $r{fsos} = "linux"; } elsif ($file =~ /ext4 filesystem data/) { - $r{fstype} = "ext4"; - $r{fsos} = "linux"; + $r{fstype} = "ext4"; + $r{fsos} = "linux"; } elsif ($file =~ m{Linux/i386 swap file}) { - $r{fstype} = "swap"; - $r{fsos} = "linux"; - $r{is_swap} = 1; + $r{fstype} = "swap"; + $r{fsos} = "linux"; + $r{is_swap} = 1; } # If it's ext2/3/4, then we want the UUID and label. if (exists $r{fstype} && $r{fstype} =~ /^ext/) { - $r{uuid} = $g->get_e2uuid ($dev); - $r{label} = $g->get_e2label ($dev); + $r{uuid} = $g->get_e2uuid ($dev); + $r{label} = $g->get_e2label ($dev); } # Try mounting it, fnarrr. if (!$r{is_swap}) { - $r{is_mountable} = 1; - eval { $g->mount_ro ($dev, "/") }; - if ($@) { - # It's not mountable, probably empty or some format - # we don't understand. - $r{is_mountable} = 0; - goto OUT; - } - - # Grub /boot? - if ($g->is_file ("/grub/menu.lst") || - $g->is_file ("/grub/grub.conf")) { - $r{content} = "linux-grub"; - _check_grub ($g, \%r); - goto OUT; - } - - # Linux root? - if ($g->is_dir ("/etc") && $g->is_dir ("/bin") && - $g->is_file ("/etc/fstab")) { - $r{content} = "linux-root"; - $r{is_root} = 1; - _check_linux_root ($g, \%r); - goto OUT; - } - - # Linux /usr/local. - if ($g->is_dir ("/etc") && $g->is_dir ("/bin") && - $g->is_dir ("/share") && !$g->exists ("/local") && - !$g->is_file ("/etc/fstab")) { - $r{content} = "linux-usrlocal"; - goto OUT; - } - - # Linux /usr. - if ($g->is_dir ("/etc") && $g->is_dir ("/bin") && - $g->is_dir ("/share") && $g->exists ("/local") && - !$g->is_file ("/etc/fstab")) { - $r{content} = "linux-usr"; - goto OUT; - } - - # Windows root? - if ($g->is_file ("/AUTOEXEC.BAT") || - $g->is_file ("/autoexec.bat") || - $g->is_dir ("/Program Files") || - $g->is_dir ("/WINDOWS") || - $g->is_file ("/boot.ini") || - $g->is_file ("/ntldr")) { - $r{fstype} = "ntfs"; # XXX this is a guess - $r{fsos} = "windows"; - $r{content} = "windows-root"; - $r{is_root} = 1; - _check_windows_root ($g, \%r, $use_windows_registry); - goto OUT; - } + $r{is_mountable} = 1; + eval { $g->mount_ro ($dev, "/") }; + if ($@) { + # It's not mountable, probably empty or some format + # we don't understand. + $r{is_mountable} = 0; + goto OUT; + } + + # Grub /boot? + if ($g->is_file ("/grub/menu.lst") || + $g->is_file ("/grub/grub.conf")) { + $r{content} = "linux-grub"; + _check_grub ($g, \%r); + goto OUT; + } + + # Linux root? + if ($g->is_dir ("/etc") && $g->is_dir ("/bin") && + $g->is_file ("/etc/fstab")) { + $r{content} = "linux-root"; + $r{is_root} = 1; + _check_linux_root ($g, \%r); + goto OUT; + } + + # Linux /usr/local. + if ($g->is_dir ("/etc") && $g->is_dir ("/bin") && + $g->is_dir ("/share") && !$g->exists ("/local") && + !$g->is_file ("/etc/fstab")) { + $r{content} = "linux-usrlocal"; + goto OUT; + } + + # Linux /usr. + if ($g->is_dir ("/etc") && $g->is_dir ("/bin") && + $g->is_dir ("/share") && $g->exists ("/local") && + !$g->is_file ("/etc/fstab")) { + $r{content} = "linux-usr"; + goto OUT; + } + + # Windows root? + if ($g->is_file ("/AUTOEXEC.BAT") || + $g->is_file ("/autoexec.bat") || + $g->is_dir ("/Program Files") || + $g->is_dir ("/WINDOWS") || + $g->is_file ("/boot.ini") || + $g->is_file ("/ntldr")) { + $r{fstype} = "ntfs"; # XXX this is a guess + $r{fsos} = "windows"; + $r{content} = "windows-root"; + $r{is_root} = 1; + _check_windows_root ($g, \%r, $use_windows_registry); + goto OUT; + } } OUT: @@ -785,13 +785,13 @@ sub _check_linux_root if ($g->exists ("/etc/redhat-release")) { $r->{package_format} = "rpm"; - $_ = $g->cat ("/etc/redhat-release"); - if (/Fedora release (\d+)(?:\.(\d+))?/) { - $r->{osdistro} = "fedora"; - $r->{os_major_version} = "$1"; - $r->{os_minor_version} = "$2" if(defined($2)); - $r->{package_management} = "yum"; - } + $_ = $g->cat ("/etc/redhat-release"); + if (/Fedora release (\d+)(?:\.(\d+))?/) { + $r->{osdistro} = "fedora"; + $r->{os_major_version} = "$1"; + $r->{os_minor_version} = "$2" if(defined($2)); + $r->{package_management} = "yum"; + } elsif (/(Red Hat Enterprise Linux|CentOS|Scientific Linux)/) { my $distro = $1; @@ -839,51 +839,51 @@ sub _check_linux_root } else { - $r->{osdistro} = "redhat-based"; - } + $r->{osdistro} = "redhat-based"; + } } elsif ($g->is_file ("/etc/debian_version")) { $r->{package_format} = "dpkg"; $r->{package_management} = "apt"; - $_ = $g->cat ("/etc/debian_version"); - if (/(\d+)\.(\d+)/) { - $r->{osdistro} = "debian"; - $r->{os_major_version} = "$1"; - $r->{os_minor_version} = "$2"; - } else { - $r->{osdistro} = "debian"; - } + $_ = $g->cat ("/etc/debian_version"); + if (/(\d+)\.(\d+)/) { + $r->{osdistro} = "debian"; + $r->{os_major_version} = "$1"; + $r->{os_minor_version} = "$2"; + } else { + $r->{osdistro} = "debian"; + } } # Parse the contents of /etc/fstab. This is pretty vital so # we can determine where filesystems are supposed to be mounted. eval "\$_ = \$g->cat ('/etc/fstab');"; if (!$@ && $_) { - my @lines = split /\n/; - my @fstab; - foreach (@lines) { - my @fields = split /[ \t]+/; - if (@fields >= 2) { - my $spec = $fields[0]; # first column (dev/label/uuid) - my $file = $fields[1]; # second column (mountpoint) - if ($spec =~ m{^/} || - $spec =~ m{^LABEL=} || - $spec =~ m{^UUID=} || - $file eq "swap") { - push @fstab, [$spec, $file] - } - } - } - $r->{fstab} = \@fstab if @fstab; + my @lines = split /\n/; + my @fstab; + foreach (@lines) { + my @fields = split /[ \t]+/; + if (@fields >= 2) { + my $spec = $fields[0]; # first column (dev/label/uuid) + my $file = $fields[1]; # second column (mountpoint) + if ($spec =~ m{^/} || + $spec =~ m{^LABEL=} || + $spec =~ m{^UUID=} || + $file eq "swap") { + push @fstab, [$spec, $file] + } + } + } + $r->{fstab} = \@fstab if @fstab; } # Determine the architecture of this root. my $arch; foreach ("/bin/bash", "/bin/ls", "/bin/echo", "/bin/rm", "/bin/sh") { - if ($g->is_file ($_)) { - $arch = file_architecture ($g, $_); - last; - } + if ($g->is_file ($_)) { + $arch = file_architecture ($g, $_); + last; + } } $r->{arch} = $arch if defined $arch; @@ -907,31 +907,31 @@ sub _check_windows_root $r->{boot_ini} = $boot_ini; if (defined $r->{boot_ini}) { - $_ = $g->cat ($boot_ini); - my @lines = split /\n/; - my $section; - my $systemroot; - foreach (@lines) { - if (m/\[.*\]/) { - $section = $1; - } elsif (m/^default=.*?\\(\w+)$/i) { - $systemroot = $1; - last; - } elsif (m/\\(\w+)=/) { - $systemroot = $1; - last; - } - } - - if (defined $systemroot) { - $r->{systemroot} = resolve_windows_path ($g, "/$systemroot"); - if (defined $r->{systemroot}) { - _check_windows_arch ($g, $r, $r->{systemroot}); - if ($use_windows_registry) { - _check_windows_registry ($g, $r, $r->{systemroot}); - } - } - } + $_ = $g->cat ($boot_ini); + my @lines = split /\n/; + my $section; + my $systemroot; + foreach (@lines) { + if (m/\[.*\]/) { + $section = $1; + } elsif (m/^default=.*?\\(\w+)$/i) { + $systemroot = $1; + last; + } elsif (m/\\(\w+)=/) { + $systemroot = $1; + last; + } + } + + if (defined $systemroot) { + $r->{systemroot} = resolve_windows_path ($g, "/$systemroot"); + if (defined $r->{systemroot}) { + _check_windows_arch ($g, $r, $r->{systemroot}); + if ($use_windows_registry) { + _check_windows_registry ($g, $r, $r->{systemroot}); + } + } + } } } @@ -945,7 +945,7 @@ sub _check_windows_arch my $systemroot = shift; my $cmd_exe = - resolve_windows_path ($g, $r->{systemroot} . "/system32/cmd.exe"); + resolve_windows_path ($g, $r->{systemroot} . "/system32/cmd.exe"); $r->{arch} = file_architecture ($g, $cmd_exe) if $cmd_exe; } @@ -961,16 +961,16 @@ sub _check_windows_registry my $configdir = resolve_windows_path ($g, "$systemroot/system32/config"); if (defined $configdir) { - my $softwaredir = resolve_windows_path ($g, "$configdir/software"); - if (defined $softwaredir) { - _load_windows_registry ($g, $r, $softwaredir, - "HKEY_LOCAL_MACHINE\\SOFTWARE"); - } - my $systemdir = resolve_windows_path ($g, "$configdir/system"); - if (defined $systemdir) { - _load_windows_registry ($g, $r, $systemdir, - "HKEY_LOCAL_MACHINE\\System"); - } + my $softwaredir = resolve_windows_path ($g, "$configdir/software"); + if (defined $softwaredir) { + _load_windows_registry ($g, $r, $softwaredir, + "HKEY_LOCAL_MACHINE\\SOFTWARE"); + } + my $systemdir = resolve_windows_path ($g, "$configdir/system"); + if (defined $systemdir) { + _load_windows_registry ($g, $r, $systemdir, + "HKEY_LOCAL_MACHINE\\System"); + } } } @@ -1004,8 +1004,8 @@ sub _load_windows_registry close SAVEERR; unless ($res == 0) { - warn __x("reged command failed: {errormsg}", errormsg => $?); - return; + warn __x("reged command failed: {errormsg}", errormsg => $?); + return; } # Some versions of reged segfault on inputs. If that happens we @@ -1013,8 +1013,8 @@ sub _load_windows_registry # it. my $content; unless (open F, "$dir/out") { - warn __x("no output from reged command: {errormsg}", errormsg => $!); - return; + warn __x("no output from reged command: {errormsg}", errormsg => $!); + return; } { local $/ = undef; $content = <F>; } close F; @@ -1120,15 +1120,15 @@ sub inspect_operating_systems my %oses = (); foreach (sort keys %$fses) { - if ($fses->{$_}->{is_root}) { - my %r = ( - root => $fses->{$_}, - root_device => $_ - ); - _get_os_version ($g, \%r); - _assign_mount_points ($g, $fses, \%r); - $oses{$_} = \%r; - } + if ($fses->{$_}->{is_root}) { + my %r = ( + root => $fses->{$_}, + root_device => $_ + ); + _get_os_version ($g, \%r); + _assign_mount_points ($g, $fses, \%r); + $oses{$_} = \%r; + } } return \%oses; @@ -1165,22 +1165,22 @@ sub _assign_mount_points # Use /etc/fstab if we have it to mount the rest. if (exists $r->{root}->{fstab}) { - my @fstab = @{$r->{root}->{fstab}}; - foreach (@fstab) { - my ($spec, $file) = @$_; - - my ($dev, $fs) = _find_filesystem ($g, $fses, $spec); - if ($dev) { - $r->{mounts}->{$file} = $dev; - $r->{filesystems}->{$dev} = $fs; - if (exists $fs->{used}) { - $fs->{used}++ - } else { - $fs->{used} = 1 - } + my @fstab = @{$r->{root}->{fstab}}; + foreach (@fstab) { + my ($spec, $file) = @$_; + + my ($dev, $fs) = _find_filesystem ($g, $fses, $spec); + if ($dev) { + $r->{mounts}->{$file} = $dev; + $r->{filesystems}->{$dev} = $fs; + if (exists $fs->{used}) { + $fs->{used}++ + } else { + $fs->{used} = 1 + } $fs->{spec} = $spec; - } - } + } + } } } @@ -1192,27 +1192,27 @@ sub _find_filesystem local $_ = shift; if (/^LABEL=(.*)/) { - my $label = $1; - foreach (sort keys %$fses) { - if (exists $fses->{$_}->{label} && - $fses->{$_}->{label} eq $label) { - return ($_, $fses->{$_}); - } - } - warn __x("unknown filesystem label {label}\n", label => $label); - return (); + my $label = $1; + foreach (sort keys %$fses) { + if (exists $fses->{$_}->{label} && + $fses->{$_}->{label} eq $label) { + return ($_, $fses->{$_}); + } + } + warn __x("unknown filesystem label {label}\n", label => $label); + return (); } elsif (/^UUID=(.*)/) { - my $uuid = $1; - foreach (sort keys %$fses) { - if (exists $fses->{$_}->{uuid} && - $fses->{$_}->{uuid} eq $uuid) { - return ($_, $fses->{$_}); - } - } - warn __x("unknown filesystem UUID {uuid}\n", uuid => $uuid); - return (); + my $uuid = $1; + foreach (sort keys %$fses) { + if (exists $fses->{$_}->{uuid} && + $fses->{$_}->{uuid} eq $uuid) { + return ($_, $fses->{$_}); + } + } + warn __x("unknown filesystem UUID {uuid}\n", uuid => $uuid); + return (); } else { - return ($_, $fses->{$_}) if exists $fses->{$_}; + return ($_, $fses->{$_}) if exists $fses->{$_}; # The following is to handle the case where an fstab entry specifies a # specific device rather than its label or uuid, and the libguestfs @@ -1220,20 +1220,20 @@ sub _find_filesystem # different driver. # This will work as long as the underlying drivers recognise devices in # the same order. - if (m{^/dev/hd(.*)} && exists $fses->{"/dev/sd$1"}) { - return ("/dev/sd$1", $fses->{"/dev/sd$1"}); - } - if (m{^/dev/xvd(.*)} && exists $fses->{"/dev/sd$1"}) { - return ("/dev/sd$1", $fses->{"/dev/sd$1"}); - } - if (m{^/dev/mapper/(.*)-(.*)$} && exists $fses->{"/dev/$1/$2"}) { - return ("/dev/$1/$2", $fses->{"/dev/$1/$2"}); - } - - return () if m{/dev/cdrom}; - - warn __x("unknown filesystem {fs}\n", fs => $_); - return (); + if (m{^/dev/hd(.*)} && exists $fses->{"/dev/sd$1"}) { + return ("/dev/sd$1", $fses->{"/dev/sd$1"}); + } + if (m{^/dev/xvd(.*)} && exists $fses->{"/dev/sd$1"}) { + return ("/dev/sd$1", $fses->{"/dev/sd$1"}); + } + if (m{^/dev/mapper/(.*)-(.*)$} && exists $fses->{"/dev/$1/$2"}) { + return ("/dev/$1/$2", $fses->{"/dev/$1/$2"}); + } + + return () if m{/dev/cdrom}; + + warn __x("unknown filesystem {fs}\n", fs => $_); + return (); } } @@ -1388,7 +1388,7 @@ sub inspect_in_detail _check_for_applications ($g, $os); _check_for_kernels ($g, $os); if ($os->{os} eq "linux") { - _find_modprobe_aliases ($g, $os); + _find_modprobe_aliases ($g, $os); } } @@ -1402,34 +1402,34 @@ sub _check_for_applications my $osn = $os->{os}; if ($osn eq "linux") { - my $package_format = $os->{package_format}; - if (defined $package_format && $package_format eq "rpm") { - my @lines = $g->command_lines - (["rpm", - "-q", "-a", - "--qf", "%{name} %{epoch} %{version} %{release} %{arch}\n"]); - foreach (@lines) { - if (m/^(.*) (.*) (.*) (.*) (.*)$/) { - my $epoch = $2; - $epoch = "" if $epoch eq "(none)"; - my $app = { - name => $1, - epoch => $epoch, - version => $3, - release => $4, - arch => $5 - }; - push @apps, $app - } - } - } + my $package_format = $os->{package_format}; + if (defined $package_format && $package_format eq "rpm") { + my @lines = $g->command_lines + (["rpm", + "-q", "-a", + "--qf", "%{name} %{epoch} %{version} %{release} %{arch}\n"]); + foreach (@lines) { + if (m/^(.*) (.*) (.*) (.*) (.*)$/) { + my $epoch = $2; + $epoch = "" if $epoch eq "(none)"; + my $app = { + name => $1, + epoch => $epoch, + version => $3, + release => $4, + arch => $5 + }; + push @apps, $app + } + } + } } elsif ($osn eq "windows") { - # XXX - # I worked out a general plan for this, but haven't - # implemented it yet. We can iterate over /Program Files - # looking for *.EXE files, which we download, then use - # i686-pc-mingw32-windres on, to find the VERSIONINFO - # section, which has a lot of useful information. + # XXX + # I worked out a general plan for this, but haven't + # implemented it yet. We can iterate over /Program Files + # looking for *.EXE files, which we download, then use + # i686-pc-mingw32-windres on, to find the VERSIONINFO + # section, which has a lot of useful information. } $os->{apps} = \@apps; @@ -1537,7 +1537,7 @@ sub _check_for_kernels } elsif ($os->{os} eq "windows") { - # XXX + # XXX } } @@ -1652,7 +1652,7 @@ sub _find_modprobe_aliases for my $path ( $g->aug_match($pattern) ) { $path =~ m{^/files(.*)/alias(?:\[\d*\])?$} or die __x("{path} doesn't match augeas pattern", - path => $path); + path => $path); my $file = $1; my $alias; diff --git a/perl/t/500-lib-load.t b/perl/t/500-lib-load.t index de928aed..7ce28c6e 100644 --- a/perl/t/500-lib-load.t +++ b/perl/t/500-lib-load.t @@ -23,10 +23,10 @@ BEGIN { eval "use Locale::TextDomain";; if (exists $INC{"Locale/TextDomain.pm"}) { - plan tests => 1; + plan tests => 1; } else { - plan skip_all => "no perl-libintl module"; - exit 0; + plan skip_all => "no perl-libintl module"; + exit 0; } } diff --git a/perl/t/510-lib-file-arch.t b/perl/t/510-lib-file-arch.t index b0a96e9f..c4b9d318 100644 --- a/perl/t/510-lib-file-arch.t +++ b/perl/t/510-lib-file-arch.t @@ -22,10 +22,10 @@ BEGIN { use Test::More; eval "use Locale::TextDomain";; if (exists $INC{"Locale/TextDomain.pm"}) { - plan tests => 17; + plan tests => 17; } else { - plan skip_all => "no perl-libintl module"; - exit 0; + plan skip_all => "no perl-libintl module"; + exit 0; } } diff --git a/perl/typemap b/perl/typemap index 421e73a2..97788d30 100644 --- a/perl/typemap +++ b/perl/typemap @@ -9,7 +9,7 @@ O_OBJECT_guestfs_h $var = ($type) SvIV ((SV *) SvRV ($arg)); else { warn (\"${Package}::$func_name(): $var is not a blessed SV reference\"); - XSRETURN_UNDEF; + XSRETURN_UNDEF; } OUTPUT diff --git a/recipes/squashfs.example b/recipes/squashfs.example index 9dae930b..f10d1950 100644 --- a/recipes/squashfs.example +++ b/recipes/squashfs.example @@ -3,14 +3,14 @@ Parallel mksquashfs: Using 2 processors Creating 4.0 filesystem on test.sqsh, block size 131072. [===============================================================|] 663/663 100% Exportable Squashfs 4.0 filesystem, data block size 131072 - compressed data, compressed metadata, compressed fragments - duplicates are removed + compressed data, compressed metadata, compressed fragments + duplicates are removed Filesystem size 1518.07 Kbytes (1.48 Mbytes) - 98.41% of uncompressed filesystem size (1542.53 Kbytes) + 98.41% of uncompressed filesystem size (1542.53 Kbytes) Inode table size 8095 bytes (7.91 Kbytes) - 35.59% of uncompressed inode table size (22748 bytes) + 35.59% of uncompressed inode table size (22748 bytes) Directory table size 7612 bytes (7.43 Kbytes) - 49.11% of uncompressed directory table size (15499 bytes) + 49.11% of uncompressed directory table size (15499 bytes) Number of duplicate files found 6 Number of inodes 701 Number of files 663 @@ -22,9 +22,9 @@ Number of socket nodes 0 Number of directories 1 Number of ids (unique uids + gids) 1 Number of uids 1 - root (0) + root (0) Number of gids 1 - root (0) + root (0) total 1732 drwxr-xr-x 2 root root 15498 May 27 10:34 . drwxr-xr-x 18 root root 0 May 29 08:44 .. diff --git a/src/generator.ml b/src/generator.ml index b6f6f42a..9ef99bdf 100755 --- a/src/generator.ml +++ b/src/generator.ml @@ -375,9 +375,9 @@ You probably don't want to call this function."); List.map ( fun (name, ret) -> [(name, (ret, [String "val"]), -1, [NotInFish; NotInDocs], - [], - "internal test function - do not use", - "\ + [], + "internal test function - do not use", + "\ This is an internal test function which is used to test whether the automatically generated bindings can handle every possible return type correctly. @@ -386,9 +386,9 @@ It converts string C<val> to the return type. You probably don't want to call this function."); (name ^ "err", (ret, []), -1, [NotInFish; NotInDocs], - [], - "internal test function - do not use", - "\ + [], + "internal test function - do not use", + "\ This is an internal test function which is used to test whether the automatically generated bindings can handle every possible return type correctly. @@ -822,8 +822,8 @@ or C<guestfs_download> functions which have a more complex interface."); ("ll", (RString "listing", [String "directory"]), 5, [], [], (* XXX Tricky to test because it depends on the exact format - * of the 'ls -l' command, which changes between F10 and F11. - *) + * of the 'ls -l' command, which changes between F10 and F11. + *) "list the files in a directory (long format)", "\ List the files in C<directory> (relative to the root directory, @@ -1320,8 +1320,8 @@ or LVM logical volume). The filesystem type is C<fstype>, for example C<ext3>."); ("sfdisk", (RErr, [String "device"; - Int "cyls"; Int "heads"; Int "sectors"; - StringList "lines"]), 43, [DangerWillRobinson], + Int "cyls"; Int "heads"; Int "sectors"; + StringList "lines"]), 43, [DangerWillRobinson], [], "create partitions on a block device", "\ @@ -1620,7 +1620,7 @@ This is the same as the C<lstat(2)> system call."); ("statvfs", (RStruct ("statbuf", "statvfs"), [String "path"]), 54, [], [InitSquashFS, Always, TestOutputStruct ( [["statvfs"; "/"]], [CompareWithInt ("namemax", 256); - CompareWithInt ("bsize", 131072)])], + CompareWithInt ("bsize", 131072)])], "get file system statistics", "\ Returns file system statistics for any mounted file system. @@ -2307,8 +2307,8 @@ This resizes (expands or shrinks) an existing LVM physical volume to match the new size of the underlying device."); ("sfdisk_N", (RErr, [String "device"; Int "partnum"; - Int "cyls"; Int "heads"; Int "sectors"; - String "line"]), 99, [DangerWillRobinson], + Int "cyls"; Int "heads"; Int "sectors"; + String "line"]), 99, [DangerWillRobinson], [], "modify a single partition on a block device", "\ @@ -2682,8 +2682,8 @@ If the parameter C<nrlines> is zero, this returns an empty list."); ("df", (RString "output", []), 125, [], [], (* XXX Tricky to test because it depends on the exact format - * of the 'df' command and other imponderables. - *) + * of the 'df' command and other imponderables. + *) "report file system disk space usage", "\ This command runs the C<df> command to report disk space used. @@ -2694,8 +2694,8 @@ Use C<statvfs> from programs."); ("df_h", (RString "output", []), 126, [], [], (* XXX Tricky to test because it depends on the exact format - * of the 'df' command and other imponderables. - *) + * of the 'df' command and other imponderables. + *) "report file system disk space usage (human readable)", "\ This command runs the C<df -h> command to report disk space used @@ -2821,8 +2821,8 @@ It is just a convenient wrapper around C<guestfs_mknod>."); ("umask", (RInt "oldmask", [Int "mask"]), 137, [], [], (* XXX umask is one of those stateful things that we should - * reset between each test. - *) + * reset between each test. + *) "set file mode creation mask (umask)", "\ This function sets the mask used for creating new files and @@ -2944,8 +2944,8 @@ is a symbolic link, then it returns the extended attributes of the link itself."); ("setxattr", (RErr, [String "xattr"; - String "val"; Int "vallen"; (* will be BufferIn *) - String "path"]), 143, [], + String "val"; Int "vallen"; (* will be BufferIn *) + String "path"]), 143, [], [], "set extended attribute of a file or directory", "\ @@ -2956,8 +2956,8 @@ The value is arbitrary 8 bit data. See also: C<guestfs_lsetxattr>, L<attr(5)>."); ("lsetxattr", (RErr, [String "xattr"; - String "val"; Int "vallen"; (* will be BufferIn *) - String "path"]), 144, [], + String "val"; Int "vallen"; (* will be BufferIn *) + String "path"]), 144, [], [], "set extended attribute of a file or directory", "\ @@ -3402,7 +3402,7 @@ let all_functions = non_daemon_functions @ daemon_functions *) let all_functions_sorted = List.sort (fun (n1,_,_,_,_,_,_) (n2,_,_,_,_,_,_) -> - compare n1 n2) all_functions + compare n1 n2) all_functions (* Field types for structures. *) type field = @@ -3646,11 +3646,11 @@ let rec find s sub = let rec loop i = if i <= len-sublen then ( let rec loop2 j = - if j < sublen then ( - if s.[i+j] = sub.[j] then loop2 (j+1) - else -1 - ) else - i (* found *) + if j < sublen then ( + if s.[i+j] = sub.[j] then loop2 (j+1) + else -1 + ) else + i (* found *) in let r = loop2 0 in if r = -1 then loop (i+1) else r @@ -3772,9 +3772,9 @@ let check_functions () = let rec loop i = if i >= len then false else ( - let c = str.[i] in - if c >= 'A' && c <= 'Z' then true - else loop (i+1) + let c = str.[i] in + if c >= 'A' && c <= 'Z' then true + else loop (i+1) ) in loop 0 @@ -3784,34 +3784,34 @@ let check_functions () = List.iter ( fun (name, _, _, _, _, _, _) -> if String.length name >= 7 && String.sub name 0 7 = "guestfs" then - failwithf "function name %s does not need 'guestfs' prefix" name; + failwithf "function name %s does not need 'guestfs' prefix" name; if name = "" then - failwithf "function name is empty"; + failwithf "function name is empty"; if name.[0] < 'a' || name.[0] > 'z' then - failwithf "function name %s must start with lowercase a-z" name; + failwithf "function name %s must start with lowercase a-z" name; if String.contains name '-' then - failwithf "function name %s should not contain '-', use '_' instead." - name + failwithf "function name %s should not contain '-', use '_' instead." + name ) all_functions; (* Check function parameter/return names. *) List.iter ( fun (name, style, _, _, _, _, _) -> let check_arg_ret_name n = - if contains_uppercase n then - failwithf "%s param/ret %s should not contain uppercase chars" - name n; - if String.contains n '-' || String.contains n '_' then - failwithf "%s param/ret %s should not contain '-' or '_'" - name n; - if n = "value" then - failwithf "%s has a param/ret called 'value', which causes conflicts in the OCaml bindings, use something like 'val' or a more descriptive name" name; - if n = "int" || n = "char" || n = "short" || n = "long" then - failwithf "%s has a param/ret which conflicts with a C type (eg. 'int', 'char' etc.)" name; - if n = "i" || n = "n" then - failwithf "%s has a param/ret called 'i' or 'n', which will cause some conflicts in the generated code" name; - if n = "argv" || n = "args" then - failwithf "%s has a param/ret called 'argv' or 'args', which will cause some conflicts in the generated code" name + if contains_uppercase n then + failwithf "%s param/ret %s should not contain uppercase chars" + name n; + if String.contains n '-' || String.contains n '_' then + failwithf "%s param/ret %s should not contain '-' or '_'" + name n; + if n = "value" then + failwithf "%s has a param/ret called 'value', which causes conflicts in the OCaml bindings, use something like 'val' or a more descriptive name" name; + if n = "int" || n = "char" || n = "short" || n = "long" then + failwithf "%s has a param/ret which conflicts with a C type (eg. 'int', 'char' etc.)" name; + if n = "i" || n = "n" then + failwithf "%s has a param/ret called 'i' or 'n', which will cause some conflicts in the generated code" name; + if n = "argv" || n = "args" then + failwithf "%s has a param/ret called 'argv' or 'args', which will cause some conflicts in the generated code" name in (match fst style with @@ -3820,7 +3820,7 @@ let check_functions () = | RConstString n | RConstOptString n | RString n | RStringList n | RStruct (n, _) | RStructList (n, _) | RHashtable n | RBufferOut n -> - check_arg_ret_name n + check_arg_ret_name n ); List.iter (fun arg -> check_arg_ret_name (name_of_argt arg)) (snd style) ) all_functions; @@ -3829,30 +3829,30 @@ let check_functions () = List.iter ( fun (name, _, _, _, _, shortdesc, _) -> if shortdesc.[0] <> Char.lowercase shortdesc.[0] then - failwithf "short description of %s should begin with lowercase." name; + failwithf "short description of %s should begin with lowercase." name; let c = shortdesc.[String.length shortdesc-1] in if c = '\n' || c = '.' then - failwithf "short description of %s should not end with . or \\n." name + failwithf "short description of %s should not end with . or \\n." name ) all_functions; (* Check long dscriptions. *) List.iter ( fun (name, _, _, _, _, _, longdesc) -> if longdesc.[String.length longdesc-1] = '\n' then - failwithf "long description of %s should not end with \\n." name + failwithf "long description of %s should not end with \\n." name ) all_functions; (* Check proc_nrs. *) List.iter ( fun (name, _, proc_nr, _, _, _, _) -> if proc_nr <= 0 then - failwithf "daemon function %s should have proc_nr > 0" name + failwithf "daemon function %s should have proc_nr > 0" name ) daemon_functions; List.iter ( fun (name, _, proc_nr, _, _, _, _) -> if proc_nr <> -1 then - failwithf "non-daemon function %s should have proc_nr -1" name + failwithf "non-daemon function %s should have proc_nr -1" name ) non_daemon_functions; let proc_nrs = @@ -3864,10 +3864,10 @@ let check_functions () = | [] -> () | [_] -> () | (name1,nr1) :: ((name2,nr2) :: _ as rest) when nr1 < nr2 -> - loop rest + loop rest | (name1,nr1) :: (name2,nr2) :: _ -> - failwithf "%s and %s have conflicting procedure numbers (%d, %d)" - name1 name2 nr1 nr2 + failwithf "%s and %s have conflicting procedure numbers (%d, %d)" + name1 name2 nr1 nr2 in loop proc_nrs; @@ -3879,20 +3879,20 @@ let check_functions () = *) | name, _, _, _, [], _, _ -> () | name, _, _, _, tests, _, _ -> - let funcs = - List.map ( - fun (_, _, test) -> - match seq_of_test test with - | [] -> - failwithf "%s has a test containing an empty sequence" name - | cmds -> List.map List.hd cmds - ) tests in - let funcs = List.flatten funcs in - - let tested = List.mem name funcs in - - if not tested then - failwithf "function %s has tests but does not test itself" name + let funcs = + List.map ( + fun (_, _, test) -> + match seq_of_test test with + | [] -> + failwithf "%s has a test containing an empty sequence" name + | cmds -> List.map List.hd cmds + ) tests in + let funcs = List.flatten funcs in + + let tested = List.mem name funcs in + + if not tested then + failwithf "function %s has tests but does not test itself" name ) all_functions (* 'pr' prints to the current output file. *) @@ -3961,62 +3961,62 @@ let rec generate_actions_pod () = List.iter ( fun (shortname, style, _, flags, _, _, longdesc) -> if not (List.mem NotInDocs flags) then ( - let name = "guestfs_" ^ shortname in - pr "=head2 %s\n\n" name; - pr " "; - generate_prototype ~extern:false ~handle:"handle" name style; - pr "\n\n"; - pr "%s\n\n" longdesc; - (match fst style with - | RErr -> - pr "This function returns 0 on success or -1 on error.\n\n" - | RInt _ -> - pr "On error this function returns -1.\n\n" - | RInt64 _ -> - pr "On error this function returns -1.\n\n" - | RBool _ -> - pr "This function returns a C truth value on success or -1 on error.\n\n" - | RConstString _ -> - pr "This function returns a string, or NULL on error. + let name = "guestfs_" ^ shortname in + pr "=head2 %s\n\n" name; + pr " "; + generate_prototype ~extern:false ~handle:"handle" name style; + pr "\n\n"; + pr "%s\n\n" longdesc; + (match fst style with + | RErr -> + pr "This function returns 0 on success or -1 on error.\n\n" + | RInt _ -> + pr "On error this function returns -1.\n\n" + | RInt64 _ -> + pr "On error this function returns -1.\n\n" + | RBool _ -> + pr "This function returns a C truth value on success or -1 on error.\n\n" + | RConstString _ -> + pr "This function returns a string, or NULL on error. The string is owned by the guest handle and must I<not> be freed.\n\n" - | RConstOptString _ -> - pr "This function returns a string which may be NULL. + | RConstOptString _ -> + pr "This function returns a string which may be NULL. There is way to return an error from this function. The string is owned by the guest handle and must I<not> be freed.\n\n" - | RString _ -> - pr "This function returns a string, or NULL on error. + | RString _ -> + pr "This function returns a string, or NULL on error. I<The caller must free the returned string after use>.\n\n" - | RStringList _ -> - pr "This function returns a NULL-terminated array of strings + | RStringList _ -> + pr "This function returns a NULL-terminated array of strings (like L<environ(3)>), or NULL if there was an error. I<The caller must free the strings and the array after use>.\n\n" - | RStruct (_, typ) -> - pr "This function returns a C<struct guestfs_%s *>, + | RStruct (_, typ) -> + pr "This function returns a C<struct guestfs_%s *>, or NULL if there was an error. I<The caller must call C<guestfs_free_%s> after use>.\n\n" typ typ - | RStructList (_, typ) -> - pr "This function returns a C<struct guestfs_%s_list *> + | RStructList (_, typ) -> + pr "This function returns a C<struct guestfs_%s_list *> (see E<lt>guestfs-structs.hE<gt>), or NULL if there was an error. I<The caller must call C<guestfs_free_%s_list> after use>.\n\n" typ typ - | RHashtable _ -> - pr "This function returns a NULL-terminated array of + | RHashtable _ -> + pr "This function returns a NULL-terminated array of strings, or NULL if there was an error. The array of strings will always have length C<2n+1>, where C<n> keys and values alternate, followed by the trailing NULL entry. I<The caller must free the strings and the array after use>.\n\n" - | RBufferOut _ -> - pr "This function returns a buffer, or NULL on error. + | RBufferOut _ -> + pr "This function returns a buffer, or NULL on error. The size of the returned buffer is written to C<*size_r>. I<The caller must free the returned buffer after use>.\n\n" - ); - if List.mem ProtocolLimitWarning flags then - pr "%s\n\n" protocol_limit_warning; - if List.mem DangerWillRobinson flags then - pr "%s\n\n" danger_will_robinson; - match deprecation_notice flags with - | None -> () - | Some txt -> pr "%s\n\n" txt + ); + if List.mem ProtocolLimitWarning flags then + pr "%s\n\n" protocol_limit_warning; + if List.mem DangerWillRobinson flags then + pr "%s\n\n" danger_will_robinson; + match deprecation_notice flags with + | None -> () + | Some txt -> pr "%s\n\n" txt ) ) all_functions_sorted @@ -4028,23 +4028,23 @@ and generate_structs_pod () = pr "\n"; pr " struct guestfs_%s {\n" typ; List.iter ( - function - | name, FChar -> pr " char %s;\n" name - | name, FUInt32 -> pr " uint32_t %s;\n" name - | name, FInt32 -> pr " int32_t %s;\n" name - | name, (FUInt64|FBytes) -> pr " uint64_t %s;\n" name - | name, FInt64 -> pr " int64_t %s;\n" name - | name, FString -> pr " char *%s;\n" name - | name, FBuffer -> - pr " /* The next two fields describe a byte array. */\n"; - pr " uint32_t %s_len;\n" name; - pr " char *%s;\n" name - | name, FUUID -> - pr " /* The next field is NOT nul-terminated, be careful when printing it: */\n"; - pr " char %s[32];\n" name - | name, FOptPercent -> - pr " /* The next field is [0..100] or -1 meaning 'not present': */\n"; - pr " float %s;\n" name + function + | name, FChar -> pr " char %s;\n" name + | name, FUInt32 -> pr " uint32_t %s;\n" name + | name, FInt32 -> pr " int32_t %s;\n" name + | name, (FUInt64|FBytes) -> pr " uint64_t %s;\n" name + | name, FInt64 -> pr " int64_t %s;\n" name + | name, FString -> pr " char *%s;\n" name + | name, FBuffer -> + pr " /* The next two fields describe a byte array. */\n"; + pr " uint32_t %s_len;\n" name; + pr " char *%s;\n" name + | name, FUUID -> + pr " /* The next field is NOT nul-terminated, be careful when printing it: */\n"; + pr " char %s[32];\n" name + | name, FOptPercent -> + pr " /* The next field is [0..100] or -1 meaning 'not present': */\n"; + pr " float %s;\n" name ) cols; pr " };\n"; pr " \n"; @@ -4055,7 +4055,7 @@ and generate_structs_pod () = pr " \n"; pr " void guestfs_free_%s (struct guestfs_free_%s *);\n" typ typ; pr " void guestfs_free_%s_list (struct guestfs_free_%s_list *);\n" - typ typ; + typ typ; pr "\n" ) structs @@ -4078,20 +4078,20 @@ and generate_xdr () = List.iter ( function | typ, cols -> - pr "struct guestfs_int_%s {\n" typ; - List.iter (function - | name, FChar -> pr " char %s;\n" name - | name, FString -> pr " string %s<>;\n" name - | name, FBuffer -> pr " opaque %s<>;\n" name - | name, FUUID -> pr " opaque %s[32];\n" name - | name, (FInt32|FUInt32) -> pr " int %s;\n" name - | name, (FInt64|FUInt64|FBytes) -> pr " hyper %s;\n" name - | name, FOptPercent -> pr " float %s;\n" name - ) cols; - pr "};\n"; - pr "\n"; - pr "typedef struct guestfs_int_%s guestfs_int_%s_list<>;\n" typ typ; - pr "\n"; + pr "struct guestfs_int_%s {\n" typ; + List.iter (function + | name, FChar -> pr " char %s;\n" name + | name, FString -> pr " string %s<>;\n" name + | name, FBuffer -> pr " opaque %s<>;\n" name + | name, FUUID -> pr " opaque %s[32];\n" name + | name, (FInt32|FUInt32) -> pr " int %s;\n" name + | name, (FInt64|FUInt64|FBytes) -> pr " hyper %s;\n" name + | name, FOptPercent -> pr " float %s;\n" name + ) cols; + pr "};\n"; + pr "\n"; + pr "typedef struct guestfs_int_%s guestfs_int_%s_list<>;\n" typ typ; + pr "\n"; ) structs; List.iter ( @@ -4101,58 +4101,58 @@ and generate_xdr () = (match snd style with | [] -> () | args -> - pr "struct %s_args {\n" name; - List.iter ( - function - | String n -> pr " string %s<>;\n" n - | OptString n -> pr " str *%s;\n" n - | StringList n -> pr " str %s<>;\n" n - | Bool n -> pr " bool %s;\n" n - | Int n -> pr " int %s;\n" n - | FileIn _ | FileOut _ -> () - ) args; - pr "};\n\n" + pr "struct %s_args {\n" name; + List.iter ( + function + | String n -> pr " string %s<>;\n" n + | OptString n -> pr " str *%s;\n" n + | StringList n -> pr " str %s<>;\n" n + | Bool n -> pr " bool %s;\n" n + | Int n -> pr " int %s;\n" n + | FileIn _ | FileOut _ -> () + ) args; + pr "};\n\n" ); (match fst style with | RErr -> () | RInt n -> - pr "struct %s_ret {\n" name; - pr " int %s;\n" n; - pr "};\n\n" + pr "struct %s_ret {\n" name; + pr " int %s;\n" n; + pr "};\n\n" | RInt64 n -> - pr "struct %s_ret {\n" name; - pr " hyper %s;\n" n; - pr "};\n\n" + pr "struct %s_ret {\n" name; + pr " hyper %s;\n" n; + pr "};\n\n" | RBool n -> - pr "struct %s_ret {\n" name; - pr " bool %s;\n" n; - pr "};\n\n" + pr "struct %s_ret {\n" name; + pr " bool %s;\n" n; + pr "};\n\n" | RConstString _ | RConstOptString _ -> - failwithf "RConstString|RConstOptString cannot be used by daemon functions" + failwithf "RConstString|RConstOptString cannot be used by daemon functions" | RString n -> - pr "struct %s_ret {\n" name; - pr " string %s<>;\n" n; - pr "};\n\n" + pr "struct %s_ret {\n" name; + pr " string %s<>;\n" n; + pr "};\n\n" | RStringList n -> - pr "struct %s_ret {\n" name; - pr " str %s<>;\n" n; - pr "};\n\n" + pr "struct %s_ret {\n" name; + pr " str %s<>;\n" n; + pr "};\n\n" | RStruct (n, typ) -> - pr "struct %s_ret {\n" name; - pr " guestfs_int_%s %s;\n" typ n; - pr "};\n\n" + pr "struct %s_ret {\n" name; + pr " guestfs_int_%s %s;\n" typ n; + pr "};\n\n" | RStructList (n, typ) -> - pr "struct %s_ret {\n" name; - pr " guestfs_int_%s_list %s;\n" typ n; - pr "};\n\n" + pr "struct %s_ret {\n" name; + pr " guestfs_int_%s_list %s;\n" typ n; + pr "};\n\n" | RHashtable n -> - pr "struct %s_ret {\n" name; - pr " str %s<>;\n" n; - pr "};\n\n" + pr "struct %s_ret {\n" name; + pr " str %s<>;\n" n; + pr "};\n\n" | RBufferOut n -> - pr "struct %s_ret {\n" name; - pr " opaque %s<>;\n" n; - pr "};\n\n" + pr "struct %s_ret {\n" name; + pr " opaque %s<>;\n" n; + pr "};\n\n" ); ) daemon_functions; @@ -4245,18 +4245,18 @@ and generate_structs_h () = fun (typ, cols) -> pr "struct guestfs_%s {\n" typ; List.iter ( - function - | name, FChar -> pr " char %s;\n" name - | name, FString -> pr " char *%s;\n" name - | name, FBuffer -> - pr " uint32_t %s_len;\n" name; - pr " char *%s;\n" name - | name, FUUID -> pr " char %s[32]; /* this is NOT nul-terminated, be careful when printing */\n" name - | name, FUInt32 -> pr " uint32_t %s;\n" name - | name, FInt32 -> pr " int32_t %s;\n" name - | name, (FUInt64|FBytes) -> pr " uint64_t %s;\n" name - | name, FInt64 -> pr " int64_t %s;\n" name - | name, FOptPercent -> pr " float %s; /* [0..100] or -1 */\n" name + function + | name, FChar -> pr " char %s;\n" name + | name, FString -> pr " char *%s;\n" name + | name, FBuffer -> + pr " uint32_t %s_len;\n" name; + pr " char *%s;\n" name + | name, FUUID -> pr " char %s[32]; /* this is NOT nul-terminated, be careful when printing */\n" name + | name, FUInt32 -> pr " uint32_t %s;\n" name + | name, FInt32 -> pr " int32_t %s;\n" name + | name, (FUInt64|FBytes) -> pr " uint64_t %s;\n" name + | name, FInt64 -> pr " int64_t %s;\n" name + | name, FOptPercent -> pr " float %s; /* [0..100] or -1 */\n" name ) cols; pr "};\n"; pr "\n"; @@ -4277,7 +4277,7 @@ and generate_actions_h () = fun (shortname, style, _, _, _, _, _) -> let name = "guestfs_" ^ shortname in generate_prototype ~single_line:true ~newline:true ~handle:"handle" - name style + name style ) all_functions (* Generate the client-side dispatch stubs. *) @@ -4310,12 +4310,12 @@ check_reply_header (guestfs_h *g, } if (hdr->vers != GUESTFS_PROTOCOL_VERSION) { error (g, \"wrong protocol version (%%d/%%d)\", - hdr->vers, GUESTFS_PROTOCOL_VERSION); + hdr->vers, GUESTFS_PROTOCOL_VERSION); return -1; } if (hdr->direction != GUESTFS_DIRECTION_REPLY) { error (g, \"unexpected message direction (%%d/%%d)\", - hdr->direction, GUESTFS_DIRECTION_REPLY); + hdr->direction, GUESTFS_DIRECTION_REPLY); return -1; } if (hdr->proc != proc_nr) { @@ -4370,12 +4370,12 @@ check_state (guestfs_h *g, const char *caller) (match fst style with | RErr -> () | RConstString _ | RConstOptString _ -> - failwithf "RConstString|RConstOptString cannot be used by daemon functions" + failwithf "RConstString|RConstOptString cannot be used by daemon functions" | RInt _ | RInt64 _ | RBool _ | RString _ | RStringList _ | RStruct _ | RStructList _ | RHashtable _ | RBufferOut _ -> - pr " struct %s_ret ret;\n" name + pr " struct %s_ret ret;\n" name ); pr "};\n"; pr "\n"; @@ -4402,7 +4402,7 @@ check_state (guestfs_h *g, const char *caller) pr " if (ctx->hdr.status == GUESTFS_STATUS_ERROR) {\n"; pr " if (!xdr_guestfs_message_error (xdr, &ctx->err)) {\n"; pr " error (g, \"%%s: failed to parse reply error\", \"%s\");\n" - name; + name; pr " return;\n"; pr " }\n"; pr " goto done;\n"; @@ -4411,15 +4411,15 @@ check_state (guestfs_h *g, const char *caller) (match fst style with | RErr -> () | RConstString _ | RConstOptString _ -> - failwithf "RConstString|RConstOptString cannot be used by daemon functions" + failwithf "RConstString|RConstOptString cannot be used by daemon functions" | RInt _ | RInt64 _ | RBool _ | RString _ | RStringList _ | RStruct _ | RStructList _ | RHashtable _ | RBufferOut _ -> - pr " if (!xdr_%s_ret (xdr, &ctx->ret)) {\n" name; - pr " error (g, \"%%s: failed to parse reply\", \"%s\");\n" name; - pr " return;\n"; - pr " }\n"; + pr " if (!xdr_%s_ret (xdr, &ctx->ret)) {\n" name; + pr " error (g, \"%%s: failed to parse reply\", \"%s\");\n" name; + pr " return;\n"; + pr " }\n"; ); pr " done:\n"; @@ -4428,17 +4428,17 @@ check_state (guestfs_h *g, const char *caller) (* Generate the action stub. *) generate_prototype ~extern:false ~semicolon:false ~newline:true - ~handle:"g" name style; + ~handle:"g" name style; let error_code = - match fst style with - | RErr | RInt _ | RInt64 _ | RBool _ -> "-1" - | RConstString _ | RConstOptString _ -> - failwithf "RConstString|RConstOptString cannot be used by daemon functions" - | RString _ | RStringList _ - | RStruct _ | RStructList _ - | RHashtable _ | RBufferOut _ -> - "NULL" in + match fst style with + | RErr | RInt _ | RInt64 _ | RBool _ -> "-1" + | RConstString _ | RConstOptString _ -> + failwithf "RConstString|RConstOptString cannot be used by daemon functions" + | RString _ | RStringList _ + | RStruct _ | RStructList _ + | RHashtable _ | RBufferOut _ -> + "NULL" in pr "{\n"; @@ -4460,28 +4460,28 @@ check_state (guestfs_h *g, const char *caller) (* Send the main header and arguments. *) (match snd style with | [] -> - pr " serial = guestfs__send_sync (g, GUESTFS_PROC_%s, NULL, NULL);\n" - (String.uppercase shortname) + pr " serial = guestfs__send_sync (g, GUESTFS_PROC_%s, NULL, NULL);\n" + (String.uppercase shortname) | args -> - List.iter ( - function - | String n -> - pr " args.%s = (char *) %s;\n" n n - | OptString n -> - pr " args.%s = %s ? (char **) &%s : NULL;\n" n n n - | StringList n -> - pr " args.%s.%s_val = (char **) %s;\n" n n n; - pr " for (args.%s.%s_len = 0; %s[args.%s.%s_len]; args.%s.%s_len++) ;\n" n n n n n n n; - | Bool n -> - pr " args.%s = %s;\n" n n - | Int n -> - pr " args.%s = %s;\n" n n - | FileIn _ | FileOut _ -> () - ) args; - pr " serial = guestfs__send_sync (g, GUESTFS_PROC_%s,\n" - (String.uppercase shortname); - pr " (xdrproc_t) xdr_%s_args, (char *) &args);\n" - name; + List.iter ( + function + | String n -> + pr " args.%s = (char *) %s;\n" n n + | OptString n -> + pr " args.%s = %s ? (char **) &%s : NULL;\n" n n n + | StringList n -> + pr " args.%s.%s_val = (char **) %s;\n" n n n; + pr " for (args.%s.%s_len = 0; %s[args.%s.%s_len]; args.%s.%s_len++) ;\n" n n n n n n n; + | Bool n -> + pr " args.%s = %s;\n" n n + | Int n -> + pr " args.%s = %s;\n" n n + | FileIn _ | FileOut _ -> () + ) args; + pr " serial = guestfs__send_sync (g, GUESTFS_PROC_%s,\n" + (String.uppercase shortname); + pr " (xdrproc_t) xdr_%s_args, (char *) &args);\n" + name; ); pr " if (serial == -1) {\n"; pr " guestfs_end_busy (g);\n"; @@ -4492,22 +4492,22 @@ check_state (guestfs_h *g, const char *caller) (* Send any additional files (FileIn) requested. *) let need_read_reply_label = ref false in List.iter ( - function - | FileIn n -> - pr " {\n"; - pr " int r;\n"; - pr "\n"; - pr " r = guestfs__send_file_sync (g, %s);\n" n; - pr " if (r == -1) {\n"; - pr " guestfs_end_busy (g);\n"; - pr " return %s;\n" error_code; - pr " }\n"; - pr " if (r == -2) /* daemon cancelled */\n"; - pr " goto read_reply;\n"; - need_read_reply_label := true; - pr " }\n"; - pr "\n"; - | _ -> () + function + | FileIn n -> + pr " {\n"; + pr " int r;\n"; + pr "\n"; + pr " r = guestfs__send_file_sync (g, %s);\n" n; + pr " if (r == -1) {\n"; + pr " guestfs_end_busy (g);\n"; + pr " return %s;\n" error_code; + pr " }\n"; + pr " if (r == -2) /* daemon cancelled */\n"; + pr " goto read_reply;\n"; + need_read_reply_label := true; + pr " }\n"; + pr "\n"; + | _ -> () ) (snd style); (* Wait for the reply from the remote end. *) @@ -4525,7 +4525,7 @@ check_state (guestfs_h *g, const char *caller) pr "\n"; pr " if (check_reply_header (g, &ctx.hdr, GUESTFS_PROC_%s, serial) == -1) {\n" - (String.uppercase shortname); + (String.uppercase shortname); pr " guestfs_end_busy (g);\n"; pr " return %s;\n" error_code; pr " }\n"; @@ -4541,14 +4541,14 @@ check_state (guestfs_h *g, const char *caller) (* Expecting to receive further files (FileOut)? *) List.iter ( - function - | FileOut n -> - pr " if (guestfs__receive_file_sync (g, %s) == -1) {\n" n; - pr " guestfs_end_busy (g);\n"; - pr " return %s;\n" error_code; - pr " }\n"; - pr "\n"; - | _ -> () + function + | FileOut n -> + pr " if (guestfs__receive_file_sync (g, %s) == -1) {\n" n; + pr " guestfs_end_busy (g);\n"; + pr " return %s;\n" error_code; + pr " }\n"; + pr "\n"; + | _ -> () ) (snd style); pr " guestfs_end_busy (g);\n"; @@ -4556,28 +4556,28 @@ check_state (guestfs_h *g, const char *caller) (match fst style with | RErr -> pr " return 0;\n" | RInt n | RInt64 n | RBool n -> - pr " return ctx.ret.%s;\n" n + pr " return ctx.ret.%s;\n" n | RConstString _ | RConstOptString _ -> - failwithf "RConstString|RConstOptString cannot be used by daemon functions" + failwithf "RConstString|RConstOptString cannot be used by daemon functions" | RString n -> - pr " return ctx.ret.%s; /* caller will free */\n" n + pr " return ctx.ret.%s; /* caller will free */\n" n | RStringList n | RHashtable n -> - pr " /* caller will free this, but we need to add a NULL entry */\n"; - pr " ctx.ret.%s.%s_val =\n" n n; - pr " safe_realloc (g, ctx.ret.%s.%s_val,\n" n n; - pr " sizeof (char *) * (ctx.ret.%s.%s_len + 1));\n" - n n; - pr " ctx.ret.%s.%s_val[ctx.ret.%s.%s_len] = NULL;\n" n n n n; - pr " return ctx.ret.%s.%s_val;\n" n n + pr " /* caller will free this, but we need to add a NULL entry */\n"; + pr " ctx.ret.%s.%s_val =\n" n n; + pr " safe_realloc (g, ctx.ret.%s.%s_val,\n" n n; + pr " sizeof (char *) * (ctx.ret.%s.%s_len + 1));\n" + n n; + pr " ctx.ret.%s.%s_val[ctx.ret.%s.%s_len] = NULL;\n" n n n n; + pr " return ctx.ret.%s.%s_val;\n" n n | RStruct (n, _) -> - pr " /* caller will free this */\n"; - pr " return safe_memdup (g, &ctx.ret.%s, sizeof (ctx.ret.%s));\n" n n + pr " /* caller will free this */\n"; + pr " return safe_memdup (g, &ctx.ret.%s, sizeof (ctx.ret.%s));\n" n n | RStructList (n, _) -> - pr " /* caller will free this */\n"; - pr " return safe_memdup (g, &ctx.ret.%s, sizeof (ctx.ret.%s));\n" n n + pr " /* caller will free this */\n"; + pr " return safe_memdup (g, &ctx.ret.%s, sizeof (ctx.ret.%s));\n" n n | RBufferOut n -> - pr " *size_r = ctx.ret.%s.%s_len;\n" n n; - pr " return ctx.ret.%s.%s_val; /* caller will free */\n" n n + pr " *size_r = ctx.ret.%s.%s_len;\n" n n; + pr " return ctx.ret.%s.%s_val; /* caller will free */\n" n n ); pr "}\n\n" @@ -4620,8 +4620,8 @@ and generate_daemon_actions_h () = List.iter ( fun (name, style, _, _, _, _, _) -> generate_prototype - ~single_line:true ~newline:true ~in_daemon:true ~prefix:"do_" - name style; + ~single_line:true ~newline:true ~in_daemon:true ~prefix:"do_" + name style; ) daemon_functions (* Generate the server-side stubs. *) @@ -4649,76 +4649,76 @@ and generate_daemon_actions () = pr "static void %s_stub (XDR *xdr_in)\n" name; pr "{\n"; let error_code = - match fst style with - | RErr | RInt _ -> pr " int r;\n"; "-1" - | RInt64 _ -> pr " int64_t r;\n"; "-1" - | RBool _ -> pr " int r;\n"; "-1" - | RConstString _ | RConstOptString _ -> - failwithf "RConstString|RConstOptString cannot be used by daemon functions" - | RString _ -> pr " char *r;\n"; "NULL" - | RStringList _ | RHashtable _ -> pr " char **r;\n"; "NULL" - | RStruct (_, typ) -> pr " guestfs_int_%s *r;\n" typ; "NULL" - | RStructList (_, typ) -> pr " guestfs_int_%s_list *r;\n" typ; "NULL" - | RBufferOut _ -> - pr " size_t size;\n"; - pr " char *r;\n"; - "NULL" in + match fst style with + | RErr | RInt _ -> pr " int r;\n"; "-1" + | RInt64 _ -> pr " int64_t r;\n"; "-1" + | RBool _ -> pr " int r;\n"; "-1" + | RConstString _ | RConstOptString _ -> + failwithf "RConstString|RConstOptString cannot be used by daemon functions" + | RString _ -> pr " char *r;\n"; "NULL" + | RStringList _ | RHashtable _ -> pr " char **r;\n"; "NULL" + | RStruct (_, typ) -> pr " guestfs_int_%s *r;\n" typ; "NULL" + | RStructList (_, typ) -> pr " guestfs_int_%s_list *r;\n" typ; "NULL" + | RBufferOut _ -> + pr " size_t size;\n"; + pr " char *r;\n"; + "NULL" in (match snd style with | [] -> () | args -> - pr " struct guestfs_%s_args args;\n" name; - List.iter ( - function - (* Note we allow the string to be writable, in order to - * allow device name translation. This is safe because - * we can modify the string (passed from RPC). - *) - | String n - | OptString n -> pr " char *%s;\n" n - | StringList n -> pr " char **%s;\n" n - | Bool n -> pr " int %s;\n" n - | Int n -> pr " int %s;\n" n - | FileIn _ | FileOut _ -> () - ) args + pr " struct guestfs_%s_args args;\n" name; + List.iter ( + function + (* Note we allow the string to be writable, in order to + * allow device name translation. This is safe because + * we can modify the string (passed from RPC). + *) + | String n + | OptString n -> pr " char *%s;\n" n + | StringList n -> pr " char **%s;\n" n + | Bool n -> pr " int %s;\n" n + | Int n -> pr " int %s;\n" n + | FileIn _ | FileOut _ -> () + ) args ); pr "\n"; (match snd style with | [] -> () | args -> - pr " memset (&args, 0, sizeof args);\n"; - pr "\n"; - pr " if (!xdr_guestfs_%s_args (xdr_in, &args)) {\n" name; - pr " reply_with_error (\"%%s: daemon failed to decode procedure arguments\", \"%s\");\n" name; - pr " return;\n"; - pr " }\n"; - List.iter ( - function - | String n -> pr " %s = args.%s;\n" n n - | OptString n -> pr " %s = args.%s ? *args.%s : NULL;\n" n n n - | StringList n -> - pr " %s = realloc (args.%s.%s_val,\n" n n n; - pr " sizeof (char *) * (args.%s.%s_len+1));\n" n n; - pr " if (%s == NULL) {\n" n; - pr " reply_with_perror (\"realloc\");\n"; - pr " goto done;\n"; - pr " }\n"; - pr " %s[args.%s.%s_len] = NULL;\n" n n n; - pr " args.%s.%s_val = %s;\n" n n n; - | Bool n -> pr " %s = args.%s;\n" n n - | Int n -> pr " %s = args.%s;\n" n n - | FileIn _ | FileOut _ -> () - ) args; - pr "\n" + pr " memset (&args, 0, sizeof args);\n"; + pr "\n"; + pr " if (!xdr_guestfs_%s_args (xdr_in, &args)) {\n" name; + pr " reply_with_error (\"%%s: daemon failed to decode procedure arguments\", \"%s\");\n" name; + pr " return;\n"; + pr " }\n"; + List.iter ( + function + | String n -> pr " %s = args.%s;\n" n n + | OptString n -> pr " %s = args.%s ? *args.%s : NULL;\n" n n n + | StringList n -> + pr " %s = realloc (args.%s.%s_val,\n" n n n; + pr " sizeof (char *) * (args.%s.%s_len+1));\n" n n; + pr " if (%s == NULL) {\n" n; + pr " reply_with_perror (\"realloc\");\n"; + pr " goto done;\n"; + pr " }\n"; + pr " %s[args.%s.%s_len] = NULL;\n" n n n; + pr " args.%s.%s_val = %s;\n" n n n; + | Bool n -> pr " %s = args.%s;\n" n n + | Int n -> pr " %s = args.%s;\n" n n + | FileIn _ | FileOut _ -> () + ) args; + pr "\n" ); (* Don't want to call the impl with any FileIn or FileOut * parameters, since these go "outside" the RPC protocol. *) let args' = - List.filter (function FileIn _ | FileOut _ -> false | _ -> true) - (snd style) in + List.filter (function FileIn _ | FileOut _ -> false | _ -> true) + (snd style) in pr " r = do_%s " name; generate_c_call_args (fst style, args'); pr ";\n"; @@ -4732,63 +4732,63 @@ and generate_daemon_actions () = * send its own reply. *) let no_reply = - List.exists (function FileOut _ -> true | _ -> false) (snd style) in + List.exists (function FileOut _ -> true | _ -> false) (snd style) in if no_reply then - pr " /* do_%s has already sent a reply */\n" name + pr " /* do_%s has already sent a reply */\n" name else ( - match fst style with - | RErr -> pr " reply (NULL, NULL);\n" - | RInt n | RInt64 n | RBool n -> - pr " struct guestfs_%s_ret ret;\n" name; - pr " ret.%s = r;\n" n; - pr " reply ((xdrproc_t) &xdr_guestfs_%s_ret, (char *) &ret);\n" - name - | RConstString _ | RConstOptString _ -> - failwithf "RConstString|RConstOptString cannot be used by daemon functions" - | RString n -> - pr " struct guestfs_%s_ret ret;\n" name; - pr " ret.%s = r;\n" n; - pr " reply ((xdrproc_t) &xdr_guestfs_%s_ret, (char *) &ret);\n" - name; - pr " free (r);\n" - | RStringList n | RHashtable n -> - pr " struct guestfs_%s_ret ret;\n" name; - pr " ret.%s.%s_len = count_strings (r);\n" n n; - pr " ret.%s.%s_val = r;\n" n n; - pr " reply ((xdrproc_t) &xdr_guestfs_%s_ret, (char *) &ret);\n" - name; - pr " free_strings (r);\n" - | RStruct (n, _) -> - pr " struct guestfs_%s_ret ret;\n" name; - pr " ret.%s = *r;\n" n; - pr " reply ((xdrproc_t) xdr_guestfs_%s_ret, (char *) &ret);\n" - name; - pr " xdr_free ((xdrproc_t) xdr_guestfs_%s_ret, (char *) &ret);\n" - name - | RStructList (n, _) -> - pr " struct guestfs_%s_ret ret;\n" name; - pr " ret.%s = *r;\n" n; - pr " reply ((xdrproc_t) xdr_guestfs_%s_ret, (char *) &ret);\n" - name; - pr " xdr_free ((xdrproc_t) xdr_guestfs_%s_ret, (char *) &ret);\n" - name - | RBufferOut n -> - pr " struct guestfs_%s_ret ret;\n" name; - pr " ret.%s.%s_val = r;\n" n n; - pr " ret.%s.%s_len = size;\n" n n; - pr " reply ((xdrproc_t) &xdr_guestfs_%s_ret, (char *) &ret);\n" - name; - pr " free (r);\n" + match fst style with + | RErr -> pr " reply (NULL, NULL);\n" + | RInt n | RInt64 n | RBool n -> + pr " struct guestfs_%s_ret ret;\n" name; + pr " ret.%s = r;\n" n; + pr " reply ((xdrproc_t) &xdr_guestfs_%s_ret, (char *) &ret);\n" + name + | RConstString _ | RConstOptString _ -> + failwithf "RConstString|RConstOptString cannot be used by daemon functions" + | RString n -> + pr " struct guestfs_%s_ret ret;\n" name; + pr " ret.%s = r;\n" n; + pr " reply ((xdrproc_t) &xdr_guestfs_%s_ret, (char *) &ret);\n" + name; + pr " free (r);\n" + | RStringList n | RHashtable n -> + pr " struct guestfs_%s_ret ret;\n" name; + pr " ret.%s.%s_len = count_strings (r);\n" n n; + pr " ret.%s.%s_val = r;\n" n n; + pr " reply ((xdrproc_t) &xdr_guestfs_%s_ret, (char *) &ret);\n" + name; + pr " free_strings (r);\n" + | RStruct (n, _) -> + pr " struct guestfs_%s_ret ret;\n" name; + pr " ret.%s = *r;\n" n; + pr " reply ((xdrproc_t) xdr_guestfs_%s_ret, (char *) &ret);\n" + name; + pr " xdr_free ((xdrproc_t) xdr_guestfs_%s_ret, (char *) &ret);\n" + name + | RStructList (n, _) -> + pr " struct guestfs_%s_ret ret;\n" name; + pr " ret.%s = *r;\n" n; + pr " reply ((xdrproc_t) xdr_guestfs_%s_ret, (char *) &ret);\n" + name; + pr " xdr_free ((xdrproc_t) xdr_guestfs_%s_ret, (char *) &ret);\n" + name + | RBufferOut n -> + pr " struct guestfs_%s_ret ret;\n" name; + pr " ret.%s.%s_val = r;\n" n n; + pr " ret.%s.%s_len = size;\n" n n; + pr " reply ((xdrproc_t) &xdr_guestfs_%s_ret, (char *) &ret);\n" + name; + pr " free (r);\n" ); (* Free the args. *) (match snd style with | [] -> - pr "done: ;\n"; + pr "done: ;\n"; | _ -> - pr "done:\n"; - pr " xdr_free ((xdrproc_t) xdr_guestfs_%s_args, (char *) &args);\n" - name + pr "done:\n"; + pr " xdr_free ((xdrproc_t) xdr_guestfs_%s_args, (char *) &args);\n" + name ); pr "}\n\n"; @@ -4819,164 +4819,164 @@ and generate_daemon_actions () = List.iter ( function | typ, cols -> - pr "static const char *lvm_%s_cols = \"%s\";\n" - typ (String.concat "," (List.map fst cols)); - pr "\n"; - - pr "static int lvm_tokenize_%s (char *str, guestfs_int_lvm_%s *r)\n" typ typ; - pr "{\n"; - pr " char *tok, *p, *next;\n"; - pr " int i, j;\n"; - pr "\n"; - (* - pr " fprintf (stderr, \"%%s: <<%%s>>\\n\", __func__, str);\n"; - pr "\n"; - *) - pr " if (!str) {\n"; - pr " fprintf (stderr, \"%%s: failed: passed a NULL string\\n\", __func__);\n"; - pr " return -1;\n"; - pr " }\n"; - pr " if (!*str || isspace (*str)) {\n"; - pr " fprintf (stderr, \"%%s: failed: passed a empty string or one beginning with whitespace\\n\", __func__);\n"; - pr " return -1;\n"; - pr " }\n"; - pr " tok = str;\n"; - List.iter ( - fun (name, coltype) -> - pr " if (!tok) {\n"; - pr " fprintf (stderr, \"%%s: failed: string finished early, around token %%s\\n\", __func__, \"%s\");\n" name; - pr " return -1;\n"; - pr " }\n"; - pr " p = strchrnul (tok, ',');\n"; - pr " if (*p) next = p+1; else next = NULL;\n"; - pr " *p = '\\0';\n"; - (match coltype with - | FString -> - pr " r->%s = strdup (tok);\n" name; - pr " if (r->%s == NULL) {\n" name; - pr " perror (\"strdup\");\n"; - pr " return -1;\n"; - pr " }\n" - | FUUID -> - pr " for (i = j = 0; i < 32; ++j) {\n"; - pr " if (tok[j] == '\\0') {\n"; - pr " fprintf (stderr, \"%%s: failed to parse UUID from '%%s'\\n\", __func__, tok);\n"; - pr " return -1;\n"; - pr " } else if (tok[j] != '-')\n"; - pr " r->%s[i++] = tok[j];\n" name; - pr " }\n"; - | FBytes -> - pr " if (sscanf (tok, \"%%\"SCNu64, &r->%s) != 1) {\n" name; - pr " fprintf (stderr, \"%%s: failed to parse size '%%s' from token %%s\\n\", __func__, tok, \"%s\");\n" name; - pr " return -1;\n"; - pr " }\n"; - | FInt64 -> - pr " if (sscanf (tok, \"%%\"SCNi64, &r->%s) != 1) {\n" name; - pr " fprintf (stderr, \"%%s: failed to parse int '%%s' from token %%s\\n\", __func__, tok, \"%s\");\n" name; - pr " return -1;\n"; - pr " }\n"; - | FOptPercent -> - pr " if (tok[0] == '\\0')\n"; - pr " r->%s = -1;\n" name; - pr " else if (sscanf (tok, \"%%f\", &r->%s) != 1) {\n" name; - pr " fprintf (stderr, \"%%s: failed to parse float '%%s' from token %%s\\n\", __func__, tok, \"%s\");\n" name; - pr " return -1;\n"; - pr " }\n"; - | FBuffer | FInt32 | FUInt32 | FUInt64 | FChar -> - assert false (* can never be an LVM column *) - ); - pr " tok = next;\n"; - ) cols; - - pr " if (tok != NULL) {\n"; - pr " fprintf (stderr, \"%%s: failed: extra tokens at end of string\\n\", __func__);\n"; - pr " return -1;\n"; - pr " }\n"; - pr " return 0;\n"; - pr "}\n"; - pr "\n"; - - pr "guestfs_int_lvm_%s_list *\n" typ; - pr "parse_command_line_%ss (void)\n" typ; - pr "{\n"; - pr " char *out, *err;\n"; - pr " char *p, *pend;\n"; - pr " int r, i;\n"; - pr " guestfs_int_lvm_%s_list *ret;\n" typ; - pr " void *newp;\n"; - pr "\n"; - pr " ret = malloc (sizeof *ret);\n"; - pr " if (!ret) {\n"; - pr " reply_with_perror (\"malloc\");\n"; - pr " return NULL;\n"; - pr " }\n"; - pr "\n"; - pr " ret->guestfs_int_lvm_%s_list_len = 0;\n" typ; - pr " ret->guestfs_int_lvm_%s_list_val = NULL;\n" typ; - pr "\n"; - pr " r = command (&out, &err,\n"; - pr " \"/sbin/lvm\", \"%ss\",\n" typ; - pr " \"-o\", lvm_%s_cols, \"--unbuffered\", \"--noheadings\",\n" typ; - pr " \"--nosuffix\", \"--separator\", \",\", \"--units\", \"b\", NULL);\n"; - pr " if (r == -1) {\n"; - pr " reply_with_error (\"%%s\", err);\n"; - pr " free (out);\n"; - pr " free (err);\n"; - pr " free (ret);\n"; - pr " return NULL;\n"; - pr " }\n"; - pr "\n"; - pr " free (err);\n"; - pr "\n"; - pr " /* Tokenize each line of the output. */\n"; - pr " p = out;\n"; - pr " i = 0;\n"; - pr " while (p) {\n"; - pr " pend = strchr (p, '\\n'); /* Get the next line of output. */\n"; - pr " if (pend) {\n"; - pr " *pend = '\\0';\n"; - pr " pend++;\n"; - pr " }\n"; - pr "\n"; - pr " while (*p && isspace (*p)) /* Skip any leading whitespace. */\n"; - pr " p++;\n"; - pr "\n"; - pr " if (!*p) { /* Empty line? Skip it. */\n"; - pr " p = pend;\n"; - pr " continue;\n"; - pr " }\n"; - pr "\n"; - pr " /* Allocate some space to store this next entry. */\n"; - pr " newp = realloc (ret->guestfs_int_lvm_%s_list_val,\n" typ; - pr " sizeof (guestfs_int_lvm_%s) * (i+1));\n" typ; - pr " if (newp == NULL) {\n"; - pr " reply_with_perror (\"realloc\");\n"; - pr " free (ret->guestfs_int_lvm_%s_list_val);\n" typ; - pr " free (ret);\n"; - pr " free (out);\n"; - pr " return NULL;\n"; - pr " }\n"; - pr " ret->guestfs_int_lvm_%s_list_val = newp;\n" typ; - pr "\n"; - pr " /* Tokenize the next entry. */\n"; - pr " r = lvm_tokenize_%s (p, &ret->guestfs_int_lvm_%s_list_val[i]);\n" typ typ; - pr " if (r == -1) {\n"; - pr " reply_with_error (\"failed to parse output of '%ss' command\");\n" typ; + pr "static const char *lvm_%s_cols = \"%s\";\n" + typ (String.concat "," (List.map fst cols)); + pr "\n"; + + pr "static int lvm_tokenize_%s (char *str, guestfs_int_lvm_%s *r)\n" typ typ; + pr "{\n"; + pr " char *tok, *p, *next;\n"; + pr " int i, j;\n"; + pr "\n"; + (* + pr " fprintf (stderr, \"%%s: <<%%s>>\\n\", __func__, str);\n"; + pr "\n"; + *) + pr " if (!str) {\n"; + pr " fprintf (stderr, \"%%s: failed: passed a NULL string\\n\", __func__);\n"; + pr " return -1;\n"; + pr " }\n"; + pr " if (!*str || isspace (*str)) {\n"; + pr " fprintf (stderr, \"%%s: failed: passed a empty string or one beginning with whitespace\\n\", __func__);\n"; + pr " return -1;\n"; + pr " }\n"; + pr " tok = str;\n"; + List.iter ( + fun (name, coltype) -> + pr " if (!tok) {\n"; + pr " fprintf (stderr, \"%%s: failed: string finished early, around token %%s\\n\", __func__, \"%s\");\n" name; + pr " return -1;\n"; + pr " }\n"; + pr " p = strchrnul (tok, ',');\n"; + pr " if (*p) next = p+1; else next = NULL;\n"; + pr " *p = '\\0';\n"; + (match coltype with + | FString -> + pr " r->%s = strdup (tok);\n" name; + pr " if (r->%s == NULL) {\n" name; + pr " perror (\"strdup\");\n"; + pr " return -1;\n"; + pr " }\n" + | FUUID -> + pr " for (i = j = 0; i < 32; ++j) {\n"; + pr " if (tok[j] == '\\0') {\n"; + pr " fprintf (stderr, \"%%s: failed to parse UUID from '%%s'\\n\", __func__, tok);\n"; + pr " return -1;\n"; + pr " } else if (tok[j] != '-')\n"; + pr " r->%s[i++] = tok[j];\n" name; + pr " }\n"; + | FBytes -> + pr " if (sscanf (tok, \"%%\"SCNu64, &r->%s) != 1) {\n" name; + pr " fprintf (stderr, \"%%s: failed to parse size '%%s' from token %%s\\n\", __func__, tok, \"%s\");\n" name; + pr " return -1;\n"; + pr " }\n"; + | FInt64 -> + pr " if (sscanf (tok, \"%%\"SCNi64, &r->%s) != 1) {\n" name; + pr " fprintf (stderr, \"%%s: failed to parse int '%%s' from token %%s\\n\", __func__, tok, \"%s\");\n" name; + pr " return -1;\n"; + pr " }\n"; + | FOptPercent -> + pr " if (tok[0] == '\\0')\n"; + pr " r->%s = -1;\n" name; + pr " else if (sscanf (tok, \"%%f\", &r->%s) != 1) {\n" name; + pr " fprintf (stderr, \"%%s: failed to parse float '%%s' from token %%s\\n\", __func__, tok, \"%s\");\n" name; + pr " return -1;\n"; + pr " }\n"; + | FBuffer | FInt32 | FUInt32 | FUInt64 | FChar -> + assert false (* can never be an LVM column *) + ); + pr " tok = next;\n"; + ) cols; + + pr " if (tok != NULL) {\n"; + pr " fprintf (stderr, \"%%s: failed: extra tokens at end of string\\n\", __func__);\n"; + pr " return -1;\n"; + pr " }\n"; + pr " return 0;\n"; + pr "}\n"; + pr "\n"; + + pr "guestfs_int_lvm_%s_list *\n" typ; + pr "parse_command_line_%ss (void)\n" typ; + pr "{\n"; + pr " char *out, *err;\n"; + pr " char *p, *pend;\n"; + pr " int r, i;\n"; + pr " guestfs_int_lvm_%s_list *ret;\n" typ; + pr " void *newp;\n"; + pr "\n"; + pr " ret = malloc (sizeof *ret);\n"; + pr " if (!ret) {\n"; + pr " reply_with_perror (\"malloc\");\n"; + pr " return NULL;\n"; + pr " }\n"; + pr "\n"; + pr " ret->guestfs_int_lvm_%s_list_len = 0;\n" typ; + pr " ret->guestfs_int_lvm_%s_list_val = NULL;\n" typ; + pr "\n"; + pr " r = command (&out, &err,\n"; + pr " \"/sbin/lvm\", \"%ss\",\n" typ; + pr " \"-o\", lvm_%s_cols, \"--unbuffered\", \"--noheadings\",\n" typ; + pr " \"--nosuffix\", \"--separator\", \",\", \"--units\", \"b\", NULL);\n"; + pr " if (r == -1) {\n"; + pr " reply_with_error (\"%%s\", err);\n"; + pr " free (out);\n"; + pr " free (err);\n"; + pr " free (ret);\n"; + pr " return NULL;\n"; + pr " }\n"; + pr "\n"; + pr " free (err);\n"; + pr "\n"; + pr " /* Tokenize each line of the output. */\n"; + pr " p = out;\n"; + pr " i = 0;\n"; + pr " while (p) {\n"; + pr " pend = strchr (p, '\\n'); /* Get the next line of output. */\n"; + pr " if (pend) {\n"; + pr " *pend = '\\0';\n"; + pr " pend++;\n"; + pr " }\n"; + pr "\n"; + pr " while (*p && isspace (*p)) /* Skip any leading whitespace. */\n"; + pr " p++;\n"; + pr "\n"; + pr " if (!*p) { /* Empty line? Skip it. */\n"; + pr " p = pend;\n"; + pr " continue;\n"; + pr " }\n"; + pr "\n"; + pr " /* Allocate some space to store this next entry. */\n"; + pr " newp = realloc (ret->guestfs_int_lvm_%s_list_val,\n" typ; + pr " sizeof (guestfs_int_lvm_%s) * (i+1));\n" typ; + pr " if (newp == NULL) {\n"; + pr " reply_with_perror (\"realloc\");\n"; pr " free (ret->guestfs_int_lvm_%s_list_val);\n" typ; pr " free (ret);\n"; - pr " free (out);\n"; - pr " return NULL;\n"; - pr " }\n"; - pr "\n"; - pr " ++i;\n"; - pr " p = pend;\n"; - pr " }\n"; - pr "\n"; - pr " ret->guestfs_int_lvm_%s_list_len = i;\n" typ; - pr "\n"; - pr " free (out);\n"; - pr " return ret;\n"; - pr "}\n" + pr " free (out);\n"; + pr " return NULL;\n"; + pr " }\n"; + pr " ret->guestfs_int_lvm_%s_list_val = newp;\n" typ; + pr "\n"; + pr " /* Tokenize the next entry. */\n"; + pr " r = lvm_tokenize_%s (p, &ret->guestfs_int_lvm_%s_list_val[i]);\n" typ typ; + pr " if (r == -1) {\n"; + pr " reply_with_error (\"failed to parse output of '%ss' command\");\n" typ; + pr " free (ret->guestfs_int_lvm_%s_list_val);\n" typ; + pr " free (ret);\n"; + pr " free (out);\n"; + pr " return NULL;\n"; + pr " }\n"; + pr "\n"; + pr " ++i;\n"; + pr " p = pend;\n"; + pr " }\n"; + pr "\n"; + pr " ret->guestfs_int_lvm_%s_list_len = i;\n" typ; + pr "\n"; + pr " free (out);\n"; + pr " return ret;\n"; + pr "}\n" ) ["pv", lvm_pv_cols; "vg", lvm_vg_cols; "lv", lvm_lv_cols] @@ -5047,9 +5047,9 @@ static void print_table (char * const * const argv) List.iter ( fun (_, _, _, _, tests, _, _) -> let tests = filter_map ( - function - | (_, (Always|If _|Unless _), test) -> Some test - | (_, Disabled, _) -> None + function + | (_, (Always|If _|Unless _), test) -> Some test + | (_, Disabled, _) -> None ) tests in let seq = List.concat (List.map seq_of_test tests) in let cmds_tested = List.map List.hd seq in @@ -5059,7 +5059,7 @@ static void print_table (char * const * const argv) List.iter ( fun (name, _, _, _, _, _, _) -> if not (Hashtbl.mem hash name) then - pr " fprintf (stderr, \"warning: \\\"guestfs_%s\\\" has no tests\\n\");\n" name + pr " fprintf (stderr, \"warning: \\\"guestfs_%s\\\" has no tests\\n\");\n" name ) all_functions; pr "}\n"; @@ -5073,7 +5073,7 @@ static void print_table (char * const * const argv) let test_names = List.map ( fun (name, _, _, _, tests, _, _) -> - mapi (generate_one_test name) tests + mapi (generate_one_test name) tests ) (List.rev all_functions) in let test_names = List.concat test_names in let nr_tests = List.length test_names in @@ -5305,54 +5305,54 @@ static int %s (void) and generate_one_test_body name i test_name init test = (match init with | InitNone (* XXX at some point, InitNone and InitEmpty became - * folded together as the same thing. Really we should - * make InitNone do nothing at all, but the tests may - * need to be checked to make sure this is OK. - *) + * folded together as the same thing. Really we should + * make InitNone do nothing at all, but the tests may + * need to be checked to make sure this is OK. + *) | InitEmpty -> pr " /* InitNone|InitEmpty for %s */\n" test_name; List.iter (generate_test_command_call test_name) - [["blockdev_setrw"; "/dev/sda"]; - ["umount_all"]; - ["lvm_remove_all"]] + [["blockdev_setrw"; "/dev/sda"]; + ["umount_all"]; + ["lvm_remove_all"]] | InitBasicFS -> pr " /* InitBasicFS for %s: create ext2 on /dev/sda1 */\n" test_name; List.iter (generate_test_command_call test_name) - [["blockdev_setrw"; "/dev/sda"]; - ["umount_all"]; - ["lvm_remove_all"]; - ["sfdiskM"; "/dev/sda"; ","]; - ["mkfs"; "ext2"; "/dev/sda1"]; - ["mount"; "/dev/sda1"; "/"]] + [["blockdev_setrw"; "/dev/sda"]; + ["umount_all"]; + ["lvm_remove_all"]; + ["sfdiskM"; "/dev/sda"; ","]; + ["mkfs"; "ext2"; "/dev/sda1"]; + ["mount"; "/dev/sda1"; "/"]] | InitBasicFSonLVM -> pr " /* InitBasicFSonLVM for %s: create ext2 on /dev/VG/LV */\n" - test_name; + test_name; List.iter (generate_test_command_call test_name) - [["blockdev_setrw"; "/dev/sda"]; - ["umount_all"]; - ["lvm_remove_all"]; - ["sfdiskM"; "/dev/sda"; ","]; - ["pvcreate"; "/dev/sda1"]; - ["vgcreate"; "VG"; "/dev/sda1"]; - ["lvcreate"; "LV"; "VG"; "8"]; - ["mkfs"; "ext2"; "/dev/VG/LV"]; - ["mount"; "/dev/VG/LV"; "/"]] + [["blockdev_setrw"; "/dev/sda"]; + ["umount_all"]; + ["lvm_remove_all"]; + ["sfdiskM"; "/dev/sda"; ","]; + ["pvcreate"; "/dev/sda1"]; + ["vgcreate"; "VG"; "/dev/sda1"]; + ["lvcreate"; "LV"; "VG"; "8"]; + ["mkfs"; "ext2"; "/dev/VG/LV"]; + ["mount"; "/dev/VG/LV"; "/"]] | InitSquashFS -> pr " /* InitSquashFS for %s */\n" test_name; List.iter (generate_test_command_call test_name) - [["blockdev_setrw"; "/dev/sda"]; - ["umount_all"]; - ["lvm_remove_all"]; - ["mount_vfs"; "ro"; "squashfs"; "/dev/sdd"; "/"]] + [["blockdev_setrw"; "/dev/sda"]; + ["umount_all"]; + ["lvm_remove_all"]; + ["mount_vfs"; "ro"; "squashfs"; "/dev/sdd"; "/"]] ); let get_seq_last = function | [] -> - failwithf "%s: you cannot use [] (empty list) when expecting a command" - test_name + failwithf "%s: you cannot use [] (empty list) when expecting a command" + test_name | seq -> - let seq = List.rev seq in - List.rev (List.tl seq), List.hd seq + let seq = List.rev seq in + List.rev (List.tl seq), List.hd seq in match test with @@ -5364,10 +5364,10 @@ and generate_one_test_body name i test_name init test = pr " const char *expected = \"%s\";\n" (c_quote expected); let seq, last = get_seq_last seq in let test () = - pr " if (strcmp (r, expected) != 0) {\n"; - pr " fprintf (stderr, \"%s: expected \\\"%%s\\\" but got \\\"%%s\\\"\\n\", expected, r);\n" test_name; - pr " return -1;\n"; - pr " }\n" + pr " if (strcmp (r, expected) != 0) {\n"; + pr " fprintf (stderr, \"%s: expected \\\"%%s\\\" but got \\\"%%s\\\"\\n\", expected, r);\n" test_name; + pr " return -1;\n"; + pr " }\n" in List.iter (generate_test_command_call test_name) seq; generate_test_command_call ~test test_name last @@ -5375,27 +5375,27 @@ and generate_one_test_body name i test_name init test = pr " /* TestOutputList for %s (%d) */\n" name i; let seq, last = get_seq_last seq in let test () = - iteri ( - fun i str -> - pr " if (!r[%d]) {\n" i; - pr " fprintf (stderr, \"%s: short list returned from command\\n\");\n" test_name; - pr " print_strings (r);\n"; - pr " return -1;\n"; - pr " }\n"; + iteri ( + fun i str -> + pr " if (!r[%d]) {\n" i; + pr " fprintf (stderr, \"%s: short list returned from command\\n\");\n" test_name; + pr " print_strings (r);\n"; + pr " return -1;\n"; + pr " }\n"; pr " {\n"; pr " const char *expected = \"%s\";\n" (c_quote str); - pr " if (strcmp (r[%d], expected) != 0) {\n" i; - pr " fprintf (stderr, \"%s: expected \\\"%%s\\\" but got \\\"%%s\\\"\\n\", expected, r[%d]);\n" test_name i; - pr " return -1;\n"; - pr " }\n"; - pr " }\n" - ) expected; - pr " if (r[%d] != NULL) {\n" (List.length expected); - pr " fprintf (stderr, \"%s: extra elements returned from command\\n\");\n" - test_name; - pr " print_strings (r);\n"; - pr " return -1;\n"; - pr " }\n" + pr " if (strcmp (r[%d], expected) != 0) {\n" i; + pr " fprintf (stderr, \"%s: expected \\\"%%s\\\" but got \\\"%%s\\\"\\n\", expected, r[%d]);\n" test_name i; + pr " return -1;\n"; + pr " }\n"; + pr " }\n" + ) expected; + pr " if (r[%d] != NULL) {\n" (List.length expected); + pr " fprintf (stderr, \"%s: extra elements returned from command\\n\");\n" + test_name; + pr " print_strings (r);\n"; + pr " return -1;\n"; + pr " }\n" in List.iter (generate_test_command_call test_name) seq; generate_test_command_call ~test test_name last @@ -5403,28 +5403,28 @@ and generate_one_test_body name i test_name init test = pr " /* TestOutputListOfDevices for %s (%d) */\n" name i; let seq, last = get_seq_last seq in let test () = - iteri ( - fun i str -> - pr " if (!r[%d]) {\n" i; - pr " fprintf (stderr, \"%s: short list returned from command\\n\");\n" test_name; - pr " print_strings (r);\n"; - pr " return -1;\n"; - pr " }\n"; + iteri ( + fun i str -> + pr " if (!r[%d]) {\n" i; + pr " fprintf (stderr, \"%s: short list returned from command\\n\");\n" test_name; + pr " print_strings (r);\n"; + pr " return -1;\n"; + pr " }\n"; pr " {\n"; pr " const char *expected = \"%s\";\n" (c_quote str); - pr " r[%d][5] = 's';\n" i; - pr " if (strcmp (r[%d], expected) != 0) {\n" i; - pr " fprintf (stderr, \"%s: expected \\\"%%s\\\" but got \\\"%%s\\\"\\n\", expected, r[%d]);\n" test_name i; - pr " return -1;\n"; - pr " }\n"; - pr " }\n" - ) expected; - pr " if (r[%d] != NULL) {\n" (List.length expected); - pr " fprintf (stderr, \"%s: extra elements returned from command\\n\");\n" - test_name; - pr " print_strings (r);\n"; - pr " return -1;\n"; - pr " }\n" + pr " r[%d][5] = 's';\n" i; + pr " if (strcmp (r[%d], expected) != 0) {\n" i; + pr " fprintf (stderr, \"%s: expected \\\"%%s\\\" but got \\\"%%s\\\"\\n\", expected, r[%d]);\n" test_name i; + pr " return -1;\n"; + pr " }\n"; + pr " }\n" + ) expected; + pr " if (r[%d] != NULL) {\n" (List.length expected); + pr " fprintf (stderr, \"%s: extra elements returned from command\\n\");\n" + test_name; + pr " print_strings (r);\n"; + pr " return -1;\n"; + pr " }\n" in List.iter (generate_test_command_call test_name) seq; generate_test_command_call ~test test_name last @@ -5432,12 +5432,12 @@ and generate_one_test_body name i test_name init test = pr " /* TestOutputInt for %s (%d) */\n" name i; let seq, last = get_seq_last seq in let test () = - pr " if (r != %d) {\n" expected; - pr " fprintf (stderr, \"%s: expected %d but got %%d\\n\"," - test_name expected; - pr " (int) r);\n"; - pr " return -1;\n"; - pr " }\n" + pr " if (r != %d) {\n" expected; + pr " fprintf (stderr, \"%s: expected %d but got %%d\\n\"," + test_name expected; + pr " (int) r);\n"; + pr " return -1;\n"; + pr " }\n" in List.iter (generate_test_command_call test_name) seq; generate_test_command_call ~test test_name last @@ -5445,12 +5445,12 @@ and generate_one_test_body name i test_name init test = pr " /* TestOutputIntOp for %s (%d) */\n" name i; let seq, last = get_seq_last seq in let test () = - pr " if (! (r %s %d)) {\n" op expected; - pr " fprintf (stderr, \"%s: expected %s %d but got %%d\\n\"," - test_name op expected; - pr " (int) r);\n"; - pr " return -1;\n"; - pr " }\n" + pr " if (! (r %s %d)) {\n" op expected; + pr " fprintf (stderr, \"%s: expected %s %d but got %%d\\n\"," + test_name op expected; + pr " (int) r);\n"; + pr " return -1;\n"; + pr " }\n" in List.iter (generate_test_command_call test_name) seq; generate_test_command_call ~test test_name last @@ -5458,11 +5458,11 @@ and generate_one_test_body name i test_name init test = pr " /* TestOutputTrue for %s (%d) */\n" name i; let seq, last = get_seq_last seq in let test () = - pr " if (!r) {\n"; - pr " fprintf (stderr, \"%s: expected true, got false\\n\");\n" - test_name; - pr " return -1;\n"; - pr " }\n" + pr " if (!r) {\n"; + pr " fprintf (stderr, \"%s: expected true, got false\\n\");\n" + test_name; + pr " return -1;\n"; + pr " }\n" in List.iter (generate_test_command_call test_name) seq; generate_test_command_call ~test test_name last @@ -5470,11 +5470,11 @@ and generate_one_test_body name i test_name init test = pr " /* TestOutputFalse for %s (%d) */\n" name i; let seq, last = get_seq_last seq in let test () = - pr " if (r) {\n"; - pr " fprintf (stderr, \"%s: expected false, got true\\n\");\n" - test_name; - pr " return -1;\n"; - pr " }\n" + pr " if (r) {\n"; + pr " fprintf (stderr, \"%s: expected false, got true\\n\");\n" + test_name; + pr " return -1;\n"; + pr " }\n" in List.iter (generate_test_command_call test_name) seq; generate_test_command_call ~test test_name last @@ -5482,20 +5482,20 @@ and generate_one_test_body name i test_name init test = pr " /* TestOutputLength for %s (%d) */\n" name i; let seq, last = get_seq_last seq in let test () = - pr " int j;\n"; - pr " for (j = 0; j < %d; ++j)\n" expected; - pr " if (r[j] == NULL) {\n"; - pr " fprintf (stderr, \"%s: short list returned\\n\");\n" - test_name; - pr " print_strings (r);\n"; - pr " return -1;\n"; - pr " }\n"; - pr " if (r[j] != NULL) {\n"; - pr " fprintf (stderr, \"%s: long list returned\\n\");\n" - test_name; - pr " print_strings (r);\n"; - pr " return -1;\n"; - pr " }\n" + pr " int j;\n"; + pr " for (j = 0; j < %d; ++j)\n" expected; + pr " if (r[j] == NULL) {\n"; + pr " fprintf (stderr, \"%s: short list returned\\n\");\n" + test_name; + pr " print_strings (r);\n"; + pr " return -1;\n"; + pr " }\n"; + pr " if (r[j] != NULL) {\n"; + pr " fprintf (stderr, \"%s: long list returned\\n\");\n" + test_name; + pr " print_strings (r);\n"; + pr " return -1;\n"; + pr " }\n" in List.iter (generate_test_command_call test_name) seq; generate_test_command_call ~test test_name last @@ -5505,14 +5505,14 @@ and generate_one_test_body name i test_name init test = let seq, last = get_seq_last seq in let len = String.length expected in let test () = - pr " if (size != %d) {\n" len; - pr " fprintf (stderr, \"%s: returned size of buffer wrong, expected %d but got %%zu\\n\", size);\n" test_name len; - pr " return -1;\n"; - pr " }\n"; - pr " if (strncmp (r, expected, size) != 0) {\n"; - pr " fprintf (stderr, \"%s: expected \\\"%%s\\\" but got \\\"%%s\\\"\\n\", expected, r);\n" test_name; - pr " return -1;\n"; - pr " }\n" + pr " if (size != %d) {\n" len; + pr " fprintf (stderr, \"%s: returned size of buffer wrong, expected %d but got %%zu\\n\", size);\n" test_name len; + pr " return -1;\n"; + pr " }\n"; + pr " if (strncmp (r, expected, size) != 0) {\n"; + pr " fprintf (stderr, \"%s: expected \\\"%%s\\\" but got \\\"%%s\\\"\\n\", expected, r);\n" test_name; + pr " return -1;\n"; + pr " }\n" in List.iter (generate_test_command_call test_name) seq; generate_test_command_call ~test test_name last @@ -5520,44 +5520,44 @@ and generate_one_test_body name i test_name init test = pr " /* TestOutputStruct for %s (%d) */\n" name i; let seq, last = get_seq_last seq in let test () = - List.iter ( - function - | CompareWithInt (field, expected) -> - pr " if (r->%s != %d) {\n" field expected; - pr " fprintf (stderr, \"%s: %s was %%d, expected %d\\n\",\n" - test_name field expected; - pr " (int) r->%s);\n" field; - pr " return -1;\n"; - pr " }\n" - | CompareWithIntOp (field, op, expected) -> - pr " if (!(r->%s %s %d)) {\n" field op expected; - pr " fprintf (stderr, \"%s: %s was %%d, expected %s %d\\n\",\n" - test_name field op expected; - pr " (int) r->%s);\n" field; - pr " return -1;\n"; - pr " }\n" - | CompareWithString (field, expected) -> - pr " if (strcmp (r->%s, \"%s\") != 0) {\n" field expected; - pr " fprintf (stderr, \"%s: %s was \"%%s\", expected \"%s\"\\n\",\n" - test_name field expected; - pr " r->%s);\n" field; - pr " return -1;\n"; - pr " }\n" - | CompareFieldsIntEq (field1, field2) -> - pr " if (r->%s != r->%s) {\n" field1 field2; - pr " fprintf (stderr, \"%s: %s (%%d) <> %s (%%d)\\n\",\n" - test_name field1 field2; - pr " (int) r->%s, (int) r->%s);\n" field1 field2; - pr " return -1;\n"; - pr " }\n" - | CompareFieldsStrEq (field1, field2) -> - pr " if (strcmp (r->%s, r->%s) != 0) {\n" field1 field2; - pr " fprintf (stderr, \"%s: %s (\"%%s\") <> %s (\"%%s\")\\n\",\n" - test_name field1 field2; - pr " r->%s, r->%s);\n" field1 field2; - pr " return -1;\n"; - pr " }\n" - ) checks + List.iter ( + function + | CompareWithInt (field, expected) -> + pr " if (r->%s != %d) {\n" field expected; + pr " fprintf (stderr, \"%s: %s was %%d, expected %d\\n\",\n" + test_name field expected; + pr " (int) r->%s);\n" field; + pr " return -1;\n"; + pr " }\n" + | CompareWithIntOp (field, op, expected) -> + pr " if (!(r->%s %s %d)) {\n" field op expected; + pr " fprintf (stderr, \"%s: %s was %%d, expected %s %d\\n\",\n" + test_name field op expected; + pr " (int) r->%s);\n" field; + pr " return -1;\n"; + pr " }\n" + | CompareWithString (field, expected) -> + pr " if (strcmp (r->%s, \"%s\") != 0) {\n" field expected; + pr " fprintf (stderr, \"%s: %s was \"%%s\", expected \"%s\"\\n\",\n" + test_name field expected; + pr " r->%s);\n" field; + pr " return -1;\n"; + pr " }\n" + | CompareFieldsIntEq (field1, field2) -> + pr " if (r->%s != r->%s) {\n" field1 field2; + pr " fprintf (stderr, \"%s: %s (%%d) <> %s (%%d)\\n\",\n" + test_name field1 field2; + pr " (int) r->%s, (int) r->%s);\n" field1 field2; + pr " return -1;\n"; + pr " }\n" + | CompareFieldsStrEq (field1, field2) -> + pr " if (strcmp (r->%s, r->%s) != 0) {\n" field1 field2; + pr " fprintf (stderr, \"%s: %s (\"%%s\") <> %s (\"%%s\")\\n\",\n" + test_name field1 field2; + pr " r->%s, r->%s);\n" field1 field2; + pr " return -1;\n"; + pr " }\n" + ) checks in List.iter (generate_test_command_call test_name) seq; generate_test_command_call ~test test_name last @@ -5576,84 +5576,84 @@ and generate_test_command_call ?(expect_error = false) ?test test_name cmd = | name :: args -> (* Look up the command to find out what args/ret it has. *) let style = - try - let _, style, _, _, _, _, _ = - List.find (fun (n, _, _, _, _, _, _) -> n = name) all_functions in - style - with Not_found -> - failwithf "%s: in test, command %s was not found" test_name name in + try + let _, style, _, _, _, _, _ = + List.find (fun (n, _, _, _, _, _, _) -> n = name) all_functions in + style + with Not_found -> + failwithf "%s: in test, command %s was not found" test_name name in if List.length (snd style) <> List.length args then - failwithf "%s: in test, wrong number of args given to %s" - test_name name; + failwithf "%s: in test, wrong number of args given to %s" + test_name name; pr " {\n"; List.iter ( - function - | OptString n, "NULL" -> () - | String n, arg - | OptString n, arg -> - pr " const char *%s = \"%s\";\n" n (c_quote arg); - | Int _, _ - | Bool _, _ - | FileIn _, _ | FileOut _, _ -> () - | StringList n, arg -> - let strs = string_split " " arg in - iteri ( - fun i str -> + function + | OptString n, "NULL" -> () + | String n, arg + | OptString n, arg -> + pr " const char *%s = \"%s\";\n" n (c_quote arg); + | Int _, _ + | Bool _, _ + | FileIn _, _ | FileOut _, _ -> () + | StringList n, arg -> + let strs = string_split " " arg in + iteri ( + fun i str -> pr " const char *%s_%d = \"%s\";\n" n i (c_quote str); - ) strs; - pr " const char *%s[] = {\n" n; - iteri ( - fun i _ -> pr " %s_%d,\n" n i - ) strs; - pr " NULL\n"; - pr " };\n"; + ) strs; + pr " const char *%s[] = {\n" n; + iteri ( + fun i _ -> pr " %s_%d,\n" n i + ) strs; + pr " NULL\n"; + pr " };\n"; ) (List.combine (snd style) args); let error_code = - match fst style with - | RErr | RInt _ | RBool _ -> pr " int r;\n"; "-1" - | RInt64 _ -> pr " int64_t r;\n"; "-1" - | RConstString _ | RConstOptString _ -> - pr " const char *r;\n"; "NULL" - | RString _ -> pr " char *r;\n"; "NULL" - | RStringList _ | RHashtable _ -> - pr " char **r;\n"; - pr " int i;\n"; - "NULL" - | RStruct (_, typ) -> - pr " struct guestfs_%s *r;\n" typ; "NULL" - | RStructList (_, typ) -> - pr " struct guestfs_%s_list *r;\n" typ; "NULL" - | RBufferOut _ -> - pr " char *r;\n"; - pr " size_t size;\n"; - "NULL" in + match fst style with + | RErr | RInt _ | RBool _ -> pr " int r;\n"; "-1" + | RInt64 _ -> pr " int64_t r;\n"; "-1" + | RConstString _ | RConstOptString _ -> + pr " const char *r;\n"; "NULL" + | RString _ -> pr " char *r;\n"; "NULL" + | RStringList _ | RHashtable _ -> + pr " char **r;\n"; + pr " int i;\n"; + "NULL" + | RStruct (_, typ) -> + pr " struct guestfs_%s *r;\n" typ; "NULL" + | RStructList (_, typ) -> + pr " struct guestfs_%s_list *r;\n" typ; "NULL" + | RBufferOut _ -> + pr " char *r;\n"; + pr " size_t size;\n"; + "NULL" in pr " suppress_error = %d;\n" (if expect_error then 1 else 0); pr " r = guestfs_%s (g" name; (* Generate the parameters. *) List.iter ( - function - | OptString _, "NULL" -> pr ", NULL" - | String n, _ - | OptString n, _ -> + function + | OptString _, "NULL" -> pr ", NULL" + | String n, _ + | OptString n, _ -> pr ", %s" n - | FileIn _, arg | FileOut _, arg -> - pr ", \"%s\"" (c_quote arg) - | StringList n, _ -> - pr ", %s" n - | Int _, arg -> - let i = - try int_of_string arg - with Failure "int_of_string" -> - failwithf "%s: expecting an int, but got '%s'" test_name arg in - pr ", %d" i - | Bool _, arg -> - let b = bool_of_string arg in pr ", %d" (if b then 1 else 0) + | FileIn _, arg | FileOut _, arg -> + pr ", \"%s\"" (c_quote arg) + | StringList n, _ -> + pr ", %s" n + | Int _, arg -> + let i = + try int_of_string arg + with Failure "int_of_string" -> + failwithf "%s: expecting an int, but got '%s'" test_name arg in + pr ", %d" i + | Bool _, arg -> + let b = bool_of_string arg in pr ", %d" (if b then 1 else 0) ) (List.combine (snd style) args); (match fst style with @@ -5664,9 +5664,9 @@ and generate_test_command_call ?(expect_error = false) ?test test_name cmd = pr ");\n"; if not expect_error then - pr " if (r == %s)\n" error_code + pr " if (r == %s)\n" error_code else - pr " if (r != %s)\n" error_code; + pr " if (r != %s)\n" error_code; pr " return -1;\n"; (* Insert the test code. *) @@ -5680,13 +5680,13 @@ and generate_test_command_call ?(expect_error = false) ?test test_name cmd = | RConstString _ | RConstOptString _ -> () | RString _ | RBufferOut _ -> pr " free (r);\n" | RStringList _ | RHashtable _ -> - pr " for (i = 0; r[i] != NULL; ++i)\n"; - pr " free (r[i]);\n"; - pr " free (r);\n" + pr " for (i = 0; r[i] != NULL; ++i)\n"; + pr " free (r[i]);\n"; + pr " free (r);\n" | RStruct (_, typ) -> - pr " guestfs_free_%s (r);\n" typ + pr " guestfs_free_%s (r);\n" typ | RStructList (_, typ) -> - pr " guestfs_free_%s_list (r);\n" typ + pr " guestfs_free_%s_list (r);\n" typ ); pr " }\n" @@ -5730,7 +5730,7 @@ and generate_fish_cmds () = fun (name, _, _, flags, _, shortdesc, _) -> let name = replace_char name '_' '-' in pr " printf (\"%%-20s %%s\\n\", \"%s\", _(\"%s\"));\n" - name shortdesc + name shortdesc ) all_functions_sorted; pr " printf (\" %%s\\n\","; pr " _(\"Use -h <cmd> / help <cmd> to show detailed help for a command.\"));\n"; @@ -5744,52 +5744,52 @@ and generate_fish_cmds () = fun (name, style, _, flags, _, shortdesc, longdesc) -> let name2 = replace_char name '_' '-' in let alias = - try find_map (function FishAlias n -> Some n | _ -> None) flags - with Not_found -> name in + try find_map (function FishAlias n -> Some n | _ -> None) flags + with Not_found -> name in let longdesc = replace_str longdesc "C<guestfs_" "C<" in let synopsis = - match snd style with - | [] -> name2 - | args -> - sprintf "%s <%s>" - name2 (String.concat "> <" (List.map name_of_argt args)) in + match snd style with + | [] -> name2 + | args -> + sprintf "%s <%s>" + name2 (String.concat "> <" (List.map name_of_argt args)) in let warnings = - if List.mem ProtocolLimitWarning flags then - ("\n\n" ^ protocol_limit_warning) - else "" in + if List.mem ProtocolLimitWarning flags then + ("\n\n" ^ protocol_limit_warning) + else "" in (* For DangerWillRobinson commands, we should probably have * guestfish prompt before allowing you to use them (especially * in interactive mode). XXX *) let warnings = - warnings ^ - if List.mem DangerWillRobinson flags then - ("\n\n" ^ danger_will_robinson) - else "" in + warnings ^ + if List.mem DangerWillRobinson flags then + ("\n\n" ^ danger_will_robinson) + else "" in let warnings = - warnings ^ - match deprecation_notice flags with - | None -> "" - | Some txt -> "\n\n" ^ txt in + warnings ^ + match deprecation_notice flags with + | None -> "" + | Some txt -> "\n\n" ^ txt in let describe_alias = - if name <> alias then - sprintf "\n\nYou can use '%s' as an alias for this command." alias - else "" in + if name <> alias then + sprintf "\n\nYou can use '%s' as an alias for this command." alias + else "" in pr " if ("; pr "strcasecmp (cmd, \"%s\") == 0" name; if name <> name2 then - pr " || strcasecmp (cmd, \"%s\") == 0" name2; + pr " || strcasecmp (cmd, \"%s\") == 0" name2; if name <> alias then - pr " || strcasecmp (cmd, \"%s\") == 0" alias; + pr " || strcasecmp (cmd, \"%s\") == 0" alias; pr ")\n"; pr " pod2text (\"%s\", _(\"%s\"), %S);\n" - name2 shortdesc - (" " ^ synopsis ^ "\n\n" ^ longdesc ^ warnings ^ describe_alias); + name2 shortdesc + (" " ^ synopsis ^ "\n\n" ^ longdesc ^ warnings ^ describe_alias); pr " else\n" ) all_functions; pr " display_builtin_command (cmd);\n"; @@ -5809,41 +5809,41 @@ and generate_fish_cmds () = pr "\n" ); List.iter ( - function - | name, FString -> - pr " printf (\"%%s%s: %%s\\n\", indent, %s->%s);\n" name typ name - | name, FUUID -> - pr " printf (\"%s: \");\n" name; - pr " for (i = 0; i < 32; ++i)\n"; - pr " printf (\"%%s%%c\", indent, %s->%s[i]);\n" typ name; - pr " printf (\"\\n\");\n" - | name, FBuffer -> - pr " printf (\"%%s%s: \", indent);\n" name; - pr " for (i = 0; i < %s->%s_len; ++i)\n" typ name; - pr " if (isprint (%s->%s[i]))\n" typ name; - pr " printf (\"%%s%%c\", indent, %s->%s[i]);\n" typ name; - pr " else\n"; - pr " printf (\"%%s\\\\x%%02x\", indent, %s->%s[i]);\n" typ name; - pr " printf (\"\\n\");\n" - | name, (FUInt64|FBytes) -> - pr " printf (\"%%s%s: %%\" PRIu64 \"\\n\", indent, %s->%s);\n" - name typ name - | name, FInt64 -> - pr " printf (\"%%s%s: %%\" PRIi64 \"\\n\", indent, %s->%s);\n" - name typ name - | name, FUInt32 -> - pr " printf (\"%%s%s: %%\" PRIu32 \"\\n\", indent, %s->%s);\n" - name typ name - | name, FInt32 -> - pr " printf (\"%%s%s: %%\" PRIi32 \"\\n\", indent, %s->%s);\n" - name typ name - | name, FChar -> - pr " printf (\"%%s%s: %%c\\n\", indent, %s->%s);\n" - name typ name - | name, FOptPercent -> - pr " if (%s->%s >= 0) printf (\"%%s%s: %%g %%%%\\n\", indent, %s->%s);\n" - typ name name typ name; - pr " else printf (\"%%s%s: \\n\", indent);\n" name + function + | name, FString -> + pr " printf (\"%%s%s: %%s\\n\", indent, %s->%s);\n" name typ name + | name, FUUID -> + pr " printf (\"%s: \");\n" name; + pr " for (i = 0; i < 32; ++i)\n"; + pr " printf (\"%%s%%c\", indent, %s->%s[i]);\n" typ name; + pr " printf (\"\\n\");\n" + | name, FBuffer -> + pr " printf (\"%%s%s: \", indent);\n" name; + pr " for (i = 0; i < %s->%s_len; ++i)\n" typ name; + pr " if (isprint (%s->%s[i]))\n" typ name; + pr " printf (\"%%s%%c\", indent, %s->%s[i]);\n" typ name; + pr " else\n"; + pr " printf (\"%%s\\\\x%%02x\", indent, %s->%s[i]);\n" typ name; + pr " printf (\"\\n\");\n" + | name, (FUInt64|FBytes) -> + pr " printf (\"%%s%s: %%\" PRIu64 \"\\n\", indent, %s->%s);\n" + name typ name + | name, FInt64 -> + pr " printf (\"%%s%s: %%\" PRIi64 \"\\n\", indent, %s->%s);\n" + name typ name + | name, FUInt32 -> + pr " printf (\"%%s%s: %%\" PRIu32 \"\\n\", indent, %s->%s);\n" + name typ name + | name, FInt32 -> + pr " printf (\"%%s%s: %%\" PRIi32 \"\\n\", indent, %s->%s);\n" + name typ name + | name, FChar -> + pr " printf (\"%%s%s: %%c\\n\", indent, %s->%s);\n" + name typ name + | name, FOptPercent -> + pr " if (%s->%s >= 0) printf (\"%%s%s: %%g %%%%\\n\", indent, %s->%s);\n" + typ name name typ name; + pr " else printf (\"%%s%s: \\n\", indent);\n" name ) cols; pr "}\n"; pr "\n"; @@ -5853,7 +5853,7 @@ and generate_fish_cmds () = pr "}\n"; pr "\n"; pr "static void print_%s_list (struct guestfs_%s_list *%ss)\n" - typ typ typ; + typ typ typ; pr "{\n"; pr " int i;\n"; pr "\n"; @@ -5882,53 +5882,53 @@ and generate_fish_cmds () = | RStruct (_, typ) -> pr " struct guestfs_%s *r;\n" typ | RStructList (_, typ) -> pr " struct guestfs_%s_list *r;\n" typ | RBufferOut _ -> - pr " char *r;\n"; - pr " size_t size;\n"; + pr " char *r;\n"; + pr " size_t size;\n"; ); List.iter ( - function - | String n - | OptString n - | FileIn n - | FileOut n -> pr " const char *%s;\n" n - | StringList n -> pr " char **%s;\n" n - | Bool n -> pr " int %s;\n" n - | Int n -> pr " int %s;\n" n + function + | String n + | OptString n + | FileIn n + | FileOut n -> pr " const char *%s;\n" n + | StringList n -> pr " char **%s;\n" n + | Bool n -> pr " int %s;\n" n + | Int n -> pr " int %s;\n" n ) (snd style); (* Check and convert parameters. *) let argc_expected = List.length (snd style) in pr " if (argc != %d) {\n" argc_expected; pr " fprintf (stderr, _(\"%%s should have %%d parameter(s)\\n\"), cmd, %d);\n" - argc_expected; + argc_expected; pr " fprintf (stderr, _(\"type 'help %%s' for help on %%s\\n\"), cmd, cmd);\n"; pr " return -1;\n"; pr " }\n"; iteri ( - fun i -> - function - | String name -> pr " %s = argv[%d];\n" name i - | OptString name -> - pr " %s = strcmp (argv[%d], \"\") != 0 ? argv[%d] : NULL;\n" - name i i - | FileIn name -> - pr " %s = strcmp (argv[%d], \"-\") != 0 ? argv[%d] : \"/dev/stdin\";\n" - name i i - | FileOut name -> - pr " %s = strcmp (argv[%d], \"-\") != 0 ? argv[%d] : \"/dev/stdout\";\n" - name i i - | StringList name -> - pr " %s = parse_string_list (argv[%d]);\n" name i - | Bool name -> - pr " %s = is_true (argv[%d]) ? 1 : 0;\n" name i - | Int name -> - pr " %s = atoi (argv[%d]);\n" name i + fun i -> + function + | String name -> pr " %s = argv[%d];\n" name i + | OptString name -> + pr " %s = strcmp (argv[%d], \"\") != 0 ? argv[%d] : NULL;\n" + name i i + | FileIn name -> + pr " %s = strcmp (argv[%d], \"-\") != 0 ? argv[%d] : \"/dev/stdin\";\n" + name i i + | FileOut name -> + pr " %s = strcmp (argv[%d], \"-\") != 0 ? argv[%d] : \"/dev/stdout\";\n" + name i i + | StringList name -> + pr " %s = parse_string_list (argv[%d]);\n" name i + | Bool name -> + pr " %s = is_true (argv[%d]) ? 1 : 0;\n" name i + | Int name -> + pr " %s = atoi (argv[%d]);\n" name i ) (snd style); (* Call C API function. *) let fn = - try find_map (function FishAction n -> Some n | _ -> None) flags - with Not_found -> sprintf "guestfs_%s" name in + try find_map (function FishAction n -> Some n | _ -> None) flags + with Not_found -> sprintf "guestfs_%s" name in pr " r = %s " fn; generate_c_call_args ~handle:"g" style; pr ";\n"; @@ -5937,54 +5937,54 @@ and generate_fish_cmds () = (match fst style with | RErr -> pr " return r;\n" | RInt _ -> - pr " if (r == -1) return -1;\n"; - pr " printf (\"%%d\\n\", r);\n"; - pr " return 0;\n" + pr " if (r == -1) return -1;\n"; + pr " printf (\"%%d\\n\", r);\n"; + pr " return 0;\n" | RInt64 _ -> - pr " if (r == -1) return -1;\n"; - pr " printf (\"%%\" PRIi64 \"\\n\", r);\n"; - pr " return 0;\n" + pr " if (r == -1) return -1;\n"; + pr " printf (\"%%\" PRIi64 \"\\n\", r);\n"; + pr " return 0;\n" | RBool _ -> - pr " if (r == -1) return -1;\n"; - pr " if (r) printf (\"true\\n\"); else printf (\"false\\n\");\n"; - pr " return 0;\n" + pr " if (r == -1) return -1;\n"; + pr " if (r) printf (\"true\\n\"); else printf (\"false\\n\");\n"; + pr " return 0;\n" | RConstString _ -> - pr " if (r == NULL) return -1;\n"; - pr " printf (\"%%s\\n\", r);\n"; - pr " return 0;\n" + pr " if (r == NULL) return -1;\n"; + pr " printf (\"%%s\\n\", r);\n"; + pr " return 0;\n" | RConstOptString _ -> - pr " printf (\"%%s\\n\", r ? : \"(null)\");\n"; - pr " return 0;\n" + pr " printf (\"%%s\\n\", r ? : \"(null)\");\n"; + pr " return 0;\n" | RString _ -> - pr " if (r == NULL) return -1;\n"; - pr " printf (\"%%s\\n\", r);\n"; - pr " free (r);\n"; - pr " return 0;\n" + pr " if (r == NULL) return -1;\n"; + pr " printf (\"%%s\\n\", r);\n"; + pr " free (r);\n"; + pr " return 0;\n" | RStringList _ -> - pr " if (r == NULL) return -1;\n"; - pr " print_strings (r);\n"; - pr " free_strings (r);\n"; - pr " return 0;\n" + pr " if (r == NULL) return -1;\n"; + pr " print_strings (r);\n"; + pr " free_strings (r);\n"; + pr " return 0;\n" | RStruct (_, typ) -> - pr " if (r == NULL) return -1;\n"; - pr " print_%s (r);\n" typ; - pr " guestfs_free_%s (r);\n" typ; - pr " return 0;\n" + pr " if (r == NULL) return -1;\n"; + pr " print_%s (r);\n" typ; + pr " guestfs_free_%s (r);\n" typ; + pr " return 0;\n" | RStructList (_, typ) -> - pr " if (r == NULL) return -1;\n"; - pr " print_%s_list (r);\n" typ; - pr " guestfs_free_%s_list (r);\n" typ; - pr " return 0;\n" + pr " if (r == NULL) return -1;\n"; + pr " print_%s_list (r);\n" typ; + pr " guestfs_free_%s_list (r);\n" typ; + pr " return 0;\n" | RHashtable _ -> - pr " if (r == NULL) return -1;\n"; - pr " print_table (r);\n"; - pr " free_strings (r);\n"; - pr " return 0;\n" + pr " if (r == NULL) return -1;\n"; + pr " print_table (r);\n"; + pr " free_strings (r);\n"; + pr " return 0;\n" | RBufferOut _ -> - pr " if (r == NULL) return -1;\n"; - pr " fwrite (r, size, 1, stdout);\n"; - pr " free (r);\n"; - pr " return 0;\n" + pr " if (r == NULL) return -1;\n"; + pr " fwrite (r, size, 1, stdout);\n"; + pr " free (r);\n"; + pr " return 0;\n" ); pr "}\n"; pr "\n" @@ -5997,14 +5997,14 @@ and generate_fish_cmds () = fun (name, _, _, flags, _, _, _) -> let name2 = replace_char name '_' '-' in let alias = - try find_map (function FishAlias n -> Some n | _ -> None) flags - with Not_found -> name in + try find_map (function FishAlias n -> Some n | _ -> None) flags + with Not_found -> name in pr " if ("; pr "strcasecmp (cmd, \"%s\") == 0" name; if name <> name2 then - pr " || strcasecmp (cmd, \"%s\") == 0" name2; + pr " || strcasecmp (cmd, \"%s\") == 0" name2; if name <> alias then - pr " || strcasecmp (cmd, \"%s\") == 0" alias; + pr " || strcasecmp (cmd, \"%s\") == 0" alias; pr ")\n"; pr " return run_%s (cmd, argc, argv);\n" name; pr " else\n"; @@ -6051,12 +6051,12 @@ static const char *const commands[] = { let commands = List.map ( fun (name, _, _, flags, _, _, _) -> - let name2 = replace_char name '_' '-' in - let alias = - try find_map (function FishAlias n -> Some n | _ -> None) flags - with Not_found -> name in + let name2 = replace_char name '_' '-' in + let alias = + try find_map (function FishAlias n -> Some n | _ -> None) flags + with Not_found -> name in - if name <> alias then [name2; alias] else [name2] + if name <> alias then [name2; alias] else [name2] ) all_functions in let commands = List.flatten commands in @@ -6111,7 +6111,7 @@ and generate_fish_actions_pod () = let all_functions_sorted = List.filter ( fun (_, _, _, flags, _, _, _) -> - not (List.mem NotInFish flags || List.mem NotInDocs flags) + not (List.mem NotInFish flags || List.mem NotInDocs flags) ) all_functions_sorted in let rex = Str.regexp "C<guestfs_\\([^>]+\\)>" in @@ -6119,47 +6119,47 @@ and generate_fish_actions_pod () = List.iter ( fun (name, style, _, flags, _, _, longdesc) -> let longdesc = - Str.global_substitute rex ( - fun s -> - let sub = - try Str.matched_group 1 s - with Not_found -> - failwithf "error substituting C<guestfs_...> in longdesc of function %s" name in - "C<" ^ replace_char sub '_' '-' ^ ">" - ) longdesc in + Str.global_substitute rex ( + fun s -> + let sub = + try Str.matched_group 1 s + with Not_found -> + failwithf "error substituting C<guestfs_...> in longdesc of function %s" name in + "C<" ^ replace_char sub '_' '-' ^ ">" + ) longdesc in let name = replace_char name '_' '-' in let alias = - try find_map (function FishAlias n -> Some n | _ -> None) flags - with Not_found -> name in + try find_map (function FishAlias n -> Some n | _ -> None) flags + with Not_found -> name in pr "=head2 %s" name; if name <> alias then - pr " | %s" alias; + pr " | %s" alias; pr "\n"; pr "\n"; pr " %s" name; List.iter ( - function - | String n -> pr " %s" n - | OptString n -> pr " %s" n - | StringList n -> pr " '%s ...'" n - | Bool _ -> pr " true|false" - | Int n -> pr " %s" n - | FileIn n | FileOut n -> pr " (%s|-)" n + function + | String n -> pr " %s" n + | OptString n -> pr " %s" n + | StringList n -> pr " '%s ...'" n + | Bool _ -> pr " true|false" + | Int n -> pr " %s" n + | FileIn n | FileOut n -> pr " (%s|-)" n ) (snd style); pr "\n"; pr "\n"; pr "%s\n\n" longdesc; if List.exists (function FileIn _ | FileOut _ -> true - | _ -> false) (snd style) then - pr "Use C<-> instead of a filename to read/write from stdin/stdout.\n\n"; + | _ -> false) (snd style) then + pr "Use C<-> instead of a filename to read/write from stdin/stdout.\n\n"; if List.mem ProtocolLimitWarning flags then - pr "%s\n\n" protocol_limit_warning; + pr "%s\n\n" protocol_limit_warning; if List.mem DangerWillRobinson flags then - pr "%s\n\n" danger_will_robinson; + pr "%s\n\n" danger_will_robinson; match deprecation_notice flags with | None -> () @@ -6200,7 +6200,7 @@ and generate_prototype ?(extern = true) ?(static = false) ?(semicolon = true) ); let next () = if !comma then ( - if single_line then pr ", " else pr ",\n\t\t" + if single_line then pr ", " else pr ",\n\t\t" ); comma := true in @@ -6208,18 +6208,18 @@ and generate_prototype ?(extern = true) ?(static = false) ?(semicolon = true) function | String n | OptString n -> - next (); - if not in_daemon then pr "const char *%s" n - else pr "char *%s" n + next (); + if not in_daemon then pr "const char *%s" n + else pr "char *%s" n | StringList n -> - next (); - if not in_daemon then pr "char * const* const %s" n - else pr "char **%s" n + next (); + if not in_daemon then pr "char * const* const %s" n + else pr "char **%s" n | Bool n -> next (); pr "int %s" n | Int n -> next (); pr "int %s" n | FileIn n | FileOut n -> - if not in_daemon then (next (); pr "const char *%s" n) + if not in_daemon then (next (); pr "const char *%s" n) ) (snd style); if is_RBufferOut then (next (); pr "size_t *size_r"); ); @@ -6248,8 +6248,8 @@ and generate_c_call_args ?handle ?(decl = false) style = if not decl then ( match fst style with | RBufferOut _ -> - next (); - pr "&size" + next (); + pr "&size" | _ -> () ); pr ")" @@ -6364,45 +6364,45 @@ copy_table (char * const * argv) List.iter ( fun (typ, cols) -> let has_optpercent_col = - List.exists (function (_, FOptPercent) -> true | _ -> false) cols in + List.exists (function (_, FOptPercent) -> true | _ -> false) cols in pr "static CAMLprim value\n"; pr "copy_%s (const struct guestfs_%s *%s)\n" typ typ typ; pr "{\n"; pr " CAMLparam0 ();\n"; if has_optpercent_col then - pr " CAMLlocal3 (rv, v, v2);\n" + pr " CAMLlocal3 (rv, v, v2);\n" else - pr " CAMLlocal2 (rv, v);\n"; + pr " CAMLlocal2 (rv, v);\n"; pr "\n"; pr " rv = caml_alloc (%d, 0);\n" (List.length cols); iteri ( - fun i col -> - (match col with - | name, FString -> - pr " v = caml_copy_string (%s->%s);\n" typ name - | name, FBuffer -> - pr " v = caml_alloc_string (%s->%s_len);\n" typ name; - pr " memcpy (String_val (v), %s->%s, %s->%s_len);\n" - typ name typ name - | name, FUUID -> - pr " v = caml_alloc_string (32);\n"; - pr " memcpy (String_val (v), %s->%s, 32);\n" typ name - | name, (FBytes|FInt64|FUInt64) -> - pr " v = caml_copy_int64 (%s->%s);\n" typ name - | name, (FInt32|FUInt32) -> - pr " v = caml_copy_int32 (%s->%s);\n" typ name - | name, FOptPercent -> - pr " if (%s->%s >= 0) { /* Some %s */\n" typ name name; - pr " v2 = caml_copy_double (%s->%s);\n" typ name; - pr " v = caml_alloc (1, 0);\n"; - pr " Store_field (v, 0, v2);\n"; - pr " } else /* None */\n"; - pr " v = Val_int (0);\n"; - | name, FChar -> - pr " v = Val_int (%s->%s);\n" typ name - ); - pr " Store_field (rv, %d, v);\n" i + fun i col -> + (match col with + | name, FString -> + pr " v = caml_copy_string (%s->%s);\n" typ name + | name, FBuffer -> + pr " v = caml_alloc_string (%s->%s_len);\n" typ name; + pr " memcpy (String_val (v), %s->%s, %s->%s_len);\n" + typ name typ name + | name, FUUID -> + pr " v = caml_alloc_string (32);\n"; + pr " memcpy (String_val (v), %s->%s, 32);\n" typ name + | name, (FBytes|FInt64|FUInt64) -> + pr " v = caml_copy_int64 (%s->%s);\n" typ name + | name, (FInt32|FUInt32) -> + pr " v = caml_copy_int32 (%s->%s);\n" typ name + | name, FOptPercent -> + pr " if (%s->%s >= 0) { /* Some %s */\n" typ name name; + pr " v2 = caml_copy_double (%s->%s);\n" typ name; + pr " v = caml_alloc (1, 0);\n"; + pr " Store_field (v, 0, v2);\n"; + pr " } else /* None */\n"; + pr " v = Val_int (0);\n"; + | name, FChar -> + pr " v = Val_int (%s->%s);\n" typ name + ); + pr " Store_field (rv, %d, v);\n" i ) cols; pr " CAMLreturn (rv);\n"; pr "}\n"; @@ -6410,7 +6410,7 @@ copy_table (char * const * argv) pr "static CAMLprim value\n"; pr "copy_%s_list (const struct guestfs_%s_list *%ss)\n" - typ typ typ; + typ typ typ; pr "{\n"; pr " CAMLparam0 ();\n"; pr " CAMLlocal2 (rv, v);\n"; @@ -6434,10 +6434,10 @@ copy_table (char * const * argv) List.iter ( fun (name, style, _, _, _, _, _) -> let params = - "gv" :: List.map (fun arg -> name_of_argt arg ^ "v") (snd style) in + "gv" :: List.map (fun arg -> name_of_argt arg ^ "v") (snd style) in let needs_extra_vs = - match fst style with RConstOptString _ -> true | _ -> false in + match fst style with RConstOptString _ -> true | _ -> false in pr "CAMLprim value\n"; pr "ocaml_guestfs_%s (value %s" name (List.hd params); @@ -6447,18 +6447,18 @@ copy_table (char * const * argv) (match params with | [p1; p2; p3; p4; p5] -> - pr " CAMLparam5 (%s);\n" (String.concat ", " params) + pr " CAMLparam5 (%s);\n" (String.concat ", " params) | p1 :: p2 :: p3 :: p4 :: p5 :: rest -> - pr " CAMLparam5 (%s);\n" (String.concat ", " [p1; p2; p3; p4; p5]); - pr " CAMLxparam%d (%s);\n" - (List.length rest) (String.concat ", " rest) + pr " CAMLparam5 (%s);\n" (String.concat ", " [p1; p2; p3; p4; p5]); + pr " CAMLxparam%d (%s);\n" + (List.length rest) (String.concat ", " rest) | ps -> - pr " CAMLparam%d (%s);\n" (List.length ps) (String.concat ", " ps) + pr " CAMLparam%d (%s);\n" (List.length ps) (String.concat ", " ps) ); if not needs_extra_vs then - pr " CAMLlocal1 (rv);\n" + pr " CAMLlocal1 (rv);\n" else - pr " CAMLlocal3 (rv, v, v2);\n"; + pr " CAMLlocal3 (rv, v, v2);\n"; pr "\n"; pr " guestfs_h *g = Guestfs_val (gv);\n"; @@ -6467,47 +6467,47 @@ copy_table (char * const * argv) pr "\n"; List.iter ( - function - | String n - | FileIn n - | FileOut n -> - pr " const char *%s = String_val (%sv);\n" n n - | OptString n -> - pr " const char *%s =\n" n; - pr " %sv != Val_int (0) ? String_val (Field (%sv, 0)) : NULL;\n" - n n - | StringList n -> - pr " char **%s = ocaml_guestfs_strings_val (g, %sv);\n" n n - | Bool n -> - pr " int %s = Bool_val (%sv);\n" n n - | Int n -> - pr " int %s = Int_val (%sv);\n" n n + function + | String n + | FileIn n + | FileOut n -> + pr " const char *%s = String_val (%sv);\n" n n + | OptString n -> + pr " const char *%s =\n" n; + pr " %sv != Val_int (0) ? String_val (Field (%sv, 0)) : NULL;\n" + n n + | StringList n -> + pr " char **%s = ocaml_guestfs_strings_val (g, %sv);\n" n n + | Bool n -> + pr " int %s = Bool_val (%sv);\n" n n + | Int n -> + pr " int %s = Int_val (%sv);\n" n n ) (snd style); let error_code = - match fst style with - | RErr -> pr " int r;\n"; "-1" - | RInt _ -> pr " int r;\n"; "-1" - | RInt64 _ -> pr " int64_t r;\n"; "-1" - | RBool _ -> pr " int r;\n"; "-1" - | RConstString _ | RConstOptString _ -> - pr " const char *r;\n"; "NULL" - | RString _ -> pr " char *r;\n"; "NULL" - | RStringList _ -> - pr " int i;\n"; - pr " char **r;\n"; - "NULL" - | RStruct (_, typ) -> - pr " struct guestfs_%s *r;\n" typ; "NULL" - | RStructList (_, typ) -> - pr " struct guestfs_%s_list *r;\n" typ; "NULL" - | RHashtable _ -> - pr " int i;\n"; - pr " char **r;\n"; - "NULL" - | RBufferOut _ -> - pr " char *r;\n"; - pr " size_t size;\n"; - "NULL" in + match fst style with + | RErr -> pr " int r;\n"; "-1" + | RInt _ -> pr " int r;\n"; "-1" + | RInt64 _ -> pr " int64_t r;\n"; "-1" + | RBool _ -> pr " int r;\n"; "-1" + | RConstString _ | RConstOptString _ -> + pr " const char *r;\n"; "NULL" + | RString _ -> pr " char *r;\n"; "NULL" + | RStringList _ -> + pr " int i;\n"; + pr " char **r;\n"; + "NULL" + | RStruct (_, typ) -> + pr " struct guestfs_%s *r;\n" typ; "NULL" + | RStructList (_, typ) -> + pr " struct guestfs_%s_list *r;\n" typ; "NULL" + | RHashtable _ -> + pr " int i;\n"; + pr " char **r;\n"; + "NULL" + | RBufferOut _ -> + pr " char *r;\n"; + pr " size_t size;\n"; + "NULL" in pr "\n"; pr " caml_enter_blocking_section ();\n"; @@ -6517,10 +6517,10 @@ copy_table (char * const * argv) pr " caml_leave_blocking_section ();\n"; List.iter ( - function - | StringList n -> - pr " ocaml_guestfs_free_strings (%s);\n" n; - | String _ | OptString _ | Bool _ | Int _ | FileIn _ | FileOut _ -> () + function + | StringList n -> + pr " ocaml_guestfs_free_strings (%s);\n" n; + | String _ | OptString _ | Bool _ | Int _ | FileIn _ | FileOut _ -> () ) (snd style); pr " if (r == %s)\n" error_code; @@ -6531,37 +6531,37 @@ copy_table (char * const * argv) | RErr -> pr " rv = Val_unit;\n" | RInt _ -> pr " rv = Val_int (r);\n" | RInt64 _ -> - pr " rv = caml_copy_int64 (r);\n" + pr " rv = caml_copy_int64 (r);\n" | RBool _ -> pr " rv = Val_bool (r);\n" | RConstString _ -> - pr " rv = caml_copy_string (r);\n" + pr " rv = caml_copy_string (r);\n" | RConstOptString _ -> - pr " if (r) { /* Some string */\n"; - pr " v = caml_alloc (1, 0);\n"; - pr " v2 = caml_copy_string (r);\n"; - pr " Store_field (v, 0, v2);\n"; - pr " } else /* None */\n"; - pr " v = Val_int (0);\n"; + pr " if (r) { /* Some string */\n"; + pr " v = caml_alloc (1, 0);\n"; + pr " v2 = caml_copy_string (r);\n"; + pr " Store_field (v, 0, v2);\n"; + pr " } else /* None */\n"; + pr " v = Val_int (0);\n"; | RString _ -> - pr " rv = caml_copy_string (r);\n"; - pr " free (r);\n" + pr " rv = caml_copy_string (r);\n"; + pr " free (r);\n" | RStringList _ -> - pr " rv = caml_copy_string_array ((const char **) r);\n"; - pr " for (i = 0; r[i] != NULL; ++i) free (r[i]);\n"; - pr " free (r);\n" + pr " rv = caml_copy_string_array ((const char **) r);\n"; + pr " for (i = 0; r[i] != NULL; ++i) free (r[i]);\n"; + pr " free (r);\n" | RStruct (_, typ) -> - pr " rv = copy_%s (r);\n" typ; - pr " guestfs_free_%s (r);\n" typ; + pr " rv = copy_%s (r);\n" typ; + pr " guestfs_free_%s (r);\n" typ; | RStructList (_, typ) -> - pr " rv = copy_%s_list (r);\n" typ; - pr " guestfs_free_%s_list (r);\n" typ; + pr " rv = copy_%s_list (r);\n" typ; + pr " guestfs_free_%s_list (r);\n" typ; | RHashtable _ -> - pr " rv = copy_table (r);\n"; - pr " for (i = 0; r[i] != NULL; ++i) free (r[i]);\n"; - pr " free (r);\n"; + pr " rv = copy_table (r);\n"; + pr " for (i = 0; r[i] != NULL; ++i) free (r[i]);\n"; + pr " free (r);\n"; | RBufferOut _ -> - pr " rv = caml_alloc_string (size);\n"; - pr " memcpy (String_val (rv), r, size);\n"; + pr " rv = caml_alloc_string (size);\n"; + pr " memcpy (String_val (rv), r, size);\n"; ); pr " CAMLreturn (rv);\n"; @@ -6569,14 +6569,14 @@ copy_table (char * const * argv) pr "\n"; if List.length params > 5 then ( - pr "CAMLprim value\n"; - pr "ocaml_guestfs_%s_byte (value *argv, int argn)\n" name; - pr "{\n"; - pr " return ocaml_guestfs_%s (argv[0]" name; - iteri (fun i _ -> pr ", argv[%d]" i) (List.tl params); - pr ");\n"; - pr "}\n"; - pr "\n" + pr "CAMLprim value\n"; + pr "ocaml_guestfs_%s_byte (value *argv, int argn)\n" name; + pr "{\n"; + pr " return ocaml_guestfs_%s (argv[0]" name; + iteri (fun i _ -> pr ", argv[%d]" i) (List.tl params); + pr ");\n"; + pr "}\n"; + pr "\n" ) ) all_functions @@ -6585,14 +6585,14 @@ and generate_ocaml_structure_decls () = fun (typ, cols) -> pr "type %s = {\n" typ; List.iter ( - function - | name, FString -> pr " %s : string;\n" name - | name, FBuffer -> pr " %s : string;\n" name - | name, FUUID -> pr " %s : string;\n" name - | name, (FBytes|FInt64|FUInt64) -> pr " %s : int64;\n" name - | name, (FInt32|FUInt32) -> pr " %s : int32;\n" name - | name, FChar -> pr " %s : char;\n" name - | name, FOptPercent -> pr " %s : float option;\n" name + function + | name, FString -> pr " %s : string;\n" name + | name, FBuffer -> pr " %s : string;\n" name + | name, FUUID -> pr " %s : string;\n" name + | name, (FBytes|FInt64|FUInt64) -> pr " %s : int64;\n" name + | name, (FInt32|FUInt32) -> pr " %s : int32;\n" name + | name, FChar -> pr " %s : char;\n" name + | name, FOptPercent -> pr " %s : float option;\n" name ) cols; pr "}\n"; pr "\n" @@ -6738,7 +6738,7 @@ DESTROY (g) | RStringList _ | RStruct _ | RStructList _ | RHashtable _ -> - pr "void\n" (* all lists returned implictly on the stack *) + pr "void\n" (* all lists returned implictly on the stack *) ); (* Call and arguments. *) pr "%s " name; @@ -6746,148 +6746,148 @@ DESTROY (g) pr "\n"; pr " guestfs_h *g;\n"; iteri ( - fun i -> - function - | String n | FileIn n | FileOut n -> pr " char *%s;\n" n - | OptString n -> - (* http://www.perlmonks.org/?node_id=554277 - * Note that the implicit handle argument means we have - * to add 1 to the ST(x) operator. - *) - pr " char *%s = SvOK(ST(%d)) ? SvPV_nolen(ST(%d)) : NULL;\n" n (i+1) (i+1) - | StringList n -> pr " char **%s;\n" n - | Bool n -> pr " int %s;\n" n - | Int n -> pr " int %s;\n" n + fun i -> + function + | String n | FileIn n | FileOut n -> pr " char *%s;\n" n + | OptString n -> + (* http://www.perlmonks.org/?node_id=554277 + * Note that the implicit handle argument means we have + * to add 1 to the ST(x) operator. + *) + pr " char *%s = SvOK(ST(%d)) ? SvPV_nolen(ST(%d)) : NULL;\n" n (i+1) (i+1) + | StringList n -> pr " char **%s;\n" n + | Bool n -> pr " int %s;\n" n + | Int n -> pr " int %s;\n" n ) (snd style); let do_cleanups () = - List.iter ( - function - | String _ | OptString _ | Bool _ | Int _ - | FileIn _ | FileOut _ -> () - | StringList n -> pr " free (%s);\n" n - ) (snd style) + List.iter ( + function + | String _ | OptString _ | Bool _ | Int _ + | FileIn _ | FileOut _ -> () + | StringList n -> pr " free (%s);\n" n + ) (snd style) in (* Code. *) (match fst style with | RErr -> - pr "PREINIT:\n"; - pr " int r;\n"; - pr " PPCODE:\n"; - pr " r = guestfs_%s " name; - generate_c_call_args ~handle:"g" style; - pr ";\n"; - do_cleanups (); - pr " if (r == -1)\n"; - pr " croak (\"%s: %%s\", guestfs_last_error (g));\n" name; + pr "PREINIT:\n"; + pr " int r;\n"; + pr " PPCODE:\n"; + pr " r = guestfs_%s " name; + generate_c_call_args ~handle:"g" style; + pr ";\n"; + do_cleanups (); + pr " if (r == -1)\n"; + pr " croak (\"%s: %%s\", guestfs_last_error (g));\n" name; | RInt n | RBool n -> - pr "PREINIT:\n"; - pr " int %s;\n" n; - pr " CODE:\n"; - pr " %s = guestfs_%s " n name; - generate_c_call_args ~handle:"g" style; - pr ";\n"; - do_cleanups (); - pr " if (%s == -1)\n" n; - pr " croak (\"%s: %%s\", guestfs_last_error (g));\n" name; - pr " RETVAL = newSViv (%s);\n" n; - pr " OUTPUT:\n"; - pr " RETVAL\n" + pr "PREINIT:\n"; + pr " int %s;\n" n; + pr " CODE:\n"; + pr " %s = guestfs_%s " n name; + generate_c_call_args ~handle:"g" style; + pr ";\n"; + do_cleanups (); + pr " if (%s == -1)\n" n; + pr " croak (\"%s: %%s\", guestfs_last_error (g));\n" name; + pr " RETVAL = newSViv (%s);\n" n; + pr " OUTPUT:\n"; + pr " RETVAL\n" | RInt64 n -> - pr "PREINIT:\n"; - pr " int64_t %s;\n" n; - pr " CODE:\n"; - pr " %s = guestfs_%s " n name; - generate_c_call_args ~handle:"g" style; - pr ";\n"; - do_cleanups (); - pr " if (%s == -1)\n" n; - pr " croak (\"%s: %%s\", guestfs_last_error (g));\n" name; - pr " RETVAL = my_newSVll (%s);\n" n; - pr " OUTPUT:\n"; - pr " RETVAL\n" + pr "PREINIT:\n"; + pr " int64_t %s;\n" n; + pr " CODE:\n"; + pr " %s = guestfs_%s " n name; + generate_c_call_args ~handle:"g" style; + pr ";\n"; + do_cleanups (); + pr " if (%s == -1)\n" n; + pr " croak (\"%s: %%s\", guestfs_last_error (g));\n" name; + pr " RETVAL = my_newSVll (%s);\n" n; + pr " OUTPUT:\n"; + pr " RETVAL\n" | RConstString n -> - pr "PREINIT:\n"; - pr " const char *%s;\n" n; - pr " CODE:\n"; - pr " %s = guestfs_%s " n name; - generate_c_call_args ~handle:"g" style; - pr ";\n"; - do_cleanups (); - pr " if (%s == NULL)\n" n; - pr " croak (\"%s: %%s\", guestfs_last_error (g));\n" name; - pr " RETVAL = newSVpv (%s, 0);\n" n; - pr " OUTPUT:\n"; - pr " RETVAL\n" + pr "PREINIT:\n"; + pr " const char *%s;\n" n; + pr " CODE:\n"; + pr " %s = guestfs_%s " n name; + generate_c_call_args ~handle:"g" style; + pr ";\n"; + do_cleanups (); + pr " if (%s == NULL)\n" n; + pr " croak (\"%s: %%s\", guestfs_last_error (g));\n" name; + pr " RETVAL = newSVpv (%s, 0);\n" n; + pr " OUTPUT:\n"; + pr " RETVAL\n" | RConstOptString n -> - pr "PREINIT:\n"; - pr " const char *%s;\n" n; - pr " CODE:\n"; - pr " %s = guestfs_%s " n name; - generate_c_call_args ~handle:"g" style; - pr ";\n"; - do_cleanups (); - pr " if (%s == NULL)\n" n; - pr " RETVAL = &PL_sv_undef;\n"; - pr " else\n"; - pr " RETVAL = newSVpv (%s, 0);\n" n; - pr " OUTPUT:\n"; - pr " RETVAL\n" + pr "PREINIT:\n"; + pr " const char *%s;\n" n; + pr " CODE:\n"; + pr " %s = guestfs_%s " n name; + generate_c_call_args ~handle:"g" style; + pr ";\n"; + do_cleanups (); + pr " if (%s == NULL)\n" n; + pr " RETVAL = &PL_sv_undef;\n"; + pr " else\n"; + pr " RETVAL = newSVpv (%s, 0);\n" n; + pr " OUTPUT:\n"; + pr " RETVAL\n" | RString n -> - pr "PREINIT:\n"; - pr " char *%s;\n" n; - pr " CODE:\n"; - pr " %s = guestfs_%s " n name; - generate_c_call_args ~handle:"g" style; - pr ";\n"; - do_cleanups (); - pr " if (%s == NULL)\n" n; - pr " croak (\"%s: %%s\", guestfs_last_error (g));\n" name; - pr " RETVAL = newSVpv (%s, 0);\n" n; - pr " free (%s);\n" n; - pr " OUTPUT:\n"; - pr " RETVAL\n" + pr "PREINIT:\n"; + pr " char *%s;\n" n; + pr " CODE:\n"; + pr " %s = guestfs_%s " n name; + generate_c_call_args ~handle:"g" style; + pr ";\n"; + do_cleanups (); + pr " if (%s == NULL)\n" n; + pr " croak (\"%s: %%s\", guestfs_last_error (g));\n" name; + pr " RETVAL = newSVpv (%s, 0);\n" n; + pr " free (%s);\n" n; + pr " OUTPUT:\n"; + pr " RETVAL\n" | RStringList n | RHashtable n -> - pr "PREINIT:\n"; - pr " char **%s;\n" n; - pr " int i, n;\n"; - pr " PPCODE:\n"; - pr " %s = guestfs_%s " n name; - generate_c_call_args ~handle:"g" style; - pr ";\n"; - do_cleanups (); - pr " if (%s == NULL)\n" n; - pr " croak (\"%s: %%s\", guestfs_last_error (g));\n" name; - pr " for (n = 0; %s[n] != NULL; ++n) /**/;\n" n; - pr " EXTEND (SP, n);\n"; - pr " for (i = 0; i < n; ++i) {\n"; - pr " PUSHs (sv_2mortal (newSVpv (%s[i], 0)));\n" n; - pr " free (%s[i]);\n" n; - pr " }\n"; - pr " free (%s);\n" n; + pr "PREINIT:\n"; + pr " char **%s;\n" n; + pr " int i, n;\n"; + pr " PPCODE:\n"; + pr " %s = guestfs_%s " n name; + generate_c_call_args ~handle:"g" style; + pr ";\n"; + do_cleanups (); + pr " if (%s == NULL)\n" n; + pr " croak (\"%s: %%s\", guestfs_last_error (g));\n" name; + pr " for (n = 0; %s[n] != NULL; ++n) /**/;\n" n; + pr " EXTEND (SP, n);\n"; + pr " for (i = 0; i < n; ++i) {\n"; + pr " PUSHs (sv_2mortal (newSVpv (%s[i], 0)));\n" n; + pr " free (%s[i]);\n" n; + pr " }\n"; + pr " free (%s);\n" n; | RStruct (n, typ) -> - let cols = cols_of_struct typ in - generate_perl_struct_code typ cols name style n do_cleanups + let cols = cols_of_struct typ in + generate_perl_struct_code typ cols name style n do_cleanups | RStructList (n, typ) -> - let cols = cols_of_struct typ in - generate_perl_struct_list_code typ cols name style n do_cleanups + let cols = cols_of_struct typ in + generate_perl_struct_list_code typ cols name style n do_cleanups | RBufferOut n -> - pr "PREINIT:\n"; - pr " char *%s;\n" n; - pr " size_t size;\n"; - pr " CODE:\n"; - pr " %s = guestfs_%s " n name; - generate_c_call_args ~handle:"g" style; - pr ";\n"; - do_cleanups (); - pr " if (%s == NULL)\n" n; - pr " croak (\"%s: %%s\", guestfs_last_error (g));\n" name; - pr " RETVAL = newSVpv (%s, size);\n" n; - pr " free (%s);\n" n; - pr " OUTPUT:\n"; - pr " RETVAL\n" + pr "PREINIT:\n"; + pr " char *%s;\n" n; + pr " size_t size;\n"; + pr " CODE:\n"; + pr " %s = guestfs_%s " n name; + generate_c_call_args ~handle:"g" style; + pr ";\n"; + do_cleanups (); + pr " if (%s == NULL)\n" n; + pr " croak (\"%s: %%s\", guestfs_last_error (g));\n" name; + pr " RETVAL = newSVpv (%s, size);\n" n; + pr " free (%s);\n" n; + pr " OUTPUT:\n"; + pr " RETVAL\n" ); pr "\n" @@ -6911,29 +6911,29 @@ and generate_perl_struct_list_code typ cols name style n do_cleanups = List.iter ( function | name, FString -> - pr " (void) hv_store (hv, \"%s\", %d, newSVpv (%s->val[i].%s, 0), 0);\n" - name (String.length name) n name + pr " (void) hv_store (hv, \"%s\", %d, newSVpv (%s->val[i].%s, 0), 0);\n" + name (String.length name) n name | name, FUUID -> - pr " (void) hv_store (hv, \"%s\", %d, newSVpv (%s->val[i].%s, 32), 0);\n" - name (String.length name) n name + pr " (void) hv_store (hv, \"%s\", %d, newSVpv (%s->val[i].%s, 32), 0);\n" + name (String.length name) n name | name, FBuffer -> - pr " (void) hv_store (hv, \"%s\", %d, newSVpv (%s->val[i].%s, %s->val[i].%s_len), 0);\n" - name (String.length name) n name n name + pr " (void) hv_store (hv, \"%s\", %d, newSVpv (%s->val[i].%s, %s->val[i].%s_len), 0);\n" + name (String.length name) n name n name | name, (FBytes|FUInt64) -> - pr " (void) hv_store (hv, \"%s\", %d, my_newSVull (%s->val[i].%s), 0);\n" - name (String.length name) n name + pr " (void) hv_store (hv, \"%s\", %d, my_newSVull (%s->val[i].%s), 0);\n" + name (String.length name) n name | name, FInt64 -> - pr " (void) hv_store (hv, \"%s\", %d, my_newSVll (%s->val[i].%s), 0);\n" - name (String.length name) n name + pr " (void) hv_store (hv, \"%s\", %d, my_newSVll (%s->val[i].%s), 0);\n" + name (String.length name) n name | name, (FInt32|FUInt32) -> - pr " (void) hv_store (hv, \"%s\", %d, newSVnv (%s->val[i].%s), 0);\n" - name (String.length name) n name + pr " (void) hv_store (hv, \"%s\", %d, newSVnv (%s->val[i].%s), 0);\n" + name (String.length name) n name | name, FChar -> - pr " (void) hv_store (hv, \"%s\", %d, newSVpv (&%s->val[i].%s, 1), 0);\n" - name (String.length name) n name + pr " (void) hv_store (hv, \"%s\", %d, newSVpv (&%s->val[i].%s, 1), 0);\n" + name (String.length name) n name | name, FOptPercent -> - pr " (void) hv_store (hv, \"%s\", %d, newSVnv (%s->val[i].%s), 0);\n" - name (String.length name) n name + pr " (void) hv_store (hv, \"%s\", %d, newSVnv (%s->val[i].%s), 0);\n" + name (String.length name) n name ) cols; pr " PUSHs (sv_2mortal (newRV ((SV *) hv)));\n"; pr " }\n"; @@ -6956,29 +6956,29 @@ and generate_perl_struct_code typ cols name style n do_cleanups = match col with | name, FString -> - pr " PUSHs (sv_2mortal (newSVpv (%s->%s, 0)));\n" - n name + pr " PUSHs (sv_2mortal (newSVpv (%s->%s, 0)));\n" + n name | name, FBuffer -> - pr " PUSHs (sv_2mortal (newSVpv (%s->%s, %s->%s_len)));\n" - n name n name + pr " PUSHs (sv_2mortal (newSVpv (%s->%s, %s->%s_len)));\n" + n name n name | name, FUUID -> - pr " PUSHs (sv_2mortal (newSVpv (%s->%s, 32)));\n" - n name + pr " PUSHs (sv_2mortal (newSVpv (%s->%s, 32)));\n" + n name | name, (FBytes|FUInt64) -> - pr " PUSHs (sv_2mortal (my_newSVull (%s->%s)));\n" - n name + pr " PUSHs (sv_2mortal (my_newSVull (%s->%s)));\n" + n name | name, FInt64 -> - pr " PUSHs (sv_2mortal (my_newSVll (%s->%s)));\n" - n name + pr " PUSHs (sv_2mortal (my_newSVll (%s->%s)));\n" + n name | name, (FInt32|FUInt32) -> - pr " PUSHs (sv_2mortal (newSVnv (%s->%s)));\n" - n name + pr " PUSHs (sv_2mortal (newSVnv (%s->%s)));\n" + n name | name, FChar -> - pr " PUSHs (sv_2mortal (newSVpv (&%s->%s, 1)));\n" - n name + pr " PUSHs (sv_2mortal (newSVpv (&%s->%s, 1)));\n" + n name | name, FOptPercent -> - pr " PUSHs (sv_2mortal (newSVnv (%s->%s)));\n" - n name + pr " PUSHs (sv_2mortal (newSVnv (%s->%s)));\n" + n name ) cols; pr " free (%s);\n" n @@ -7072,18 +7072,18 @@ sub new { List.iter ( fun (name, style, _, flags, _, _, longdesc) -> if not (List.mem NotInDocs flags) then ( - let longdesc = replace_str longdesc "C<guestfs_" "C<$h-E<gt>" in - pr "=item "; - generate_perl_prototype name style; - pr "\n\n"; - pr "%s\n\n" longdesc; - if List.mem ProtocolLimitWarning flags then - pr "%s\n\n" protocol_limit_warning; - if List.mem DangerWillRobinson flags then - pr "%s\n\n" danger_will_robinson; - match deprecation_notice flags with - | None -> () - | Some txt -> pr "%s\n\n" txt + let longdesc = replace_str longdesc "C<guestfs_" "C<$h-E<gt>" in + pr "=item "; + generate_perl_prototype name style; + pr "\n\n"; + pr "%s\n\n" longdesc; + if List.mem ProtocolLimitWarning flags then + pr "%s\n\n" protocol_limit_warning; + if List.mem DangerWillRobinson flags then + pr "%s\n\n" danger_will_robinson; + match deprecation_notice flags with + | None -> () + | Some txt -> pr "%s\n\n" txt ) ) all_functions_sorted; @@ -7136,9 +7136,9 @@ and generate_perl_prototype name style = comma := true; match arg with | String n | OptString n | Bool n | Int n | FileIn n | FileOut n -> - pr "$%s" n + pr "$%s" n | StringList n -> - pr "\\@%s" n + pr "\\@%s" n ) (snd style); pr ");" @@ -7293,47 +7293,47 @@ py_guestfs_close (PyObject *self, PyObject *args) pr "\n"; pr " dict = PyDict_New ();\n"; List.iter ( - function - | name, FString -> - pr " PyDict_SetItemString (dict, \"%s\",\n" name; - pr " PyString_FromString (%s->%s));\n" - typ name - | name, FBuffer -> - pr " PyDict_SetItemString (dict, \"%s\",\n" name; - pr " PyString_FromStringAndSize (%s->%s, %s->%s_len));\n" - typ name typ name - | name, FUUID -> - pr " PyDict_SetItemString (dict, \"%s\",\n" name; - pr " PyString_FromStringAndSize (%s->%s, 32));\n" - typ name - | name, (FBytes|FUInt64) -> - pr " PyDict_SetItemString (dict, \"%s\",\n" name; - pr " PyLong_FromUnsignedLongLong (%s->%s));\n" - typ name - | name, FInt64 -> - pr " PyDict_SetItemString (dict, \"%s\",\n" name; - pr " PyLong_FromLongLong (%s->%s));\n" - typ name - | name, FUInt32 -> - pr " PyDict_SetItemString (dict, \"%s\",\n" name; - pr " PyLong_FromUnsignedLong (%s->%s));\n" - typ name - | name, FInt32 -> - pr " PyDict_SetItemString (dict, \"%s\",\n" name; - pr " PyLong_FromLong (%s->%s));\n" - typ name - | name, FOptPercent -> - pr " if (%s->%s >= 0)\n" typ name; - pr " PyDict_SetItemString (dict, \"%s\",\n" name; - pr " PyFloat_FromDouble ((double) %s->%s));\n" - typ name; - pr " else {\n"; - pr " Py_INCREF (Py_None);\n"; - pr " PyDict_SetItemString (dict, \"%s\", Py_None);" name; - pr " }\n" - | name, FChar -> - pr " PyDict_SetItemString (dict, \"%s\",\n" name; - pr " PyString_FromStringAndSize (&dirent->%s, 1));\n" name + function + | name, FString -> + pr " PyDict_SetItemString (dict, \"%s\",\n" name; + pr " PyString_FromString (%s->%s));\n" + typ name + | name, FBuffer -> + pr " PyDict_SetItemString (dict, \"%s\",\n" name; + pr " PyString_FromStringAndSize (%s->%s, %s->%s_len));\n" + typ name typ name + | name, FUUID -> + pr " PyDict_SetItemString (dict, \"%s\",\n" name; + pr " PyString_FromStringAndSize (%s->%s, 32));\n" + typ name + | name, (FBytes|FUInt64) -> + pr " PyDict_SetItemString (dict, \"%s\",\n" name; + pr " PyLong_FromUnsignedLongLong (%s->%s));\n" + typ name + | name, FInt64 -> + pr " PyDict_SetItemString (dict, \"%s\",\n" name; + pr " PyLong_FromLongLong (%s->%s));\n" + typ name + | name, FUInt32 -> + pr " PyDict_SetItemString (dict, \"%s\",\n" name; + pr " PyLong_FromUnsignedLong (%s->%s));\n" + typ name + | name, FInt32 -> + pr " PyDict_SetItemString (dict, \"%s\",\n" name; + pr " PyLong_FromLong (%s->%s));\n" + typ name + | name, FOptPercent -> + pr " if (%s->%s >= 0)\n" typ name; + pr " PyDict_SetItemString (dict, \"%s\",\n" name; + pr " PyFloat_FromDouble ((double) %s->%s));\n" + typ name; + pr " else {\n"; + pr " Py_INCREF (Py_None);\n"; + pr " PyDict_SetItemString (dict, \"%s\", Py_None);" name; + pr " }\n" + | name, FChar -> + pr " PyDict_SetItemString (dict, \"%s\",\n" name; + pr " PyString_FromStringAndSize (&dirent->%s, 1));\n" name ) cols; pr " return dict;\n"; pr "};\n"; @@ -7365,30 +7365,30 @@ py_guestfs_close (PyObject *self, PyObject *args) pr " PyObject *py_r;\n"; let error_code = - match fst style with - | RErr | RInt _ | RBool _ -> pr " int r;\n"; "-1" - | RInt64 _ -> pr " int64_t r;\n"; "-1" - | RConstString _ | RConstOptString _ -> - pr " const char *r;\n"; "NULL" - | RString _ -> pr " char *r;\n"; "NULL" - | RStringList _ | RHashtable _ -> pr " char **r;\n"; "NULL" - | RStruct (_, typ) -> pr " struct guestfs_%s *r;\n" typ; "NULL" - | RStructList (_, typ) -> - pr " struct guestfs_%s_list *r;\n" typ; "NULL" - | RBufferOut _ -> - pr " char *r;\n"; - pr " size_t size;\n"; - "NULL" in + match fst style with + | RErr | RInt _ | RBool _ -> pr " int r;\n"; "-1" + | RInt64 _ -> pr " int64_t r;\n"; "-1" + | RConstString _ | RConstOptString _ -> + pr " const char *r;\n"; "NULL" + | RString _ -> pr " char *r;\n"; "NULL" + | RStringList _ | RHashtable _ -> pr " char **r;\n"; "NULL" + | RStruct (_, typ) -> pr " struct guestfs_%s *r;\n" typ; "NULL" + | RStructList (_, typ) -> + pr " struct guestfs_%s_list *r;\n" typ; "NULL" + | RBufferOut _ -> + pr " char *r;\n"; + pr " size_t size;\n"; + "NULL" in List.iter ( - function - | String n | FileIn n | FileOut n -> pr " const char *%s;\n" n - | OptString n -> pr " const char *%s;\n" n - | StringList n -> - pr " PyObject *py_%s;\n" n; - pr " const char **%s;\n" n - | Bool n -> pr " int %s;\n" n - | Int n -> pr " int %s;\n" n + function + | String n | FileIn n | FileOut n -> pr " const char *%s;\n" n + | OptString n -> pr " const char *%s;\n" n + | StringList n -> + pr " PyObject *py_%s;\n" n; + pr " const char **%s;\n" n + | Bool n -> pr " int %s;\n" n + | Int n -> pr " int %s;\n" n ) (snd style); pr "\n"; @@ -7396,22 +7396,22 @@ py_guestfs_close (PyObject *self, PyObject *args) (* Convert the parameters. *) pr " if (!PyArg_ParseTuple (args, (char *) \"O"; List.iter ( - function - | String _ | FileIn _ | FileOut _ -> pr "s" - | OptString _ -> pr "z" - | StringList _ -> pr "O" - | Bool _ -> pr "i" (* XXX Python has booleans? *) - | Int _ -> pr "i" + function + | String _ | FileIn _ | FileOut _ -> pr "s" + | OptString _ -> pr "z" + | StringList _ -> pr "O" + | Bool _ -> pr "i" (* XXX Python has booleans? *) + | Int _ -> pr "i" ) (snd style); pr ":guestfs_%s\",\n" name; pr " &py_g"; List.iter ( - function - | String n | FileIn n | FileOut n -> pr ", &%s" n - | OptString n -> pr ", &%s" n - | StringList n -> pr ", &py_%s" n - | Bool n -> pr ", &%s" n - | Int n -> pr ", &%s" n + function + | String n | FileIn n | FileOut n -> pr ", &%s" n + | OptString n -> pr ", &%s" n + | StringList n -> pr ", &py_%s" n + | Bool n -> pr ", &%s" n + | Int n -> pr ", &%s" n ) (snd style); pr "))\n"; @@ -7419,11 +7419,11 @@ py_guestfs_close (PyObject *self, PyObject *args) pr " g = get_handle (py_g);\n"; List.iter ( - function - | String _ | FileIn _ | FileOut _ | OptString _ | Bool _ | Int _ -> () - | StringList n -> - pr " %s = get_string_list (py_%s);\n" n n; - pr " if (!%s) return NULL;\n" n + function + | String _ | FileIn _ | FileOut _ | OptString _ | Bool _ | Int _ -> () + | StringList n -> + pr " %s = get_string_list (py_%s);\n" n n; + pr " if (!%s) return NULL;\n" n ) (snd style); pr "\n"; @@ -7433,10 +7433,10 @@ py_guestfs_close (PyObject *self, PyObject *args) pr ";\n"; List.iter ( - function - | String _ | FileIn _ | FileOut _ | OptString _ | Bool _ | Int _ -> () - | StringList n -> - pr " free (%s);\n" n + function + | String _ | FileIn _ | FileOut _ | OptString _ | Bool _ | Int _ -> () + | StringList n -> + pr " free (%s);\n" n ) (snd style); pr " if (r == %s) {\n" error_code; @@ -7447,37 +7447,37 @@ py_guestfs_close (PyObject *self, PyObject *args) (match fst style with | RErr -> - pr " Py_INCREF (Py_None);\n"; - pr " py_r = Py_None;\n" + pr " Py_INCREF (Py_None);\n"; + pr " py_r = Py_None;\n" | RInt _ | RBool _ -> pr " py_r = PyInt_FromLong ((long) r);\n" | RInt64 _ -> pr " py_r = PyLong_FromLongLong (r);\n" | RConstString _ -> pr " py_r = PyString_FromString (r);\n" | RConstOptString _ -> - pr " if (r)\n"; - pr " py_r = PyString_FromString (r);\n"; - pr " else {\n"; - pr " Py_INCREF (Py_None);\n"; - pr " py_r = Py_None;\n"; - pr " }\n" + pr " if (r)\n"; + pr " py_r = PyString_FromString (r);\n"; + pr " else {\n"; + pr " Py_INCREF (Py_None);\n"; + pr " py_r = Py_None;\n"; + pr " }\n" | RString _ -> - pr " py_r = PyString_FromString (r);\n"; - pr " free (r);\n" + pr " py_r = PyString_FromString (r);\n"; + pr " free (r);\n" | RStringList _ -> - pr " py_r = put_string_list (r);\n"; - pr " free_strings (r);\n" + pr " py_r = put_string_list (r);\n"; + pr " free_strings (r);\n" | RStruct (_, typ) -> - pr " py_r = put_%s (r);\n" typ; - pr " guestfs_free_%s (r);\n" typ + pr " py_r = put_%s (r);\n" typ; + pr " guestfs_free_%s (r);\n" typ | RStructList (_, typ) -> - pr " py_r = put_%s_list (r);\n" typ; - pr " guestfs_free_%s_list (r);\n" typ + pr " py_r = put_%s_list (r);\n" typ; + pr " guestfs_free_%s_list (r);\n" typ | RHashtable n -> - pr " py_r = put_table (r);\n"; - pr " free_strings (r);\n" + pr " py_r = put_table (r);\n"; + pr " free_strings (r);\n" | RBufferOut _ -> - pr " py_r = PyString_FromStringAndSize (r, size);\n"; - pr " free (r);\n" + pr " py_r = PyString_FromStringAndSize (r, size);\n"; + pr " free (r);\n" ); pr " return py_r;\n"; @@ -7492,7 +7492,7 @@ py_guestfs_close (PyObject *self, PyObject *args) List.iter ( fun (name, _, _, _, _, _, _) -> pr " { (char *) \"%s\", py_guestfs_%s, METH_VARARGS, NULL },\n" - name name + name name ) all_functions; pr " { NULL, NULL, 0, NULL }\n"; pr "};\n"; @@ -7585,36 +7585,36 @@ class GuestFS: pr ":\n"; if not (List.mem NotInDocs flags) then ( - let doc = replace_str longdesc "C<guestfs_" "C<g." in - let doc = + let doc = replace_str longdesc "C<guestfs_" "C<g." in + let doc = match fst style with - | RErr | RInt _ | RInt64 _ | RBool _ - | RConstOptString _ | RConstString _ - | RString _ | RBufferOut _ -> doc - | RStringList _ -> - doc ^ "\n\nThis function returns a list of strings." - | RStruct (_, typ) -> - doc ^ sprintf "\n\nThis function returns a dictionary, with keys matching the various fields in the guestfs_%s structure." typ - | RStructList (_, typ) -> - doc ^ sprintf "\n\nThis function returns a list of %ss. Each %s is represented as a dictionary." typ typ - | RHashtable _ -> - doc ^ "\n\nThis function returns a dictionary." in - let doc = - if List.mem ProtocolLimitWarning flags then - doc ^ "\n\n" ^ protocol_limit_warning - else doc in - let doc = - if List.mem DangerWillRobinson flags then - doc ^ "\n\n" ^ danger_will_robinson - else doc in - let doc = - match deprecation_notice flags with - | None -> doc - | Some txt -> doc ^ "\n\n" ^ txt in - let doc = pod2text ~width:60 name doc in - let doc = List.map (fun line -> replace_str line "\\" "\\\\") doc in - let doc = String.concat "\n " doc in - pr " u\"\"\"%s\"\"\"\n" doc; + | RErr | RInt _ | RInt64 _ | RBool _ + | RConstOptString _ | RConstString _ + | RString _ | RBufferOut _ -> doc + | RStringList _ -> + doc ^ "\n\nThis function returns a list of strings." + | RStruct (_, typ) -> + doc ^ sprintf "\n\nThis function returns a dictionary, with keys matching the various fields in the guestfs_%s structure." typ + | RStructList (_, typ) -> + doc ^ sprintf "\n\nThis function returns a list of %ss. Each %s is represented as a dictionary." typ typ + | RHashtable _ -> + doc ^ "\n\nThis function returns a dictionary." in + let doc = + if List.mem ProtocolLimitWarning flags then + doc ^ "\n\n" ^ protocol_limit_warning + else doc in + let doc = + if List.mem DangerWillRobinson flags then + doc ^ "\n\n" ^ danger_will_robinson + else doc in + let doc = + match deprecation_notice flags with + | None -> doc + | Some txt -> doc ^ "\n\n" ^ txt in + let doc = pod2text ~width:60 name doc in + let doc = List.map (fun line -> replace_str line "\\" "\\\\") doc in + let doc = String.concat "\n " doc in + pr " u\"\"\"%s\"\"\"\n" doc; ); pr " return libguestfsmod.%s " name; generate_py_call_args ~handle:"self._o" (snd style); @@ -7647,20 +7647,20 @@ and pod2text ~width name longdesc = let rec loop i = let line = input_line chan in if i = 1 then (* discard the first line of output *) - loop (i+1) + loop (i+1) else ( - let line = triml line in - lines := line :: !lines; - loop (i+1) + let line = triml line in + lines := line :: !lines; + loop (i+1) ) in let lines = try loop 1 with End_of_file -> List.rev !lines in Unix.unlink filename; (match Unix.close_process_in chan with | Unix.WEXITED 0 -> () | Unix.WEXITED i -> - failwithf "pod2text: process exited with non-zero status (%d)" i + failwithf "pod2text: process exited with non-zero status (%d)" i | Unix.WSIGNALED i | Unix.WSTOPPED i -> - failwithf "pod2text: process signalled or stopped by signal %d" i + failwithf "pod2text: process signalled or stopped by signal %d" i ); Hashtbl.add pod2text_memo key lines; let chan = open_out pod2text_memo_filename in @@ -7737,55 +7737,55 @@ static VALUE ruby_guestfs_close (VALUE gv) pr " Data_Get_Struct (gv, guestfs_h, g);\n"; pr " if (!g)\n"; pr " rb_raise (rb_eArgError, \"%%s: used handle after closing it\", \"%s\");\n" - name; + name; pr "\n"; List.iter ( - function - | String n | FileIn n | FileOut n -> - pr " Check_Type (%sv, T_STRING);\n" n; - pr " const char *%s = StringValueCStr (%sv);\n" n n; - pr " if (!%s)\n" n; - pr " rb_raise (rb_eTypeError, \"expected string for parameter %%s of %%s\",\n"; - pr " \"%s\", \"%s\");\n" n name - | OptString n -> - pr " const char *%s = !NIL_P (%sv) ? StringValueCStr (%sv) : NULL;\n" n n n - | StringList n -> - pr " char **%s;\n" n; - pr " Check_Type (%sv, T_ARRAY);\n" n; - pr " {\n"; - pr " int i, len;\n"; - pr " len = RARRAY_LEN (%sv);\n" n; - pr " %s = guestfs_safe_malloc (g, sizeof (char *) * (len+1));\n" - n; - pr " for (i = 0; i < len; ++i) {\n"; - pr " VALUE v = rb_ary_entry (%sv, i);\n" n; - pr " %s[i] = StringValueCStr (v);\n" n; - pr " }\n"; - pr " %s[len] = NULL;\n" n; - pr " }\n"; - | Bool n -> - pr " int %s = RTEST (%sv);\n" n n - | Int n -> - pr " int %s = NUM2INT (%sv);\n" n n + function + | String n | FileIn n | FileOut n -> + pr " Check_Type (%sv, T_STRING);\n" n; + pr " const char *%s = StringValueCStr (%sv);\n" n n; + pr " if (!%s)\n" n; + pr " rb_raise (rb_eTypeError, \"expected string for parameter %%s of %%s\",\n"; + pr " \"%s\", \"%s\");\n" n name + | OptString n -> + pr " const char *%s = !NIL_P (%sv) ? StringValueCStr (%sv) : NULL;\n" n n n + | StringList n -> + pr " char **%s;\n" n; + pr " Check_Type (%sv, T_ARRAY);\n" n; + pr " {\n"; + pr " int i, len;\n"; + pr " len = RARRAY_LEN (%sv);\n" n; + pr " %s = guestfs_safe_malloc (g, sizeof (char *) * (len+1));\n" + n; + pr " for (i = 0; i < len; ++i) {\n"; + pr " VALUE v = rb_ary_entry (%sv, i);\n" n; + pr " %s[i] = StringValueCStr (v);\n" n; + pr " }\n"; + pr " %s[len] = NULL;\n" n; + pr " }\n"; + | Bool n -> + pr " int %s = RTEST (%sv);\n" n n + | Int n -> + pr " int %s = NUM2INT (%sv);\n" n n ) (snd style); pr "\n"; let error_code = - match fst style with - | RErr | RInt _ | RBool _ -> pr " int r;\n"; "-1" - | RInt64 _ -> pr " int64_t r;\n"; "-1" - | RConstString _ | RConstOptString _ -> - pr " const char *r;\n"; "NULL" - | RString _ -> pr " char *r;\n"; "NULL" - | RStringList _ | RHashtable _ -> pr " char **r;\n"; "NULL" - | RStruct (_, typ) -> pr " struct guestfs_%s *r;\n" typ; "NULL" - | RStructList (_, typ) -> - pr " struct guestfs_%s_list *r;\n" typ; "NULL" - | RBufferOut _ -> - pr " char *r;\n"; - pr " size_t size;\n"; - "NULL" in + match fst style with + | RErr | RInt _ | RBool _ -> pr " int r;\n"; "-1" + | RInt64 _ -> pr " int64_t r;\n"; "-1" + | RConstString _ | RConstOptString _ -> + pr " const char *r;\n"; "NULL" + | RString _ -> pr " char *r;\n"; "NULL" + | RStringList _ | RHashtable _ -> pr " char **r;\n"; "NULL" + | RStruct (_, typ) -> pr " struct guestfs_%s *r;\n" typ; "NULL" + | RStructList (_, typ) -> + pr " struct guestfs_%s_list *r;\n" typ; "NULL" + | RBufferOut _ -> + pr " char *r;\n"; + pr " size_t size;\n"; + "NULL" in pr "\n"; pr " r = guestfs_%s " name; @@ -7793,10 +7793,10 @@ static VALUE ruby_guestfs_close (VALUE gv) pr ";\n"; List.iter ( - function - | String _ | FileIn _ | FileOut _ | OptString _ | Bool _ | Int _ -> () - | StringList n -> - pr " free (%s);\n" n + function + | String _ | FileIn _ | FileOut _ | OptString _ | Bool _ | Int _ -> () + | StringList n -> + pr " free (%s);\n" n ) (snd style); pr " if (r == %s)\n" error_code; @@ -7805,52 +7805,52 @@ static VALUE ruby_guestfs_close (VALUE gv) (match fst style with | RErr -> - pr " return Qnil;\n" + pr " return Qnil;\n" | RInt _ | RBool _ -> - pr " return INT2NUM (r);\n" + pr " return INT2NUM (r);\n" | RInt64 _ -> - pr " return ULL2NUM (r);\n" + pr " return ULL2NUM (r);\n" | RConstString _ -> - pr " return rb_str_new2 (r);\n"; + pr " return rb_str_new2 (r);\n"; | RConstOptString _ -> - pr " if (r)\n"; - pr " return rb_str_new2 (r);\n"; - pr " else\n"; - pr " return Qnil;\n"; + pr " if (r)\n"; + pr " return rb_str_new2 (r);\n"; + pr " else\n"; + pr " return Qnil;\n"; | RString _ -> - pr " VALUE rv = rb_str_new2 (r);\n"; - pr " free (r);\n"; - pr " return rv;\n"; + pr " VALUE rv = rb_str_new2 (r);\n"; + pr " free (r);\n"; + pr " return rv;\n"; | RStringList _ -> - pr " int i, len = 0;\n"; - pr " for (i = 0; r[i] != NULL; ++i) len++;\n"; - pr " VALUE rv = rb_ary_new2 (len);\n"; - pr " for (i = 0; r[i] != NULL; ++i) {\n"; - pr " rb_ary_push (rv, rb_str_new2 (r[i]));\n"; - pr " free (r[i]);\n"; - pr " }\n"; - pr " free (r);\n"; - pr " return rv;\n" + pr " int i, len = 0;\n"; + pr " for (i = 0; r[i] != NULL; ++i) len++;\n"; + pr " VALUE rv = rb_ary_new2 (len);\n"; + pr " for (i = 0; r[i] != NULL; ++i) {\n"; + pr " rb_ary_push (rv, rb_str_new2 (r[i]));\n"; + pr " free (r[i]);\n"; + pr " }\n"; + pr " free (r);\n"; + pr " return rv;\n" | RStruct (_, typ) -> - let cols = cols_of_struct typ in - generate_ruby_struct_code typ cols + let cols = cols_of_struct typ in + generate_ruby_struct_code typ cols | RStructList (_, typ) -> - let cols = cols_of_struct typ in - generate_ruby_struct_list_code typ cols + let cols = cols_of_struct typ in + generate_ruby_struct_list_code typ cols | RHashtable _ -> - pr " VALUE rv = rb_hash_new ();\n"; - pr " int i;\n"; - pr " for (i = 0; r[i] != NULL; i+=2) {\n"; - pr " rb_hash_aset (rv, rb_str_new2 (r[i]), rb_str_new2 (r[i+1]));\n"; - pr " free (r[i]);\n"; - pr " free (r[i+1]);\n"; - pr " }\n"; - pr " free (r);\n"; - pr " return rv;\n" + pr " VALUE rv = rb_hash_new ();\n"; + pr " int i;\n"; + pr " for (i = 0; r[i] != NULL; i+=2) {\n"; + pr " rb_hash_aset (rv, rb_str_new2 (r[i]), rb_str_new2 (r[i+1]));\n"; + pr " free (r[i]);\n"; + pr " free (r[i+1]);\n"; + pr " }\n"; + pr " free (r);\n"; + pr " return rv;\n" | RBufferOut _ -> - pr " VALUE rv = rb_str_new (r, size);\n"; - pr " free (r);\n"; - pr " return rv;\n"; + pr " VALUE rv = rb_str_new (r, size);\n"; + pr " free (r);\n"; + pr " return rv;\n"; ); pr "}\n"; @@ -7884,23 +7884,23 @@ and generate_ruby_struct_code typ cols = List.iter ( function | name, FString -> - pr " rb_hash_aset (rv, rb_str_new2 (\"%s\"), rb_str_new2 (r->%s));\n" name name + pr " rb_hash_aset (rv, rb_str_new2 (\"%s\"), rb_str_new2 (r->%s));\n" name name | name, FBuffer -> - pr " rb_hash_aset (rv, rb_str_new2 (\"%s\"), rb_str_new (r->%s, r->%s_len));\n" name name name + pr " rb_hash_aset (rv, rb_str_new2 (\"%s\"), rb_str_new (r->%s, r->%s_len));\n" name name name | name, FUUID -> - pr " rb_hash_aset (rv, rb_str_new2 (\"%s\"), rb_str_new (r->%s, 32));\n" name name + pr " rb_hash_aset (rv, rb_str_new2 (\"%s\"), rb_str_new (r->%s, 32));\n" name name | name, (FBytes|FUInt64) -> - pr " rb_hash_aset (rv, rb_str_new2 (\"%s\"), ULL2NUM (r->%s));\n" name name + pr " rb_hash_aset (rv, rb_str_new2 (\"%s\"), ULL2NUM (r->%s));\n" name name | name, FInt64 -> - pr " rb_hash_aset (rv, rb_str_new2 (\"%s\"), LL2NUM (r->%s));\n" name name + pr " rb_hash_aset (rv, rb_str_new2 (\"%s\"), LL2NUM (r->%s));\n" name name | name, FUInt32 -> - pr " rb_hash_aset (rv, rb_str_new2 (\"%s\"), UINT2NUM (r->%s));\n" name name + pr " rb_hash_aset (rv, rb_str_new2 (\"%s\"), UINT2NUM (r->%s));\n" name name | name, FInt32 -> - pr " rb_hash_aset (rv, rb_str_new2 (\"%s\"), INT2NUM (r->%s));\n" name name + pr " rb_hash_aset (rv, rb_str_new2 (\"%s\"), INT2NUM (r->%s));\n" name name | name, FOptPercent -> - pr " rb_hash_aset (rv, rb_str_new2 (\"%s\"), rb_dbl2big (r->%s));\n" name name + pr " rb_hash_aset (rv, rb_str_new2 (\"%s\"), rb_dbl2big (r->%s));\n" name name | name, FChar -> (* XXX wrong? *) - pr " rb_hash_aset (rv, rb_str_new2 (\"%s\"), ULL2NUM (r->%s));\n" name name + pr " rb_hash_aset (rv, rb_str_new2 (\"%s\"), ULL2NUM (r->%s));\n" name name ) cols; pr " guestfs_free_%s (r);\n" typ; pr " return rv;\n" @@ -7914,23 +7914,23 @@ and generate_ruby_struct_list_code typ cols = List.iter ( function | name, FString -> - pr " rb_hash_aset (hv, rb_str_new2 (\"%s\"), rb_str_new2 (r->val[i].%s));\n" name name + pr " rb_hash_aset (hv, rb_str_new2 (\"%s\"), rb_str_new2 (r->val[i].%s));\n" name name | name, FBuffer -> - pr " rb_hash_aset (hv, rb_str_new2 (\"%s\"), rb_str_new (r->val[i].%s, r->val[i].%s_len));\n" name name name + pr " rb_hash_aset (hv, rb_str_new2 (\"%s\"), rb_str_new (r->val[i].%s, r->val[i].%s_len));\n" name name name | name, FUUID -> - pr " rb_hash_aset (hv, rb_str_new2 (\"%s\"), rb_str_new (r->val[i].%s, 32));\n" name name + pr " rb_hash_aset (hv, rb_str_new2 (\"%s\"), rb_str_new (r->val[i].%s, 32));\n" name name | name, (FBytes|FUInt64) -> - pr " rb_hash_aset (hv, rb_str_new2 (\"%s\"), ULL2NUM (r->val[i].%s));\n" name name + pr " rb_hash_aset (hv, rb_str_new2 (\"%s\"), ULL2NUM (r->val[i].%s));\n" name name | name, FInt64 -> - pr " rb_hash_aset (hv, rb_str_new2 (\"%s\"), LL2NUM (r->val[i].%s));\n" name name + pr " rb_hash_aset (hv, rb_str_new2 (\"%s\"), LL2NUM (r->val[i].%s));\n" name name | name, FUInt32 -> - pr " rb_hash_aset (hv, rb_str_new2 (\"%s\"), UINT2NUM (r->val[i].%s));\n" name name + pr " rb_hash_aset (hv, rb_str_new2 (\"%s\"), UINT2NUM (r->val[i].%s));\n" name name | name, FInt32 -> - pr " rb_hash_aset (hv, rb_str_new2 (\"%s\"), INT2NUM (r->val[i].%s));\n" name name + pr " rb_hash_aset (hv, rb_str_new2 (\"%s\"), INT2NUM (r->val[i].%s));\n" name name | name, FOptPercent -> - pr " rb_hash_aset (hv, rb_str_new2 (\"%s\"), rb_dbl2big (r->val[i].%s));\n" name name + pr " rb_hash_aset (hv, rb_str_new2 (\"%s\"), rb_dbl2big (r->val[i].%s));\n" name name | name, FChar -> (* XXX wrong? *) - pr " rb_hash_aset (hv, rb_str_new2 (\"%s\"), ULL2NUM (r->val[i].%s));\n" name name + pr " rb_hash_aset (hv, rb_str_new2 (\"%s\"), ULL2NUM (r->val[i].%s));\n" name name ) cols; pr " rb_ary_push (rv, hv);\n"; pr " }\n"; @@ -8010,41 +8010,41 @@ public class GuestFS { List.iter ( fun (name, style, _, flags, _, shortdesc, longdesc) -> if not (List.mem NotInDocs flags); then ( - let doc = replace_str longdesc "C<guestfs_" "C<g." in - let doc = - if List.mem ProtocolLimitWarning flags then - doc ^ "\n\n" ^ protocol_limit_warning - else doc in - let doc = - if List.mem DangerWillRobinson flags then - doc ^ "\n\n" ^ danger_will_robinson - else doc in - let doc = - match deprecation_notice flags with - | None -> doc - | Some txt -> doc ^ "\n\n" ^ txt in - let doc = pod2text ~width:60 name doc in - let doc = List.map ( (* RHBZ#501883 *) - function - | "" -> "<p>" - | nonempty -> nonempty - ) doc in - let doc = String.concat "\n * " doc in - - pr " /**\n"; - pr " * %s\n" shortdesc; - pr " * <p>\n"; - pr " * %s\n" doc; - pr " * @throws LibGuestFSException\n"; - pr " */\n"; - pr " "; + let doc = replace_str longdesc "C<guestfs_" "C<g." in + let doc = + if List.mem ProtocolLimitWarning flags then + doc ^ "\n\n" ^ protocol_limit_warning + else doc in + let doc = + if List.mem DangerWillRobinson flags then + doc ^ "\n\n" ^ danger_will_robinson + else doc in + let doc = + match deprecation_notice flags with + | None -> doc + | Some txt -> doc ^ "\n\n" ^ txt in + let doc = pod2text ~width:60 name doc in + let doc = List.map ( (* RHBZ#501883 *) + function + | "" -> "<p>" + | nonempty -> nonempty + ) doc in + let doc = String.concat "\n * " doc in + + pr " /**\n"; + pr " * %s\n" shortdesc; + pr " * <p>\n"; + pr " * %s\n" doc; + pr " * @throws LibGuestFSException\n"; + pr " */\n"; + pr " "; ); generate_java_prototype ~public:true ~semicolon:false name style; pr "\n"; pr " {\n"; pr " if (g == 0)\n"; pr " throw new LibGuestFSException (\"%s: handle is closed\");\n" - name; + name; pr " "; if fst style <> RErr then pr "return "; pr "_%s " name; @@ -8108,13 +8108,13 @@ and generate_java_prototype ?(public=false) ?(privat=false) ?(native=false) | OptString n | FileIn n | FileOut n -> - pr "String %s" n + pr "String %s" n | StringList n -> - pr "String[] %s" n + pr "String[] %s" n | Bool n -> - pr "boolean %s" n + pr "boolean %s" n | Int n -> - pr "int %s" n + pr "int %s" n ) (snd style); pr ")\n"; @@ -8145,8 +8145,8 @@ public class %s { | name, (FUInt32|FInt32) -> pr " public int %s;\n" name | name, FChar -> pr " public char %s;\n" name | name, FOptPercent -> - pr " /* The next field is [0..100] or -1 meaning 'not present': */\n"; - pr " public float %s;\n" name + pr " /* The next field is [0..100] or -1 meaning 'not present': */\n"; + pr " public float %s;\n" name ) cols; pr "}\n" @@ -8210,9 +8210,9 @@ Java_com_redhat_et_libguestfs_GuestFS__1close | RConstString _ | RConstOptString _ | RString _ | RBufferOut _ -> pr "jstring "; | RStruct _ | RHashtable _ -> - pr "jobject "; + pr "jobject "; | RStringList _ | RStructList _ -> - pr "jobjectArray "; + pr "jobjectArray "; ); pr "JNICALL\n"; pr "Java_com_redhat_et_libguestfs_GuestFS_"; @@ -8220,107 +8220,107 @@ Java_com_redhat_et_libguestfs_GuestFS__1close pr "\n"; pr " (JNIEnv *env, jobject obj, jlong jg"; List.iter ( - function - | String n - | OptString n - | FileIn n - | FileOut n -> - pr ", jstring j%s" n - | StringList n -> - pr ", jobjectArray j%s" n - | Bool n -> - pr ", jboolean j%s" n - | Int n -> - pr ", jint j%s" n + function + | String n + | OptString n + | FileIn n + | FileOut n -> + pr ", jstring j%s" n + | StringList n -> + pr ", jobjectArray j%s" n + | Bool n -> + pr ", jboolean j%s" n + | Int n -> + pr ", jint j%s" n ) (snd style); pr ")\n"; pr "{\n"; pr " guestfs_h *g = (guestfs_h *) (long) jg;\n"; let error_code, no_ret = - match fst style with - | RErr -> pr " int r;\n"; "-1", "" - | RBool _ - | RInt _ -> pr " int r;\n"; "-1", "0" - | RInt64 _ -> pr " int64_t r;\n"; "-1", "0" - | RConstString _ -> pr " const char *r;\n"; "NULL", "NULL" - | RConstOptString _ -> pr " const char *r;\n"; "NULL", "NULL" - | RString _ -> - pr " jstring jr;\n"; - pr " char *r;\n"; "NULL", "NULL" - | RStringList _ -> - pr " jobjectArray jr;\n"; - pr " int r_len;\n"; - pr " jclass cl;\n"; - pr " jstring jstr;\n"; - pr " char **r;\n"; "NULL", "NULL" - | RStruct (_, typ) -> - pr " jobject jr;\n"; - pr " jclass cl;\n"; - pr " jfieldID fl;\n"; - pr " struct guestfs_%s *r;\n" typ; "NULL", "NULL" - | RStructList (_, typ) -> - pr " jobjectArray jr;\n"; - pr " jclass cl;\n"; - pr " jfieldID fl;\n"; - pr " jobject jfl;\n"; - pr " struct guestfs_%s_list *r;\n" typ; "NULL", "NULL" - | RHashtable _ -> pr " char **r;\n"; "NULL", "NULL" - | RBufferOut _ -> - pr " jstring jr;\n"; - pr " char *r;\n"; - pr " size_t size;\n"; - "NULL", "NULL" in + match fst style with + | RErr -> pr " int r;\n"; "-1", "" + | RBool _ + | RInt _ -> pr " int r;\n"; "-1", "0" + | RInt64 _ -> pr " int64_t r;\n"; "-1", "0" + | RConstString _ -> pr " const char *r;\n"; "NULL", "NULL" + | RConstOptString _ -> pr " const char *r;\n"; "NULL", "NULL" + | RString _ -> + pr " jstring jr;\n"; + pr " char *r;\n"; "NULL", "NULL" + | RStringList _ -> + pr " jobjectArray jr;\n"; + pr " int r_len;\n"; + pr " jclass cl;\n"; + pr " jstring jstr;\n"; + pr " char **r;\n"; "NULL", "NULL" + | RStruct (_, typ) -> + pr " jobject jr;\n"; + pr " jclass cl;\n"; + pr " jfieldID fl;\n"; + pr " struct guestfs_%s *r;\n" typ; "NULL", "NULL" + | RStructList (_, typ) -> + pr " jobjectArray jr;\n"; + pr " jclass cl;\n"; + pr " jfieldID fl;\n"; + pr " jobject jfl;\n"; + pr " struct guestfs_%s_list *r;\n" typ; "NULL", "NULL" + | RHashtable _ -> pr " char **r;\n"; "NULL", "NULL" + | RBufferOut _ -> + pr " jstring jr;\n"; + pr " char *r;\n"; + pr " size_t size;\n"; + "NULL", "NULL" in List.iter ( - function - | String n - | OptString n - | FileIn n - | FileOut n -> - pr " const char *%s;\n" n - | StringList n -> - pr " int %s_len;\n" n; - pr " const char **%s;\n" n - | Bool n - | Int n -> - pr " int %s;\n" n + function + | String n + | OptString n + | FileIn n + | FileOut n -> + pr " const char *%s;\n" n + | StringList n -> + pr " int %s_len;\n" n; + pr " const char **%s;\n" n + | Bool n + | Int n -> + pr " int %s;\n" n ) (snd style); let needs_i = - (match fst style with - | RStringList _ | RStructList _ -> true - | RErr | RBool _ | RInt _ | RInt64 _ | RConstString _ - | RConstOptString _ - | RString _ | RBufferOut _ | RStruct _ | RHashtable _ -> false) || - List.exists (function StringList _ -> true | _ -> false) (snd style) in + (match fst style with + | RStringList _ | RStructList _ -> true + | RErr | RBool _ | RInt _ | RInt64 _ | RConstString _ + | RConstOptString _ + | RString _ | RBufferOut _ | RStruct _ | RHashtable _ -> false) || + List.exists (function StringList _ -> true | _ -> false) (snd style) in if needs_i then - pr " int i;\n"; + pr " int i;\n"; pr "\n"; (* Get the parameters. *) List.iter ( - function - | String n - | FileIn n - | FileOut n -> - pr " %s = (*env)->GetStringUTFChars (env, j%s, NULL);\n" n n - | OptString n -> - (* This is completely undocumented, but Java null becomes - * a NULL parameter. - *) - pr " %s = j%s ? (*env)->GetStringUTFChars (env, j%s, NULL) : NULL;\n" n n n - | StringList n -> - pr " %s_len = (*env)->GetArrayLength (env, j%s);\n" n n; - pr " %s = guestfs_safe_malloc (g, sizeof (char *) * (%s_len+1));\n" n n; - pr " for (i = 0; i < %s_len; ++i) {\n" n; - pr " jobject o = (*env)->GetObjectArrayElement (env, j%s, i);\n" - n; - pr " %s[i] = (*env)->GetStringUTFChars (env, o, NULL);\n" n; - pr " }\n"; - pr " %s[%s_len] = NULL;\n" n n; - | Bool n - | Int n -> - pr " %s = j%s;\n" n n + function + | String n + | FileIn n + | FileOut n -> + pr " %s = (*env)->GetStringUTFChars (env, j%s, NULL);\n" n n + | OptString n -> + (* This is completely undocumented, but Java null becomes + * a NULL parameter. + *) + pr " %s = j%s ? (*env)->GetStringUTFChars (env, j%s, NULL) : NULL;\n" n n n + | StringList n -> + pr " %s_len = (*env)->GetArrayLength (env, j%s);\n" n n; + pr " %s = guestfs_safe_malloc (g, sizeof (char *) * (%s_len+1));\n" n n; + pr " for (i = 0; i < %s_len; ++i) {\n" n; + pr " jobject o = (*env)->GetObjectArrayElement (env, j%s, i);\n" + n; + pr " %s[i] = (*env)->GetStringUTFChars (env, o, NULL);\n" n; + pr " }\n"; + pr " %s[%s_len] = NULL;\n" n n; + | Bool n + | Int n -> + pr " %s = j%s;\n" n n ) (snd style); (* Make the call. *) @@ -8330,23 +8330,23 @@ Java_com_redhat_et_libguestfs_GuestFS__1close (* Release the parameters. *) List.iter ( - function - | String n - | FileIn n - | FileOut n -> - pr " (*env)->ReleaseStringUTFChars (env, j%s, %s);\n" n n - | OptString n -> - pr " if (j%s)\n" n; - pr " (*env)->ReleaseStringUTFChars (env, j%s, %s);\n" n n - | StringList n -> - pr " for (i = 0; i < %s_len; ++i) {\n" n; - pr " jobject o = (*env)->GetObjectArrayElement (env, j%s, i);\n" - n; - pr " (*env)->ReleaseStringUTFChars (env, o, %s[i]);\n" n; - pr " }\n"; - pr " free (%s);\n" n - | Bool n - | Int n -> () + function + | String n + | FileIn n + | FileOut n -> + pr " (*env)->ReleaseStringUTFChars (env, j%s, %s);\n" n n + | OptString n -> + pr " if (j%s)\n" n; + pr " (*env)->ReleaseStringUTFChars (env, j%s, %s);\n" n n + | StringList n -> + pr " for (i = 0; i < %s_len; ++i) {\n" n; + pr " jobject o = (*env)->GetObjectArrayElement (env, j%s, i);\n" + n; + pr " (*env)->ReleaseStringUTFChars (env, o, %s[i]);\n" n; + pr " }\n"; + pr " free (%s);\n" n + | Bool n + | Int n -> () ) (snd style); (* Check for errors. *) @@ -8363,39 +8363,39 @@ Java_com_redhat_et_libguestfs_GuestFS__1close | RInt64 _ -> pr " return (jlong) r;\n" | RConstString _ -> pr " return (*env)->NewStringUTF (env, r);\n" | RConstOptString _ -> - pr " return (*env)->NewStringUTF (env, r); /* XXX r NULL? */\n" + pr " return (*env)->NewStringUTF (env, r); /* XXX r NULL? */\n" | RString _ -> - pr " jr = (*env)->NewStringUTF (env, r);\n"; - pr " free (r);\n"; - pr " return jr;\n" + pr " jr = (*env)->NewStringUTF (env, r);\n"; + pr " free (r);\n"; + pr " return jr;\n" | RStringList _ -> - pr " for (r_len = 0; r[r_len] != NULL; ++r_len) ;\n"; - pr " cl = (*env)->FindClass (env, \"java/lang/String\");\n"; - pr " jstr = (*env)->NewStringUTF (env, \"\");\n"; - pr " jr = (*env)->NewObjectArray (env, r_len, cl, jstr);\n"; - pr " for (i = 0; i < r_len; ++i) {\n"; - pr " jstr = (*env)->NewStringUTF (env, r[i]);\n"; - pr " (*env)->SetObjectArrayElement (env, jr, i, jstr);\n"; - pr " free (r[i]);\n"; - pr " }\n"; - pr " free (r);\n"; - pr " return jr;\n" + pr " for (r_len = 0; r[r_len] != NULL; ++r_len) ;\n"; + pr " cl = (*env)->FindClass (env, \"java/lang/String\");\n"; + pr " jstr = (*env)->NewStringUTF (env, \"\");\n"; + pr " jr = (*env)->NewObjectArray (env, r_len, cl, jstr);\n"; + pr " for (i = 0; i < r_len; ++i) {\n"; + pr " jstr = (*env)->NewStringUTF (env, r[i]);\n"; + pr " (*env)->SetObjectArrayElement (env, jr, i, jstr);\n"; + pr " free (r[i]);\n"; + pr " }\n"; + pr " free (r);\n"; + pr " return jr;\n" | RStruct (_, typ) -> - let jtyp = java_name_of_struct typ in - let cols = cols_of_struct typ in - generate_java_struct_return typ jtyp cols + let jtyp = java_name_of_struct typ in + let cols = cols_of_struct typ in + generate_java_struct_return typ jtyp cols | RStructList (_, typ) -> - let jtyp = java_name_of_struct typ in - let cols = cols_of_struct typ in - generate_java_struct_list_return typ jtyp cols + let jtyp = java_name_of_struct typ in + let cols = cols_of_struct typ in + generate_java_struct_list_return typ jtyp cols | RHashtable _ -> - (* XXX *) - pr " throw_exception (env, \"%s: internal error: please let us know how to make a Java HashMap from JNI bindings!\");\n" name; - pr " return NULL;\n" + (* XXX *) + pr " throw_exception (env, \"%s: internal error: please let us know how to make a Java HashMap from JNI bindings!\");\n" name; + pr " return NULL;\n" | RBufferOut _ -> - pr " jr = (*env)->NewStringUTF (env, r); /* XXX size */\n"; - pr " free (r);\n"; - pr " return jr;\n" + pr " jr = (*env)->NewStringUTF (env, r); /* XXX size */\n"; + pr " free (r);\n"; + pr " return jr;\n" ); pr "}\n"; @@ -8408,37 +8408,37 @@ and generate_java_struct_return typ jtyp cols = List.iter ( function | name, FString -> - pr " fl = (*env)->GetFieldID (env, cl, \"%s\", \"Ljava/lang/String;\");\n" name; - pr " (*env)->SetObjectField (env, jr, fl, (*env)->NewStringUTF (env, r->%s));\n" name; + pr " fl = (*env)->GetFieldID (env, cl, \"%s\", \"Ljava/lang/String;\");\n" name; + pr " (*env)->SetObjectField (env, jr, fl, (*env)->NewStringUTF (env, r->%s));\n" name; | name, FUUID -> - pr " {\n"; - pr " char s[33];\n"; - pr " memcpy (s, r->%s, 32);\n" name; - pr " s[32] = 0;\n"; - pr " fl = (*env)->GetFieldID (env, cl, \"%s\", \"Ljava/lang/String;\");\n" name; - pr " (*env)->SetObjectField (env, jr, fl, (*env)->NewStringUTF (env, s));\n"; - pr " }\n"; + pr " {\n"; + pr " char s[33];\n"; + pr " memcpy (s, r->%s, 32);\n" name; + pr " s[32] = 0;\n"; + pr " fl = (*env)->GetFieldID (env, cl, \"%s\", \"Ljava/lang/String;\");\n" name; + pr " (*env)->SetObjectField (env, jr, fl, (*env)->NewStringUTF (env, s));\n"; + pr " }\n"; | name, FBuffer -> - pr " {\n"; - pr " int len = r->%s_len;\n" name; - pr " char s[len+1];\n"; - pr " memcpy (s, r->%s, len);\n" name; - pr " s[len] = 0;\n"; - pr " fl = (*env)->GetFieldID (env, cl, \"%s\", \"Ljava/lang/String;\");\n" name; - pr " (*env)->SetObjectField (env, jr, fl, (*env)->NewStringUTF (env, s));\n"; - pr " }\n"; + pr " {\n"; + pr " int len = r->%s_len;\n" name; + pr " char s[len+1];\n"; + pr " memcpy (s, r->%s, len);\n" name; + pr " s[len] = 0;\n"; + pr " fl = (*env)->GetFieldID (env, cl, \"%s\", \"Ljava/lang/String;\");\n" name; + pr " (*env)->SetObjectField (env, jr, fl, (*env)->NewStringUTF (env, s));\n"; + pr " }\n"; | name, (FBytes|FUInt64|FInt64) -> - pr " fl = (*env)->GetFieldID (env, cl, \"%s\", \"J\");\n" name; - pr " (*env)->SetLongField (env, jr, fl, r->%s);\n" name; + pr " fl = (*env)->GetFieldID (env, cl, \"%s\", \"J\");\n" name; + pr " (*env)->SetLongField (env, jr, fl, r->%s);\n" name; | name, (FUInt32|FInt32) -> - pr " fl = (*env)->GetFieldID (env, cl, \"%s\", \"I\");\n" name; - pr " (*env)->SetLongField (env, jr, fl, r->%s);\n" name; + pr " fl = (*env)->GetFieldID (env, cl, \"%s\", \"I\");\n" name; + pr " (*env)->SetLongField (env, jr, fl, r->%s);\n" name; | name, FOptPercent -> - pr " fl = (*env)->GetFieldID (env, cl, \"%s\", \"F\");\n" name; - pr " (*env)->SetFloatField (env, jr, fl, r->%s);\n" name; + pr " fl = (*env)->GetFieldID (env, cl, \"%s\", \"F\");\n" name; + pr " (*env)->SetFloatField (env, jr, fl, r->%s);\n" name; | name, FChar -> - pr " fl = (*env)->GetFieldID (env, cl, \"%s\", \"C\");\n" name; - pr " (*env)->SetLongField (env, jr, fl, r->%s);\n" name; + pr " fl = (*env)->GetFieldID (env, cl, \"%s\", \"C\");\n" name; + pr " (*env)->SetLongField (env, jr, fl, r->%s);\n" name; ) cols; pr " free (r);\n"; pr " return jr;\n" @@ -8451,37 +8451,37 @@ and generate_java_struct_list_return typ jtyp cols = List.iter ( function | name, FString -> - pr " fl = (*env)->GetFieldID (env, cl, \"%s\", \"Ljava/lang/String;\");\n" name; - pr " (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, r->val[i].%s));\n" name; + pr " fl = (*env)->GetFieldID (env, cl, \"%s\", \"Ljava/lang/String;\");\n" name; + pr " (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, r->val[i].%s));\n" name; | name, FUUID -> - pr " {\n"; - pr " char s[33];\n"; - pr " memcpy (s, r->val[i].%s, 32);\n" name; - pr " s[32] = 0;\n"; - pr " fl = (*env)->GetFieldID (env, cl, \"%s\", \"Ljava/lang/String;\");\n" name; - pr " (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, s));\n"; - pr " }\n"; + pr " {\n"; + pr " char s[33];\n"; + pr " memcpy (s, r->val[i].%s, 32);\n" name; + pr " s[32] = 0;\n"; + pr " fl = (*env)->GetFieldID (env, cl, \"%s\", \"Ljava/lang/String;\");\n" name; + pr " (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, s));\n"; + pr " }\n"; | name, FBuffer -> - pr " {\n"; - pr " int len = r->val[i].%s_len;\n" name; - pr " char s[len+1];\n"; - pr " memcpy (s, r->val[i].%s, len);\n" name; - pr " s[len] = 0;\n"; - pr " fl = (*env)->GetFieldID (env, cl, \"%s\", \"Ljava/lang/String;\");\n" name; - pr " (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, s));\n"; - pr " }\n"; + pr " {\n"; + pr " int len = r->val[i].%s_len;\n" name; + pr " char s[len+1];\n"; + pr " memcpy (s, r->val[i].%s, len);\n" name; + pr " s[len] = 0;\n"; + pr " fl = (*env)->GetFieldID (env, cl, \"%s\", \"Ljava/lang/String;\");\n" name; + pr " (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, s));\n"; + pr " }\n"; | name, (FBytes|FUInt64|FInt64) -> - pr " fl = (*env)->GetFieldID (env, cl, \"%s\", \"J\");\n" name; - pr " (*env)->SetLongField (env, jfl, fl, r->val[i].%s);\n" name; + pr " fl = (*env)->GetFieldID (env, cl, \"%s\", \"J\");\n" name; + pr " (*env)->SetLongField (env, jfl, fl, r->val[i].%s);\n" name; | name, (FUInt32|FInt32) -> - pr " fl = (*env)->GetFieldID (env, cl, \"%s\", \"I\");\n" name; - pr " (*env)->SetLongField (env, jfl, fl, r->val[i].%s);\n" name; + pr " fl = (*env)->GetFieldID (env, cl, \"%s\", \"I\");\n" name; + pr " (*env)->SetLongField (env, jfl, fl, r->val[i].%s);\n" name; | name, FOptPercent -> - pr " fl = (*env)->GetFieldID (env, cl, \"%s\", \"F\");\n" name; - pr " (*env)->SetFloatField (env, jfl, fl, r->val[i].%s);\n" name; + pr " fl = (*env)->GetFieldID (env, cl, \"%s\", \"F\");\n" name; + pr " (*env)->SetFloatField (env, jfl, fl, r->val[i].%s);\n" name; | name, FChar -> - pr " fl = (*env)->GetFieldID (env, cl, \"%s\", \"C\");\n" name; - pr " (*env)->SetLongField (env, jfl, fl, r->val[i].%s);\n" name; + pr " fl = (*env)->GetFieldID (env, cl, \"%s\", \"C\");\n" name; + pr " (*env)->SetLongField (env, jfl, fl, r->val[i].%s);\n" name; ) cols; pr " (*env)->SetObjectArrayElement (env, jfl, i, jfl);\n"; pr " }\n"; @@ -8579,71 +8579,71 @@ last_error h = do List.iter ( fun (name, style, _, _, _, _, _) -> if can_generate style then ( - pr "foreign import ccall unsafe \"guestfs_%s\" c_%s\n" name name; - pr " :: "; - generate_haskell_prototype ~handle:"GuestfsP" style; - pr "\n"; - pr "\n"; - pr "%s :: " name; - generate_haskell_prototype ~handle:"GuestfsH" ~hs:true style; - pr "\n"; - pr "%s %s = do\n" name - (String.concat " " ("h" :: List.map name_of_argt (snd style))); - pr " r <- "; - (* Convert pointer arguments using with* functions. *) - List.iter ( - function - | FileIn n - | FileOut n - | String n -> pr "withCString %s $ \\%s -> " n n - | OptString n -> pr "maybeWith withCString %s $ \\%s -> " n n - | StringList n -> pr "withMany withCString %s $ \\%s -> withArray0 nullPtr %s $ \\%s -> " n n n n - | Bool _ | Int _ -> () - ) (snd style); - (* Convert integer arguments. *) - let args = - List.map ( - function - | Bool n -> sprintf "(fromBool %s)" n - | Int n -> sprintf "(fromIntegral %s)" n - | FileIn n | FileOut n | String n | OptString n | StringList n -> n - ) (snd style) in - pr "withForeignPtr h (\\p -> c_%s %s)\n" name - (String.concat " " ("p" :: args)); - (match fst style with - | RErr | RInt _ | RInt64 _ | RBool _ -> - pr " if (r == -1)\n"; - pr " then do\n"; - pr " err <- last_error h\n"; - pr " fail err\n"; - | RConstString _ | RConstOptString _ | RString _ - | RStringList _ | RStruct _ - | RStructList _ | RHashtable _ | RBufferOut _ -> - pr " if (r == nullPtr)\n"; - pr " then do\n"; - pr " err <- last_error h\n"; - pr " fail err\n"; - ); - (match fst style with - | RErr -> - pr " else return ()\n" - | RInt _ -> - pr " else return (fromIntegral r)\n" - | RInt64 _ -> - pr " else return (fromIntegral r)\n" - | RBool _ -> - pr " else return (toBool r)\n" - | RConstString _ - | RConstOptString _ - | RString _ - | RStringList _ - | RStruct _ - | RStructList _ - | RHashtable _ - | RBufferOut _ -> - pr " else return ()\n" (* XXXXXXXXXXXXXXXXXXXX *) - ); - pr "\n"; + pr "foreign import ccall unsafe \"guestfs_%s\" c_%s\n" name name; + pr " :: "; + generate_haskell_prototype ~handle:"GuestfsP" style; + pr "\n"; + pr "\n"; + pr "%s :: " name; + generate_haskell_prototype ~handle:"GuestfsH" ~hs:true style; + pr "\n"; + pr "%s %s = do\n" name + (String.concat " " ("h" :: List.map name_of_argt (snd style))); + pr " r <- "; + (* Convert pointer arguments using with* functions. *) + List.iter ( + function + | FileIn n + | FileOut n + | String n -> pr "withCString %s $ \\%s -> " n n + | OptString n -> pr "maybeWith withCString %s $ \\%s -> " n n + | StringList n -> pr "withMany withCString %s $ \\%s -> withArray0 nullPtr %s $ \\%s -> " n n n n + | Bool _ | Int _ -> () + ) (snd style); + (* Convert integer arguments. *) + let args = + List.map ( + function + | Bool n -> sprintf "(fromBool %s)" n + | Int n -> sprintf "(fromIntegral %s)" n + | FileIn n | FileOut n | String n | OptString n | StringList n -> n + ) (snd style) in + pr "withForeignPtr h (\\p -> c_%s %s)\n" name + (String.concat " " ("p" :: args)); + (match fst style with + | RErr | RInt _ | RInt64 _ | RBool _ -> + pr " if (r == -1)\n"; + pr " then do\n"; + pr " err <- last_error h\n"; + pr " fail err\n"; + | RConstString _ | RConstOptString _ | RString _ + | RStringList _ | RStruct _ + | RStructList _ | RHashtable _ | RBufferOut _ -> + pr " if (r == nullPtr)\n"; + pr " then do\n"; + pr " err <- last_error h\n"; + pr " fail err\n"; + ); + (match fst style with + | RErr -> + pr " else return ()\n" + | RInt _ -> + pr " else return (fromIntegral r)\n" + | RInt64 _ -> + pr " else return (fromIntegral r)\n" + | RBool _ -> + pr " else return (toBool r)\n" + | RConstString _ + | RConstOptString _ + | RString _ + | RStringList _ + | RStruct _ + | RStructList _ + | RHashtable _ + | RBufferOut _ -> + pr " else return ()\n" (* XXXXXXXXXXXXXXXXXXXX *) + ); + pr "\n"; ) ) all_functions @@ -8748,89 +8748,89 @@ print_strings (char * const* const argv) List.iter ( fun (name, style, _, _, _, _, _) -> if String.sub name (String.length name - 3) 3 <> "err" then ( - pr "/* Test normal return. */\n"; - generate_prototype ~extern:false ~semicolon:false ~newline:true - ~handle:"g" ~prefix:"guestfs_" name style; - pr "{\n"; - (match fst style with - | RErr -> - pr " return 0;\n" - | RInt _ -> - pr " int r;\n"; - pr " sscanf (val, \"%%d\", &r);\n"; - pr " return r;\n" - | RInt64 _ -> - pr " int64_t r;\n"; - pr " sscanf (val, \"%%\" SCNi64, &r);\n"; - pr " return r;\n" - | RBool _ -> - pr " return strcmp (val, \"true\") == 0;\n" - | RConstString _ - | RConstOptString _ -> - (* Can't return the input string here. Return a static - * string so we ensure we get a segfault if the caller - * tries to free it. - *) - pr " return \"static string\";\n" - | RString _ -> - pr " return strdup (val);\n" - | RStringList _ -> - pr " char **strs;\n"; - pr " int n, i;\n"; - pr " sscanf (val, \"%%d\", &n);\n"; - pr " strs = safe_malloc (g, (n+1) * sizeof (char *));\n"; - pr " for (i = 0; i < n; ++i) {\n"; - pr " strs[i] = safe_malloc (g, 16);\n"; - pr " snprintf (strs[i], 16, \"%%d\", i);\n"; - pr " }\n"; - pr " strs[n] = NULL;\n"; - pr " return strs;\n" - | RStruct (_, typ) -> - pr " struct guestfs_%s *r;\n" typ; - pr " r = safe_calloc (g, sizeof *r, 1);\n"; - pr " return r;\n" - | RStructList (_, typ) -> - pr " struct guestfs_%s_list *r;\n" typ; - pr " r = safe_calloc (g, sizeof *r, 1);\n"; - pr " sscanf (val, \"%%d\", &r->len);\n"; - pr " r->val = safe_calloc (g, r->len, sizeof *r->val);\n"; - pr " return r;\n" - | RHashtable _ -> - pr " char **strs;\n"; - pr " int n, i;\n"; - pr " sscanf (val, \"%%d\", &n);\n"; - pr " strs = safe_malloc (g, (n*2+1) * sizeof (*strs));\n"; - pr " for (i = 0; i < n; ++i) {\n"; - pr " strs[i*2] = safe_malloc (g, 16);\n"; - pr " strs[i*2+1] = safe_malloc (g, 16);\n"; - pr " snprintf (strs[i*2], 16, \"%%d\", i);\n"; - pr " snprintf (strs[i*2+1], 16, \"%%d\", i);\n"; - pr " }\n"; - pr " strs[n*2] = NULL;\n"; - pr " return strs;\n" - | RBufferOut _ -> - pr " return strdup (val);\n" - ); - pr "}\n"; - pr "\n" + pr "/* Test normal return. */\n"; + generate_prototype ~extern:false ~semicolon:false ~newline:true + ~handle:"g" ~prefix:"guestfs_" name style; + pr "{\n"; + (match fst style with + | RErr -> + pr " return 0;\n" + | RInt _ -> + pr " int r;\n"; + pr " sscanf (val, \"%%d\", &r);\n"; + pr " return r;\n" + | RInt64 _ -> + pr " int64_t r;\n"; + pr " sscanf (val, \"%%\" SCNi64, &r);\n"; + pr " return r;\n" + | RBool _ -> + pr " return strcmp (val, \"true\") == 0;\n" + | RConstString _ + | RConstOptString _ -> + (* Can't return the input string here. Return a static + * string so we ensure we get a segfault if the caller + * tries to free it. + *) + pr " return \"static string\";\n" + | RString _ -> + pr " return strdup (val);\n" + | RStringList _ -> + pr " char **strs;\n"; + pr " int n, i;\n"; + pr " sscanf (val, \"%%d\", &n);\n"; + pr " strs = safe_malloc (g, (n+1) * sizeof (char *));\n"; + pr " for (i = 0; i < n; ++i) {\n"; + pr " strs[i] = safe_malloc (g, 16);\n"; + pr " snprintf (strs[i], 16, \"%%d\", i);\n"; + pr " }\n"; + pr " strs[n] = NULL;\n"; + pr " return strs;\n" + | RStruct (_, typ) -> + pr " struct guestfs_%s *r;\n" typ; + pr " r = safe_calloc (g, sizeof *r, 1);\n"; + pr " return r;\n" + | RStructList (_, typ) -> + pr " struct guestfs_%s_list *r;\n" typ; + pr " r = safe_calloc (g, sizeof *r, 1);\n"; + pr " sscanf (val, \"%%d\", &r->len);\n"; + pr " r->val = safe_calloc (g, r->len, sizeof *r->val);\n"; + pr " return r;\n" + | RHashtable _ -> + pr " char **strs;\n"; + pr " int n, i;\n"; + pr " sscanf (val, \"%%d\", &n);\n"; + pr " strs = safe_malloc (g, (n*2+1) * sizeof (*strs));\n"; + pr " for (i = 0; i < n; ++i) {\n"; + pr " strs[i*2] = safe_malloc (g, 16);\n"; + pr " strs[i*2+1] = safe_malloc (g, 16);\n"; + pr " snprintf (strs[i*2], 16, \"%%d\", i);\n"; + pr " snprintf (strs[i*2+1], 16, \"%%d\", i);\n"; + pr " }\n"; + pr " strs[n*2] = NULL;\n"; + pr " return strs;\n" + | RBufferOut _ -> + pr " return strdup (val);\n" + ); + pr "}\n"; + pr "\n" ) else ( - pr "/* Test error return. */\n"; - generate_prototype ~extern:false ~semicolon:false ~newline:true - ~handle:"g" ~prefix:"guestfs_" name style; - pr "{\n"; - pr " error (g, \"error\");\n"; - (match fst style with - | RErr | RInt _ | RInt64 _ | RBool _ -> - pr " return -1;\n" - | RConstString _ | RConstOptString _ - | RString _ | RStringList _ | RStruct _ - | RStructList _ - | RHashtable _ - | RBufferOut _ -> - pr " return NULL;\n" - ); - pr "}\n"; - pr "\n" + pr "/* Test error return. */\n"; + generate_prototype ~extern:false ~semicolon:false ~newline:true + ~handle:"g" ~prefix:"guestfs_" name style; + pr "{\n"; + pr " error (g, \"error\");\n"; + (match fst style with + | RErr | RInt _ | RInt64 _ | RBool _ -> + pr " return -1;\n" + | RConstString _ | RConstOptString _ + | RString _ | RStringList _ | RStruct _ + | RStructList _ + | RHashtable _ + | RBufferOut _ -> + pr " return NULL;\n" + ); + pr "}\n"; + pr "\n" ) ) tests @@ -8845,15 +8845,15 @@ let () = let mkargs args = String.concat " " ( List.map ( - function - | CallString s -> "\"" ^ s ^ "\"" - | CallOptString None -> "None" - | CallOptString (Some s) -> sprintf "(Some \"%s\")" s - | CallStringList xs -> - "[|" ^ String.concat ";" (List.map (sprintf "\"%s\"") xs) ^ "|]" - | CallInt i when i >= 0 -> string_of_int i - | CallInt i (* when i < 0 *) -> "(" ^ string_of_int i ^ ")" - | CallBool b -> string_of_bool b + function + | CallString s -> "\"" ^ s ^ "\"" + | CallOptString None -> "None" + | CallOptString (Some s) -> sprintf "(Some \"%s\")" s + | CallStringList xs -> + "[|" ^ String.concat ";" (List.map (sprintf "\"%s\"") xs) ^ "|]" + | CallInt i when i >= 0 -> string_of_int i + | CallInt i (* when i < 0 *) -> "(" ^ string_of_int i ^ ")" + | CallBool b -> string_of_bool b ) args ) in @@ -8879,14 +8879,14 @@ my $g = Sys::Guestfs->new (); let mkargs args = String.concat ", " ( List.map ( - function - | CallString s -> "\"" ^ s ^ "\"" - | CallOptString None -> "undef" - | CallOptString (Some s) -> sprintf "\"%s\"" s - | CallStringList xs -> - "[" ^ String.concat "," (List.map (sprintf "\"%s\"") xs) ^ "]" - | CallInt i -> string_of_int i - | CallBool b -> if b then "1" else "0" + function + | CallString s -> "\"" ^ s ^ "\"" + | CallOptString None -> "undef" + | CallOptString (Some s) -> sprintf "\"%s\"" s + | CallStringList xs -> + "[" ^ String.concat "," (List.map (sprintf "\"%s\"") xs) ^ "]" + | CallInt i -> string_of_int i + | CallBool b -> if b then "1" else "0" ) args ) in @@ -8909,14 +8909,14 @@ g = guestfs.GuestFS () let mkargs args = String.concat ", " ( List.map ( - function - | CallString s -> "\"" ^ s ^ "\"" - | CallOptString None -> "None" - | CallOptString (Some s) -> sprintf "\"%s\"" s - | CallStringList xs -> - "[" ^ String.concat "," (List.map (sprintf "\"%s\"") xs) ^ "]" - | CallInt i -> string_of_int i - | CallBool b -> if b then "1" else "0" + function + | CallString s -> "\"" ^ s ^ "\"" + | CallOptString None -> "None" + | CallOptString (Some s) -> sprintf "\"%s\"" s + | CallStringList xs -> + "[" ^ String.concat "," (List.map (sprintf "\"%s\"") xs) ^ "]" + | CallInt i -> string_of_int i + | CallBool b -> if b then "1" else "0" ) args ) in @@ -8939,14 +8939,14 @@ g = Guestfs::create() let mkargs args = String.concat ", " ( List.map ( - function - | CallString s -> "\"" ^ s ^ "\"" - | CallOptString None -> "nil" - | CallOptString (Some s) -> sprintf "\"%s\"" s - | CallStringList xs -> - "[" ^ String.concat "," (List.map (sprintf "\"%s\"") xs) ^ "]" - | CallInt i -> string_of_int i - | CallBool b -> string_of_bool b + function + | CallString s -> "\"" ^ s ^ "\"" + | CallOptString None -> "nil" + | CallOptString (Some s) -> sprintf "\"%s\"" s + | CallStringList xs -> + "[" ^ String.concat "," (List.map (sprintf "\"%s\"") xs) ^ "]" + | CallInt i -> string_of_int i + | CallBool b -> string_of_bool b ) args ) in @@ -8973,15 +8973,15 @@ public class Bindtests { let mkargs args = String.concat ", " ( List.map ( - function - | CallString s -> "\"" ^ s ^ "\"" - | CallOptString None -> "null" - | CallOptString (Some s) -> sprintf "\"%s\"" s - | CallStringList xs -> - "new String[]{" ^ - String.concat "," (List.map (sprintf "\"%s\"") xs) ^ "}" - | CallInt i -> string_of_int i - | CallBool b -> string_of_bool b + function + | CallString s -> "\"" ^ s ^ "\"" + | CallOptString None -> "null" + | CallOptString (Some s) -> sprintf "\"%s\"" s + | CallStringList xs -> + "new String[]{" ^ + String.concat "," (List.map (sprintf "\"%s\"") xs) ^ "}" + | CallInt i -> string_of_int i + | CallBool b -> string_of_bool b ) args ) in @@ -9015,16 +9015,16 @@ main = do let mkargs args = String.concat " " ( List.map ( - function - | CallString s -> "\"" ^ s ^ "\"" - | CallOptString None -> "Nothing" - | CallOptString (Some s) -> sprintf "(Just \"%s\")" s - | CallStringList xs -> - "[" ^ String.concat "," (List.map (sprintf "\"%s\"") xs) ^ "]" - | CallInt i when i < 0 -> "(" ^ string_of_int i ^ ")" - | CallInt i -> string_of_int i - | CallBool true -> "True" - | CallBool false -> "False" + function + | CallString s -> "\"" ^ s ^ "\"" + | CallOptString None -> "Nothing" + | CallOptString (Some s) -> sprintf "(Just \"%s\")" s + | CallStringList xs -> + "[" ^ String.concat "," (List.map (sprintf "\"%s\"") xs) ^ "]" + | CallInt i when i < 0 -> "(" ^ string_of_int i ^ ")" + | CallInt i -> string_of_int i + | CallBool true -> "True" + | CallBool false -> "False" ) args ) in @@ -9040,44 +9040,44 @@ main = do *) and generate_lang_bindtests call = call "test0" [CallString "abc"; CallOptString (Some "def"); - CallStringList []; CallBool false; - CallInt 0; CallString "123"; CallString "456"]; + CallStringList []; CallBool false; + CallInt 0; CallString "123"; CallString "456"]; call "test0" [CallString "abc"; CallOptString None; - CallStringList []; CallBool false; - CallInt 0; CallString "123"; CallString "456"]; + CallStringList []; CallBool false; + CallInt 0; CallString "123"; CallString "456"]; call "test0" [CallString ""; CallOptString (Some "def"); - CallStringList []; CallBool false; - CallInt 0; CallString "123"; CallString "456"]; + CallStringList []; CallBool false; + CallInt 0; CallString "123"; CallString "456"]; call "test0" [CallString ""; CallOptString (Some ""); - CallStringList []; CallBool false; - CallInt 0; CallString "123"; CallString "456"]; + CallStringList []; CallBool false; + CallInt 0; CallString "123"; CallString "456"]; call "test0" [CallString "abc"; CallOptString (Some "def"); - CallStringList ["1"]; CallBool false; - CallInt 0; CallString "123"; CallString "456"]; + CallStringList ["1"]; CallBool false; + CallInt 0; CallString "123"; CallString "456"]; call "test0" [CallString "abc"; CallOptString (Some "def"); - CallStringList ["1"; "2"]; CallBool false; - CallInt 0; CallString "123"; CallString "456"]; + CallStringList ["1"; "2"]; CallBool false; + CallInt 0; CallString "123"; CallString "456"]; call "test0" [CallString "abc"; CallOptString (Some "def"); - CallStringList ["1"]; CallBool true; - CallInt 0; CallString "123"; CallString "456"]; + CallStringList ["1"]; CallBool true; + CallInt 0; CallString "123"; CallString "456"]; call "test0" [CallString "abc"; CallOptString (Some "def"); - CallStringList ["1"]; CallBool false; - CallInt (-1); CallString "123"; CallString "456"]; + CallStringList ["1"]; CallBool false; + CallInt (-1); CallString "123"; CallString "456"]; call "test0" [CallString "abc"; CallOptString (Some "def"); - CallStringList ["1"]; CallBool false; - CallInt (-2); CallString "123"; CallString "456"]; + CallStringList ["1"]; CallBool false; + CallInt (-2); CallString "123"; CallString "456"]; call "test0" [CallString "abc"; CallOptString (Some "def"); - CallStringList ["1"]; CallBool false; - CallInt 1; CallString "123"; CallString "456"]; + CallStringList ["1"]; CallBool false; + CallInt 1; CallString "123"; CallString "456"]; call "test0" [CallString "abc"; CallOptString (Some "def"); - CallStringList ["1"]; CallBool false; - CallInt 2; CallString "123"; CallString "456"]; + CallStringList ["1"]; CallBool false; + CallInt 2; CallString "123"; CallString "456"]; call "test0" [CallString "abc"; CallOptString (Some "def"); - CallStringList ["1"]; CallBool false; - CallInt 4095; CallString "123"; CallString "456"]; + CallStringList ["1"]; CallBool false; + CallInt 4095; CallString "123"; CallString "456"]; call "test0" [CallString "abc"; CallOptString (Some "def"); - CallStringList ["1"]; CallBool false; - CallInt 0; CallString ""; CallString ""] + CallStringList ["1"]; CallBool false; + CallInt 0; CallString ""; CallString ""] (* XXX Add here tests of the return and error functions. *) diff --git a/src/gettext.h b/src/gettext.h index 209921e6..93f32e5b 100644 --- a/src/gettext.h +++ b/src/gettext.h @@ -132,8 +132,8 @@ inline #endif static const char * pgettext_aux (const char *domain, - const char *msg_ctxt_id, const char *msgid, - int category) + const char *msg_ctxt_id, const char *msgid, + int category) { const char *translation = dcgettext (domain, msg_ctxt_id, category); if (translation == msg_ctxt_id) @@ -151,9 +151,9 @@ inline #endif static const char * npgettext_aux (const char *domain, - const char *msg_ctxt_id, const char *msgid, - const char *msgid_plural, unsigned long int n, - int category) + const char *msg_ctxt_id, const char *msgid, + const char *msgid_plural, unsigned long int n, + int category) { const char *translation = dcngettext (domain, msg_ctxt_id, msgid_plural, n, category); @@ -191,8 +191,8 @@ inline #endif static const char * dcpgettext_expr (const char *domain, - const char *msgctxt, const char *msgid, - int category) + const char *msgctxt, const char *msgid, + int category) { size_t msgctxt_len = strlen (msgctxt) + 1; size_t msgid_len = strlen (msgid) + 1; @@ -214,10 +214,10 @@ dcpgettext_expr (const char *domain, translation = dcgettext (domain, msg_ctxt_id, category); #if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS if (msg_ctxt_id != buf) - free (msg_ctxt_id); + free (msg_ctxt_id); #endif if (translation != msg_ctxt_id) - return translation; + return translation; } return msgid; } @@ -236,9 +236,9 @@ inline #endif static const char * dcnpgettext_expr (const char *domain, - const char *msgctxt, const char *msgid, - const char *msgid_plural, unsigned long int n, - int category) + const char *msgctxt, const char *msgid, + const char *msgid_plural, unsigned long int n, + int category) { size_t msgctxt_len = strlen (msgctxt) + 1; size_t msgid_len = strlen (msgid) + 1; @@ -260,10 +260,10 @@ dcnpgettext_expr (const char *domain, translation = dcngettext (domain, msg_ctxt_id, msgid_plural, n, category); #if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS if (msg_ctxt_id != buf) - free (msg_ctxt_id); + free (msg_ctxt_id); #endif if (!(translation == msg_ctxt_id || translation == msgid_plural)) - return translation; + return translation; } return (n == 1 ? msgid : msgid_plural); } diff --git a/src/guestfs.c b/src/guestfs.c index 40e702e0..64c327be 100644 --- a/src/guestfs.c +++ b/src/guestfs.c @@ -562,7 +562,7 @@ xread (int fd, void *buf, size_t len) r = read (fd, buf, len); if (r == -1) { if (errno == EINTR || errno == EAGAIN) - continue; + continue; return -1; } @@ -743,7 +743,7 @@ add_cmdline (guestfs_h *g, const char *str) int guestfs_config (guestfs_h *g, - const char *qemu_param, const char *qemu_value) + const char *qemu_param, const char *qemu_value) { if (qemu_param[0] != '-') { error (g, _("guestfs_config: parameter must begin with '-' character")); @@ -932,27 +932,27 @@ guestfs_launch (guestfs_h *g) /* Empty element of "." means cwd. */ if (len == 0 || (len == 1 && *pelem == '.')) { if (g->verbose) - fprintf (stderr, - "looking for supermin appliance in current directory\n"); + fprintf (stderr, + "looking for supermin appliance in current directory\n"); if (dir_contains_files (".", - supermin_name, supermin_hostfiles_name, - "kmod.whitelist", NULL)) { - if (build_supermin_appliance (g, ".", &kernel, &initrd) == -1) - return -1; - break; + supermin_name, supermin_hostfiles_name, + "kmod.whitelist", NULL)) { + if (build_supermin_appliance (g, ".", &kernel, &initrd) == -1) + return -1; + break; } } /* Look at <path>/supermin* etc. */ else { if (g->verbose) - fprintf (stderr, "looking for supermin appliance in %s\n", pelem); + fprintf (stderr, "looking for supermin appliance in %s\n", pelem); if (dir_contains_files (pelem, - supermin_name, supermin_hostfiles_name, - "kmod.whitelist", NULL)) { - if (build_supermin_appliance (g, pelem, &kernel, &initrd) == -1) - return -1; - break; + supermin_name, supermin_hostfiles_name, + "kmod.whitelist", NULL)) { + if (build_supermin_appliance (g, pelem, &kernel, &initrd) == -1) + return -1; + break; } } @@ -972,27 +972,27 @@ guestfs_launch (guestfs_h *g) /* Empty element or "." means cwd. */ if (len == 0 || (len == 1 && *pelem == '.')) { - if (g->verbose) - fprintf (stderr, - "looking for appliance in current directory\n"); - if (dir_contains_files (".", kernel_name, initrd_name, NULL)) { - kernel = safe_strdup (g, kernel_name); - initrd = safe_strdup (g, initrd_name); - break; - } + if (g->verbose) + fprintf (stderr, + "looking for appliance in current directory\n"); + if (dir_contains_files (".", kernel_name, initrd_name, NULL)) { + kernel = safe_strdup (g, kernel_name); + initrd = safe_strdup (g, initrd_name); + break; + } } /* Look at <path>/kernel etc. */ else { - if (g->verbose) - fprintf (stderr, "looking for appliance in %s\n", pelem); - - if (dir_contains_files (pelem, kernel_name, initrd_name, NULL)) { - kernel = safe_malloc (g, len + strlen (kernel_name) + 2); - initrd = safe_malloc (g, len + strlen (initrd_name) + 2); - sprintf (kernel, "%s/%s", pelem, kernel_name); - sprintf (initrd, "%s/%s", pelem, initrd_name); - break; - } + if (g->verbose) + fprintf (stderr, "looking for appliance in %s\n", pelem); + + if (dir_contains_files (pelem, kernel_name, initrd_name, NULL)) { + kernel = safe_malloc (g, len + strlen (kernel_name) + 2); + initrd = safe_malloc (g, len + strlen (initrd_name) + 2); + sprintf (kernel, "%s/%s", pelem, kernel_name); + sprintf (initrd, "%s/%s", pelem, initrd_name); + break; + } } pelem = pend + 1; @@ -1003,7 +1003,7 @@ guestfs_launch (guestfs_h *g) if (kernel == NULL || initrd == NULL) { error (g, _("cannot find %s or %s on LIBGUESTFS_PATH (current path = %s)"), - kernel_name, initrd_name, g->path); + kernel_name, initrd_name, g->path); goto cleanup0; } @@ -1051,10 +1051,10 @@ guestfs_launch (guestfs_h *g) /* Linux kernel command line. */ snprintf (append, sizeof append, - LINUX_CMDLINE "guestfs=%s:%d%s%s%s", - VMCHANNEL_ADDR, VMCHANNEL_PORT, - g->verbose ? " guestfs_verbose=1" : "", - g->append ? " " : "", g->append ? g->append : ""); + LINUX_CMDLINE "guestfs=%s:%d%s%s%s", + VMCHANNEL_ADDR, VMCHANNEL_PORT, + g->verbose ? " guestfs_verbose=1" : "", + g->append ? " " : "", g->append ? g->append : ""); snprintf (memsize_str, sizeof memsize_str, "%d", g->memsize); @@ -1081,8 +1081,8 @@ guestfs_launch (guestfs_h *g) * http://git.savannah.gnu.org/cgit/qemu.git/commit/?id=c92ef6a22d3c71538fcc48fb61ad353f7ba03b62 */ snprintf (vmchannel, sizeof vmchannel, - "user,vlan=0,guestfwd=tcp:%s:%d-unix:%s,server,nowait", - VMCHANNEL_ADDR, VMCHANNEL_PORT, unixsock); + "user,vlan=0,guestfwd=tcp:%s:%d-unix:%s,server,nowait", + VMCHANNEL_ADDR, VMCHANNEL_PORT, unixsock); add_cmdline (g, "-net"); add_cmdline (g, vmchannel); @@ -1092,8 +1092,8 @@ guestfs_launch (guestfs_h *g) * syntax, or if not then we'll get a quick failure. */ snprintf (vmchannel, sizeof vmchannel, - "channel,%d:unix:%s,server,nowait", - VMCHANNEL_PORT, unixsock); + "channel,%d:unix:%s,server,nowait", + VMCHANNEL_PORT, unixsock); add_cmdline (g, "-net"); add_cmdline (g, vmchannel); @@ -1119,7 +1119,7 @@ guestfs_launch (guestfs_h *g) if (g->verbose) { fprintf (stderr, "%s", g->qemu); for (i = 0; g->cmdline[i]; ++i) - fprintf (stderr, " %s", g->cmdline[i]); + fprintf (stderr, " %s", g->cmdline[i]); fprintf (stderr, "\n"); } @@ -1172,11 +1172,11 @@ guestfs_launch (guestfs_h *g) */ for (;;) { if (kill (qemu_pid, 0) == -1) /* qemu's gone away, we aren't needed */ - _exit (0); + _exit (0); if (kill (parent_pid, 0) == -1) { - /* Parent's gone away, qemu still around, so kill qemu. */ - kill (qemu_pid, 9); - _exit (0); + /* Parent's gone away, qemu still around, so kill qemu. */ + kill (qemu_pid, 9); + _exit (0); } sleep (2); } @@ -1257,8 +1257,8 @@ guestfs_launch (guestfs_h *g) g->stdout_watch = g->main_loop->add_handle (g->main_loop, g, g->fd[1], - GUESTFS_HANDLE_READABLE, - stdout_event, NULL); + GUESTFS_HANDLE_READABLE, + stdout_event, NULL); if (g->stdout_watch == -1) { error (g, _("could not watch qemu stdout")); goto cleanup3; @@ -1309,7 +1309,7 @@ guestfs_launch (guestfs_h *g) */ static int build_supermin_appliance (guestfs_h *g, const char *path, - char **kernel, char **initrd) + char **kernel, char **initrd) { char cmd[4096]; int r, len; @@ -1321,10 +1321,10 @@ build_supermin_appliance (guestfs_h *g, const char *path, snprintf (*initrd, len+8, "%s/initrd", g->tmpdir); snprintf (cmd, sizeof cmd, - "PATH='%s':$PATH " - "libguestfs-supermin-helper '%s' %s %s", - path, - path, *kernel, *initrd); + "PATH='%s':$PATH " + "libguestfs-supermin-helper '%s' %s %s", + path, + path, *kernel, *initrd); r = system (cmd); if (r == -1 || WEXITSTATUS(r) != 0) { @@ -1528,7 +1528,7 @@ guestfs_set_ready (guestfs_h *g) { if (g->state != BUSY) { error (g, _("guestfs_set_ready: called when in state %d != BUSY"), - g->state); + g->state); return -1; } g->state = READY; @@ -1540,7 +1540,7 @@ guestfs_set_busy (guestfs_h *g) { if (g->state != READY) { error (g, _("guestfs_set_busy: called when in state %d != READY"), - g->state); + g->state); return -1; } g->state = BUSY; @@ -1605,7 +1605,7 @@ child_cleanup (guestfs_h *g) */ static void stdout_event (struct guestfs_main_loop *ml, guestfs_h *g, void *data, - int watch, int fd, int events) + int watch, int fd, int events) { char buf[4096]; int n; @@ -1613,8 +1613,8 @@ stdout_event (struct guestfs_main_loop *ml, guestfs_h *g, void *data, #if 0 if (g->verbose) fprintf (stderr, - "stdout_event: %p g->state = %d, fd = %d, events = 0x%x\n", - g, g->state, fd, events); + "stdout_event: %p g->state = %d, fd = %d, events = 0x%x\n", + g, g->state, fd, events); #endif if (g->fd[1] != fd) { @@ -1649,7 +1649,7 @@ stdout_event (struct guestfs_main_loop *ml, guestfs_h *g, void *data, */ static void sock_read_event (struct guestfs_main_loop *ml, guestfs_h *g, void *data, - int watch, int fd, int events) + int watch, int fd, int events) { XDR xdr; u_int32_t len; @@ -1657,8 +1657,8 @@ sock_read_event (struct guestfs_main_loop *ml, guestfs_h *g, void *data, if (g->verbose) fprintf (stderr, - "sock_read_event: %p g->state = %d, fd = %d, events = 0x%x\n", - g, g->state, fd, events); + "sock_read_event: %p g->state = %d, fd = %d, events = 0x%x\n", + g, g->state, fd, events); if (g->sock != fd) { error (g, _("sock_read_event: internal error: %d != %d"), g->sock, fd); @@ -1670,7 +1670,7 @@ sock_read_event (struct guestfs_main_loop *ml, guestfs_h *g, void *data, g->msg_in = safe_realloc (g, g->msg_in, g->msg_in_allocated); } n = read (g->sock, g->msg_in + g->msg_in_size, - g->msg_in_allocated - g->msg_in_size); + g->msg_in_allocated - g->msg_in_size); if (n == 0) { /* Disconnected. */ child_cleanup (g); @@ -1702,14 +1702,14 @@ sock_read_event (struct guestfs_main_loop *ml, guestfs_h *g, void *data, if (len == GUESTFS_LAUNCH_FLAG) { if (g->state != LAUNCHING) error (g, _("received magic signature from guestfsd, but in state %d"), - g->state); + g->state); else if (g->msg_in_size != 4) error (g, _("received magic signature from guestfsd, but msg size is %d"), - g->msg_in_size); + g->msg_in_size); else { g->state = READY; if (g->launch_done_cb) - g->launch_done_cb (g, g->launch_done_cb_data); + g->launch_done_cb (g, g->launch_done_cb_data); } goto cleanup; @@ -1730,7 +1730,7 @@ sock_read_event (struct guestfs_main_loop *ml, guestfs_h *g, void *data, */ if (len > GUESTFS_MESSAGE_MAX) { error (g, _("message length (%u) > maximum possible size (%d)"), - len, GUESTFS_MESSAGE_MAX); + len, GUESTFS_MESSAGE_MAX); goto cleanup; } @@ -1744,17 +1744,17 @@ sock_read_event (struct guestfs_main_loop *ml, guestfs_h *g, void *data, for (i = 0; i < g->msg_in_size; i += 16) { printf ("%04x: ", i); for (j = i; j < MIN (i+16, g->msg_in_size); ++j) - printf ("%02x ", (unsigned char) g->msg_in[j]); + printf ("%02x ", (unsigned char) g->msg_in[j]); for (; j < i+16; ++j) - printf (" "); + printf (" "); printf ("|"); for (j = i; j < MIN (i+16, g->msg_in_size); ++j) - if (isprint (g->msg_in[j])) - printf ("%c", g->msg_in[j]); - else - printf ("."); + if (isprint (g->msg_in[j])) + printf ("%c", g->msg_in[j]); + else + printf ("."); for (; j < i+16; ++j) - printf (" "); + printf (" "); printf ("|\n"); } } @@ -1792,14 +1792,14 @@ sock_read_event (struct guestfs_main_loop *ml, guestfs_h *g, void *data, */ static void sock_write_event (struct guestfs_main_loop *ml, guestfs_h *g, void *data, - int watch, int fd, int events) + int watch, int fd, int events) { int n, err; if (g->verbose) fprintf (stderr, - "sock_write_event: %p g->state = %d, fd = %d, events = 0x%x\n", - g, g->state, fd, events); + "sock_write_event: %p g->state = %d, fd = %d, events = 0x%x\n", + g, g->state, fd, events); if (g->sock != fd) { error (g, _("sock_write_event: internal error: %d != %d"), g->sock, fd); @@ -1813,10 +1813,10 @@ sock_write_event (struct guestfs_main_loop *ml, guestfs_h *g, void *data, if (g->verbose) fprintf (stderr, "sock_write_event: writing %d bytes ...\n", - g->msg_out_size - g->msg_out_pos); + g->msg_out_size - g->msg_out_pos); n = write (g->sock, g->msg_out + g->msg_out_pos, - g->msg_out_size - g->msg_out_pos); + g->msg_out_size - g->msg_out_pos); if (n == -1) { err = errno; if (err != EAGAIN) @@ -1849,7 +1849,7 @@ sock_write_event (struct guestfs_main_loop *ml, guestfs_h *g, void *data, void guestfs_set_send_callback (guestfs_h *g, - guestfs_send_cb cb, void *opaque) + guestfs_send_cb cb, void *opaque) { g->send_cb = cb; g->send_cb_data = opaque; @@ -1857,7 +1857,7 @@ guestfs_set_send_callback (guestfs_h *g, void guestfs_set_reply_callback (guestfs_h *g, - guestfs_reply_cb cb, void *opaque) + guestfs_reply_cb cb, void *opaque) { g->reply_cb = cb; g->reply_cb_data = opaque; @@ -1865,7 +1865,7 @@ guestfs_set_reply_callback (guestfs_h *g, void guestfs_set_log_message_callback (guestfs_h *g, - guestfs_log_message_cb cb, void *opaque) + guestfs_log_message_cb cb, void *opaque) { g->log_message_cb = cb; g->log_message_cb_data = opaque; @@ -1873,7 +1873,7 @@ guestfs_set_log_message_callback (guestfs_h *g, void guestfs_set_subprocess_quit_callback (guestfs_h *g, - guestfs_subprocess_quit_cb cb, void *opaque) + guestfs_subprocess_quit_cb cb, void *opaque) { g->subprocess_quit_cb = cb; g->subprocess_quit_cb_data = opaque; @@ -1881,7 +1881,7 @@ guestfs_set_subprocess_quit_callback (guestfs_h *g, void guestfs_set_launch_done_callback (guestfs_h *g, - guestfs_launch_done_cb cb, void *opaque) + guestfs_launch_done_cb cb, void *opaque) { g->launch_done_cb = cb; g->launch_done_cb_data = opaque; @@ -1922,8 +1922,8 @@ guestfs__switch_to_sending (guestfs_h *g) g->sock_watch = g->main_loop->add_handle (g->main_loop, g, g->sock, - GUESTFS_HANDLE_WRITABLE, - sock_write_event, NULL); + GUESTFS_HANDLE_WRITABLE, + sock_write_event, NULL); if (g->sock_watch == -1) { error (g, _("add_handle failed")); return -1; @@ -1945,8 +1945,8 @@ guestfs__switch_to_receiving (guestfs_h *g) g->sock_watch = g->main_loop->add_handle (g->main_loop, g, g->sock, - GUESTFS_HANDLE_READABLE, - sock_read_event, NULL); + GUESTFS_HANDLE_READABLE, + sock_read_event, NULL); if (g->sock_watch == -1) { error (g, _("add_handle failed")); return -1; @@ -1971,7 +1971,7 @@ send_cb (guestfs_h *g, void *data) int guestfs__send_sync (guestfs_h *g, int proc_nr, - xdrproc_t xdrp, char *args) + xdrproc_t xdrp, char *args) { struct guestfs_message_header hdr; XDR xdr; @@ -2096,7 +2096,7 @@ guestfs__send_file_sync (guestfs_h *g, const char *filename) err = send_file_data_sync (g, buf, r); if (err < 0) { if (err == -2) /* daemon sent cancellation */ - send_file_cancellation_sync (g); + send_file_cancellation_sync (g); return err; } } @@ -2193,7 +2193,7 @@ send_file_chunk_sync (guestfs_h *g, int cancel, const char *buf, size_t buflen) if (!xdr_guestfs_chunk (&xdr, &chunk)) { error (g, _("xdr_guestfs_chunk failed (buf = %p, buflen = %zu)"), - buf, buflen); + buf, buflen); xdr_destroy (&xdr); goto cleanup1; } @@ -2269,7 +2269,7 @@ check_for_daemon_cancellation (guestfs_h *g) if (flag != GUESTFS_CANCEL_FLAG) { error (g, _("check_for_daemon_cancellation: read 0x%x from daemon, expected 0x%x\n"), - flag, GUESTFS_CANCEL_FLAG); + flag, GUESTFS_CANCEL_FLAG); return 0; } @@ -2327,7 +2327,7 @@ guestfs__receive_file_sync (guestfs_h *g, const char *filename) if (g->verbose) fprintf (stderr, "%s: waiting for daemon to acknowledge cancellation\n", - __func__); + __func__); xdrmem_create (&xdr, fbuf, sizeof fbuf, XDR_ENCODE); xdr_uint32_t (&xdr, &flag); @@ -2350,8 +2350,8 @@ guestfs__receive_file_sync (guestfs_h *g, const char *filename) */ struct receive_file_ctx { int count; /* 0 if receive_file_cb not called, or - * else count number of chunks. - */ + * else count number of chunks. + */ guestfs_chunk *chunks; /* Array of chunks. */ }; @@ -2390,7 +2390,7 @@ receive_file_cb (guestfs_h *g, void *data, XDR *xdr) /* Copy the chunk to the list. */ ctx->chunks = safe_realloc (g, ctx->chunks, - sizeof (guestfs_chunk) * (ctx->count+1)); + sizeof (guestfs_chunk) * (ctx->count+1)); ctx->chunks[ctx->count] = chunk; ctx->count++; } @@ -2448,7 +2448,7 @@ receive_file_data_sync (guestfs_h *g, void **buf, size_t *len_r) if (buf) { *buf = safe_realloc (g, *buf, len + ctx.chunks[i].data.data_len); memcpy (*buf+len, ctx.chunks[i].data.data_val, - ctx.chunks[i].data.data_len); + ctx.chunks[i].data.data_len); } len += ctx.chunks[i].data.data_len; } @@ -2462,7 +2462,7 @@ receive_file_data_sync (guestfs_h *g, void **buf, size_t *len_r) static int select_add_handle (guestfs_main_loop *mlv, guestfs_h *g, int fd, int events, - guestfs_handle_event_cb cb, void *data) + guestfs_handle_event_cb cb, void *data) { struct select_main_loop *ml = (struct select_main_loop *) mlv; @@ -2472,9 +2472,9 @@ select_add_handle (guestfs_main_loop *mlv, guestfs_h *g, int fd, int events, } if ((events & ~(GUESTFS_HANDLE_READABLE | - GUESTFS_HANDLE_WRITABLE | - GUESTFS_HANDLE_HANGUP | - GUESTFS_HANDLE_ERROR)) != 0) { + GUESTFS_HANDLE_WRITABLE | + GUESTFS_HANDLE_HANGUP | + GUESTFS_HANDLE_ERROR)) != 0) { error (g, _("set of events (0x%x) contains unknown events"), events); return -1; } @@ -2507,7 +2507,7 @@ select_add_handle (guestfs_main_loop *mlv, guestfs_h *g, int fd, int events, ml->max_fd = fd; ml->handle_cb_data = safe_realloc (g, ml->handle_cb_data, - sizeof (struct select_handle_cb_data) * (ml->max_fd+1)); + sizeof (struct select_handle_cb_data) * (ml->max_fd+1)); } ml->handle_cb_data[fd].cb = cb; ml->handle_cb_data[fd].g = g; @@ -2544,7 +2544,7 @@ select_remove_handle (guestfs_main_loop *mlv, guestfs_h *g, int fd) ml->max_fd--; ml->handle_cb_data = safe_realloc (g, ml->handle_cb_data, - sizeof (struct select_handle_cb_data) * (ml->max_fd+1)); + sizeof (struct select_handle_cb_data) * (ml->max_fd+1)); } ml->nr_fds--; @@ -2554,7 +2554,7 @@ select_remove_handle (guestfs_main_loop *mlv, guestfs_h *g, int fd) static int select_add_timeout (guestfs_main_loop *mlv, guestfs_h *g, int interval, - guestfs_handle_timeout_cb cb, void *data) + guestfs_handle_timeout_cb cb, void *data) { //struct select_main_loop *ml = (struct select_main_loop *) mlv; @@ -2597,7 +2597,7 @@ select_main_loop_run (guestfs_main_loop *mlv, guestfs_h *g) r = select (ml->max_fd+1, &rset2, &wset2, &xset2, NULL); if (r == -1) { if (errno == EINTR || errno == EAGAIN) - continue; + continue; perrorf (g, "select"); ml->is_running = 0; return -1; @@ -2606,17 +2606,17 @@ select_main_loop_run (guestfs_main_loop *mlv, guestfs_h *g) for (fd = 0; r > 0 && fd <= ml->max_fd; ++fd) { events = 0; if (FD_ISSET (fd, &rset2)) - events |= GUESTFS_HANDLE_READABLE; + events |= GUESTFS_HANDLE_READABLE; if (FD_ISSET (fd, &wset2)) - events |= GUESTFS_HANDLE_WRITABLE; + events |= GUESTFS_HANDLE_WRITABLE; if (FD_ISSET (fd, &xset2)) - events |= GUESTFS_HANDLE_ERROR | GUESTFS_HANDLE_HANGUP; + events |= GUESTFS_HANDLE_ERROR | GUESTFS_HANDLE_HANGUP; if (events) { - r--; - ml->handle_cb_data[fd].cb ((guestfs_main_loop *) ml, - ml->handle_cb_data[fd].g, - ml->handle_cb_data[fd].data, - fd, fd, events); + r--; + ml->handle_cb_data[fd].cb ((guestfs_main_loop *) ml, + ml->handle_cb_data[fd].g, + ml->handle_cb_data[fd].data, + fd, fd, events); } } } diff --git a/test-tool/test-tool.c b/test-tool/test-tool.c index f37656a7..3dc03289 100644 --- a/test-tool/test-tool.c +++ b/test-tool/test-tool.c @@ -57,19 +57,19 @@ static void usage (void) { printf (_("libguestfs-test-tool: interactive test tool\n" - "Copyright (C) 2009 Red Hat Inc.\n" - "Usage:\n" - " libguestfs-test-tool [--options]\n" - "Options:\n" - " --help Display usage\n" - " --helper libguestfs-test-tool-helper\n" - " Helper program (default: %s)\n" - " --qemudir dir Specify QEMU source directory\n" - " --qemu qemu Specify QEMU binary\n" - " --timeout n\n" - " -t n Set launch timeout (default: %d seconds)\n" - ), - DEFAULT_HELPER, DEFAULT_TIMEOUT); + "Copyright (C) 2009 Red Hat Inc.\n" + "Usage:\n" + " libguestfs-test-tool [--options]\n" + "Options:\n" + " --help Display usage\n" + " --helper libguestfs-test-tool-helper\n" + " Helper program (default: %s)\n" + " --qemudir dir Specify QEMU source directory\n" + " --qemu qemu Specify QEMU binary\n" + " --timeout n\n" + " -t n Set launch timeout (default: %d seconds)\n" + ), + DEFAULT_HELPER, DEFAULT_TIMEOUT); } int @@ -101,25 +101,25 @@ main (int argc, char *argv[]) switch (c) { case 0: /* options which are long only */ if (strcmp (long_options[option_index].name, "helper") == 0) - helper = optarg; + helper = optarg; else if (strcmp (long_options[option_index].name, "qemu") == 0) - set_qemu (optarg, 0); + set_qemu (optarg, 0); else if (strcmp (long_options[option_index].name, "qemudir") == 0) - set_qemu (optarg, 1); + set_qemu (optarg, 1); else { - fprintf (stderr, - _("libguestfs-test-tool: unknown long option: %s (%d)\n"), - long_options[option_index].name, option_index); - exit (1); + fprintf (stderr, + _("libguestfs-test-tool: unknown long option: %s (%d)\n"), + long_options[option_index].name, option_index); + exit (1); } break; case 't': if (sscanf (optarg, "%d", &timeout) != 1 || timeout < 0) { - fprintf (stderr, - _("libguestfs-test-tool: invalid timeout: %s\n"), - optarg); - exit (1); + fprintf (stderr, + _("libguestfs-test-tool: invalid timeout: %s\n"), + optarg); + exit (1); } break; @@ -129,8 +129,8 @@ main (int argc, char *argv[]) default: fprintf (stderr, - _("libguestfs-test-tool: unexpected command line option 0x%x\n"), - c); + _("libguestfs-test-tool: unexpected command line option 0x%x\n"), + c); exit (1); } } @@ -152,19 +152,19 @@ main (int argc, char *argv[]) g = guestfs_create (); if (g == NULL) { fprintf (stderr, - _("libguestfs-test-tool: failed to create libguestfs handle\n")); + _("libguestfs-test-tool: failed to create libguestfs handle\n")); exit (1); } if (guestfs_add_drive (g, tmpf) == -1) { fprintf (stderr, - _("libguestfs-test-tool: failed to add drive '%s'\n"), - tmpf); + _("libguestfs-test-tool: failed to add drive '%s'\n"), + tmpf); exit (1); } if (guestfs_add_drive (g, isof) == -1) { fprintf (stderr, - _("libguestfs-test-tool: failed to add drive '%s'\n"), - isof); + _("libguestfs-test-tool: failed to add drive '%s'\n"), + isof); exit (1); } @@ -175,7 +175,7 @@ main (int argc, char *argv[]) exit (1); } printf ("library version: %"PRIi64".%"PRIi64".%"PRIi64"%s\n", - vers->major, vers->minor, vers->release, vers->extra); + vers->major, vers->minor, vers->release, vers->extra); guestfs_free_version (vers); printf ("guestfs_get_append: %s\n", guestfs_get_append (g) ? : "(null)"); @@ -188,7 +188,7 @@ main (int argc, char *argv[]) /* Launch the guest handle. */ if (guestfs_launch (g) == -1) { fprintf (stderr, - _("libguestfs-test-tool: failed to launch appliance\n")); + _("libguestfs-test-tool: failed to launch appliance\n")); exit (1); } @@ -199,7 +199,7 @@ main (int argc, char *argv[]) if (guestfs_wait_ready (g) == -1) { fprintf (stderr, - _("libguestfs-test-tool: failed or timed out in 'wait_ready'\n")); + _("libguestfs-test-tool: failed or timed out in 'wait_ready'\n")); exit (1); } @@ -211,31 +211,31 @@ main (int argc, char *argv[]) /* Create the filesystem and mount everything. */ if (guestfs_sfdiskM (g, "/dev/sda", sfdisk_lines) == -1) { fprintf (stderr, - _("libguestfs-test-tool: failed to run sfdisk\n")); + _("libguestfs-test-tool: failed to run sfdisk\n")); exit (1); } if (guestfs_mkfs (g, "ext2", "/dev/sda1") == -1) { fprintf (stderr, - _("libguestfs-test-tool: failed to mkfs.ext2\n")); + _("libguestfs-test-tool: failed to mkfs.ext2\n")); exit (1); } if (guestfs_mount (g, "/dev/sda1", "/") == -1) { fprintf (stderr, - _("libguestfs-test-tool: failed to mount /dev/sda1 on /\n")); + _("libguestfs-test-tool: failed to mount /dev/sda1 on /\n")); exit (1); } if (guestfs_mkdir (g, "/iso") == -1) { fprintf (stderr, - _("libguestfs-test-tool: failed to mkdir /iso\n")); + _("libguestfs-test-tool: failed to mkdir /iso\n")); exit (1); } if (guestfs_mount (g, "/dev/sdb", "/iso") == -1) { fprintf (stderr, - _("libguestfs-test-tool: failed to mount /dev/sdb on /iso\n")); + _("libguestfs-test-tool: failed to mount /dev/sdb on /iso\n")); exit (1); } @@ -243,7 +243,7 @@ main (int argc, char *argv[]) str = guestfs_command (g, helper_args); if (str == NULL) { fprintf (stderr, - _("libguestfs-test-tool: could not run helper program, or helper failed\n")); + _("libguestfs-test-tool: could not run helper program, or helper failed\n")); exit (1); } free (str); @@ -282,8 +282,8 @@ set_qemu (const char *path, int use_wrapper) if (!use_wrapper) { if (access (path, X_OK) == -1) { fprintf (stderr, - _("Binary '%s' does not exist or is not executable\n"), - path); + _("Binary '%s' does not exist or is not executable\n"), + path); exit (1); } @@ -296,8 +296,8 @@ set_qemu (const char *path, int use_wrapper) if (stat (buffer, &statbuf) == -1 || !S_ISDIR (statbuf.st_mode)) { fprintf (stderr, - _("%s: does not look like a qemu source directory\n"), - path); + _("%s: does not look like a qemu source directory\n"), + path); exit (1); } @@ -312,10 +312,10 @@ set_qemu (const char *path, int use_wrapper) fp = fdopen (fd, "w"); fprintf (fp, - "#!/bin/sh -\n" - "qemudir='%s'\n" - "\"$qemudir\"/", - path); + "#!/bin/sh -\n" + "qemudir='%s'\n" + "\"$qemudir\"/", + path); /* Select the right qemu binary for the wrapper script. */ #ifdef __i386__ @@ -349,7 +349,7 @@ preruncheck (void) "available. Expected to find it in '%s'\n" "\n" "Use the --helper option to specify the location of this program.\n"), - helper); + helper); exit (1); } @@ -372,7 +372,7 @@ preruncheck (void) _("Test tool helper program %s\n" "is not statically linked. This is a build error when this test tool\n" "was built.\n"), - helper); + helper); exit (1); } } @@ -399,11 +399,11 @@ make_files (void) close (fd); snprintf (cmd, sizeof cmd, "mkisofs -quiet -rJT -o '%s' '%s'", - isof, helper); + isof, helper); r = system (cmd); if (r == -1 || WEXITSTATUS(r) != 0) { fprintf (stderr, - _("mkisofs command failed: %s\n"), cmd); + _("mkisofs command failed: %s\n"), cmd); exit (1); } diff --git a/v2v/virt-v2v.pl b/v2v/virt-v2v.pl index fb1f2204..11d7cfd2 100755 --- a/v2v/virt-v2v.pl +++ b/v2v/virt-v2v.pl @@ -160,9 +160,9 @@ Set the output guest name. =cut GetOptions ("help|?" => \$help, - "version" => \$version, - "connect|c=s" => \$uri, - "output|o=s" => \$output, + "version" => \$version, + "connect|c=s" => \$uri, + "output|o=s" => \$output, ) or pod2usage (2); pod2usage (1) if $help; if ($version) { @@ -192,7 +192,7 @@ my @partitions = get_partitions ($g); # Now query each one to build up a picture of what's in it. my %fses = inspect_all_partitions ($g, \@partitions, - use_windows_registry => $use_windows_registry); + use_windows_registry => $use_windows_registry); #print "fses -----------\n"; #print Dumper(\%fses); |