mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-03-09 15:50:02 +00:00
package: Fix unspecified behavior after "unset PWD" (#176)
POSIX warns about "unset PWD" leading to unspecified behavior from the pwd util, which we then use. bin/package, src/cmd/INIT/package.sh: - Determine if the shell has $PWD with a feature test. Only unset PWD if it does not (the old Bourne shell). - Clean up 'case' flow. Co-authored-by: Martijn Dekker <martijn@inlv.org>
This commit is contained in:
parent
bdb997415d
commit
e1690f61ff
2 changed files with 54 additions and 64 deletions
59
bin/package
59
bin/package
|
@ -29,49 +29,44 @@ case $PATH in
|
||||||
Bad*) echo "Cannot be run by zsh in native mode; use a sh symlink to zsh" >&2
|
Bad*) echo "Cannot be run by zsh in native mode; use a sh symlink to zsh" >&2
|
||||||
exit 1 ;;
|
exit 1 ;;
|
||||||
esac
|
esac
|
||||||
|
unset path
|
||||||
|
|
||||||
unset CDPATH PWD
|
# Sanitize 'cd'
|
||||||
|
unset CDPATH
|
||||||
|
case `cd / && v=$PWD && cd /dev && v=$v,$PWD && echo "$v"` in
|
||||||
|
/,/dev) ;;
|
||||||
|
*) # old Bourne shell does not have $PWD; avoid inheriting it from
|
||||||
|
# the environment, which would kill our ${PWD:-`pwd`} fallback
|
||||||
|
unset PWD ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Make the package root the current working directory
|
||||||
case $0 in
|
case $0 in
|
||||||
-*)
|
-*)
|
||||||
echo "dodgy \$0: $0" >&2
|
echo "dodgy \$0: $0" >&2
|
||||||
exit 1 ;;
|
exit 1 ;;
|
||||||
*/package)
|
*/package)
|
||||||
mydir=`echo "$0" | sed 's,/package$,,'`
|
pwd=$0 ;;
|
||||||
cd "$mydir" || exit
|
|
||||||
case ${PWD:-`pwd`} in
|
|
||||||
*/bin) ;;
|
|
||||||
*) echo "this script must live in bin/" >&2
|
|
||||||
exit 1 ;;
|
|
||||||
esac
|
|
||||||
case $mydir in
|
|
||||||
*/arch/*/*/bin)
|
|
||||||
cd .. ;;
|
|
||||||
*/arch/*/bin)
|
|
||||||
cd ../../.. ;;
|
|
||||||
*) cd .. ;;
|
|
||||||
esac || exit
|
|
||||||
unset mydir ;;
|
|
||||||
package)
|
package)
|
||||||
me=`command -v package` || me=`which package` || exit
|
pwd=`command -v package || which package` || exit ;;
|
||||||
mydir=`echo "$me" | sed 's,/package$,,'`
|
|
||||||
cd "$mydir" || exit
|
|
||||||
case ${PWD:-`pwd`} in
|
|
||||||
*/bin) ;;
|
|
||||||
*) echo "this script must live in bin/" >&2
|
|
||||||
exit 1 ;;
|
|
||||||
esac
|
|
||||||
case $mydir in
|
|
||||||
*/arch/*/*/bin)
|
|
||||||
cd .. ;;
|
|
||||||
*/arch/*/bin)
|
|
||||||
cd ../../.. ;;
|
|
||||||
*) cd .. ;;
|
|
||||||
esac || exit
|
|
||||||
unset me mydir ;;
|
|
||||||
*)
|
*)
|
||||||
echo "this script must be named 'package'" >&2
|
echo "this script must be named 'package'" >&2
|
||||||
exit 1 ;;
|
exit 1 ;;
|
||||||
esac
|
esac
|
||||||
|
pwd=`dirname "$pwd"`
|
||||||
|
cd "$pwd" || exit
|
||||||
|
case ${PWD:-`pwd`} in
|
||||||
|
*/arch/*/*/bin)
|
||||||
|
cd .. ;;
|
||||||
|
*/arch/*/bin)
|
||||||
|
cd ../../.. ;;
|
||||||
|
*/bin)
|
||||||
|
cd .. ;;
|
||||||
|
*)
|
||||||
|
echo "this script must live in bin/" >&2
|
||||||
|
exit 1 ;;
|
||||||
|
esac || exit
|
||||||
|
unset pwd
|
||||||
|
|
||||||
# shell checks
|
# shell checks
|
||||||
checksh()
|
checksh()
|
||||||
|
|
|
@ -29,49 +29,44 @@ case $PATH in
|
||||||
Bad*) echo "Cannot be run by zsh in native mode; use a sh symlink to zsh" >&2
|
Bad*) echo "Cannot be run by zsh in native mode; use a sh symlink to zsh" >&2
|
||||||
exit 1 ;;
|
exit 1 ;;
|
||||||
esac
|
esac
|
||||||
|
unset path
|
||||||
|
|
||||||
unset CDPATH PWD
|
# Sanitize 'cd'
|
||||||
|
unset CDPATH
|
||||||
|
case `cd / && v=$PWD && cd /dev && v=$v,$PWD && echo "$v"` in
|
||||||
|
/,/dev) ;;
|
||||||
|
*) # old Bourne shell does not have $PWD; avoid inheriting it from
|
||||||
|
# the environment, which would kill our ${PWD:-`pwd`} fallback
|
||||||
|
unset PWD ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Make the package root the current working directory
|
||||||
case $0 in
|
case $0 in
|
||||||
-*)
|
-*)
|
||||||
echo "dodgy \$0: $0" >&2
|
echo "dodgy \$0: $0" >&2
|
||||||
exit 1 ;;
|
exit 1 ;;
|
||||||
*/package)
|
*/package)
|
||||||
mydir=`echo "$0" | sed 's,/package$,,'`
|
pwd=$0 ;;
|
||||||
cd "$mydir" || exit
|
|
||||||
case ${PWD:-`pwd`} in
|
|
||||||
*/bin) ;;
|
|
||||||
*) echo "this script must live in bin/" >&2
|
|
||||||
exit 1 ;;
|
|
||||||
esac
|
|
||||||
case $mydir in
|
|
||||||
*/arch/*/*/bin)
|
|
||||||
cd .. ;;
|
|
||||||
*/arch/*/bin)
|
|
||||||
cd ../../.. ;;
|
|
||||||
*) cd .. ;;
|
|
||||||
esac || exit
|
|
||||||
unset mydir ;;
|
|
||||||
package)
|
package)
|
||||||
me=`command -v package` || me=`which package` || exit
|
pwd=`command -v package || which package` || exit ;;
|
||||||
mydir=`echo "$me" | sed 's,/package$,,'`
|
|
||||||
cd "$mydir" || exit
|
|
||||||
case ${PWD:-`pwd`} in
|
|
||||||
*/bin) ;;
|
|
||||||
*) echo "this script must live in bin/" >&2
|
|
||||||
exit 1 ;;
|
|
||||||
esac
|
|
||||||
case $mydir in
|
|
||||||
*/arch/*/*/bin)
|
|
||||||
cd .. ;;
|
|
||||||
*/arch/*/bin)
|
|
||||||
cd ../../.. ;;
|
|
||||||
*) cd .. ;;
|
|
||||||
esac || exit
|
|
||||||
unset me mydir ;;
|
|
||||||
*)
|
*)
|
||||||
echo "this script must be named 'package'" >&2
|
echo "this script must be named 'package'" >&2
|
||||||
exit 1 ;;
|
exit 1 ;;
|
||||||
esac
|
esac
|
||||||
|
pwd=`dirname "$pwd"`
|
||||||
|
cd "$pwd" || exit
|
||||||
|
case ${PWD:-`pwd`} in
|
||||||
|
*/arch/*/*/bin)
|
||||||
|
cd .. ;;
|
||||||
|
*/arch/*/bin)
|
||||||
|
cd ../../.. ;;
|
||||||
|
*/bin)
|
||||||
|
cd .. ;;
|
||||||
|
*)
|
||||||
|
echo "this script must live in bin/" >&2
|
||||||
|
exit 1 ;;
|
||||||
|
esac || exit
|
||||||
|
unset pwd
|
||||||
|
|
||||||
# shell checks
|
# shell checks
|
||||||
checksh()
|
checksh()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue