summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEzra Peisach <epeisach@mit.edu>1997-07-22 00:29:16 +0000
committerEzra Peisach <epeisach@mit.edu>1997-07-22 00:29:16 +0000
commit1eda083efe0b1c9f8db5c559651dbab9ae09faa2 (patch)
treee6889bef901d5cf441ba13b7d677687327c6b1e2
parent629f941f7a440a9b6ef7490dd2030dbba7bd0038 (diff)
downloadkrb5-1eda083efe0b1c9f8db5c559651dbab9ae09faa2.tar.gz
krb5-1eda083efe0b1c9f8db5c559651dbab9ae09faa2.tar.xz
krb5-1eda083efe0b1c9f8db5c559651dbab9ae09faa2.zip
* error_message.c (error_message): Mask error code with
ERRCODE_MASK to handle case where 32bit ints are zero filled in the gssapi layer. * error_table.h: Define ERRCODE_MAX, the maximum allowed error code (32bits). I am taking the draconian outlook that the com_err library was always intending to define the error as a 32 bit value. I taken this approach instead of making the errcode_t machine specific as the com_er generated header files would then need be machine specific as well. (error codes are declared as say -4353L explicitly). git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@10122 dc483132-0cff-0310-8789-dd5450dbe970
-rw-r--r--src/util/et/ChangeLog9
-rw-r--r--src/util/et/error_message.c4
-rw-r--r--src/util/et/error_table.h1
3 files changed, 12 insertions, 2 deletions
diff --git a/src/util/et/ChangeLog b/src/util/et/ChangeLog
index e886e3a889..f6bdc7d66c 100644
--- a/src/util/et/ChangeLog
+++ b/src/util/et/ChangeLog
@@ -1,3 +1,12 @@
+Mon Jul 21 12:00:24 1997 Ezra Peisach <epeisach@mit.edu>
+
+ * error_message.c (error_message): Mask error code with
+ ERRCODE_MASK to handle case where 32bit ints are zero
+ filed in the gssapi layer.
+
+ * error_table.h: Define ERRCODE_MAX, the maximum allowed error
+ code (32bits).
+
Tue Mar 18 15:07:40 1997 Theodore Ts'o <tytso@rsts-11.mit.edu>
* com_err.h: Add 'extern "C"' for C++ compatibility; also check for
diff --git a/src/util/et/error_message.c b/src/util/et/error_message.c
index 81e5088c12..691df289e0 100644
--- a/src/util/et/error_message.c
+++ b/src/util/et/error_message.c
@@ -61,7 +61,7 @@ KRB5_DLLIMP const char FAR * KRB5_CALLCONV error_message(code)
l_offset = (unsigned long)code & ((1<<ERRCODE_RANGE)-1);
offset = l_offset;
- table_num = (unsigned long)code - l_offset;
+ table_num = ((unsigned long)code - l_offset) & ERRCODE_MAX;
if (!table_num) {
if (code == 0)
goto oops;
@@ -85,7 +85,7 @@ KRB5_DLLIMP const char FAR * KRB5_CALLCONV error_message(code)
et = _et_list;
while (et) {
- if (et->table->base == table_num) {
+ if ((et->table->base & ERRCODE_MAX) == table_num) {
/* This is the right table */
if (et->table->n_msgs <= offset)
break;
diff --git a/src/util/et/error_table.h b/src/util/et/error_table.h
index a3cc229ac1..053a521745 100644
--- a/src/util/et/error_table.h
+++ b/src/util/et/error_table.h
@@ -22,6 +22,7 @@ extern struct et_list * _et_list;
#define ERRCODE_RANGE 8 /* # of bits to shift table number */
#define BITS_PER_CHAR 6 /* # bits to shift per character in name */
+#define ERRCODE_MAX 0xFFFFFFFF /* Mask for maximum error table */
extern const char FAR *error_table_name ET_P((unsigned long));
extern const char FAR *error_table_name_r ET_P((unsigned long, char FAR *));