estack.eclass: Use 'shopt -p -o' to restore 'set' flags
authorMichał Górny <mgorny@gentoo.org>
Fri, 24 Mar 2017 20:58:34 +0000 (21:58 +0100)
committerMichał Górny <mgorny@gentoo.org>
Fri, 14 Apr 2017 16:27:52 +0000 (18:27 +0200)
Use 'shopt -p -o' to obtain the current set of 'set' flags, and to
restore them on popping. Unlike $-, it is output in command form (alike
'shopt -p'), removing the need for separate logic in eshopts_pop.

eclass/estack.eclass

index 19c388f3d8d2d06d2eeb18a0dbc14a25bcf73b17..f548abf8c283c0e1d84a9628243151db25001f42 100644 (file)
@@ -158,7 +158,7 @@ eshopts_push() {
                [[ $# -eq 0 ]] && return 0
                shopt "$@" || die "${FUNCNAME}: bad options to shopt: $*"
        else
-               estack_push eshopts $-
+               estack_push eshopts "$(shopt -p -o)"
                [[ $# -eq 0 ]] && return 0
                set "$@" || die "${FUNCNAME}: bad options to set: $*"
        fi
@@ -172,12 +172,7 @@ eshopts_push() {
 eshopts_pop() {
        local s
        estack_pop eshopts s || die "${FUNCNAME}: unbalanced push"
-       if [[ ${s} == "shopt -"* ]] ; then
-               eval "${s}" || die "${FUNCNAME}: sanity: invalid shopt options: ${s}"
-       else
-               set +$-     || die "${FUNCNAME}: sanity: invalid shell settings: $-"
-               set -${s}   || die "${FUNCNAME}: sanity: unable to restore saved shell settings: ${s}"
-       fi
+       eval "${s}" || die "${FUNCNAME}: sanity: invalid shopt options: ${s}"
 }
 
 # @FUNCTION: eumask_push