diff --git a/Pmodules/libstd.bash b/Pmodules/libstd.bash index fedd0c4da0b41020263ecf4b22f13ab2babc1978..f56ae57d83b431fe5e9c91372e3fd8678bf530b2 100644 --- a/Pmodules/libstd.bash +++ b/Pmodules/libstd.bash @@ -133,16 +133,29 @@ std::replace_path () { } # -# split file name +# split an absolute path # -std::split_fname() { - local -r savedIFS="${IFS}" +# Args: +# $1 upvar +# $2 absolute path +# $3 opt upvar: number of components +# +std::split_abspath() { + local parts="$1" + local -r path="$2" + if [[ "${path:0:1}" == '/' ]]; then + local -r std__split_path_tmp="${path:1}" + else + std::die 255 "Oops: Internal error in '${FUNCNAME[0]}' called by '${FUNCNAME[1]}' }" + fi + IFS='/' - local std__split_fname_result__=( $(echo "${@: -1}") ) - IFS=${savedIFS} - eval $1=\(\"\${std__split_fname_result__[@]}\"\) + local std__split_path_result=( ${std__split_path_tmp} ) + unset IFS + std::upvar ${parts} "${std__split_path_result[@]}" if (( $# >= 3 )); then - eval $2=${#std__split_fname_result__[@]} + # return number of parts + std::upvar "$3" ${#std__split_path_result[@]} fi }