X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libraries%2Flibldap%2Fsort.c;h=288ff854549fb4586e187b06eecd9947f3e4c378;hb=7573a81efea63bc0e07d88ba4c9b6973d51d857d;hp=300cccdf75f0e108394f7d6ccbec65e6043805ad;hpb=4d2761a6a64eaa1c4d5f7949277ecfe25b42ca83;p=openldap diff --git a/libraries/libldap/sort.c b/libraries/libldap/sort.c index 300cccdf75..288ff85454 100644 --- a/libraries/libldap/sort.c +++ b/libraries/libldap/sort.c @@ -1,5 +1,6 @@ +/* $OpenLDAP$ */ /* - * Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved. + * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved. * COPYING RESTRICTIONS APPLY, see COPYRIGHT file */ /* Portions @@ -19,7 +20,7 @@ #include "portable.h" #include -#include +#include #include #include @@ -39,8 +40,8 @@ static int et_cmp LDAP_P(( const void *aa, const void *bb)); int ldap_sort_strcasecmp( - const void *a, - const void *b + LDAP_CONST void *a, + LDAP_CONST void *b ) { return( strcasecmp( *(char *const *)a, *(char *const *)b ) ); @@ -80,8 +81,8 @@ int ldap_sort_entries( LDAP *ld, LDAPMessage **chain, - char *attr, /* NULL => sort by DN */ - int (*cmp) (const char *, const char *) + LDAP_CONST char *attr, /* NULL => sort by DN */ + int (*cmp) (LDAP_CONST char *, LDAP_CONST char *) ) { int i, count; @@ -91,7 +92,19 @@ ldap_sort_entries( count = ldap_count_entries( ld, *chain ); - if ( (et = (struct entrything *) malloc( count * + + if ( count < 0 ) { + if( ld != NULL ) { + ld->ld_errno = LDAP_PARAM_ERROR; + } + return -1; + + } else if ( count < 2 ) { + /* zero or one entries -- already sorted! */ + return 0; + } + + if ( (et = (struct entrything *) LDAP_MALLOC( count * sizeof(struct entrything) )) == NULL ) { ld->ld_errno = LDAP_NO_MEMORY; return( -1 ); @@ -106,7 +119,7 @@ ldap_sort_entries( dn = ldap_get_dn( ld, e ); et[i].et_vals = ldap_explode_dn( dn, 1 ); - free( dn ); + LDAP_FREE( dn ); } else { et[i].et_vals = ldap_get_values( ld, e, attr ); } @@ -125,7 +138,7 @@ ldap_sort_entries( ldap_value_free( et[i].et_vals ); } *ep = last; - free( (char *) et ); + LDAP_FREE( (char *) et ); return( 0 ); } @@ -134,7 +147,7 @@ int ldap_sort_values( LDAP *ld, char **vals, - int (*cmp) (const void *, const void *) + int (*cmp) (LDAP_CONST void *, LDAP_CONST void *) ) { int nel;