]> git.saurik.com Git - apple/libc.git/blobdiff - db/btree/FreeBSD/bt_split.c
Libc-763.13.tar.gz
[apple/libc.git] / db / btree / FreeBSD / bt_split.c
index 07373de8faa0a2e5fb055de8aa8fcc993e34bd47..2f34975018cbca9fd517588934c51f3dc9f2a4f6 100644 (file)
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in the
  *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
  * 4. Neither the name of the University nor the names of its contributors
  *    may be used to endorse or promote products derived from this software
  *    without specific prior written permission.
@@ -38,7 +34,7 @@
 static char sccsid[] = "@(#)bt_split.c 8.9 (Berkeley) 7/26/94";
 #endif /* LIBC_SCCS and not lint */
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/lib/libc/db/btree/bt_split.c,v 1.7 2004/09/13 22:07:24 kuriyama Exp $");
+__FBSDID("$FreeBSD: src/lib/libc/db/btree/bt_split.c,v 1.12 2009/03/28 05:45:29 delphij Exp $");
 
 #include <sys/types.h>
 
@@ -51,10 +47,10 @@ __FBSDID("$FreeBSD: src/lib/libc/db/btree/bt_split.c,v 1.7 2004/09/13 22:07:24 k
 #include "btree.h"
 
 static int      bt_broot(BTREE *, PAGE *, PAGE *, PAGE *);
-static PAGE    *bt_page (BTREE *, PAGE *, PAGE **, PAGE **, indx_t *, size_t);
+static PAGE    *bt_page(BTREE *, PAGE *, PAGE **, PAGE **, indx_t *, size_t);
 static int      bt_preserve(BTREE *, pgno_t);
-static PAGE    *bt_psplit (BTREE *, PAGE *, PAGE *, PAGE *, indx_t *, size_t);
-static PAGE    *bt_root (BTREE *, PAGE *, PAGE **, PAGE **, indx_t *, size_t);
+static PAGE    *bt_psplit(BTREE *, PAGE *, PAGE *, PAGE *, indx_t *, size_t);
+static PAGE    *bt_root(BTREE *, PAGE *, PAGE **, PAGE **, indx_t *, size_t);
 static int      bt_rroot(BTREE *, PAGE *, PAGE *, PAGE *);
 static recno_t  rec_total(PAGE *);
 
@@ -78,13 +74,8 @@ u_long       bt_rootsplit, bt_split, bt_sortsplit, bt_pfxsaved;
  *     RET_ERROR, RET_SUCCESS
  */
 int
-__bt_split(t, sp, key, data, flags, ilen, argskip)
-       BTREE *t;
-       PAGE *sp;
-       const DBT *key, *data;
-       int flags;
-       size_t ilen;
-       u_int32_t argskip;
+__bt_split(BTREE *t, PAGE *sp, const DBT *key, const DBT *data, int flags,
+    size_t ilen, u_int32_t argskip)
 {
        BINTERNAL *bi;
        BLEAF *bl, *tbl;
@@ -158,7 +149,7 @@ __bt_split(t, sp, key, data, flags, ilen, argskip)
                if ((h = mpool_get(t->bt_mp, parent->pgno, 0)) == NULL)
                        goto err2;
 
-               /*
+               /*
                 * The new key goes ONE AFTER the index, because the split
                 * was to the right.
                 */
@@ -214,7 +205,7 @@ __bt_split(t, sp, key, data, flags, ilen, argskip)
                }
 
                /* Split the parent page if necessary or shift the indices. */
-               if (h->upper - h->lower < nbytes + sizeof(indx_t)) {
+               if ((u_int32_t)(h->upper - h->lower) < nbytes + sizeof(indx_t)) {
                        sp = h;
                        h = h->pgno == P_ROOT ?
                            bt_root(t, h, &l, &r, &skip, nbytes) :
@@ -340,11 +331,7 @@ err2:      mpool_put(t->bt_mp, l, 0);
  *     Pointer to page in which to insert or NULL on error.
  */
 static PAGE *
-bt_page(t, h, lp, rp, skip, ilen)
-       BTREE *t;
-       PAGE *h, **lp, **rp;
-       indx_t *skip;
-       size_t ilen;
+bt_page(BTREE *t, PAGE *h, PAGE **lp, PAGE **rp, indx_t *skip, size_t ilen)
 {
        PAGE *l, *r, *tp;
        pgno_t npg;
@@ -385,13 +372,10 @@ bt_page(t, h, lp, rp, skip, ilen)
        }
 
        /* Put the new left page for the split into place. */
-       if ((l = (PAGE *)malloc(t->bt_psize)) == NULL) {
+       if ((l = (PAGE *)calloc(1, t->bt_psize)) == NULL) {
                mpool_put(t->bt_mp, r, 0);
                return (NULL);
        }
-#ifdef PURIFY
-       memset(l, 0xff, t->bt_psize);
-#endif
        l->pgno = h->pgno;
        l->nextpg = r->pgno;
        l->prevpg = h->prevpg;
@@ -445,11 +429,7 @@ bt_page(t, h, lp, rp, skip, ilen)
  *     Pointer to page in which to insert or NULL on error.
  */
 static PAGE *
-bt_root(t, h, lp, rp, skip, ilen)
-       BTREE *t;
-       PAGE *h, **lp, **rp;
-       indx_t *skip;
-       size_t ilen;
+bt_root(BTREE *t, PAGE *h, PAGE **lp, PAGE **rp, indx_t *skip, size_t ilen)
 {
        PAGE *l, *r, *tp;
        pgno_t lnpg, rnpg;
@@ -492,9 +472,7 @@ bt_root(t, h, lp, rp, skip, ilen)
  *     RET_ERROR, RET_SUCCESS
  */
 static int
-bt_rroot(t, h, l, r)
-       BTREE *t;
-       PAGE *h, *l, *r;
+bt_rroot(BTREE *t, PAGE *h, PAGE *l, PAGE *r)
 {
        char *dest;
 
@@ -532,9 +510,7 @@ bt_rroot(t, h, l, r)
  *     RET_ERROR, RET_SUCCESS
  */
 static int
-bt_broot(t, h, l, r)
-       BTREE *t;
-       PAGE *h, *l, *r;
+bt_broot(BTREE *t, PAGE *h, PAGE *l, PAGE *r)
 {
        BINTERNAL *bi;
        BLEAF *bl;
@@ -609,11 +585,7 @@ bt_broot(t, h, l, r)
  *     Pointer to page in which to insert.
  */
 static PAGE *
-bt_psplit(t, h, l, r, pskip, ilen)
-       BTREE *t;
-       PAGE *h, *l, *r;
-       indx_t *pskip;
-       size_t ilen;
+bt_psplit(BTREE *t, PAGE *h, PAGE *l, PAGE *r, indx_t *pskip, size_t ilen)
 {
        BINTERNAL *bi;
        BLEAF *bl;
@@ -787,9 +759,7 @@ bt_psplit(t, h, l, r, pskip, ilen)
  *     RET_SUCCESS, RET_ERROR.
  */
 static int
-bt_preserve(t, pg)
-       BTREE *t;
-       pgno_t pg;
+bt_preserve(BTREE *t, pgno_t pg)
 {
        PAGE *h;
 
@@ -815,8 +785,7 @@ bt_preserve(t, pg)
  * all the way back to bt_split/bt_rroot and it's not very clean.
  */
 static recno_t
-rec_total(h)
-       PAGE *h;
+rec_total(PAGE *h)
 {
        recno_t recs;
        indx_t nxt, top;