]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-ldbm/idl.c
Set peeraddr also for IPv6, fixes ITS#1918
[openldap] / servers / slapd / back-ldbm / idl.c
index 011a01a3be3d9a0828c209f6e406f38e47d9505b..60ca3e65946d383f7e63d8cc1c5a8d85bec41eda 100644 (file)
@@ -31,7 +31,7 @@ static void cont_alloc( Datum *cont, Datum *key )
 
 static void cont_id( Datum *cont, ID id )
 {
-       int i;
+       unsigned int i;
 
        for( i=1; i <= sizeof(id); i++) {
                ((unsigned char *)cont->dptr)[i] = (unsigned char)(id & 0xFF);
@@ -1058,6 +1058,9 @@ idl_intersection(
        if ( ID_BLOCK_ALLIDS( b ) ) {
                return( idl_dup( a ) );
        }
+       if ( ID_BLOCK_NIDS(a) == 0 || ID_BLOCK_NIDS(b) == 0 ) {
+               return( NULL );
+       }
 
        n = idl_dup( idl_min( a, b ) );
 
@@ -1066,24 +1069,21 @@ idl_intersection(
        idl_check(b);
 #endif
 
-       for ( ni = 0, ai = 0, bi = 0; ai < ID_BLOCK_NIDS(a); ai++ ) {
-               if ( ID_BLOCK_ID(a, ai) < ID_BLOCK_ID(b, bi) ) {
-                       continue;
-               }
-               for ( ;
-                       bi < ID_BLOCK_NIDS(b) && ID_BLOCK_ID(b, bi) < ID_BLOCK_ID(a, ai);
-                       bi++ )
-               {
-                       ;       /* NULL */
-               }
-
-               if ( bi == ID_BLOCK_NIDS(b) ) {
-                       break;
-               }
-
+       for ( ni = 0, ai = 0, bi = 0; ; ) {
                if ( ID_BLOCK_ID(b, bi) == ID_BLOCK_ID(a, ai) ) {
                        ID_BLOCK_ID(n, ni++) = ID_BLOCK_ID(a, ai);
+                       ai++;
                        bi++;
+                       if ( ai >= ID_BLOCK_NIDS(a) || bi >= ID_BLOCK_NIDS(b) )
+                               break;
+               } else if ( ID_BLOCK_ID(a, ai) < ID_BLOCK_ID(b, bi) ) {
+                       ai++;
+                       if ( ai >= ID_BLOCK_NIDS(a) )
+                               break;
+               } else {
+                       bi++;
+                       if ( bi >= ID_BLOCK_NIDS(b) )
+                               break;
                }
        }