summaryrefslogtreecommitdiffstats
path: root/lib/libcom_err/error_message.c
diff options
context:
space:
mode:
authorwollman <wollman@FreeBSD.org>1995-01-14 22:23:41 +0000
committerwollman <wollman@FreeBSD.org>1995-01-14 22:23:41 +0000
commit0916b5648b6e21b684e10cfba42b81769ea51035 (patch)
tree293623fcd45343b02313101f81356ff8761dec64 /lib/libcom_err/error_message.c
downloadFreeBSD-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.c71
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);
+}
OpenPOWER on IntegriCloud