]> git.sur5r.net Git - openldap/blobdiff - libraries/libmdb/midl.c
explain mdl_midl_sort() istack size
[openldap] / libraries / libmdb / midl.c
index 17b6e51f9787e9df70c211bb50f8078f164a2dba..7a7b59c7c0e053cb752defb001c2a3e253fd1ea2 100644 (file)
@@ -15,6 +15,7 @@
  * <http://www.OpenLDAP.org/license.html>.
  */
 
+#include <limits.h>
 #include <string.h>
 #include <sys/types.h>
 #include <assert.h>
@@ -28,7 +29,7 @@
  */
 #define CMP(x,y)        ( (x) < (y) ? -1 : (x) > (y) )
 
-#if 0
+#if 0  /* superseded by append/sort */
 static unsigned mdb_midl_search( IDL ids, ID id )
 {
        /*
@@ -119,7 +120,7 @@ int mdb_midl_insert( IDL ids, ID id )
 int mdb_midl_append( IDL ids, ID id )
 {
        /* Too big? */
-       if (ids[0] >= MDB_IDL_UM_SIZE)
+       if (ids[0] >= MDB_IDL_UM_MAX)
                return -1;
        ids[0]++;
        ids[ids[0]] = id;
@@ -129,12 +130,13 @@ int mdb_midl_append( IDL ids, ID id )
 /* Quicksort + Insertion sort for small arrays */
 
 #define SMALL  8
-#define        SWAP(a,b)       itmp=(a);(a)=(b);(b)=itmp
+#define        SWAP(a,b)       { itmp=(a); (a)=(b); (b)=itmp; }
 
 void
 mdb_midl_sort( ID *ids )
 {
-       int istack[16*sizeof(int)];
+       /* Max possible depth of int-indexed tree * 2 items/level */
+       int istack[sizeof(int)*CHAR_BIT * 2];
        int i,j,k,l,ir,jstack;
        ID a, itmp;
 
@@ -244,7 +246,7 @@ int mdb_mid2l_insert( ID2L ids, ID2 *id )
                return -1;
        }
 
-       if ( ids[0].mid >= MDB_IDL_DB_MAX ) {
+       if ( ids[0].mid >= MDB_IDL_UM_MAX ) {
                /* too big */
                return -2;