--- libraries/liblber/decode.c 1998/08/08 22:43:15 1.1.3.1 +++ libraries/liblber/decode.c 1998/11/04 00:41:01 1.7 @@ -11,45 +11,30 @@ * is provided ``as is'' without express or implied warranty. */ +#include "portable.h" + #include -#ifdef MACOS -#include -#include -#include "macos.h" -#else /* MACOS */ -#if defined(NeXT) || defined(VMS) + +#ifdef STDC_HEADERS #include -#else /* next || vms */ -#include -#endif /* next || vms */ -#if defined(BC31) || defined(_WIN32) +#endif + +#if defined( HAVE_STDARG_H ) && __STDC__ #include -#else /* BC31 || _WIN32 */ +#else #include -#endif /* BC31 || _WIN32 */ -#include -#include -#include -#ifdef PCNFS -#include -#endif /* PCNFS */ -#endif /* MACOS */ - -#if defined( DOS ) || defined( _WIN32 ) -#include "msdos.h" -#endif /* DOS */ +#endif -#include -#include "lber.h" +#include +#include + +#include "lber-int.h" #ifdef LDAP_DEBUG int lber_debug; #endif -#ifdef NEEDPROTOS -static int ber_getnint( BerElement *ber, long *num, int len ); -#endif /* NEEDPROTOS */ - +static int ber_getnint LDAP_P(( BerElement *ber, long *num, int len )); /* return the tag - LBER_DEFAULT returned means trouble */ unsigned long @@ -129,7 +114,7 @@ ber_skip_tag( BerElement *ber, unsigned if ( ber_read( ber, (char *) &netlen + diff, noctets ) != noctets ) return( LBER_DEFAULT ); - *len = LBER_NTOHL( netlen ); + *len = AC_NTOHL( netlen ); } else { *len = lc; } @@ -155,6 +140,7 @@ ber_getnint( BerElement *ber, long *num, { int diff, sign, i; long netnum; + char *p; /* * The tag and length have already been stripped off. We should @@ -172,14 +158,15 @@ ber_getnint( BerElement *ber, long *num, if ( ber_read( ber, ((char *) &netnum) + diff, len ) != len ) return( -1 ); - /* sign extend if necessary */ - sign = ((0x80 << ((len - 1) * 8)) & netnum); - if ( sign && len < sizeof(long) ) { - for ( i = sizeof(long) - 1; i > len - 1; i-- ) { - netnum |= (0xffL << (i * 8)); + /* sign extend if necessary */ + p = (char *) &netnum; + sign = (0x80 & *(p+diff) ); + if ( sign && len < sizeof(long) ) { + for ( i = 0; i < diff; i++ ) { + *(p+i) = (unsigned char) 0xff; } } - *num = LBER_NTOHL( netnum ); + *num = AC_NTOHL( netnum ); return( len ); } @@ -192,7 +179,7 @@ ber_get_int( BerElement *ber, long *num if ( (tag = ber_skip_tag( ber, &len )) == LBER_DEFAULT ) return( LBER_DEFAULT ); - if ( ber_getnint( ber, num, (int)len ) != len ) + if ( (unsigned long) ber_getnint( ber, num, (int)len ) != len ) return( LBER_DEFAULT ); else return( tag ); @@ -211,7 +198,7 @@ ber_get_stringb( BerElement *ber, char * if ( datalen > (*len - 1) ) return( LBER_DEFAULT ); - if ( ber_read( ber, buf, datalen ) != datalen ) + if ( (unsigned long) ber_read( ber, buf, datalen ) != datalen ) return( LBER_DEFAULT ); buf[datalen] = '\0'; @@ -250,7 +237,7 @@ ber_get_stringa( BerElement *ber, char * if ( (*buf = (char *) malloc( (size_t)datalen + 1 )) == NULL ) return( LBER_DEFAULT ); - if ( ber_read( ber, *buf, datalen ) != datalen ) + if ( (unsigned long) ber_read( ber, *buf, datalen ) != datalen ) return( LBER_DEFAULT ); (*buf)[datalen] = '\0'; @@ -283,7 +270,7 @@ ber_get_stringal( BerElement *ber, struc if ( ((*bv)->bv_val = (char *) malloc( (size_t)len + 1 )) == NULL ) return( LBER_DEFAULT ); - if ( ber_read( ber, (*bv)->bv_val, len ) != len ) + if ( (unsigned long) ber_read( ber, (*bv)->bv_val, len ) != len ) return( LBER_DEFAULT ); ((*bv)->bv_val)[len] = '\0'; (*bv)->bv_len = len; @@ -320,7 +307,7 @@ ber_get_bitstringa( BerElement *ber, cha if ( ber_read( ber, (char *)&unusedbits, 1 ) != 1 ) return( LBER_DEFAULT ); - if ( ber_read( ber, *buf, datalen ) != datalen ) + if ( (unsigned long) ber_read( ber, *buf, datalen ) != datalen ) return( LBER_DEFAULT ); *blen = datalen * 8 - unusedbits; @@ -382,16 +369,16 @@ ber_next_element( BerElement *ber, unsig /* VARARGS */ unsigned long -ber_scanf( -#if defined( MACOS ) || defined( BC31 ) || defined( _WIN32 ) - BerElement *ber, char *fmt, ... ) +ber_scanf +#if defined( HAVE_STDARG_H ) && __STDC__ + ( BerElement *ber, char *fmt, ... ) #else - va_alist ) + ( va_alist ) va_dcl #endif { va_list ap; -#if !defined( MACOS ) && !defined( BC31 ) && !defined( _WIN32 ) +#if !(defined( HAVE_STDARG_H ) && __STDC__) BerElement *ber; char *fmt; #endif @@ -402,7 +389,7 @@ va_dcl long *l, rc, tag; unsigned long len; -#if defined( MACOS ) || defined( BC31 ) || defined( _WIN32 ) +#if defined( HAVE_STDARG_H ) && __STDC__ va_start( ap, fmt ); #else va_start( ap ); @@ -536,9 +523,9 @@ va_dcl break; default: -#ifndef NO_USERINTERFACE +#ifdef LDAP_LIBUI fprintf( stderr, "unknown fmt %c\n", *fmt ); -#endif /* NO_USERINTERFACE */ +#endif /* LDAP_LIBUI */ rc = LBER_DEFAULT; break; }