-/* Encode.c - ber output encoding routines */
+/* encode.c - ber output encoding routines */
/* $OpenLDAP$ */
-/*
- * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved.
- * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
+/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
+ *
+ * Copyright 1998-2004 The OpenLDAP Foundation.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted only as authorized by the OpenLDAP
+ * Public License.
+ *
+ * A copy of this license is available in the file LICENSE in the
+ * top-level directory of the distribution or, alternatively, at
+ * <http://www.OpenLDAP.org/license.html>.
*/
-/* Portions
- * Copyright (c) 1990 Regents of the University of Michigan.
+/* Portions Copyright (c) 1990 Regents of the University of Michigan.
* All rights reserved.
*
* Redistribution and use in source and binary forms are permitted
* software without specific prior written permission. This software
* is provided ``as is'' without express or implied warranty.
*/
+/* ACKNOWLEDGEMENTS:
+ * This work was originally developed by the University of Michigan
+ * (as part of U-MICH LDAP).
+ */
#include "portable.h"
ber_tag_t tag ));
-static ber_len_t
+static int
ber_calc_taglen( ber_tag_t tag )
{
int i;
int nosos )
{
int rc;
- ber_len_t taglen;
- ber_len_t i;
+ int taglen;
+ int i;
unsigned char nettag[sizeof(ber_tag_t)];
assert( ber != NULL );
}
rc = ber_write( ber,
- &nettag[sizeof(ber_tag_t) - taglen],
+ (char *) &nettag[sizeof(ber_tag_t) - taglen],
taglen, nosos );
return rc;
* with bit 8 0.
*/
- if ( len <= (ber_len_t) 0x7FU )
- return 1;
+ if ( len <= (ber_len_t) 0x7FU ) return 1;
/*
* long len otherwise - one byte with bit 8 set, giving the
* length of the length, followed by the length itself.
*/
- if ( len <= (ber_len_t) 0xffU )
- return 2;
- if ( len <= (ber_len_t) 0xffffU )
- return 3;
- if ( len <= (ber_len_t) 0xffffffU )
- return 4;
+ if ( len <= (ber_len_t) 0xffU ) return 2;
+ if ( len <= (ber_len_t) 0xffffU ) return 3;
+ if ( len <= (ber_len_t) 0xffffffU ) return 4;
return 5;
}
if ( len & mask ) break;
}
lenlen = (unsigned char) ++i;
- if ( lenlen > 4 )
- return -1;
+ if ( lenlen > 4 ) return -1;
lenlen |= 0x80UL;
/* write the length of the length */
- if ( ber_write( ber, &lenlen, 1, nosos ) != 1 )
- return -1;
+ if ( ber_write( ber, &lenlen, 1, nosos ) != 1 ) return -1;
for( j=0; j<i; j++) {
netlen[(sizeof(ber_len_t)-1) - j] = (unsigned char)(len & 0xffU);
/* write the length itself */
rc = ber_write( ber,
- &netlen[sizeof(ber_len_t)-i],
+ (char *) &netlen[sizeof(ber_len_t)-i],
i, nosos );
return rc == i ? i+1 : -1;
ber_tag_t tag )
{
int rc;
- int i, j, sign;
- ber_len_t len, lenlen, taglen;
+ int i, j, sign, taglen, lenlen;
+ ber_len_t len;
ber_uint_t unum, mask;
unsigned char netnum[sizeof(ber_uint_t)];
return -1;
}
- if ( (lenlen = ber_put_len( ber, len, 0 )) == -1 )
+ if ( (lenlen = ber_put_len( ber, len, 0 )) == -1 ) {
return -1;
+ }
i++;
for( j=0; j<i; j++ ) {
}
rc = ber_write( ber,
- &netnum[sizeof(ber_int_t) - i],
+ (char *) &netnum[sizeof(ber_int_t) - i],
i, 0 );
/* length of tag + length + contents */
ber_len_t len,
ber_tag_t tag )
{
- ber_len_t taglen, lenlen;
- int rc;
+ int taglen, lenlen, rc;
assert( ber != NULL );
assert( str != NULL );
return -1;
if ( (lenlen = ber_put_len( ber, len, 0 )) == -1 ||
- (ber_len_t) ber_write( ber, str, len, 0 ) != len ) {
+ (ber_len_t) ber_write( ber, str, len, 0 ) != len )
+ {
rc = -1;
} else {
/* return length of tag + length + contents */
ber_len_t blen /* in bits */,
ber_tag_t tag )
{
- ber_len_t taglen, lenlen, len;
+ int taglen, lenlen;
+ ber_len_t len;
unsigned char unusedbits;
assert( ber != NULL );
int
ber_put_null( BerElement *ber, ber_tag_t tag )
{
- ber_len_t taglen;
+ int taglen;
assert( ber != NULL );
assert( LBER_VALID( ber ) );
ber_int_t boolval,
ber_tag_t tag )
{
- ber_len_t taglen;
- unsigned char trueval = (unsigned char) -1;
- unsigned char falseval = 0;
+ int taglen;
+ unsigned char c;
assert( ber != NULL );
assert( LBER_VALID( ber ) );
return -1;
}
- if ( ber_write( ber, (char *)(boolval ? &trueval : &falseval), 1, 0 )
- != 1 )
- {
+ c = boolval ? (unsigned char) ~0U : (unsigned char) 0U;
+
+ if ( ber_write( ber, (char *) &c, 1, 0 ) != 1 ) {
return -1;
}
assert( ber != NULL );
assert( LBER_VALID( ber ) );
- new = (Seqorset *) LBER_CALLOC( 1, sizeof(Seqorset) );
+ new = (Seqorset *) ber_memcalloc_x( 1, sizeof(Seqorset), ber->ber_memctx );
if ( new == NULL ) {
return -1;
int rc;
ber_len_t len;
unsigned char netlen[sizeof(ber_len_t)];
- ber_len_t taglen, lenlen;
+ int taglen;
+ ber_len_t lenlen;
unsigned char ltag = 0x80U + FOUR_BYTE_LEN - 1;
Seqorset *next;
Seqorset **sos = &ber->ber_sos;
/* the length itself */
rc = ber_write( ber,
- &netlen[sizeof(ber_len_t) - (FOUR_BYTE_LEN-1)],
+ (char *) &netlen[sizeof(ber_len_t) - (FOUR_BYTE_LEN-1)],
FOUR_BYTE_LEN-1, 1 );
if( rc != FOUR_BYTE_LEN - 1 ) {
(*sos)->sos_ber->ber_ptr += len;
} else {
- ber_len_t i;
+ int i;
unsigned char nettag[sizeof(ber_tag_t)];
ber_tag_t tmptag = (*sos)->sos_tag;
}
/* we're done with this seqorset, so free it up */
- LBER_FREE( (char *) (*sos) );
+ ber_memfree_x( (char *) (*sos), ber->ber_memctx );
*sos = next;
return taglen + lenlen + len;
default:
if( ber->ber_debug ) {
#ifdef NEW_LOGGING
- LDAP_LOG(( "liblber", LDAP_LEVEL_ERR,
- "ber_printf: unknown fmt %c\n", *fmt ));
+ LDAP_LOG( BER, ERR,
+ "ber_printf: unknown fmt %c\n", *fmt, 0, 0 );
#else
ber_log_printf( LDAP_DEBUG_ANY, ber->ber_debug,
"ber_printf: unknown fmt %c\n", *fmt );
break;
}
- if ( ber->ber_usertag == 0 )
+ if ( ber->ber_usertag == 0 ) {
ber->ber_tag = LBER_DEFAULT;
- else
+ } else {
ber->ber_usertag = 0;
+ }
}
va_end( ap );