--- libraries/liblber/decode.c 2000/06/05 17:22:22 1.52 +++ libraries/liblber/decode.c 2000/07/26 21:32:39 1.53 @@ -1,5 +1,5 @@ /* decode.c - ber input decoding routines */ -/* $OpenLDAP: pkg/ldap/libraries/liblber/decode.c,v 1.51 2000/05/14 01:38:27 kurt Exp $ */ +/* $OpenLDAP: pkg/ldap/libraries/liblber/decode.c,v 1.52 2000/06/05 17:22:22 kurt Exp $ */ /* * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved. * COPYING RESTRICTIONS APPLY, see COPYRIGHT file @@ -136,29 +136,22 @@ ber_skip_tag( BerElement *ber, ber_len_t ber_tag_t ber_peek_tag( - BerElement *ber_in, + BerElement *ber, ber_len_t *len ) { - ber_tag_t tag; - BerElement *ber; - - assert( ber_in != NULL ); - assert( BER_VALID( ber_in ) ); - - *len = 0; - - ber = ber_dup( ber_in ); - - if( ber == NULL ) { - return LBER_ERROR; - } + /* + * This implementation assumes ber_skip_tag() only + * modifies ber_ptr field of the BerElement. + */ - assert( BER_VALID( ber ) ); + char *save; + ber_tag_t tag; + save = ber->ber_ptr; tag = ber_skip_tag( ber, len ); + ber->ber_ptr = save; - ber_free( ber, 0 ); - return( tag ); + return tag; } static ber_len_t