tools: Fix mkinstalldirs.

We cannot trust 'mkdir -p' to set the proper permissions on parent
directories. So create them manually.
Fix handling of paths containing spaces.
Properly prefix the path with './' if it starts with a '-'.
Stop trying to create a path after the first error.
oldstable
Francois Gouget 2006-06-15 18:05:07 +02:00 committed by Alexandre Julliard
parent 739f4187eb
commit fb7afa4269
1 changed files with 32 additions and 34 deletions

View File

@ -46,47 +46,45 @@ case $dirmode in
exec mkdir -p -- "$@"
fi ;;
*)
if mkdir -m "$dirmode" -p -- . 2>/dev/null; then
echo "mkdir -m $dirmode -p -- $*"
exec mkdir -m "$dirmode" -p -- "$@"
fi ;;
# We cannot trust mkdir to set the proper permissions on
# parent directories. So create them manually.
;;
esac
for file
do
set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
shift
case "$file" in
/* ) pathcomp="/" ;;
-* ) pathcomp="./" ;;
* ) pathcomp="" ;;
esac
pathcomp=
for d
saved_IFS="$IFS"
IFS="/"
for d in $file
do
pathcomp="$pathcomp$d"
case "$pathcomp" in
-* ) pathcomp=./$pathcomp ;;
esac
IFS="$saved_IFS"
if test -n "$d"; then
pathcomp="$pathcomp$d"
if test ! -d "$pathcomp"; then
echo "mkdir $pathcomp"
mkdir "$pathcomp" || lasterr=$?
if test ! -d "$pathcomp"; then
echo "mkdir $pathcomp"
mkdir "$pathcomp" || lasterr=$?
if test ! -d "$pathcomp"; then
errstatus=$lasterr
else
if test ! -z "$dirmode"; then
echo "chmod $dirmode $pathcomp"
lasterr=""
chmod "$dirmode" "$pathcomp" || lasterr=$?
if test ! -z "$lasterr"; then
errstatus=$lasterr
fi
fi
fi
fi
pathcomp="$pathcomp/"
if test ! -d "$pathcomp"; then
errstatus=$lasterr
break
elif test -n "$dirmode"; then
echo "chmod $dirmode $pathcomp"
lasterr=""
chmod "$dirmode" "$pathcomp" || lasterr=$?
if test -n "$lasterr"; then
errstatus=$lasterr
break
fi
fi
fi
pathcomp="$pathcomp/"
fi
done
done