commit:     16c504f37e471540d3835e7f2fe6beb1f133e29b
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Fri Mar 24 20:58:34 2017 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Fri Apr 14 16:27:52 2017 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=16c504f3

estack.eclass: Use 'shopt -p -o' to restore 'set' flags

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 | 9 ++-------
 1 file changed, 2 insertions(+), 7 deletions(-)

diff --git a/eclass/estack.eclass b/eclass/estack.eclass
index 19c388f3d8d..f548abf8c28 100644
--- a/eclass/estack.eclass
+++ b/eclass/estack.eclass
@@ -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

Reply via email to