From d49dfdd8b64e0b55ad51f4426dd7481de7fabb8a Mon Sep 17 00:00:00 2001 From: Assar Westerlund Date: Sat, 2 May 1998 20:12:59 +0000 Subject: [PATCH] add error_table_name git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@4835 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/com_err/com_err.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/lib/com_err/com_err.c b/lib/com_err/com_err.c index 725f54457..790d76850 100644 --- a/lib/com_err/com_err.c +++ b/lib/com_err/com_err.c @@ -135,3 +135,33 @@ reset_com_err_hook (void) { return set_com_err_hook(NULL); } + +#define ERRCODE_RANGE 8 /* # of bits to shift table number */ +#define BITS_PER_CHAR 6 /* # bits to shift per character in name */ + +static const char char_set[] = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_"; + +static char buf[6]; + +const char * +error_table_name(int num) +{ + int ch; + int i; + char *p; + + /* num = aa aaa abb bbb bcc ccc cdd ddd d?? ??? ??? */ + p = buf; + num >>= ERRCODE_RANGE; + /* num = ?? ??? ??? aaa aaa bbb bbb ccc ccc ddd ddd */ + num &= 077777777; + /* num = 00 000 000 aaa aaa bbb bbb ccc ccc ddd ddd */ + for (i = 4; i >= 0; i--) { + ch = (num >> BITS_PER_CHAR * i) & ((1 << BITS_PER_CHAR) - 1); + if (ch != 0) + *p++ = char_set[ch-1]; + } + *p = '\0'; + return(buf); +}