version 1.1.3.1, 1998/08/08 22:43:15
|
version 1.1.3.1.2.1, 1998/08/09 01:40:29
|
Line 155 ber_getnint( BerElement *ber, long *num,
|
Line 155 ber_getnint( BerElement *ber, long *num,
|
{ |
{ |
int diff, sign, i; |
int diff, sign, i; |
long netnum; |
long netnum; |
|
char *p; |
|
|
/* |
/* |
* The tag and length have already been stripped off. We should |
* The tag and length have already been stripped off. We should |
Line 172 ber_getnint( BerElement *ber, long *num,
|
Line 173 ber_getnint( BerElement *ber, long *num,
|
if ( ber_read( ber, ((char *) &netnum) + diff, len ) != len ) |
if ( ber_read( ber, ((char *) &netnum) + diff, len ) != len ) |
return( -1 ); |
return( -1 ); |
|
|
/* sign extend if necessary */ |
/* sign extend if necessary */ |
sign = ((0x80 << ((len - 1) * 8)) & netnum); |
p = (char *) &netnum; |
if ( sign && len < sizeof(long) ) { |
sign = (0x80 & *(p+diff) ); |
for ( i = sizeof(long) - 1; i > len - 1; i-- ) { |
if ( sign && len < sizeof(long) ) { |
netnum |= (0xffL << (i * 8)); |
for ( i = 0; i < diff; i++ ) { |
|
*(p+i) = 0xff; |
} |
} |
} |
} |
*num = LBER_NTOHL( netnum ); |
*num = LBER_NTOHL( netnum ); |