root/libdb/bt_page.c

/* [previous][next][first][last][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. __bt_free
  2. __bt_new

   1 /*-
   2  * Copyright (c) 1990, 1993, 1994
   3  *      The Regents of the University of California.  All rights reserved.
   4  *
   5  * Redistribution and use in source and binary forms, with or without
   6  * modification, are permitted provided that the following conditions
   7  * are met:
   8  * 1. Redistributions of source code must retain the above copyright
   9  *    notice, this list of conditions and the following disclaimer.
  10  * 2. Redistributions in binary form must reproduce the above copyright
  11  *    notice, this list of conditions and the following disclaimer in the
  12  *    documentation and/or other materials provided with the distribution.
  13  * 3. Neither the name of the University nor the names of its contributors
  14  *    may be used to endorse or promote products derived from this software
  15  *    without specific prior written permission.
  16  *
  17  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  20  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  21  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  22  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  23  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  25  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  26  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  27  * SUCH DAMAGE.
  28  */
  29 
  30 #if defined(LIBC_SCCS) && !defined(lint)
  31 static char sccsid[] = "@(#)bt_page.c   8.3 (Berkeley) 7/14/94";
  32 #endif /* LIBC_SCCS and not lint */
  33 
  34 #ifdef HAVE_CONFIG_H
  35 #include <config.h>
  36 #endif
  37 #include <sys/types.h>
  38 
  39 #include <stdio.h>
  40 
  41 #include "db.h"
  42 #include "btree.h"
  43 
  44 /**
  45  * __bt_free --
  46  *      Put a page on the freelist.
  47  *
  48  *      @param t        tree
  49  *      @param h        page to free
  50  *
  51  * @return #RET_ERROR, #RET_SUCCESS
  52  *
  53  * @par Side-effect:
  54  *      #mpool_put's the page.
  55  */
  56 int
  57 __bt_free(t, h)
  58         BTREE *t;
  59         PAGE *h;
  60 {
  61         /* Insert the page at the head of the free list. */
  62         h->prevpg = P_INVALID;
  63         h->nextpg = t->bt_free;
  64         t->bt_free = h->pgno;
  65         F_SET(t, B_METADIRTY);
  66 
  67         /* Make sure the page gets written back. */
  68         return (mpool_put(t->bt_mp, h, MPOOL_DIRTY));
  69 }
  70 
  71 /**
  72  * __bt_new --
  73  *      Get a new page, preferably from the freelist.
  74  *
  75  *      @param t        tree
  76  *      @param npg      storage for page number.
  77  *
  78  * @return Pointer to a page, @CODE{NULL} on error.
  79  */
  80 PAGE *
  81 __bt_new(t, npg)
  82         BTREE *t;
  83         pgno_t *npg;
  84 {
  85         PAGE *h;
  86 
  87         if (t->bt_free != P_INVALID &&
  88             (h = mpool_get(t->bt_mp, t->bt_free, 0)) != NULL) {
  89                 *npg = t->bt_free;
  90                 t->bt_free = h->nextpg;
  91                 F_SET(t, B_METADIRTY);
  92                 return (h);
  93         }
  94         return (mpool_new(t->bt_mp, npg));
  95 }

/* [previous][next][first][last][top][bottom][index][help] */