loader: cstyle cleanup of console.c
cstyle cleanup only, no functional changes intended.
This commit is contained in:
parent
146e176df7
commit
3e9f0f1d29
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=367674
@ -49,97 +49,102 @@ static int twiddle_set(struct env_var *ev, int flags, const void *value);
|
|||||||
void
|
void
|
||||||
cons_probe(void)
|
cons_probe(void)
|
||||||
{
|
{
|
||||||
int cons;
|
int cons;
|
||||||
int active;
|
int active;
|
||||||
char *prefconsole;
|
char *prefconsole;
|
||||||
|
|
||||||
/* We want a callback to install the new value when this var changes. */
|
/* We want a callback to install the new value when this var changes. */
|
||||||
env_setenv("twiddle_divisor", EV_VOLATILE, "1", twiddle_set, env_nounset);
|
env_setenv("twiddle_divisor", EV_VOLATILE, "1", twiddle_set,
|
||||||
|
|
||||||
/* Do all console probes */
|
|
||||||
for (cons = 0; consoles[cons] != NULL; cons++) {
|
|
||||||
consoles[cons]->c_flags = 0;
|
|
||||||
consoles[cons]->c_probe(consoles[cons]);
|
|
||||||
}
|
|
||||||
/* Now find the first working one */
|
|
||||||
active = -1;
|
|
||||||
for (cons = 0; consoles[cons] != NULL && active == -1; cons++) {
|
|
||||||
consoles[cons]->c_flags = 0;
|
|
||||||
consoles[cons]->c_probe(consoles[cons]);
|
|
||||||
if (consoles[cons]->c_flags == (C_PRESENTIN | C_PRESENTOUT))
|
|
||||||
active = cons;
|
|
||||||
}
|
|
||||||
/* Force a console even if all probes failed */
|
|
||||||
if (active == -1)
|
|
||||||
active = 0;
|
|
||||||
|
|
||||||
/* Check to see if a console preference has already been registered */
|
|
||||||
prefconsole = getenv("console");
|
|
||||||
if (prefconsole != NULL)
|
|
||||||
prefconsole = strdup(prefconsole);
|
|
||||||
if (prefconsole != NULL) {
|
|
||||||
unsetenv("console"); /* we want to replace this */
|
|
||||||
cons_change(prefconsole);
|
|
||||||
} else {
|
|
||||||
consoles[active]->c_flags |= C_ACTIVEIN | C_ACTIVEOUT;
|
|
||||||
consoles[active]->c_init(0);
|
|
||||||
prefconsole = strdup(consoles[active]->c_name);
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("Consoles: ");
|
|
||||||
for (cons = 0; consoles[cons] != NULL; cons++)
|
|
||||||
if (consoles[cons]->c_flags & (C_ACTIVEIN | C_ACTIVEOUT))
|
|
||||||
printf("%s ", consoles[cons]->c_desc);
|
|
||||||
printf("\n");
|
|
||||||
|
|
||||||
if (prefconsole != NULL) {
|
|
||||||
env_setenv("console", EV_VOLATILE, prefconsole, cons_set,
|
|
||||||
env_nounset);
|
env_nounset);
|
||||||
free(prefconsole);
|
|
||||||
}
|
/* Do all console probes */
|
||||||
|
for (cons = 0; consoles[cons] != NULL; cons++) {
|
||||||
|
consoles[cons]->c_flags = 0;
|
||||||
|
consoles[cons]->c_probe(consoles[cons]);
|
||||||
|
}
|
||||||
|
/* Now find the first working one */
|
||||||
|
active = -1;
|
||||||
|
for (cons = 0; consoles[cons] != NULL && active == -1; cons++) {
|
||||||
|
consoles[cons]->c_flags = 0;
|
||||||
|
consoles[cons]->c_probe(consoles[cons]);
|
||||||
|
if (consoles[cons]->c_flags == (C_PRESENTIN | C_PRESENTOUT))
|
||||||
|
active = cons;
|
||||||
|
}
|
||||||
|
/* Force a console even if all probes failed */
|
||||||
|
if (active == -1)
|
||||||
|
active = 0;
|
||||||
|
|
||||||
|
/* Check to see if a console preference has already been registered */
|
||||||
|
prefconsole = getenv("console");
|
||||||
|
if (prefconsole != NULL)
|
||||||
|
prefconsole = strdup(prefconsole);
|
||||||
|
if (prefconsole != NULL) {
|
||||||
|
unsetenv("console"); /* we want to replace this */
|
||||||
|
cons_change(prefconsole);
|
||||||
|
} else {
|
||||||
|
consoles[active]->c_flags |= C_ACTIVEIN | C_ACTIVEOUT;
|
||||||
|
consoles[active]->c_init(0);
|
||||||
|
prefconsole = strdup(consoles[active]->c_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("Consoles: ");
|
||||||
|
for (cons = 0; consoles[cons] != NULL; cons++)
|
||||||
|
if (consoles[cons]->c_flags & (C_ACTIVEIN | C_ACTIVEOUT))
|
||||||
|
printf("%s ", consoles[cons]->c_desc);
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
if (prefconsole != NULL) {
|
||||||
|
env_setenv("console", EV_VOLATILE, prefconsole, cons_set,
|
||||||
|
env_nounset);
|
||||||
|
free(prefconsole);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
getchar(void)
|
getchar(void)
|
||||||
{
|
{
|
||||||
int cons;
|
int cons;
|
||||||
int rv;
|
int rv;
|
||||||
|
|
||||||
/* Loop forever polling all active consoles */
|
/* Loop forever polling all active consoles */
|
||||||
for(;;)
|
for (;;) {
|
||||||
for (cons = 0; consoles[cons] != NULL; cons++)
|
for (cons = 0; consoles[cons] != NULL; cons++) {
|
||||||
if ((consoles[cons]->c_flags & (C_PRESENTIN | C_ACTIVEIN)) ==
|
if ((consoles[cons]->c_flags &
|
||||||
(C_PRESENTIN | C_ACTIVEIN) &&
|
(C_PRESENTIN | C_ACTIVEIN)) ==
|
||||||
((rv = consoles[cons]->c_in()) != -1))
|
(C_PRESENTIN | C_ACTIVEIN) &&
|
||||||
return(rv);
|
((rv = consoles[cons]->c_in()) != -1))
|
||||||
|
return (rv);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
ischar(void)
|
ischar(void)
|
||||||
{
|
{
|
||||||
int cons;
|
int cons;
|
||||||
|
|
||||||
for (cons = 0; consoles[cons] != NULL; cons++)
|
for (cons = 0; consoles[cons] != NULL; cons++)
|
||||||
if ((consoles[cons]->c_flags & (C_PRESENTIN | C_ACTIVEIN)) ==
|
if ((consoles[cons]->c_flags & (C_PRESENTIN | C_ACTIVEIN)) ==
|
||||||
(C_PRESENTIN | C_ACTIVEIN) &&
|
(C_PRESENTIN | C_ACTIVEIN) &&
|
||||||
(consoles[cons]->c_ready() != 0))
|
(consoles[cons]->c_ready() != 0))
|
||||||
return(1);
|
return (1);
|
||||||
return(0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
putchar(int c)
|
putchar(int c)
|
||||||
{
|
{
|
||||||
int cons;
|
int cons;
|
||||||
|
|
||||||
/* Expand newlines */
|
/* Expand newlines */
|
||||||
if (c == '\n')
|
if (c == '\n')
|
||||||
putchar('\r');
|
putchar('\r');
|
||||||
|
|
||||||
for (cons = 0; consoles[cons] != NULL; cons++)
|
for (cons = 0; consoles[cons] != NULL; cons++) {
|
||||||
if ((consoles[cons]->c_flags & (C_PRESENTOUT | C_ACTIVEOUT)) ==
|
if ((consoles[cons]->c_flags & (C_PRESENTOUT | C_ACTIVEOUT)) ==
|
||||||
(C_PRESENTOUT | C_ACTIVEOUT))
|
(C_PRESENTOUT | C_ACTIVEOUT))
|
||||||
consoles[cons]->c_out(c);
|
consoles[cons]->c_out(c);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -148,12 +153,12 @@ putchar(int c)
|
|||||||
static int
|
static int
|
||||||
cons_find(const char *name)
|
cons_find(const char *name)
|
||||||
{
|
{
|
||||||
int cons;
|
int cons;
|
||||||
|
|
||||||
for (cons = 0; consoles[cons] != NULL; cons++)
|
for (cons = 0; consoles[cons] != NULL; cons++)
|
||||||
if (!strcmp(consoles[cons]->c_name, name))
|
if (strcmp(consoles[cons]->c_name, name) == 0)
|
||||||
return (cons);
|
return (cons);
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -162,22 +167,23 @@ cons_find(const char *name)
|
|||||||
static int
|
static int
|
||||||
cons_set(struct env_var *ev, int flags, const void *value)
|
cons_set(struct env_var *ev, int flags, const void *value)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if ((value == NULL) || (cons_check(value) == 0)) {
|
if ((value == NULL) || (cons_check(value) == 0)) {
|
||||||
/*
|
/*
|
||||||
* Return CMD_OK instead of CMD_ERROR to prevent forth syntax error,
|
* Return CMD_OK instead of CMD_ERROR to prevent forth syntax
|
||||||
* which would prevent it processing any further loader.conf entries.
|
* error, which would prevent it processing any further
|
||||||
*/
|
* loader.conf entries.
|
||||||
|
*/
|
||||||
|
return (CMD_OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = cons_change(value);
|
||||||
|
if (ret != CMD_OK)
|
||||||
|
return (ret);
|
||||||
|
|
||||||
|
env_setenv(ev->ev_name, flags | EV_NOHOOK, value, NULL, NULL);
|
||||||
return (CMD_OK);
|
return (CMD_OK);
|
||||||
}
|
|
||||||
|
|
||||||
ret = cons_change(value);
|
|
||||||
if (ret != CMD_OK)
|
|
||||||
return (ret);
|
|
||||||
|
|
||||||
env_setenv(ev->ev_name, flags | EV_NOHOOK, value, NULL, NULL);
|
|
||||||
return (CMD_OK);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -186,36 +192,36 @@ cons_set(struct env_var *ev, int flags, const void *value)
|
|||||||
static int
|
static int
|
||||||
cons_check(const char *string)
|
cons_check(const char *string)
|
||||||
{
|
{
|
||||||
int cons, found, failed;
|
int cons, found, failed;
|
||||||
char *curpos, *dup, *next;
|
char *curpos, *dup, *next;
|
||||||
|
|
||||||
dup = next = strdup(string);
|
dup = next = strdup(string);
|
||||||
found = failed = 0;
|
found = failed = 0;
|
||||||
while (next != NULL) {
|
while (next != NULL) {
|
||||||
curpos = strsep(&next, " ,");
|
curpos = strsep(&next, " ,");
|
||||||
if (*curpos != '\0') {
|
if (*curpos != '\0') {
|
||||||
cons = cons_find(curpos);
|
cons = cons_find(curpos);
|
||||||
if (cons == -1) {
|
if (cons == -1) {
|
||||||
printf("console %s is invalid!\n", curpos);
|
printf("console %s is invalid!\n", curpos);
|
||||||
failed++;
|
failed++;
|
||||||
} else {
|
} else {
|
||||||
found++;
|
found++;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
free(dup);
|
free(dup);
|
||||||
|
|
||||||
if (found == 0)
|
if (found == 0)
|
||||||
printf("no valid consoles!\n");
|
printf("no valid consoles!\n");
|
||||||
|
|
||||||
if (found == 0 || failed != 0) {
|
if (found == 0 || failed != 0) {
|
||||||
printf("Available consoles:\n");
|
printf("Available consoles:\n");
|
||||||
for (cons = 0; consoles[cons] != NULL; cons++)
|
for (cons = 0; consoles[cons] != NULL; cons++)
|
||||||
printf(" %s\n", consoles[cons]->c_name);
|
printf(" %s\n", consoles[cons]->c_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (found);
|
return (found);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -224,56 +230,64 @@ cons_check(const char *string)
|
|||||||
static int
|
static int
|
||||||
cons_change(const char *string)
|
cons_change(const char *string)
|
||||||
{
|
{
|
||||||
int cons, active;
|
int cons, active;
|
||||||
char *curpos, *dup, *next;
|
char *curpos, *dup, *next;
|
||||||
|
|
||||||
/* Disable all consoles */
|
/* Disable all consoles */
|
||||||
for (cons = 0; consoles[cons] != NULL; cons++) {
|
|
||||||
consoles[cons]->c_flags &= ~(C_ACTIVEIN | C_ACTIVEOUT);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Enable selected consoles */
|
|
||||||
dup = next = strdup(string);
|
|
||||||
active = 0;
|
|
||||||
while (next != NULL) {
|
|
||||||
curpos = strsep(&next, " ,");
|
|
||||||
if (*curpos == '\0')
|
|
||||||
continue;
|
|
||||||
cons = cons_find(curpos);
|
|
||||||
if (cons >= 0) {
|
|
||||||
consoles[cons]->c_flags |= C_ACTIVEIN | C_ACTIVEOUT;
|
|
||||||
consoles[cons]->c_init(0);
|
|
||||||
if ((consoles[cons]->c_flags & (C_PRESENTIN | C_PRESENTOUT)) ==
|
|
||||||
(C_PRESENTIN | C_PRESENTOUT)) {
|
|
||||||
active++;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (active != 0) {
|
|
||||||
/* If no consoles have initialised we wouldn't see this. */
|
|
||||||
printf("console %s failed to initialize\n", consoles[cons]->c_name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
free(dup);
|
|
||||||
|
|
||||||
if (active == 0) {
|
|
||||||
/* All requested consoles failed to initialise, try to recover. */
|
|
||||||
for (cons = 0; consoles[cons] != NULL; cons++) {
|
for (cons = 0; consoles[cons] != NULL; cons++) {
|
||||||
consoles[cons]->c_flags |= C_ACTIVEIN | C_ACTIVEOUT;
|
consoles[cons]->c_flags &= ~(C_ACTIVEIN | C_ACTIVEOUT);
|
||||||
consoles[cons]->c_init(0);
|
|
||||||
if ((consoles[cons]->c_flags &
|
|
||||||
(C_PRESENTIN | C_PRESENTOUT)) ==
|
|
||||||
(C_PRESENTIN | C_PRESENTOUT))
|
|
||||||
active++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (active == 0)
|
/* Enable selected consoles */
|
||||||
return (CMD_ERROR); /* Recovery failed. */
|
dup = next = strdup(string);
|
||||||
}
|
active = 0;
|
||||||
|
while (next != NULL) {
|
||||||
|
curpos = strsep(&next, " ,");
|
||||||
|
if (*curpos == '\0')
|
||||||
|
continue;
|
||||||
|
cons = cons_find(curpos);
|
||||||
|
if (cons >= 0) {
|
||||||
|
consoles[cons]->c_flags |= C_ACTIVEIN | C_ACTIVEOUT;
|
||||||
|
consoles[cons]->c_init(0);
|
||||||
|
if ((consoles[cons]->c_flags &
|
||||||
|
(C_PRESENTIN | C_PRESENTOUT)) ==
|
||||||
|
(C_PRESENTIN | C_PRESENTOUT)) {
|
||||||
|
active++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
return (CMD_OK);
|
if (active != 0) {
|
||||||
|
/*
|
||||||
|
* If no consoles have initialised we
|
||||||
|
* wouldn't see this.
|
||||||
|
*/
|
||||||
|
printf("console %s failed to initialize\n",
|
||||||
|
consoles[cons]->c_name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
free(dup);
|
||||||
|
|
||||||
|
if (active == 0) {
|
||||||
|
/*
|
||||||
|
* All requested consoles failed to initialise,
|
||||||
|
* try to recover.
|
||||||
|
*/
|
||||||
|
for (cons = 0; consoles[cons] != NULL; cons++) {
|
||||||
|
consoles[cons]->c_flags |= C_ACTIVEIN | C_ACTIVEOUT;
|
||||||
|
consoles[cons]->c_init(0);
|
||||||
|
if ((consoles[cons]->c_flags &
|
||||||
|
(C_PRESENTIN | C_PRESENTOUT)) ==
|
||||||
|
(C_PRESENTIN | C_PRESENTOUT))
|
||||||
|
active++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (active == 0)
|
||||||
|
return (CMD_ERROR); /* Recovery failed. */
|
||||||
|
}
|
||||||
|
|
||||||
|
return (CMD_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -287,16 +301,16 @@ cons_change(const char *string)
|
|||||||
static int
|
static int
|
||||||
twiddle_set(struct env_var *ev, int flags, const void *value)
|
twiddle_set(struct env_var *ev, int flags, const void *value)
|
||||||
{
|
{
|
||||||
u_long tdiv;
|
u_long tdiv;
|
||||||
char * eptr;
|
char *eptr;
|
||||||
|
|
||||||
tdiv = strtoul(value, &eptr, 0);
|
tdiv = strtoul(value, &eptr, 0);
|
||||||
if (*(const char *)value == 0 || *eptr != 0) {
|
if (*(const char *)value == 0 || *eptr != 0) {
|
||||||
printf("invalid twiddle_divisor '%s'\n", (const char *)value);
|
printf("invalid twiddle_divisor '%s'\n", (const char *)value);
|
||||||
return (CMD_ERROR);
|
return (CMD_ERROR);
|
||||||
}
|
}
|
||||||
twiddle_divisor((u_int)tdiv);
|
twiddle_divisor((u_int)tdiv);
|
||||||
env_setenv(ev->ev_name, flags | EV_NOHOOK, value, NULL, NULL);
|
env_setenv(ev->ev_name, flags | EV_NOHOOK, value, NULL, NULL);
|
||||||
|
|
||||||
return(CMD_OK);
|
return (CMD_OK);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user