git: c97460c4d97d - main - sysrc: Fix check flag logic for append and subtract
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 28 Apr 2025 18:21:12 UTC
The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=c97460c4d97db1bd46dab9f2bdbc90cd1ed7757f commit c97460c4d97db1bd46dab9f2bdbc90cd1ed7757f Author: Michal Scigocki <michal.os@hotmail.com> AuthorDate: 2025-04-14 07:01:06 +0000 Commit: Mark Johnston <markj@FreeBSD.org> CommitDate: 2025-04-28 18:18:08 +0000 sysrc: Fix check flag logic for append and subtract When using sysrc with the check flag (-c), the append (+=) and subtract (-=) operations result in incorrect return values because on the check path the necessary union/difference calculation logic is not performed. However, the correct union/difference calculation is already performed when running without the check flag. We fix the issue on the check path by using the results from the existing union/difference calculation in the check logic to get the correct return values. PR: 279200 Reviewed by: markj MFC after: 1 month Pull Request: https://github.com/freebsd/freebsd-src/pull/1664 --- usr.sbin/sysrc/sysrc | 52 +++++++++++++++++++++++++--------------------------- 1 file changed, 25 insertions(+), 27 deletions(-) diff --git a/usr.sbin/sysrc/sysrc b/usr.sbin/sysrc/sysrc index 1766cf7ab835..625ff5ca4efd 100644 --- a/usr.sbin/sysrc/sysrc +++ b/usr.sbin/sysrc/sysrc @@ -764,33 +764,6 @@ while [ $# -gt 0 ]; do continue fi - # - # If `-c' is passed, simply compare and move on - # - if [ "$CHECK_ONLY" ]; then - if ! IGNORED=$( f_sysrc_get "$NAME?" ); then - status=$FAILURE - [ "$VERBOSE" ] && - echo "$NAME: not currently set" - shift 1 - continue - fi - value=$( f_sysrc_get "$NAME" ) - if [ "$value" != "${1#*=}" ]; then - status=$FAILURE - if [ "$VERBOSE" ]; then - echo -n "$( f_sysrc_find "$NAME" ): " - echo -n "$NAME: would change from " - echo "\`$value' to \`${1#*=}'" - fi - elif [ "$VERBOSE" ]; then - echo -n "$( f_sysrc_find "$NAME" ): " - echo "$NAME: already set to \`$value'" - fi - shift 1 - continue - fi - # # Determine both `before' value and appropriate `new' value # @@ -848,6 +821,31 @@ while [ $# -gt 0 ]; do new="${1#*=}" esac + # + # If `-c' is passed, simply compare and move on + # + if [ "$CHECK_ONLY" ]; then + if ! IGNORED=$( f_sysrc_get "$NAME?" ); then + status=$FAILURE + [ "$VERBOSE" ] && + echo "$NAME: not currently set" + shift 1 + continue + elif [ "$new" != "$before" ]; then + status=$FAILURE + if [ "$VERBOSE" ]; then + echo -n "$( f_sysrc_find "$NAME" ): " + echo -n "$NAME: would change from " + echo "\`$before' to \`$new'" + fi + elif [ "$VERBOSE" ]; then + echo -n "$( f_sysrc_find "$NAME" ): " + echo "$NAME: already set to \`$before'" + fi + shift 1 + continue + fi + # # If `-N' is passed, simplify the output #