1
0
Files
irix-657m-src/irix/cmd/lboot/error.c
2022-09-29 17:59:04 +03:00

101 lines
3.4 KiB
C

#include <sys/types.h>
#include "lboot.h"
#ident "$Revision: 2.28 $"
static struct errortab {
enum error_num msgnum;
enum {
_PERROR_, /* perror(text); return(0) */
_PERROR_EXIT_, /* perror(text); exit(2) */
_RETURN_, /* return(0) */
_PANIC_ /* exit(2) */
} action;
char* text;
} errortab[] = {
{ ER1, _PANIC_, "%s\n" },
{ ER2, _PERROR_EXIT_, "" },
{ ER7, _PERROR_, "" },
{ ER13, _RETURN_, "Driver %s: major number greater than NMAJOR\n" },
{ ER15, _RETURN_, "Driver %s: not a valid object file\n" },
{ ER16, _RETURN_, "%s: %s object format is incompatible with %s kernel; object ignored\n" },
{ ER18, _RETURN_, "INCLUDE: %s; driver not found\n" },
{ ER19, _RETURN_, "INCLUDE: %s; driver is EXCLUDED\n" },
{ ER20, _RETURN_, "INCLUDE: %s; device not equipped\n" },
{ ER21, _RETURN_, "EXCLUDE: %s; driver is INCLUDED\n" },
{ ER22, _RETURN_, "%s: dependent driver %s not available\n" },
{ ER23, _RETURN_, "%s: dependent driver %s is EXCLUDED\n" },
{ ER24, _RETURN_, "%s: device not equipped for dependent driver %s\n" },
{ ER32, _PANIC_, "%s: not an object file\n" },
{ ER33, _PANIC_, "%s: no section headers\n" },
{ ER36, _RETURN_, "%s: required driver is EXCLUDED\n" },
{ ER37, _RETURN_, "%s: flagged as ONCE only; #C set to 1\n" },
{ ER49, _PANIC_, "%s: truncated read\n" },
{ ER53, _RETURN_, "%s, line %d: %s\n" },
{ ER55, _PANIC_, "mtune file '%s' line %d:%s\n" },
{ ER100, _PANIC_, "%s is not a directory\n" },
{ ER101, _PANIC_, "Failed to find 'KERNEL:' in %s\n" },
{ ER102, _PANIC_, "Driver %s: conflicting interrupt destination for the same IRQ level\nInterrupt is being asked to send to cpu %d\n" },
{ ER103, _PANIC_, "Conflicting interrupt destination for IRQ level %d\nDriver %s to cpu %d, driver %s to cpu %d\n" },
{ ER104, _PANIC_, "Conflicting interrupt destination for the IRQ level %d\n" },
{ ER106, _PANIC_, "All IRQ levels of proc locked driver %s must be locked to the same cpu\nCurrent IRQ level %d is locked to cpu %d\n" },
{ ER107, _PANIC_, "Driver %s, unit %d, and driver %s, unit %d, have the same IRQ or vector, %x\n" },
{ ER108, _PANIC_, "More than 254 interrupts"},
{ ER109, _PANIC_, "Illegal cpuid specified to NOINTR"},
{ ER110, _RETURN_,"stune file '%s' line %d:%s\n"},
{ ER120, _RETURN_, "Loadable module registration may not have been done (e.g. tpsc)\nSee mload(4) manual page for more information on auto registration\n" },
{ ER121, _PANIC_, "Driver %s missing \'devflag\'\n"},
{ ER122, _RETURN_, "%s not specified in system file\n" },
{ ER0 } };
/*
* Print an error message, and determine the recovery action (if any) to
* be taken.
*/
/*VARARGS1*/
void error(enum error_num msgnum, ...)
{
register struct errortab *ep;
va_list ap;
va_start(ap, msgnum);
for (ep=errortab; ep->msgnum != ER0; ++ep) {
if (ep->msgnum == msgnum) {
switch (ep->action) {
case _PANIC_:
fprintf(stderr, "lboot:ERROR:");
vfprintf(stderr, ep->text, ap);
va_end(ap);
myexit(2);
case _PERROR_:
fprintf(stderr, "lboot:WARNING:");
perror(va_arg(ap, char *));
va_end(ap);
return;
case _PERROR_EXIT_:
fprintf(stderr, "lboot:ERROR:");
perror(va_arg(ap, char *));
va_end(ap);
/*
* Attempt to register loadable modules if
* possible.
*/
do_mregister();
myexit(2);
case _RETURN_:
fprintf(stderr, "lboot:WARNING:");
vfprintf(stderr, ep->text, ap);
va_end(ap);
return;
}
break;
}
}
va_end(ap);
fprintf(stderr, "Unknown error number");
}