Module Name:    src
Committed By:   lukem
Date:           Sat Jan  8 06:58:40 UTC 2022

Modified Files:
        src/usr.sbin/postinstall: postinstall.in

Log Message:
postinstall: add -?. improve option errors

Support -? to show help.
Implemented using getopts "leading colon optstring" feature.
Improve error messages for unknown options and missing arguments.


To generate a diff of this commit:
cvs rdiff -u -r1.46 -r1.47 src/usr.sbin/postinstall/postinstall.in

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.sbin/postinstall/postinstall.in
diff -u src/usr.sbin/postinstall/postinstall.in:1.46 src/usr.sbin/postinstall/postinstall.in:1.47
--- src/usr.sbin/postinstall/postinstall.in:1.46	Sat Jan  8 06:57:34 2022
+++ src/usr.sbin/postinstall/postinstall.in	Sat Jan  8 06:58:40 2022
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# $NetBSD: postinstall.in,v 1.46 2022/01/08 06:57:34 lukem Exp $
+# $NetBSD: postinstall.in,v 1.47 2022/01/08 06:58:40 lukem Exp $
 #
 # Copyright (c) 2002-2022 The NetBSD Foundation, Inc.
 # All rights reserved.
@@ -2542,6 +2542,8 @@ help()
 {
 	cat << _USAGE_
 Usage: ${PROGNAME} [-a ARCH] [-d DEST_DIR] [-m MACHINE] [-s SRC_DIR] [-x XSRC_DIR] OPERATION ...
+       ${PROGNAME} -?
+
 	Perform post-installation checks and/or fixes on a system's
 	configuration files.
 	If no items are provided, a default set of checks or fixes is applied.
@@ -2567,9 +2569,9 @@ Usage: ${PROGNAME} [-a ARCH] [-d DEST_DI
 	help		Display this help.
 	list		List available items.
 	check ITEM ...	Perform post-installation checks on ITEMs.
-	diff [DIFFOPT] ITEM ...
+	diff [-bcenpuw] ITEM ...
 			Similar to 'check' but also output difference of files,
-			using diff [DIFFOPT].
+			using diff with the provided options.
 	fix ITEM ...	Apply fixes that 'check' determines need to be applied.
 	usage		Display this usage.
 _USAGE_
@@ -2626,7 +2628,7 @@ main()
 
 		# Validate options.
 		#
-	while getopts a:d:m:s:x: ch; do
+	while getopts :a:d:m:s:x: ch; do
 		case "${ch}" in
 		a)
 			MACHINE_ARCH="${OPTARG}"
@@ -2675,9 +2677,23 @@ main()
 				err 2 "Not a directory for -x option"
 			fi
 			;;
-		*)
+		"?")
+			if [ "${OPTARG}" = "?" ]; then
+				help
+				return	# no further processing or validation
+			fi
+			warn "Unknown option -${OPTARG}"
+			usage
+			;;
+
+		:)
+			warn "Missing argument for option -${OPTARG}"
 			usage
 			;;
+
+		*)
+			err 3 "Unimplemented option -${ch}"
+			;;
 		esac
 	done
 	shift $((${OPTIND} - 1))
@@ -2706,20 +2722,30 @@ main()
 		op=check
 		DIFF_STYLE=n			# default style is RCS
 		OPTIND=1
-		while getopts bcenpuw ch; do
+		while getopts :bcenpuw ch; do
 			case "${ch}" in
 			c|e|n|u)
 				if [ "${DIFF_STYLE}" != "n" -a \
 				    "${DIFF_STYLE}" != "${ch}" ]; then
-					err 2 "diff: conflicting output style: ${ch}"
+					warn "diff: conflicting output style: -${ch}"
+					usage
 				fi
 				DIFF_STYLE="${ch}"
 				;;
 			b|p|w)
 				DIFF_OPT="${DIFF_OPT} -${ch}"
 				;;
+			"?")
+				# NOTE: not supporting diff -?
+				warn "diff: Unknown option -${OPTARG}"
+				usage
+				;;
+			:)
+				warn "diff: Missing argument for option -${OPTARG}"
+				usage
+				;;
 			*)
-				err 2 "diff: unknown option"
+				err 3 "diff: Unimplemented option -${ch}"
 				;;
 			esac
 		done

Reply via email to