git: 6fdb07d5b7e9 - main - loader: provide error message in command_errmsg instead of printing

From: Warner Losh <imp_at_FreeBSD.org>
Date: Sat, 21 Sep 2024 11:26:26 UTC
The branch main has been updated by imp:

URL: https://cgit.FreeBSD.org/src/commit/?id=6fdb07d5b7e9293a6851a23b7ecb26636cf1ec1e

commit 6fdb07d5b7e9293a6851a23b7ecb26636cf1ec1e
Author:     Ahmad Khalifa <ahmadkhalifa570@gmail.com>
AuthorDate: 2024-08-12 12:11:06 +0000
Commit:     Warner Losh <imp@FreeBSD.org>
CommitDate: 2024-09-21 11:25:16 +0000

    loader: provide error message in command_errmsg instead of printing
    
    Also provide an error message when argc is too long instead of printing
    "no error message".
    
    Reviewed by: imp, kib
    Pull Request: https://github.com/freebsd/freebsd-src/pull/1381
---
 stand/efi/loader/copy.c | 24 ++++++++++++++----------
 1 file changed, 14 insertions(+), 10 deletions(-)

diff --git a/stand/efi/loader/copy.c b/stand/efi/loader/copy.c
index 3e466e875af8..90a55089ffc4 100644
--- a/stand/efi/loader/copy.c
+++ b/stand/efi/loader/copy.c
@@ -223,7 +223,7 @@ command_copy_staging(int argc, char *argv[])
 	int prev;
 
 	if (argc > 2) {
-		return (CMD_ERROR);
+		goto usage;
 	} else if (argc == 2) {
 		prev = copy_staging;
 		if (strcmp(argv[1], "enable") == 0)
@@ -232,10 +232,8 @@ command_copy_staging(int argc, char *argv[])
 			copy_staging = COPY_STAGING_DISABLE;
 		else if (strcmp(argv[1], "auto") == 0)
 			copy_staging = COPY_STAGING_AUTO;
-		else {
-			printf("usage: copy_staging enable|disable|auto\n");
-			return (CMD_ERROR);
-		}
+		else
+			goto usage;
 		if (prev != copy_staging) {
 			printf("changed copy_staging, unloading kernel\n");
 			unload();
@@ -246,6 +244,10 @@ command_copy_staging(int argc, char *argv[])
 		printf("copy staging: %s\n", mode[copy_staging]);
 	}
 	return (CMD_OK);
+
+usage:
+	command_errmsg = "usage: copy_staging enable|disable|auto";
+	return (CMD_ERROR);
 }
 COMMAND_SET(copy_staging, "copy_staging", "copy staging", command_copy_staging);
 #endif
@@ -257,13 +259,11 @@ command_staging_slop(int argc, char *argv[])
 	u_long new, prev;
 
 	if (argc > 2) {
-		return (CMD_ERROR);
+		goto err;
 	} else if (argc == 2) {
 		new = strtoul(argv[1], &endp, 0);
-		if (*endp != '\0') {
-			printf("invalid slop value\n");
-			return (CMD_ERROR);
-		}
+		if (*endp != '\0')
+			goto err;
 		if (staging_slop != new) {
 			staging_slop = new;
 			printf("changed slop, unloading kernel\n");
@@ -276,6 +276,10 @@ command_staging_slop(int argc, char *argv[])
 		printf("staging slop %#lx\n", staging_slop);
 	}
 	return (CMD_OK);
+
+err:
+	command_errmsg = "invalid slop value";
+	return (CMD_ERROR);
 }
 COMMAND_SET(staging_slop, "staging_slop", "set staging slop",
     command_staging_slop);