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

(cherry picked from commit 6fdb07d5b7e9293a6851a23b7ecb26636cf1ec1e)
This commit is contained in:
Ahmad Khalifa 2024-08-12 15:11:06 +03:00 committed by Warner Losh
parent 8ec2792258
commit 1d111b39e5

View file

@ -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);