diff options
author | wollman <wollman@FreeBSD.org> | 1995-01-14 22:23:41 +0000 |
---|---|---|
committer | wollman <wollman@FreeBSD.org> | 1995-01-14 22:23:41 +0000 |
commit | 0916b5648b6e21b684e10cfba42b81769ea51035 (patch) | |
tree | 293623fcd45343b02313101f81356ff8761dec64 /lib/libcom_err/error_message.c | |
download | FreeBSD-src-0916b5648b6e21b684e10cfba42b81769ea51035.zip FreeBSD-src-0916b5648b6e21b684e10cfba42b81769ea51035.tar.gz |
The Common Error Description Library, developed by MIT SIPB and used by
a number of (ex-)Athena programs. Breaking my own rules for importing
somewhat, as this code does not appear to be actively maintained by anyone
(not that it really needs it).
Diffstat (limited to 'lib/libcom_err/error_message.c')
-rw-r--r-- | lib/libcom_err/error_message.c | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/lib/libcom_err/error_message.c b/lib/libcom_err/error_message.c new file mode 100644 index 0000000..99dab1e --- /dev/null +++ b/lib/libcom_err/error_message.c @@ -0,0 +1,71 @@ +/* + * $Header: error_message.c,v 1.2 89/01/25 09:08:57 shanzer Exp $ + * $Source: /paris/source/4.3/athena.lib/et.new/RCS/error_message.c,v $ + * $Locker: $ + * + * Copyright 1987 by the Student Information Processing Board + * of the Massachusetts Institute of Technology + * + * For copyright info, see "mit-sipb-copyright.h". + */ + +#include <stdio.h> +#include "error_table.h" +#include "mit-sipb-copyright.h" +#include "internal.h" + +static const char rcsid[] = + "$Header: error_message.c,v 1.2 89/01/25 09:08:57 shanzer Exp $"; +static const char copyright[] = + "Copyright 1986, 1987, 1988 by the Student Information Processing Board\nand the department of Information Systems\nof the Massachusetts Institute of Technology"; + +static char buffer[25]; + +struct et_list * _et_list = (struct et_list *) NULL; + +const char * error_message (code) +long code; +{ + int offset; + struct et_list *et; + int table_num; + int started = 0; + char *cp; + + offset = code & ((1<<ERRCODE_RANGE)-1); + table_num = code - offset; + if (!table_num) { + if (offset < sys_nerr) + return(sys_errlist[offset]); + else + goto oops; + } + for (et = _et_list; et; et = et->next) { + if (et->table->base == table_num) { + /* This is the right table */ + if (et->table->n_msgs <= offset) + goto oops; + return(et->table->msgs[offset]); + } + } +oops: + strcpy (buffer, "Unknown code "); + if (table_num) { + strcat (buffer, error_table_name (table_num)); + strcat (buffer, " "); + } + for (cp = buffer; *cp; cp++) + ; + if (offset >= 100) { + *cp++ = '0' + offset / 100; + offset %= 100; + started++; + } + if (started || offset >= 10) { + *cp++ = '0' + offset / 10; + offset %= 10; + } + *cp++ = '0' + offset; + *cp = '\0'; + return(buffer); +} |