[adding bug-gnulib] >>>> How about having compare "know" about /dev/null. >>>> Then it can perform the test -s and warn if the file is nonempty. >>>> With that, all existing (and there are many) /dev/null-using >>>> compare uses will benefit. >> >> Nice idea.
> Yes. In fact, c-set was against gnulib's init.sh > (hence included ChangeLog diffs) > > Here's the proposed gnulib commit. ACK once you fix the comments. > >>From e636d67f6ff4116312c789d4eec2af53b9cd7cd9 Mon Sep 17 00:00:00 2001 > From: Jim Meyering <[email protected]> > Date: Mon, 21 Nov 2011 21:50:23 +0100 > Subject: [PATCH] init.sh: work around OSF/1 5.1's mishandling of /dev/null > > * tests/init.sh: Make our compare function slightly more portable. > Reported by Bruno Haible in > http://thread.gmane.org/gmane.comp.gnu.grep.bugs/4020 > Much improved by Eric Blake. > --- > ChangeLog | 8 ++++++++ > tests/init.sh | 47 +++++++++++++++++++++++++++++++++++++++++------ > 2 files changed, 49 insertions(+), 6 deletions(-) > > diff --git a/ChangeLog b/ChangeLog > index e775587..0fbcf89 100644 > --- a/ChangeLog > +++ b/ChangeLog > @@ -1,3 +1,11 @@ > +2011-11-21 Jim Meyering <[email protected]> > + Eric Blake <[email protected]> > + > + init.sh: work around OSF/1 5.1's mishandling of /dev/null > + * tests/init.sh: Make our compare function slightly more portable. > + Reported by Bruno Haible in > + http://thread.gmane.org/gmane.comp.gnu.grep.bugs/4020 > + > 2011-11-21 Simon Josefsson <[email protected]> > > * m4/gnulib-common.m4 (_Noreturn): Check that _MSC_VER is defined > diff --git a/tests/init.sh b/tests/init.sh > index c78e5b6..68e1f4f 100644 > --- a/tests/init.sh > +++ b/tests/init.sh > @@ -221,11 +221,35 @@ export MALLOC_PERTURB_ > # a partition, or to undo any other global state changes. > cleanup_ () { :; } > > +# Arrange not to let diff or cmp operate on /dev/null, > +# since on some systems (at least OSF/1 5.1), that doesn't work. > +# When there are not two arguments, return 2. Should be: # When there are not two arguments, or neither argument # is /dev/null, return 2. > +# When one argument is /dev/null and the other is not empty, > +# cat the nonempty file to stderr and return 1. > +# Otherwise, return 0. > +compare_dev_null_ () > +{ > + test $# = 2 || return 2 > + > + if test "x$1" = x/dev/null; then > + set dummy "$2" "$1"; shift > + fi > + > + test "x$2" = x/dev/null || return 2 > + > + test -s "$1" || return 0 > + > + cat - "$1" <<EOF >&2 > +Unexpected contents of $1: > +EOF > + return 1 > +} > + > if diff_out_=`( diff -u "$0" "$0" < /dev/null ) 2>/dev/null`; then > if test -z "$diff_out_"; then > - compare () { diff -u "$@"; } > + compare_ () { diff -u "$@"; } > else > - compare () > + compare_ () > { > if diff -u "$@" > diff.out; then > # No differences were found, but Solaris 'diff' produces output > @@ -241,9 +265,9 @@ if diff_out_=`( diff -u "$0" "$0" < /dev/null ) > 2>/dev/null`; then > fi > elif diff_out_=`( diff -c "$0" "$0" < /dev/null ) 2>/dev/null`; then > if test -z "$diff_out_"; then > - compare () { diff -c "$@"; } > + compare_ () { diff -c "$@"; } > else > - compare () > + compare_ () > { > if diff -c "$@" > diff.out; then > # No differences were found, but AIX and HP-UX 'diff' produce output > @@ -259,11 +283,22 @@ elif diff_out_=`( diff -c "$0" "$0" < /dev/null ) > 2>/dev/null`; then > } > fi > elif ( cmp --version < /dev/null 2>&1 | grep GNU ) > /dev/null 2>&1; then > - compare () { cmp -s "$@"; } > + compare_ () { cmp -s "$@"; } > else > - compare () { cmp "$@"; } > + compare_ () { cmp "$@"; } > fi > > +# Given compare_dev_null_'s preprocessing, for 0 or 2, defer to compare_. > +# Otherwise, differences have already been printed, so return 1. Should be: # Given compare_dev_null_'s preprocessing, defer to compare_ if 2 or # more. Otherwise, result is correctly 0, or 1 with error output. > +compare () > +{ > + compare_dev_null_ "$@" > + case $? in > + 0|1) return $?;; > + *) compare_ "$@";; > + esac > +} > + > # An arbitrary prefix to help distinguish test directories. > testdir_prefix_ () { printf gt; } > > -- > 1.7.8.rc2.3.g0911 > -- Eric Blake [email protected] +1-919-301-3266 Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature
