From fb7afa42693f5304d8f827ceebeba2d6359d4e5e Mon Sep 17 00:00:00 2001 From: Francois Gouget Date: Thu, 15 Jun 2006 18:05:07 +0200 Subject: [PATCH] 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. --- tools/mkinstalldirs | 66 ++++++++++++++++++++++----------------------- 1 file changed, 32 insertions(+), 34 deletions(-) diff --git a/tools/mkinstalldirs b/tools/mkinstalldirs index 8ab885ec92d..ec700bdb931 100755 --- a/tools/mkinstalldirs +++ b/tools/mkinstalldirs @@ -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