#include "portable.h"
#include <stdio.h>
-
-#ifdef STDC_HEADERS
#include <stdlib.h>
-#include <stdarg.h>
-#else
-#include <varargs.h>
-#endif
+
+#include <ac/stdarg.h>
#include <ac/string.h>
#include <ac/socket.h>
unsigned char xbyte;
unsigned long tag;
char *tagp;
- int i;
+ unsigned int i;
if ( ber_read( ber, (char *) &xbyte, 1 ) != 1 )
return( LBER_DEFAULT );
*last = ber->ber_ptr + *len;
if ( *last == ber->ber_ptr ) {
+#ifdef LBER_END_SEQORSET
+ return( LBER_END_SEQORSET );
+#else
return( LBER_DEFAULT );
+#endif
}
return( ber_peek_tag( ber, len ) );
ber_next_element( BerElement *ber, unsigned long *len, char *last )
{
if ( ber->ber_ptr == last ) {
+#ifdef LBER_END_SEQORSET
+ return( LBER_END_SEQORSET );
+#else
return( LBER_DEFAULT );
+#endif
}
return( ber_peek_tag( ber, len ) );
/* VARARGS */
unsigned long
ber_scanf
-#ifdef STDC_HEADERS
+#if HAVE_STDARG
( BerElement *ber, char *fmt, ... )
#else
( va_alist )
#endif
{
va_list ap;
-#ifndef STDC_HEADERS
+#ifndef HAVE_STDARG
BerElement *ber;
char *fmt;
#endif
char *s, **ss, ***sss;
struct berval ***bv, **bvp, *bval;
int *i, j;
- long *l, rc, tag;
- unsigned long len;
+ long *l;
+ unsigned long rc, tag, len;
-#if STDC_HEADERS
+#ifdef HAVE_STDARG
va_start( ap, fmt );
#else
va_start( ap );
*sss = NULL;
j = 0;
for ( tag = ber_first_element( ber, &len, &last );
- tag != LBER_DEFAULT && rc != LBER_DEFAULT;
- tag = ber_next_element( ber, &len, last ) ) {
+ tag != LBER_DEFAULT &&
+#ifdef LDAP_END_SEQORSET
+ tag != LBER_END_SEQORSET &&
+#endif
+ rc != LBER_DEFAULT;
+ tag = ber_next_element( ber, &len, last ) )
+ {
if ( *sss == NULL ) {
*sss = (char **) malloc(
2 * sizeof(char *) );
rc = ber_get_stringa( ber, &((*sss)[j]) );
j++;
}
+#ifdef LDAP_END_SEQORSET
+ if (rc != LBER_DEFAULT &&
+ tag != LBER_END_SEQORSET )
+ {
+ rc = LBER_DEFAULT;
+ }
+#endif
if ( j > 0 )
(*sss)[j] = NULL;
break;
*bv = NULL;
j = 0;
for ( tag = ber_first_element( ber, &len, &last );
- tag != LBER_DEFAULT && rc != LBER_DEFAULT;
- tag = ber_next_element( ber, &len, last ) ) {
+ tag != LBER_DEFAULT &&
+#ifdef LDAP_END_SEQORSET
+ tag != LBER_END_SEQORSET &&
+#endif
+ rc != LBER_DEFAULT;
+ tag = ber_next_element( ber, &len, last ) )
+ {
if ( *bv == NULL ) {
*bv = (struct berval **) malloc(
2 * sizeof(struct berval *) );
rc = ber_get_stringal( ber, &((*bv)[j]) );
j++;
}
+#ifdef LDAP_END_SEQORSET
+ if (rc != LBER_DEFAULT &&
+ tag != LBER_END_SEQORSET )
+ {
+ rc = LBER_DEFAULT;
+ }
+#endif
if ( j > 0 )
(*bv)[j] = NULL;
break;
void
ber_bvfree( struct berval *bv )
{
+#ifdef LBER_ASSERT
+ assert(bv != NULL); /* bv damn better point to something */
+#endif
if ( bv->bv_val != NULL )
free( bv->bv_val );
free( (char *) bv );
{
int i;
+#ifdef LBER_ASSERT
+ assert(bv != NULL); /* bv damn better point to something */
+#endif
for ( i = 0; bv[i] != NULL; i++ )
ber_bvfree( bv[i] );
free( (char *) bv );
== NULL ) {
return( NULL );
}
+
+ if ( bv->bv_val == NULL ) {
+ new->bv_val = NULL;
+ new->bv_len = 0;
+ return ( new );
+ }
+
if ( (new->bv_val = (char *) malloc( bv->bv_len + 1 )) == NULL ) {
+ free( new );
return( NULL );
}
+
SAFEMEMCPY( new->bv_val, bv->bv_val, (size_t) bv->bv_len );
new->bv_val[bv->bv_len] = '\0';
new->bv_len = bv->bv_len;