1da2e3ebdSchin######################################################################## 2da2e3ebdSchin# # 3da2e3ebdSchin# This software is part of the ast package # 4*b30d1939SAndy Fiddaman# Copyright (c) 1982-2011 AT&T Intellectual Property # 5da2e3ebdSchin# and is licensed under the # 6*b30d1939SAndy Fiddaman# Eclipse Public License, Version 1.0 # 77c2fbfb3SApril Chin# by AT&T Intellectual Property # 8da2e3ebdSchin# # 9da2e3ebdSchin# A copy of the License is available at # 10*b30d1939SAndy Fiddaman# http://www.eclipse.org/org/documents/epl-v10.html # 11*b30d1939SAndy Fiddaman# (with md5 checksum b35adb5213ca9657e911e9befb180842) # 12da2e3ebdSchin# # 13da2e3ebdSchin# Information and Software Systems Research # 14da2e3ebdSchin# AT&T Research # 15da2e3ebdSchin# Florham Park NJ # 16da2e3ebdSchin# # 17da2e3ebdSchin# David Korn <dgk@research.att.com> # 18da2e3ebdSchin# # 19da2e3ebdSchin######################################################################## 20da2e3ebdSchinfunction err_exit 21da2e3ebdSchin{ 22da2e3ebdSchin print -u2 -n "\t" 23da2e3ebdSchin print -u2 -r ${Command}[$1]: "${@:2}" 24da2e3ebdSchin let Errors+=1 25da2e3ebdSchin} 26da2e3ebdSchinalias err_exit='err_exit $LINENO' 27da2e3ebdSchin 2834f9b3eeSRoland MainzCommand=${0##*/} 2934f9b3eeSRoland Mainzinteger Errors=0 3034f9b3eeSRoland Mainz 3134f9b3eeSRoland Mainztmp=$(mktemp -dt) || { err_exit mktemp -dt failed; exit 1; } 3234f9b3eeSRoland Mainztrap "cd /; rm -rf $tmp" EXIT 3334f9b3eeSRoland Mainz 34da2e3ebdSchinfunction abspath 35da2e3ebdSchin{ 36da2e3ebdSchin base=$(basename $SHELL) 37da2e3ebdSchin cd ${SHELL%/$base} 38da2e3ebdSchin newdir=$(pwd) 39da2e3ebdSchin cd ~- 40da2e3ebdSchin print $newdir/$base 41da2e3ebdSchin} 42da2e3ebdSchin#test for proper exit of shell 43da2e3ebdSchinbuiltin getconf 44da2e3ebdSchinABSHELL=$(abspath) 4534f9b3eeSRoland Mainzcd $tmp || { err_exit "cd $tmp failed"; exit 1; } 46da2e3ebdSchinprint exit 0 >.profile 47da2e3ebdSchin${ABSHELL} <<! 48da2e3ebdSchinHOME=$PWD \ 49da2e3ebdSchinPATH=$PATH \ 50da2e3ebdSchinSHELL=$ABSSHELL \ 51da2e3ebdSchin$( 5234f9b3eeSRoland Mainz v=$(getconf LIBPATH) 5334f9b3eeSRoland Mainz for v in ${v//,/ } 5434f9b3eeSRoland Mainz do v=${v#*:} 5534f9b3eeSRoland Mainz v=${v%%:*} 5634f9b3eeSRoland Mainz eval [[ \$$v ]] && eval print -n \" \"\$v=\"\$$v\" 57da2e3ebdSchin done 58da2e3ebdSchin) \ 59da2e3ebdSchinexec -c -a -ksh ${ABSHELL} -c "exit 1" 1>/dev/null 2>&1 60da2e3ebdSchin! 61da2e3ebdSchinstatus=$(echo $?) 62da2e3ebdSchinif [[ -o noprivileged && $status != 0 ]] 63da2e3ebdSchinthen err_exit 'exit in .profile is ignored' 64da2e3ebdSchinelif [[ -o privileged && $status == 0 ]] 65da2e3ebdSchinthen err_exit 'privileged .profile not ignored' 66da2e3ebdSchinfi 67da2e3ebdSchinif [[ $(trap 'code=$?; echo $code; trap 0; exit $code' 0; exit 123) != 123 ]] 68da2e3ebdSchinthen err_exit 'exit not setting $?' 69da2e3ebdSchinfi 70da2e3ebdSchincat > run.sh <<- "EOF" 71da2e3ebdSchin trap 'code=$?; echo $code; trap 0; exit $code' 0 72da2e3ebdSchin ( trap 0; exit 123 ) 73da2e3ebdSchinEOF 74da2e3ebdSchinif [[ $($SHELL ./run.sh) != 123 ]] 75da2e3ebdSchinthen err_exit 'subshell trap on exit overwrites parent trap' 76da2e3ebdSchinfi 77da2e3ebdSchincd ~- || err_exit "cd back failed" 787c2fbfb3SApril Chin$SHELL -c 'builtin -f cmd getconf; getconf --"?-version"; exit 0' >/dev/null 2>&1 || err_exit 'ksh plugin exit failed -- was ksh built with CCFLAGS+=$(CC.EXPORT.DYNAMIC)?' 7934f9b3eeSRoland Mainz 80*b30d1939SAndy Fiddamanexit $((Errors<125?Errors:125)) 81