Fix len_unsigned for certain negative integers, it got the length

wrong, fix from Panasas, Inc.

rename len_int and len_unsigned to _heim_\&


git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@13316 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Love Hörnquist Åstrand
2004-02-07 14:27:59 +00:00
parent d0daf9b14c
commit a96b264050

View File

@@ -35,8 +35,8 @@
RCSID("$Id$");
static size_t
len_unsigned (unsigned val)
size_t
_heim_len_unsigned (unsigned val)
{
size_t ret = 0;
@@ -47,22 +47,29 @@ len_unsigned (unsigned val)
return ret;
}
static size_t
len_int (int val)
size_t
_heim_len_int (int val)
{
unsigned char q;
size_t ret = 0;
if (val == 0)
return 1;
while (val > 255 || val < -255) {
++ret;
val /= 256;
}
if (val != 0) {
++ret;
if ((signed char)val != val)
++ret;
val /= 256;
if (val >= 0) {
do {
q = val % 256;
ret++;
val /= 256;
} while(val);
if(q >= 128)
ret++;
} else {
val = ~val;
do {
q = ~(val % 256);
ret++;
val /= 256;
} while(val);
if(q < 128)
ret++;
}
return ret;
}
@@ -92,7 +99,7 @@ length_len (size_t len)
if (len < 128)
return 1;
else
return len_unsigned (len) + 1;
return _heim_len_unsigned (len) + 1;
}
size_t
@@ -104,7 +111,7 @@ length_boolean (const int *data)
size_t
length_integer (const int *data)
{
size_t len = len_int (*data);
size_t len = _heim_len_int (*data);
return 1 + length_len(len) + len;
}
@@ -128,7 +135,7 @@ length_unsigned (const unsigned *data)
size_t
length_enumerated (const unsigned *data)
{
size_t len = len_int (*data);
size_t len = _heim_len_int (*data);
return 1 + length_len(len) + len;
}