1*3e3895bfSKrzysztof Piecuch# $FreeBSD: head/bin/sh/tests/builtins/cd4.0 222154 2011-05-20 22:55:18Z jilles $ 28c603ea4SPeter Avalos 38c603ea4SPeter Avalos# This test assumes that whatever mechanism cd -P uses to determine the 48c603ea4SPeter Avalos# pathname to the current directory if it is longer than PATH_MAX requires 58c603ea4SPeter Avalos# read permission on all parent directories. It also works if this 68c603ea4SPeter Avalos# requirement always applies. 78c603ea4SPeter Avalos 88c603ea4SPeter Avalosset -e 98c603ea4SPeter AvalosL=$(getconf PATH_MAX / 2>/dev/null) || L=4096 108c603ea4SPeter Avalos[ "$L" -lt 100000 ] 2>/dev/null || L=4096 118c603ea4SPeter AvalosL=$((L+100)) 128c603ea4SPeter AvalosT=$(mktemp -d ${TMPDIR:-/tmp}/sh-test.XXXXXX) 138c603ea4SPeter Avalostrap 'chmod u+r ${T}; rm -rf ${T}' 0 148c603ea4SPeter Avaloscd -Pe $T 158c603ea4SPeter AvalosD=$(pwd) 168c603ea4SPeter Avaloschmod u-r "$D" 178c603ea4SPeter Avalosif [ -r "$D" ]; then 188c603ea4SPeter Avalos # Running as root, cannot test. 198c603ea4SPeter Avalos exit 0 208c603ea4SPeter Avalosfi 218c603ea4SPeter Avalosset +e 228c603ea4SPeter Avaloswhile [ ${#D} -lt $L ]; do 238c603ea4SPeter Avalos mkdir veryverylongdirectoryname || exit 248c603ea4SPeter Avalos cd -Pe veryverylongdirectoryname 2>/dev/null 258c603ea4SPeter Avalos r=$? 268c603ea4SPeter Avalos [ $r -gt 1 ] && exit $r 278c603ea4SPeter Avalos if [ $r -eq 1 ]; then 288c603ea4SPeter Avalos # Verify that the directory was changed correctly. 298c603ea4SPeter Avalos cd -Pe .. || exit 308c603ea4SPeter Avalos [ "$(pwd)" = "$D" ] || exit 318c603ea4SPeter Avalos # Verify that omitting -e results in success. 328c603ea4SPeter Avalos cd -P veryverylongdirectoryname 2>/dev/null || exit 338c603ea4SPeter Avalos exit 0 348c603ea4SPeter Avalos fi 358c603ea4SPeter Avalos D=$D/veryverylongdirectoryname 368c603ea4SPeter Avalosdone 378c603ea4SPeter Avalosecho "cd -Pe never returned 1" 388c603ea4SPeter Avalosexit 0 39