diff options
-rwxr-xr-x | tests/misc/pwd | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/tests/misc/pwd b/tests/misc/pwd new file mode 100755 index 000000000..74bbc224f --- /dev/null +++ b/tests/misc/pwd @@ -0,0 +1,61 @@ +#!/bin/sh + +: ${PERL=perl} + +$PERL -e 1 > /dev/null 2>&1 || { + echo 1>&2 "$0: configure didn't find a usable version of Perl," \ + "so can't run this test" + exit 77 +} + +pwd=`pwd` +t0=`echo "$0"|sed 's,.*/,,'`.tmp; tmp=$t0/$$ +trap 'status=$?; cd $pwd; chmod -R u+rwx $t0; rm -rf $t0 && exit $status' 0 +trap '(exit $?); exit $?' 1 2 13 15 + +framework_failure=0 +mkdir -p $tmp || framework_failure=1 +cd $tmp || framework_failure=1 + +if test $framework_failure = 1; then + echo "$0: failure in testing framework" 1>&2 + (exit 1); exit 1 +fi + +ARGV_0=$0 +export ARGV_0 + +$PERL -w -- - <<\EOF + +# Show that pwd works even when the length of the resulting +# directory name is longer than PATH_MAX. +use strict; +use Cwd; + +(my $ME = $ENV{ARGV_0}) =~ s|.*/||; + +my $cwd = getcwd; +chomp $cwd; +my $z = 'z' x 31; +my $n = 256; +my $expected = $cwd . ("/$z" x $n); + +my $i = 0; +do + { + mkdir $z, 0700 + or die "$ME: at depth $i: $!\n"; + chdir $z; + } +until (++$i == $n); + +my $build_src_dir = $ENV{BUILD_SRC_DIR}; +$build_src_dir + or die "$ME: envvar BUILD_SRC_DIR not defined\n"; +my $pwd_binary = "$build_src_dir/pwd"; +-x $pwd_binary + or die "$ME: $pwd_binary is not an executable file\n"; +chomp (my $actual = `$pwd_binary`); +$expected eq $actual + or die "$ME: $expected\n$actual\n"; +EOF |