git: 203027b2d5dc - main - Update libexec/rc/debug.sh and hooks.sh
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 31 Dec 2024 18:49:22 UTC
The branch main has been updated by sjg: URL: https://cgit.FreeBSD.org/src/commit/?id=203027b2d5dc89fec3a0a7eee195a11cb394587f commit 203027b2d5dc89fec3a0a7eee195a11cb394587f Author: Simon J. Gerraty <sjg@FreeBSD.org> AuthorDate: 2024-12-31 18:47:06 +0000 Commit: Simon J. Gerraty <sjg@FreeBSD.org> CommitDate: 2024-12-31 18:47:06 +0000 Update libexec/rc/debug.sh and hooks.sh Use local_works() to test if 'local' actually works for current shell. --- libexec/rc/debug.sh | 46 ++++++++++++++++++++++++++++++++-------------- libexec/rc/hooks.sh | 37 +++++++++++++++++++------------------ 2 files changed, 51 insertions(+), 32 deletions(-) diff --git a/libexec/rc/debug.sh b/libexec/rc/debug.sh index db9ed8c94b6c..b379297a4183 100755 --- a/libexec/rc/debug.sh +++ b/libexec/rc/debug.sh @@ -83,7 +83,7 @@ # Simon J. Gerraty <sjg@crufty.net> # RCSid: -# $Id: debug.sh,v 1.42 2024/10/30 18:23:19 sjg Exp $ +# $Id: debug.sh,v 1.46 2024/12/13 03:55:52 sjg Exp $ # # @(#) Copyright (c) 1994-2024 Simon J. Gerraty # @@ -107,27 +107,45 @@ DEBUG_DO=: DEBUG_SKIP= export DEBUGGING DEBUG_DO DEBUG_SKIP -case "$isPOSIX_SHELL,$local" in -:,:|:,local|false,:) ;; # sane -*) # this is the bulk of isposix-shell.sh +# have is handy +if test -z "$_HAVE_SH"; then + _HAVE_SH=: + + ## + # have that does not rely on return code of type + # + have() { + case `(type "$1") 2>&1` in + *" found") return 1;; + esac + return 0 + } +fi + +# does local *actually* work? +local_works() { + local _fu +} + +if local_works > /dev/null 2>&1; then + _local=local +else + _local=: +fi +# for backwards compatability +local=$_local + +if test -z "$isPOSIX_SHELL"; then if (echo ${PATH%:*}) > /dev/null 2>&1; then # true should be a builtin, : certainly is isPOSIX_SHELL=: - # you need to eval $local var - local=local - : KSH_VERSION=$KSH_VERSION - case "$KSH_VERSION" in - Version*) local=: ;; # broken - esac else isPOSIX_SHELL=false - local=: false() { return 1 } fi - ;; -esac +fi is_posix_shell() { $isPOSIX_SHELL @@ -142,7 +160,7 @@ is_posix_shell() { # a suffix of :debug_add:tag we will add tag to DEBUG_SH # _debugAdd() { - eval $local tag + eval $_local tag for tag in `IFS=,; echo $DEBUG_SH` do diff --git a/libexec/rc/hooks.sh b/libexec/rc/hooks.sh index 3b0c50f10191..7c478fbeda15 100755 --- a/libexec/rc/hooks.sh +++ b/libexec/rc/hooks.sh @@ -50,7 +50,7 @@ # # RCSid: -# $Id: hooks.sh,v 1.21 2024/09/06 16:53:45 sjg Exp $ +# $Id: hooks.sh,v 1.24 2024/12/13 03:55:52 sjg Exp $ # # @(#)Copyright (c) 2000-2024 Simon J. Gerraty # @@ -64,18 +64,19 @@ # avoid multiple inclusion _HOOKS_SH=: -# We want to use local if we can -# if isposix-shell.sh has been sourced isPOSIX_SHELL will be set -# as will local -case "$local" in -local|:) ;; -*) if (echo ${PATH%:*}) > /dev/null 2>&1; then - local=local - else - local=: - fi - ;; -esac +# does local *actually* work? +local_works() { + local _fu +} + +if local_works > /dev/null 2>&1; then + _local=local +else + _local=: +fi +# for backwards compatability +local=$_local + ## # hooks_add_all list func ... @@ -83,7 +84,7 @@ esac # add "func"s to "list" regardless # hooks_add_all() { - eval $local __h + eval $_local __h __h=$1; shift case "$1" in --first) @@ -100,7 +101,7 @@ hooks_add_all() { # add "func"s to "list" if not already there # hooks_add_once() { - eval $local __h __hh __first + eval $_local __h __hh __first __h=$1; shift case "$1" in --first) shift; __first=:;; @@ -154,7 +155,7 @@ hooks_add() { # return $list # hooks_get() { - eval $local __h __h2 e __l + eval $_local __h __h2 e __l case "$1" in --lifo) __l=LIFO; shift;; esac @@ -178,7 +179,7 @@ hooks_get() { # is func in $list ? # hooks_has() { - eval $local __h + eval $_local __h eval "__h=\$$1" case " $__h " in *" $1 "*) return 0;; @@ -193,7 +194,7 @@ hooks_has() { # Without '--all'; if any return non-zero return that immediately # hooks_run() { - eval $local __a e __h __hl __h2 __l + eval $_local __a e __h __hl __h2 __l __a=return __l=