]> git.sur5r.net Git - openldap/blobdiff - libraries/libldap/getattr.c
Allow ctrls argument to be NULL.
[openldap] / libraries / libldap / getattr.c
index 8e655da12efea0cb1aeb4a518ccc0f9f5b7780c2..1af98813815b67842ac4a2a66cfeb4049c266ad0 100644 (file)
@@ -12,7 +12,7 @@
 #include "portable.h"
 
 #include <stdio.h>
-#include <stdlib.h>
+#include <ac/stdlib.h>
 
 #include <ac/ctype.h>
 #include <ac/socket.h>
 char *
 ldap_first_attribute( LDAP *ld, LDAPMessage *entry, BerElement **ber )
 {
-       long    len;
+       char *attr;
 
        Debug( LDAP_DEBUG_TRACE, "ldap_first_attribute\n", 0, 0, 0 );
 
-       if ( (*ber = ldap_alloc_ber_with_options( ld )) == NULLBER ) {
+       assert( ld != NULL );
+       assert( LDAP_VALID( ld ) );
+       assert( entry != NULL );
+       assert( ber != NULL );
+
+       if ( (*ber = ldap_alloc_ber_with_options( ld )) == NULL ) {
                *ber = NULL;
                return( NULL );
        }
@@ -41,8 +46,7 @@ ldap_first_attribute( LDAP *ld, LDAPMessage *entry, BerElement **ber )
         * positioned right before the next attribute type/value sequence.
         */
 
-       len = LDAP_MAX_ATTR_LEN;
-       if ( ber_scanf( *ber, "{x{{sx}", ld->ld_attrbuffer, &len )
+       if ( ber_scanf( *ber, "{x{{ax}" /*}}*/, &attr )
            == LBER_ERROR ) {
                ld->ld_errno = LDAP_DECODING_ERROR;
                ber_free( *ber, 0 );
@@ -50,25 +54,28 @@ ldap_first_attribute( LDAP *ld, LDAPMessage *entry, BerElement **ber )
                return( NULL );
        }
 
-       return( ld->ld_attrbuffer );
+       return( attr );
 }
 
 /* ARGSUSED */
 char *
 ldap_next_attribute( LDAP *ld, LDAPMessage *entry, BerElement *ber )
 {
-       long    len;
+       char *attr;
 
        Debug( LDAP_DEBUG_TRACE, "ldap_next_attribute\n", 0, 0, 0 );
 
+       assert( ld != NULL );
+       assert( LDAP_VALID( ld ) );
+       assert( entry != NULL );
+       assert( ber != NULL );
+
        /* skip sequence, snarf attribute type, skip values */
-       len = LDAP_MAX_ATTR_LEN;
-       if ( ber_scanf( ber, "{sx}", ld->ld_attrbuffer, &len ) 
+       if ( ber_scanf( ber, "{ax}", &attr ) 
            == LBER_ERROR ) {
                ld->ld_errno = LDAP_DECODING_ERROR;
-               /* ber_free( ber, 0 ); *//* don't free the BerElement */
                return( NULL );
        }
 
-       return( ld->ld_attrbuffer );
+       return( attr );
 }