From a1adc7f9a9d91b2ca6bfea01c0ab94ad5d768eea Mon Sep 17 00:00:00 2001 From: Koichi Murase Date: Sun, 24 Jul 2022 17:46:55 +0900 Subject: [PATCH] main. util: fix problems of readlink etc. found by test in macOS --- ble.pp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/ble.pp b/ble.pp index 68e3e72f..715fbe6d 100644 --- a/ble.pp +++ b/ble.pp @@ -411,15 +411,23 @@ function ble/util/readlink/.readlink { function ble/util/readlink/.resolve-physical-directory { [[ $path == */?* ]] || return 0 local PWD=$PWD OLDPWD=$OLDPWD CDPATH= - builtin cd -L . && - local pwd=$PWD && + if builtin cd -L .; then + local pwd=$PWD builtin cd -P "${path%/*}/" && - path=${PWD%/}/${path##*/} - builtin cd -L "$pwd" + path=${PWD%/}/${path##*/} + + # Note #D1849: 現在ディレクトリが他者により改名されている場合や PWD がユー + # ザーに書き換えられている場合にも元のディレクトリに戻る為、cd -L . した + # 後のパスに cd する。但し pwd の結果はこの関数の呼び出し前と変わってしま + # う (が実際にはこの方が良いだろう)。PWD は local にして元の値に戻すので + # 変わらない。 + builtin cd "$pwd" + fi return 0 } function ble/util/readlink/.resolve-loop { local path=$ret + while [[ $path == ?*/ ]]; do path=${path%/}; done builtin eval -- "$_ble_util_readlink_visited_init" while [[ -h $path ]]; do local link @@ -430,7 +438,7 @@ function ble/util/readlink/.resolve-loop { else # 相対パス ../ は物理ディレクトリ構造に従って遡る。 ble/util/readlink/.resolve-physical-directory - path=${path%/}/$link + path=${path%/*}/$link fi while [[ $path == ?*/ ]]; do path=${path%/}; done done