Start development on 386BSD 0.0
[unix-history] / .ref-BSD-4_3_Net_2 / usr / src / kerberosIV / compile_et / error_message.c
CommitLineData
e790d959
C
1/*
2 * $Header: error_message.c,v 1.1 86/11/10 21:34:34 spook Exp $
3 * $Source: /mit/s/p/spook/Work/et/RCS/error_message.c,v $
4 * $Locker: spook $
5 *
6 * Copyright 1987 by the Student Information Processing Board
7 * of the Massachusetts Institute of Technology
8 *
9 * For copyright info, see "mit-sipb-copyright.h".
10 */
11
12#include <stdio.h>
13#include "error_table.h"
14#include "mit-sipb-copyright.h"
15extern char *sys_errlist[];
16extern int sys_nerr;
17
18static char buffer[25];
19
20char *
21error_message(code)
22 int code;
23{
24 register int offset;
25 register error_table **et;
26 register int table_num;
27 register int div;
28 register char *cp;
29
30 offset = code & ((1<<ERRCODE_RANGE)-1);
31 table_num = code - offset;
32 if ((_et_list == (error_table **)NULL) && table_num)
33 goto oops;
34 if (!table_num) {
35 if (offset < sys_nerr)
36 return(sys_errlist[offset]);
37 else
38 goto oops;
39 }
40 for (et = _et_list; *et != (error_table *)NULL; et++) {
41 if ((*et)->base == table_num) {
42 /* This is the right table */
43 if ((*et)->n_msgs <= offset)
44 goto oops;
45 return((*et)->msgs[offset]);
46 }
47 }
48 oops:
49 cp = buffer;
50 {
51 register char *cp1;
52 for (cp1 = "Unknown code "; *cp1; cp1++, cp++)
53 *cp = *cp1;
54 if (table_num) {
55 for (cp1 = error_table_name(table_num); *cp1; cp1++, cp++)
56 *cp = *cp1;
57 *cp++ = ' ';
58 *cp = '\0';
59 }
60 }
61 div = 1000000000;
62 if (offset == 0) {
63 *cp++ = '0';
64 *cp = '\0';
65 return(buffer);
66 }
67 while (div > offset)
68 div /= 10;
69 do {
70 register int n = offset / div;
71 *cp++ = '0' + n;
72 offset -= n * div;
73 div /= 10;
74 } while (offset && div);
75 while (div) {
76 *cp++ = '0';
77 div /= 10;
78 }
79 *cp = '\0';
80 return(buffer);
81}