Import BSDDB 4.7.25 (as of svn r89086)
This commit is contained in:
130
LICENSE
Normal file
130
LICENSE
Normal file
@@ -0,0 +1,130 @@
|
|||||||
|
/*-
|
||||||
|
* $Id: LICENSE,v 12.9 2008/02/07 17:12:17 mark Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
The following is the license that applies to this copy of the Berkeley DB
|
||||||
|
software. For a license to use the Berkeley DB software under conditions
|
||||||
|
other than those described here, or to purchase support for this software,
|
||||||
|
please contact Oracle at berkeleydb-info_us@oracle.com.
|
||||||
|
|
||||||
|
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1990,2008 Oracle. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 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. Redistributions in any form must be accompanied by information on
|
||||||
|
* how to obtain complete source code for the DB software and any
|
||||||
|
* accompanying software that uses the DB software. The source code
|
||||||
|
* must either be included in the distribution or be available for no
|
||||||
|
* more than the cost of distribution plus a nominal fee, and must be
|
||||||
|
* freely redistributable under reasonable conditions. For an
|
||||||
|
* executable file, complete source code means the source code for all
|
||||||
|
* modules it contains. It does not include source code for modules or
|
||||||
|
* files that typically accompany the major components of the operating
|
||||||
|
* system on which the executable file runs.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY ORACLE ``AS IS'' AND ANY EXPRESS OR
|
||||||
|
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
|
||||||
|
* NON-INFRINGEMENT, ARE DISCLAIMED. IN NO EVENT SHALL ORACLE BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||||
|
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||||
|
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
||||||
|
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1990, 1993, 1994, 1995
|
||||||
|
* The Regents of the University of California. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 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. 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.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1995, 1996
|
||||||
|
* The President and Fellows of Harvard University. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 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. 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.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY HARVARD AND ITS CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL HARVARD OR ITS CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||||
|
/***
|
||||||
|
* ASM: a very small and fast Java bytecode manipulation framework
|
||||||
|
* Copyright (c) 2000-2005 INRIA, France Telecom
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 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. Neither the name of the copyright holders nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived from
|
||||||
|
* this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||||||
|
* THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
5
README
Normal file
5
README
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
Berkeley DB 4.7.25: (May 15, 2008)
|
||||||
|
|
||||||
|
This is version 4.7.25 of Berkeley DB from Oracle. To view release and
|
||||||
|
installation documentation, load the distribution file docs/index.html
|
||||||
|
into your web browser.
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
# cpython-source-deps
|
|
||||||
Source for packages that the cpython build process depends on
|
|
||||||
|
|
||||||
It is currently expected that this will only be useful on Windows,
|
|
||||||
and in any case you should never need to clone this repository
|
|
||||||
unless you are updating its contents.
|
|
||||||
2526
btree/bt_compact.c
Normal file
2526
btree/bt_compact.c
Normal file
File diff suppressed because it is too large
Load Diff
213
btree/bt_compare.c
Normal file
213
btree/bt_compare.c
Normal file
@@ -0,0 +1,213 @@
|
|||||||
|
/*-
|
||||||
|
* See the file LICENSE for redistribution information.
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996,2008 Oracle. All rights reserved.
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1990, 1993, 1994, 1995, 1996
|
||||||
|
* Keith Bostic. All rights reserved.
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1990, 1993, 1994, 1995
|
||||||
|
* The Regents of the University of California. All rights reserved.
|
||||||
|
*
|
||||||
|
* This code is derived from software contributed to Berkeley by
|
||||||
|
* Mike Olson.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 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. 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.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* $Id: bt_compare.c 63573 2008-05-23 21:43:21Z trent.nelson $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "db_config.h"
|
||||||
|
|
||||||
|
#include "db_int.h"
|
||||||
|
#include "dbinc/db_page.h"
|
||||||
|
#include "dbinc/btree.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_cmp --
|
||||||
|
* Compare a key to a given record.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_cmp __P((DB *, DB_THREAD_INFO *,
|
||||||
|
* PUBLIC: DB_TXN *, const DBT *, PAGE *, u_int32_t,
|
||||||
|
* PUBLIC: int (*)(DB *, const DBT *, const DBT *), int *));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_cmp(dbp, ip, txn, dbt, h, indx, func, cmpp)
|
||||||
|
DB *dbp;
|
||||||
|
DB_THREAD_INFO *ip;
|
||||||
|
DB_TXN *txn;
|
||||||
|
const DBT *dbt;
|
||||||
|
PAGE *h;
|
||||||
|
u_int32_t indx;
|
||||||
|
int (*func)__P((DB *, const DBT *, const DBT *));
|
||||||
|
int *cmpp;
|
||||||
|
{
|
||||||
|
BINTERNAL *bi;
|
||||||
|
BKEYDATA *bk;
|
||||||
|
BOVERFLOW *bo;
|
||||||
|
DBT pg_dbt;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns:
|
||||||
|
* < 0 if dbt is < page record
|
||||||
|
* = 0 if dbt is = page record
|
||||||
|
* > 0 if dbt is > page record
|
||||||
|
*
|
||||||
|
* !!!
|
||||||
|
* We do not clear the pg_dbt DBT even though it's likely to contain
|
||||||
|
* random bits. That should be okay, because the app's comparison
|
||||||
|
* routine had better not be looking at fields other than data, size
|
||||||
|
* and app_data. We don't clear it because we go through this path a
|
||||||
|
* lot and it's expensive.
|
||||||
|
*/
|
||||||
|
switch (TYPE(h)) {
|
||||||
|
case P_LBTREE:
|
||||||
|
case P_LDUP:
|
||||||
|
case P_LRECNO:
|
||||||
|
bk = GET_BKEYDATA(dbp, h, indx);
|
||||||
|
if (B_TYPE(bk->type) == B_OVERFLOW)
|
||||||
|
bo = (BOVERFLOW *)bk;
|
||||||
|
else {
|
||||||
|
pg_dbt.app_data = NULL;
|
||||||
|
pg_dbt.data = bk->data;
|
||||||
|
pg_dbt.size = bk->len;
|
||||||
|
*cmpp = func(dbp, dbt, &pg_dbt);
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case P_IBTREE:
|
||||||
|
/*
|
||||||
|
* The following code guarantees that the left-most key on an
|
||||||
|
* internal page at any place in the tree sorts less than any
|
||||||
|
* user-specified key. The reason is that if we have reached
|
||||||
|
* this internal page, we know the user key must sort greater
|
||||||
|
* than the key we're storing for this page in any internal
|
||||||
|
* pages at levels above us in the tree. It then follows that
|
||||||
|
* any user-specified key cannot sort less than the first page
|
||||||
|
* which we reference, and so there's no reason to call the
|
||||||
|
* comparison routine. While this may save us a comparison
|
||||||
|
* routine call or two, the real reason for this is because
|
||||||
|
* we don't maintain a copy of the smallest key in the tree,
|
||||||
|
* so that we don't have to update all the levels of the tree
|
||||||
|
* should the application store a new smallest key. And, so,
|
||||||
|
* we may not have a key to compare, which makes doing the
|
||||||
|
* comparison difficult and error prone.
|
||||||
|
*/
|
||||||
|
if (indx == 0) {
|
||||||
|
*cmpp = 1;
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
bi = GET_BINTERNAL(dbp, h, indx);
|
||||||
|
if (B_TYPE(bi->type) == B_OVERFLOW)
|
||||||
|
bo = (BOVERFLOW *)(bi->data);
|
||||||
|
else {
|
||||||
|
pg_dbt.app_data = NULL;
|
||||||
|
pg_dbt.data = bi->data;
|
||||||
|
pg_dbt.size = bi->len;
|
||||||
|
*cmpp = func(dbp, dbt, &pg_dbt);
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return (__db_pgfmt(dbp->env, PGNO(h)));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Overflow.
|
||||||
|
*/
|
||||||
|
return (__db_moff(dbp, ip, txn, dbt,
|
||||||
|
bo->pgno, bo->tlen, func == __bam_defcmp ? NULL : func, cmpp));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_defcmp --
|
||||||
|
* Default comparison routine.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_defcmp __P((DB *, const DBT *, const DBT *));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_defcmp(dbp, a, b)
|
||||||
|
DB *dbp;
|
||||||
|
const DBT *a, *b;
|
||||||
|
{
|
||||||
|
size_t len;
|
||||||
|
u_int8_t *p1, *p2;
|
||||||
|
|
||||||
|
COMPQUIET(dbp, NULL);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns:
|
||||||
|
* < 0 if a is < b
|
||||||
|
* = 0 if a is = b
|
||||||
|
* > 0 if a is > b
|
||||||
|
*
|
||||||
|
* XXX
|
||||||
|
* If a size_t doesn't fit into a long, or if the difference between
|
||||||
|
* any two characters doesn't fit into an int, this routine can lose.
|
||||||
|
* What we need is a signed integral type that's guaranteed to be at
|
||||||
|
* least as large as a size_t, and there is no such thing.
|
||||||
|
*/
|
||||||
|
len = a->size > b->size ? b->size : a->size;
|
||||||
|
for (p1 = a->data, p2 = b->data; len--; ++p1, ++p2)
|
||||||
|
if (*p1 != *p2)
|
||||||
|
return ((long)*p1 - (long)*p2);
|
||||||
|
return ((long)a->size - (long)b->size);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_defpfx --
|
||||||
|
* Default prefix routine.
|
||||||
|
*
|
||||||
|
* PUBLIC: size_t __bam_defpfx __P((DB *, const DBT *, const DBT *));
|
||||||
|
*/
|
||||||
|
size_t
|
||||||
|
__bam_defpfx(dbp, a, b)
|
||||||
|
DB *dbp;
|
||||||
|
const DBT *a, *b;
|
||||||
|
{
|
||||||
|
size_t cnt, len;
|
||||||
|
u_int8_t *p1, *p2;
|
||||||
|
|
||||||
|
COMPQUIET(dbp, NULL);
|
||||||
|
|
||||||
|
cnt = 1;
|
||||||
|
len = a->size > b->size ? b->size : a->size;
|
||||||
|
for (p1 = a->data, p2 = b->data; len--; ++p1, ++p2, ++cnt)
|
||||||
|
if (*p1 != *p2)
|
||||||
|
return (cnt);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* They match up to the smaller of the two sizes.
|
||||||
|
* Collate the longer after the shorter.
|
||||||
|
*/
|
||||||
|
if (a->size < b->size)
|
||||||
|
return (a->size + 1);
|
||||||
|
if (b->size < a->size)
|
||||||
|
return (b->size + 1);
|
||||||
|
return (b->size);
|
||||||
|
}
|
||||||
95
btree/bt_conv.c
Normal file
95
btree/bt_conv.c
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
/*-
|
||||||
|
* See the file LICENSE for redistribution information.
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996,2008 Oracle. All rights reserved.
|
||||||
|
*
|
||||||
|
* $Id: bt_conv.c 63573 2008-05-23 21:43:21Z trent.nelson $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "db_config.h"
|
||||||
|
|
||||||
|
#include "db_int.h"
|
||||||
|
#include "dbinc/db_page.h"
|
||||||
|
#include "dbinc/db_swap.h"
|
||||||
|
#include "dbinc/btree.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_pgin --
|
||||||
|
* Convert host-specific page layout from the host-independent format
|
||||||
|
* stored on disk.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_pgin __P((DB *, db_pgno_t, void *, DBT *));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_pgin(dbp, pg, pp, cookie)
|
||||||
|
DB *dbp;
|
||||||
|
db_pgno_t pg;
|
||||||
|
void *pp;
|
||||||
|
DBT *cookie;
|
||||||
|
{
|
||||||
|
DB_PGINFO *pginfo;
|
||||||
|
PAGE *h;
|
||||||
|
|
||||||
|
pginfo = (DB_PGINFO *)cookie->data;
|
||||||
|
if (!F_ISSET(pginfo, DB_AM_SWAP))
|
||||||
|
return (0);
|
||||||
|
|
||||||
|
h = pp;
|
||||||
|
return (TYPE(h) == P_BTREEMETA ? __bam_mswap(dbp->env, pp) :
|
||||||
|
__db_byteswap(dbp, pg, pp, pginfo->db_pagesize, 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_pgout --
|
||||||
|
* Convert host-specific page layout to the host-independent format
|
||||||
|
* stored on disk.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_pgout __P((DB *, db_pgno_t, void *, DBT *));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_pgout(dbp, pg, pp, cookie)
|
||||||
|
DB *dbp;
|
||||||
|
db_pgno_t pg;
|
||||||
|
void *pp;
|
||||||
|
DBT *cookie;
|
||||||
|
{
|
||||||
|
DB_PGINFO *pginfo;
|
||||||
|
PAGE *h;
|
||||||
|
|
||||||
|
pginfo = (DB_PGINFO *)cookie->data;
|
||||||
|
if (!F_ISSET(pginfo, DB_AM_SWAP))
|
||||||
|
return (0);
|
||||||
|
|
||||||
|
h = pp;
|
||||||
|
return (TYPE(h) == P_BTREEMETA ? __bam_mswap(dbp->env, pp) :
|
||||||
|
__db_byteswap(dbp, pg, pp, pginfo->db_pagesize, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_mswap --
|
||||||
|
* Swap the bytes on the btree metadata page.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_mswap __P((ENV *, PAGE *));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_mswap(env, pg)
|
||||||
|
ENV *env;
|
||||||
|
PAGE *pg;
|
||||||
|
{
|
||||||
|
u_int8_t *p;
|
||||||
|
|
||||||
|
COMPQUIET(env, NULL);
|
||||||
|
|
||||||
|
__db_metaswap(pg);
|
||||||
|
p = (u_int8_t *)pg + sizeof(DBMETA);
|
||||||
|
|
||||||
|
p += sizeof(u_int32_t); /* unused */
|
||||||
|
SWAP32(p); /* minkey */
|
||||||
|
SWAP32(p); /* re_len */
|
||||||
|
SWAP32(p); /* re_pad */
|
||||||
|
SWAP32(p); /* root */
|
||||||
|
p += 92 * sizeof(u_int32_t); /* unused */
|
||||||
|
SWAP32(p); /* crypto_magic */
|
||||||
|
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
596
btree/bt_curadj.c
Normal file
596
btree/bt_curadj.c
Normal file
@@ -0,0 +1,596 @@
|
|||||||
|
/*-
|
||||||
|
* See the file LICENSE for redistribution information.
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996,2008 Oracle. All rights reserved.
|
||||||
|
*
|
||||||
|
* $Id: bt_curadj.c 63573 2008-05-23 21:43:21Z trent.nelson $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "db_config.h"
|
||||||
|
|
||||||
|
#include "db_int.h"
|
||||||
|
#include "dbinc/db_page.h"
|
||||||
|
#include "dbinc/btree.h"
|
||||||
|
#include "dbinc/mp.h"
|
||||||
|
|
||||||
|
static int __bam_opd_cursor __P((DB *, DBC *, db_pgno_t, u_int32_t, u_int32_t));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Cursor adjustments are logged if they are for subtransactions. This is
|
||||||
|
* because it's possible for a subtransaction to adjust cursors which will
|
||||||
|
* still be active after the subtransaction aborts, and so which must be
|
||||||
|
* restored to their previous locations. Cursors that can be both affected
|
||||||
|
* by our cursor adjustments and active after our transaction aborts can
|
||||||
|
* only be found in our parent transaction -- cursors in other transactions,
|
||||||
|
* including other child transactions of our parent, must have conflicting
|
||||||
|
* locker IDs, and so cannot be affected by adjustments in this transaction.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_ca_delete --
|
||||||
|
* Update the cursors when items are deleted and when already deleted
|
||||||
|
* items are overwritten. Return the number of relevant cursors found.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_ca_delete __P((DB *, db_pgno_t, u_int32_t, int, int *));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_ca_delete(dbp, pgno, indx, delete, countp)
|
||||||
|
DB *dbp;
|
||||||
|
db_pgno_t pgno;
|
||||||
|
u_int32_t indx;
|
||||||
|
int delete, *countp;
|
||||||
|
{
|
||||||
|
BTREE_CURSOR *cp;
|
||||||
|
DB *ldbp;
|
||||||
|
DBC *dbc;
|
||||||
|
ENV *env;
|
||||||
|
int count; /* !!!: Has to contain max number of cursors. */
|
||||||
|
|
||||||
|
env = dbp->env;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Adjust the cursors. We have the page write locked, so the
|
||||||
|
* only other cursors that can be pointing at a page are
|
||||||
|
* those in the same thread of control. Unfortunately, we don't
|
||||||
|
* know that they're using the same DB handle, so traverse
|
||||||
|
* all matching DB handles in the same ENV, then all cursors
|
||||||
|
* on each matching DB handle.
|
||||||
|
*
|
||||||
|
* Each cursor is single-threaded, so we only need to lock the
|
||||||
|
* list of DBs and then the list of cursors in each DB.
|
||||||
|
*/
|
||||||
|
MUTEX_LOCK(env, env->mtx_dblist);
|
||||||
|
FIND_FIRST_DB_MATCH(env, dbp, ldbp);
|
||||||
|
for (count = 0;
|
||||||
|
ldbp != NULL && ldbp->adj_fileid == dbp->adj_fileid;
|
||||||
|
ldbp = TAILQ_NEXT(ldbp, dblistlinks)) {
|
||||||
|
MUTEX_LOCK(env, dbp->mutex);
|
||||||
|
TAILQ_FOREACH(dbc, &ldbp->active_queue, links) {
|
||||||
|
cp = (BTREE_CURSOR *)dbc->internal;
|
||||||
|
if (cp->pgno == pgno && cp->indx == indx &&
|
||||||
|
!MVCC_SKIP_CURADJ(dbc, pgno)) {
|
||||||
|
/*
|
||||||
|
* [#8032] This assert is checking
|
||||||
|
* for possible race conditions where we
|
||||||
|
* hold a cursor position without a lock.
|
||||||
|
* Unfortunately, there are paths in the
|
||||||
|
* Btree code that do not satisfy these
|
||||||
|
* conditions. None of them are known to
|
||||||
|
* be a problem, but this assert should
|
||||||
|
* be re-activated when the Btree stack
|
||||||
|
* code is re-written.
|
||||||
|
DB_ASSERT(env, !STD_LOCKING(dbc) ||
|
||||||
|
cp->lock_mode != DB_LOCK_NG);
|
||||||
|
*/
|
||||||
|
if (delete)
|
||||||
|
F_SET(cp, C_DELETED);
|
||||||
|
else
|
||||||
|
F_CLR(cp, C_DELETED);
|
||||||
|
++count;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
MUTEX_UNLOCK(env, dbp->mutex);
|
||||||
|
}
|
||||||
|
MUTEX_UNLOCK(env, env->mtx_dblist);
|
||||||
|
|
||||||
|
if (countp != NULL)
|
||||||
|
*countp = count;
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __ram_ca_delete --
|
||||||
|
* Return if any relevant cursors found.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __ram_ca_delete __P((DB *, db_pgno_t, int *));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__ram_ca_delete(dbp, root_pgno, foundp)
|
||||||
|
DB *dbp;
|
||||||
|
db_pgno_t root_pgno;
|
||||||
|
int *foundp;
|
||||||
|
{
|
||||||
|
DB *ldbp;
|
||||||
|
DBC *dbc;
|
||||||
|
ENV *env;
|
||||||
|
int found;
|
||||||
|
|
||||||
|
env = dbp->env;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Review the cursors. See the comment in __bam_ca_delete().
|
||||||
|
*/
|
||||||
|
MUTEX_LOCK(env, env->mtx_dblist);
|
||||||
|
FIND_FIRST_DB_MATCH(env, dbp, ldbp);
|
||||||
|
for (found = 0;
|
||||||
|
found == 0 && ldbp != NULL && ldbp->adj_fileid == dbp->adj_fileid;
|
||||||
|
ldbp = TAILQ_NEXT(ldbp, dblistlinks)) {
|
||||||
|
MUTEX_LOCK(env, dbp->mutex);
|
||||||
|
TAILQ_FOREACH(dbc, &ldbp->active_queue, links)
|
||||||
|
if (dbc->internal->root == root_pgno &&
|
||||||
|
!MVCC_SKIP_CURADJ(dbc, root_pgno)) {
|
||||||
|
found = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
MUTEX_UNLOCK(env, dbp->mutex);
|
||||||
|
}
|
||||||
|
MUTEX_UNLOCK(env, env->mtx_dblist);
|
||||||
|
|
||||||
|
*foundp = found;
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_ca_di --
|
||||||
|
* Adjust the cursors during a delete or insert.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_ca_di __P((DBC *, db_pgno_t, u_int32_t, int));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_ca_di(my_dbc, pgno, indx, adjust)
|
||||||
|
DBC *my_dbc;
|
||||||
|
db_pgno_t pgno;
|
||||||
|
u_int32_t indx;
|
||||||
|
int adjust;
|
||||||
|
{
|
||||||
|
DB *dbp, *ldbp;
|
||||||
|
DBC *dbc;
|
||||||
|
DBC_INTERNAL *cp;
|
||||||
|
DB_LSN lsn;
|
||||||
|
DB_TXN *my_txn;
|
||||||
|
ENV *env;
|
||||||
|
int found, ret;
|
||||||
|
|
||||||
|
dbp = my_dbc->dbp;
|
||||||
|
env = dbp->env;
|
||||||
|
|
||||||
|
my_txn = IS_SUBTRANSACTION(my_dbc->txn) ? my_dbc->txn : NULL;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Adjust the cursors. See the comment in __bam_ca_delete().
|
||||||
|
*/
|
||||||
|
MUTEX_LOCK(env, env->mtx_dblist);
|
||||||
|
FIND_FIRST_DB_MATCH(env, dbp, ldbp);
|
||||||
|
for (found = 0;
|
||||||
|
ldbp != NULL && ldbp->adj_fileid == dbp->adj_fileid;
|
||||||
|
ldbp = TAILQ_NEXT(ldbp, dblistlinks)) {
|
||||||
|
MUTEX_LOCK(env, dbp->mutex);
|
||||||
|
TAILQ_FOREACH(dbc, &ldbp->active_queue, links) {
|
||||||
|
if (dbc->dbtype == DB_RECNO)
|
||||||
|
continue;
|
||||||
|
cp = dbc->internal;
|
||||||
|
if (cp->pgno == pgno && cp->indx >= indx &&
|
||||||
|
(dbc == my_dbc || !MVCC_SKIP_CURADJ(dbc, pgno))) {
|
||||||
|
/* Cursor indices should never be negative. */
|
||||||
|
DB_ASSERT(env, cp->indx != 0 || adjust > 0);
|
||||||
|
/* [#8032]
|
||||||
|
DB_ASSERT(env, !STD_LOCKING(dbc) ||
|
||||||
|
cp->lock_mode != DB_LOCK_NG);
|
||||||
|
*/
|
||||||
|
cp->indx += adjust;
|
||||||
|
if (my_txn != NULL && dbc->txn != my_txn)
|
||||||
|
found = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
MUTEX_UNLOCK(env, dbp->mutex);
|
||||||
|
}
|
||||||
|
MUTEX_UNLOCK(env, env->mtx_dblist);
|
||||||
|
|
||||||
|
if (found != 0 && DBC_LOGGING(my_dbc)) {
|
||||||
|
if ((ret = __bam_curadj_log(dbp, my_dbc->txn, &lsn, 0,
|
||||||
|
DB_CA_DI, pgno, 0, 0, (u_int32_t)adjust, indx, 0)) != 0)
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_opd_cursor -- create a new opd cursor.
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
__bam_opd_cursor(dbp, dbc, first, tpgno, ti)
|
||||||
|
DB *dbp;
|
||||||
|
DBC *dbc;
|
||||||
|
db_pgno_t tpgno;
|
||||||
|
u_int32_t first, ti;
|
||||||
|
{
|
||||||
|
BTREE_CURSOR *cp, *orig_cp;
|
||||||
|
DBC *dbc_nopd;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
orig_cp = (BTREE_CURSOR *)dbc->internal;
|
||||||
|
dbc_nopd = NULL;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Allocate a new cursor and create the stack. If duplicates
|
||||||
|
* are sorted, we've just created an off-page duplicate Btree.
|
||||||
|
* If duplicates aren't sorted, we've just created a Recno tree.
|
||||||
|
*
|
||||||
|
* Note that in order to get here at all, there shouldn't be
|
||||||
|
* an old off-page dup cursor--to augment the checking dbc_newopd
|
||||||
|
* will do, assert this.
|
||||||
|
*/
|
||||||
|
DB_ASSERT(dbp->env, orig_cp->opd == NULL);
|
||||||
|
if ((ret = __dbc_newopd(dbc, tpgno, orig_cp->opd, &dbc_nopd)) != 0)
|
||||||
|
return (ret);
|
||||||
|
|
||||||
|
cp = (BTREE_CURSOR *)dbc_nopd->internal;
|
||||||
|
cp->pgno = tpgno;
|
||||||
|
cp->indx = ti;
|
||||||
|
|
||||||
|
if (dbp->dup_compare == NULL) {
|
||||||
|
/*
|
||||||
|
* Converting to off-page Recno trees is tricky. The
|
||||||
|
* record number for the cursor is the index + 1 (to
|
||||||
|
* convert to 1-based record numbers).
|
||||||
|
*/
|
||||||
|
cp->recno = ti + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Transfer the deleted flag from the top-level cursor to the
|
||||||
|
* created one.
|
||||||
|
*/
|
||||||
|
if (F_ISSET(orig_cp, C_DELETED)) {
|
||||||
|
F_SET(cp, C_DELETED);
|
||||||
|
F_CLR(orig_cp, C_DELETED);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Stack the cursors and reset the initial cursor's index. */
|
||||||
|
orig_cp->opd = dbc_nopd;
|
||||||
|
orig_cp->indx = first;
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_ca_dup --
|
||||||
|
* Adjust the cursors when moving items from a leaf page to a duplicates
|
||||||
|
* page.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_ca_dup __P((DBC *,
|
||||||
|
* PUBLIC: u_int32_t, db_pgno_t, u_int32_t, db_pgno_t, u_int32_t));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_ca_dup(my_dbc, first, fpgno, fi, tpgno, ti)
|
||||||
|
DBC *my_dbc;
|
||||||
|
db_pgno_t fpgno, tpgno;
|
||||||
|
u_int32_t first, fi, ti;
|
||||||
|
{
|
||||||
|
BTREE_CURSOR *orig_cp;
|
||||||
|
DB *dbp, *ldbp;
|
||||||
|
DBC *dbc;
|
||||||
|
DB_LSN lsn;
|
||||||
|
DB_TXN *my_txn;
|
||||||
|
ENV *env;
|
||||||
|
int found, ret, t_ret;
|
||||||
|
|
||||||
|
dbp = my_dbc->dbp;
|
||||||
|
env = dbp->env;
|
||||||
|
my_txn = IS_SUBTRANSACTION(my_dbc->txn) ? my_dbc->txn : NULL;
|
||||||
|
ret = 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Adjust the cursors. See the comment in __bam_ca_delete().
|
||||||
|
*/
|
||||||
|
MUTEX_LOCK(env, env->mtx_dblist);
|
||||||
|
FIND_FIRST_DB_MATCH(env, dbp, ldbp);
|
||||||
|
for (found = 0;
|
||||||
|
ldbp != NULL && ldbp->adj_fileid == dbp->adj_fileid;
|
||||||
|
ldbp = TAILQ_NEXT(ldbp, dblistlinks)) {
|
||||||
|
loop: MUTEX_LOCK(env, dbp->mutex);
|
||||||
|
TAILQ_FOREACH(dbc, &ldbp->active_queue, links) {
|
||||||
|
/* Find cursors pointing to this record. */
|
||||||
|
orig_cp = (BTREE_CURSOR *)dbc->internal;
|
||||||
|
if (orig_cp->pgno != fpgno || orig_cp->indx != fi ||
|
||||||
|
MVCC_SKIP_CURADJ(dbc, fpgno))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Since we rescan the list see if this is already
|
||||||
|
* converted.
|
||||||
|
*/
|
||||||
|
if (orig_cp->opd != NULL)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
MUTEX_UNLOCK(env, dbp->mutex);
|
||||||
|
/* [#8032]
|
||||||
|
DB_ASSERT(env, !STD_LOCKING(dbc) ||
|
||||||
|
orig_cp->lock_mode != DB_LOCK_NG);
|
||||||
|
*/
|
||||||
|
if ((ret = __bam_opd_cursor(dbp,
|
||||||
|
dbc, first, tpgno, ti)) != 0)
|
||||||
|
goto err;
|
||||||
|
if (my_txn != NULL && dbc->txn != my_txn)
|
||||||
|
found = 1;
|
||||||
|
/* We released the mutex to get a cursor, start over. */
|
||||||
|
goto loop;
|
||||||
|
}
|
||||||
|
MUTEX_UNLOCK(env, dbp->mutex);
|
||||||
|
}
|
||||||
|
err: MUTEX_UNLOCK(env, env->mtx_dblist);
|
||||||
|
|
||||||
|
if (found != 0 && DBC_LOGGING(my_dbc)) {
|
||||||
|
if ((t_ret = __bam_curadj_log(dbp, my_dbc->txn,
|
||||||
|
&lsn, 0, DB_CA_DUP, fpgno, tpgno, 0, first, fi, ti)) != 0 &&
|
||||||
|
ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_ca_undodup --
|
||||||
|
* Adjust the cursors when returning items to a leaf page
|
||||||
|
* from a duplicate page.
|
||||||
|
* Called only during undo processing.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_ca_undodup __P((DB *,
|
||||||
|
* PUBLIC: u_int32_t, db_pgno_t, u_int32_t, u_int32_t));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_ca_undodup(dbp, first, fpgno, fi, ti)
|
||||||
|
DB *dbp;
|
||||||
|
db_pgno_t fpgno;
|
||||||
|
u_int32_t first, fi, ti;
|
||||||
|
{
|
||||||
|
BTREE_CURSOR *orig_cp;
|
||||||
|
DB *ldbp;
|
||||||
|
DBC *dbc;
|
||||||
|
ENV *env;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
env = dbp->env;
|
||||||
|
ret = 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Adjust the cursors. See the comment in __bam_ca_delete().
|
||||||
|
*/
|
||||||
|
MUTEX_LOCK(env, env->mtx_dblist);
|
||||||
|
FIND_FIRST_DB_MATCH(env, dbp, ldbp);
|
||||||
|
for (;
|
||||||
|
ldbp != NULL && ldbp->adj_fileid == dbp->adj_fileid;
|
||||||
|
ldbp = TAILQ_NEXT(ldbp, dblistlinks)) {
|
||||||
|
loop: MUTEX_LOCK(env, dbp->mutex);
|
||||||
|
TAILQ_FOREACH(dbc, &ldbp->active_queue, links) {
|
||||||
|
orig_cp = (BTREE_CURSOR *)dbc->internal;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* A note on the orig_cp->opd != NULL requirement here:
|
||||||
|
* it's possible that there's a cursor that refers to
|
||||||
|
* the same duplicate set, but which has no opd cursor,
|
||||||
|
* because it refers to a different item and we took
|
||||||
|
* care of it while processing a previous record.
|
||||||
|
*/
|
||||||
|
if (orig_cp->pgno != fpgno ||
|
||||||
|
orig_cp->indx != first ||
|
||||||
|
orig_cp->opd == NULL || ((BTREE_CURSOR *)
|
||||||
|
orig_cp->opd->internal)->indx != ti ||
|
||||||
|
MVCC_SKIP_CURADJ(dbc, fpgno))
|
||||||
|
continue;
|
||||||
|
MUTEX_UNLOCK(env, dbp->mutex);
|
||||||
|
if ((ret = __dbc_close(orig_cp->opd)) != 0)
|
||||||
|
goto err;
|
||||||
|
orig_cp->opd = NULL;
|
||||||
|
orig_cp->indx = fi;
|
||||||
|
/*
|
||||||
|
* We released the mutex to free a cursor,
|
||||||
|
* start over.
|
||||||
|
*/
|
||||||
|
goto loop;
|
||||||
|
}
|
||||||
|
MUTEX_UNLOCK(env, dbp->mutex);
|
||||||
|
}
|
||||||
|
err: MUTEX_UNLOCK(env, env->mtx_dblist);
|
||||||
|
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_ca_rsplit --
|
||||||
|
* Adjust the cursors when doing reverse splits.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_ca_rsplit __P((DBC *, db_pgno_t, db_pgno_t));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_ca_rsplit(my_dbc, fpgno, tpgno)
|
||||||
|
DBC* my_dbc;
|
||||||
|
db_pgno_t fpgno, tpgno;
|
||||||
|
{
|
||||||
|
DB *dbp, *ldbp;
|
||||||
|
DBC *dbc;
|
||||||
|
DB_LSN lsn;
|
||||||
|
DB_TXN *my_txn;
|
||||||
|
ENV *env;
|
||||||
|
int found, ret;
|
||||||
|
|
||||||
|
dbp = my_dbc->dbp;
|
||||||
|
env = dbp->env;
|
||||||
|
my_txn = IS_SUBTRANSACTION(my_dbc->txn) ? my_dbc->txn : NULL;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Adjust the cursors. See the comment in __bam_ca_delete().
|
||||||
|
*/
|
||||||
|
MUTEX_LOCK(env, env->mtx_dblist);
|
||||||
|
FIND_FIRST_DB_MATCH(env, dbp, ldbp);
|
||||||
|
for (found = 0;
|
||||||
|
ldbp != NULL && ldbp->adj_fileid == dbp->adj_fileid;
|
||||||
|
ldbp = TAILQ_NEXT(ldbp, dblistlinks)) {
|
||||||
|
MUTEX_LOCK(env, dbp->mutex);
|
||||||
|
TAILQ_FOREACH(dbc, &ldbp->active_queue, links) {
|
||||||
|
if (dbc->dbtype == DB_RECNO)
|
||||||
|
continue;
|
||||||
|
if (dbc->internal->pgno == fpgno &&
|
||||||
|
!MVCC_SKIP_CURADJ(dbc, fpgno)) {
|
||||||
|
dbc->internal->pgno = tpgno;
|
||||||
|
/* [#8032]
|
||||||
|
DB_ASSERT(env, !STD_LOCKING(dbc) ||
|
||||||
|
dbc->internal->lock_mode != DB_LOCK_NG);
|
||||||
|
*/
|
||||||
|
if (my_txn != NULL && dbc->txn != my_txn)
|
||||||
|
found = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
MUTEX_UNLOCK(env, dbp->mutex);
|
||||||
|
}
|
||||||
|
MUTEX_UNLOCK(env, env->mtx_dblist);
|
||||||
|
|
||||||
|
if (found != 0 && DBC_LOGGING(my_dbc)) {
|
||||||
|
if ((ret = __bam_curadj_log(dbp, my_dbc->txn,
|
||||||
|
&lsn, 0, DB_CA_RSPLIT, fpgno, tpgno, 0, 0, 0, 0)) != 0)
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_ca_split --
|
||||||
|
* Adjust the cursors when splitting a page.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_ca_split __P((DBC *,
|
||||||
|
* PUBLIC: db_pgno_t, db_pgno_t, db_pgno_t, u_int32_t, int));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_ca_split(my_dbc, ppgno, lpgno, rpgno, split_indx, cleft)
|
||||||
|
DBC *my_dbc;
|
||||||
|
db_pgno_t ppgno, lpgno, rpgno;
|
||||||
|
u_int32_t split_indx;
|
||||||
|
int cleft;
|
||||||
|
{
|
||||||
|
DB *dbp, *ldbp;
|
||||||
|
DBC *dbc;
|
||||||
|
DBC_INTERNAL *cp;
|
||||||
|
DB_LSN lsn;
|
||||||
|
DB_TXN *my_txn;
|
||||||
|
ENV *env;
|
||||||
|
int found, ret;
|
||||||
|
|
||||||
|
dbp = my_dbc->dbp;
|
||||||
|
env = dbp->env;
|
||||||
|
my_txn = IS_SUBTRANSACTION(my_dbc->txn) ? my_dbc->txn : NULL;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Adjust the cursors. See the comment in __bam_ca_delete().
|
||||||
|
*
|
||||||
|
* If splitting the page that a cursor was on, the cursor has to be
|
||||||
|
* adjusted to point to the same record as before the split. Most
|
||||||
|
* of the time we don't adjust pointers to the left page, because
|
||||||
|
* we're going to copy its contents back over the original page. If
|
||||||
|
* the cursor is on the right page, it is decremented by the number of
|
||||||
|
* records split to the left page.
|
||||||
|
*/
|
||||||
|
MUTEX_LOCK(env, env->mtx_dblist);
|
||||||
|
FIND_FIRST_DB_MATCH(env, dbp, ldbp);
|
||||||
|
for (found = 0;
|
||||||
|
ldbp != NULL && ldbp->adj_fileid == dbp->adj_fileid;
|
||||||
|
ldbp = TAILQ_NEXT(ldbp, dblistlinks)) {
|
||||||
|
MUTEX_LOCK(env, dbp->mutex);
|
||||||
|
TAILQ_FOREACH(dbc, &ldbp->active_queue, links) {
|
||||||
|
if (dbc->dbtype == DB_RECNO)
|
||||||
|
continue;
|
||||||
|
cp = dbc->internal;
|
||||||
|
if (cp->pgno == ppgno &&
|
||||||
|
!MVCC_SKIP_CURADJ(dbc, ppgno)) {
|
||||||
|
/* [#8032]
|
||||||
|
DB_ASSERT(env, !STD_LOCKING(dbc) ||
|
||||||
|
cp->lock_mode != DB_LOCK_NG);
|
||||||
|
*/
|
||||||
|
if (my_txn != NULL && dbc->txn != my_txn)
|
||||||
|
found = 1;
|
||||||
|
if (cp->indx < split_indx) {
|
||||||
|
if (cleft)
|
||||||
|
cp->pgno = lpgno;
|
||||||
|
} else {
|
||||||
|
cp->pgno = rpgno;
|
||||||
|
cp->indx -= split_indx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
MUTEX_UNLOCK(env, dbp->mutex);
|
||||||
|
}
|
||||||
|
MUTEX_UNLOCK(env, env->mtx_dblist);
|
||||||
|
|
||||||
|
if (found != 0 && DBC_LOGGING(my_dbc)) {
|
||||||
|
if ((ret = __bam_curadj_log(dbp,
|
||||||
|
my_dbc->txn, &lsn, 0, DB_CA_SPLIT, ppgno, rpgno,
|
||||||
|
cleft ? lpgno : PGNO_INVALID, 0, split_indx, 0)) != 0)
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_ca_undosplit --
|
||||||
|
* Adjust the cursors when undoing a split of a page.
|
||||||
|
* If we grew a level we will execute this for both the
|
||||||
|
* left and the right pages.
|
||||||
|
* Called only during undo processing.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_ca_undosplit __P((DB *,
|
||||||
|
* PUBLIC: db_pgno_t, db_pgno_t, db_pgno_t, u_int32_t));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_ca_undosplit(dbp, frompgno, topgno, lpgno, split_indx)
|
||||||
|
DB *dbp;
|
||||||
|
db_pgno_t frompgno, topgno, lpgno;
|
||||||
|
u_int32_t split_indx;
|
||||||
|
{
|
||||||
|
DB *ldbp;
|
||||||
|
DBC *dbc;
|
||||||
|
DBC_INTERNAL *cp;
|
||||||
|
ENV *env;
|
||||||
|
|
||||||
|
env = dbp->env;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Adjust the cursors. See the comment in __bam_ca_delete().
|
||||||
|
*
|
||||||
|
* When backing out a split, we move the cursor back
|
||||||
|
* to the original offset and bump it by the split_indx.
|
||||||
|
*/
|
||||||
|
MUTEX_LOCK(env, env->mtx_dblist);
|
||||||
|
FIND_FIRST_DB_MATCH(env, dbp, ldbp);
|
||||||
|
for (;
|
||||||
|
ldbp != NULL && ldbp->adj_fileid == dbp->adj_fileid;
|
||||||
|
ldbp = TAILQ_NEXT(ldbp, dblistlinks)) {
|
||||||
|
MUTEX_LOCK(env, dbp->mutex);
|
||||||
|
TAILQ_FOREACH(dbc, &ldbp->active_queue, links) {
|
||||||
|
if (dbc->dbtype == DB_RECNO)
|
||||||
|
continue;
|
||||||
|
cp = dbc->internal;
|
||||||
|
if (cp->pgno == topgno &&
|
||||||
|
!MVCC_SKIP_CURADJ(dbc, topgno)) {
|
||||||
|
cp->pgno = frompgno;
|
||||||
|
cp->indx += split_indx;
|
||||||
|
} else if (cp->pgno == lpgno &&
|
||||||
|
!MVCC_SKIP_CURADJ(dbc, lpgno))
|
||||||
|
cp->pgno = frompgno;
|
||||||
|
}
|
||||||
|
MUTEX_UNLOCK(env, dbp->mutex);
|
||||||
|
}
|
||||||
|
MUTEX_UNLOCK(env, env->mtx_dblist);
|
||||||
|
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
2749
btree/bt_cursor.c
Normal file
2749
btree/bt_cursor.c
Normal file
File diff suppressed because it is too large
Load Diff
644
btree/bt_delete.c
Normal file
644
btree/bt_delete.c
Normal file
@@ -0,0 +1,644 @@
|
|||||||
|
/*-
|
||||||
|
* See the file LICENSE for redistribution information.
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996,2008 Oracle. All rights reserved.
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1990, 1993, 1994, 1995, 1996
|
||||||
|
* Keith Bostic. All rights reserved.
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1990, 1993, 1994, 1995
|
||||||
|
* The Regents of the University of California. All rights reserved.
|
||||||
|
*
|
||||||
|
* This code is derived from software contributed to Berkeley by
|
||||||
|
* Mike Olson.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 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. 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.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* $Id: bt_delete.c 63573 2008-05-23 21:43:21Z trent.nelson $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "db_config.h"
|
||||||
|
|
||||||
|
#include "db_int.h"
|
||||||
|
#include "dbinc/db_page.h"
|
||||||
|
#include "dbinc/btree.h"
|
||||||
|
#include "dbinc/lock.h"
|
||||||
|
#include "dbinc/mp.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_ditem --
|
||||||
|
* Delete one or more entries from a page.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_ditem __P((DBC *, PAGE *, u_int32_t));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_ditem(dbc, h, indx)
|
||||||
|
DBC *dbc;
|
||||||
|
PAGE *h;
|
||||||
|
u_int32_t indx;
|
||||||
|
{
|
||||||
|
BINTERNAL *bi;
|
||||||
|
BKEYDATA *bk;
|
||||||
|
DB *dbp;
|
||||||
|
u_int32_t nbytes;
|
||||||
|
int ret;
|
||||||
|
db_indx_t *inp;
|
||||||
|
|
||||||
|
dbp = dbc->dbp;
|
||||||
|
inp = P_INP(dbp, h);
|
||||||
|
|
||||||
|
/* The page should already have been dirtied by our caller. */
|
||||||
|
DB_ASSERT(dbp->env, IS_DIRTY(h));
|
||||||
|
|
||||||
|
switch (TYPE(h)) {
|
||||||
|
case P_IBTREE:
|
||||||
|
bi = GET_BINTERNAL(dbp, h, indx);
|
||||||
|
switch (B_TYPE(bi->type)) {
|
||||||
|
case B_DUPLICATE:
|
||||||
|
case B_KEYDATA:
|
||||||
|
nbytes = BINTERNAL_SIZE(bi->len);
|
||||||
|
break;
|
||||||
|
case B_OVERFLOW:
|
||||||
|
nbytes = BINTERNAL_SIZE(bi->len);
|
||||||
|
if ((ret =
|
||||||
|
__db_doff(dbc, ((BOVERFLOW *)bi->data)->pgno)) != 0)
|
||||||
|
return (ret);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return (__db_pgfmt(dbp->env, PGNO(h)));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case P_IRECNO:
|
||||||
|
nbytes = RINTERNAL_SIZE;
|
||||||
|
break;
|
||||||
|
case P_LBTREE:
|
||||||
|
/*
|
||||||
|
* If it's a duplicate key, discard the index and don't touch
|
||||||
|
* the actual page item.
|
||||||
|
*
|
||||||
|
* !!!
|
||||||
|
* This works because no data item can have an index matching
|
||||||
|
* any other index so even if the data item is in a key "slot",
|
||||||
|
* it won't match any other index.
|
||||||
|
*/
|
||||||
|
if ((indx % 2) == 0) {
|
||||||
|
/*
|
||||||
|
* Check for a duplicate after us on the page. NOTE:
|
||||||
|
* we have to delete the key item before deleting the
|
||||||
|
* data item, otherwise the "indx + P_INDX" calculation
|
||||||
|
* won't work!
|
||||||
|
*/
|
||||||
|
if (indx + P_INDX < (u_int32_t)NUM_ENT(h) &&
|
||||||
|
inp[indx] == inp[indx + P_INDX])
|
||||||
|
return (__bam_adjindx(dbc,
|
||||||
|
h, indx, indx + O_INDX, 0));
|
||||||
|
/*
|
||||||
|
* Check for a duplicate before us on the page. It
|
||||||
|
* doesn't matter if we delete the key item before or
|
||||||
|
* after the data item for the purposes of this one.
|
||||||
|
*/
|
||||||
|
if (indx > 0 && inp[indx] == inp[indx - P_INDX])
|
||||||
|
return (__bam_adjindx(dbc,
|
||||||
|
h, indx, indx - P_INDX, 0));
|
||||||
|
}
|
||||||
|
/* FALLTHROUGH */
|
||||||
|
case P_LDUP:
|
||||||
|
case P_LRECNO:
|
||||||
|
bk = GET_BKEYDATA(dbp, h, indx);
|
||||||
|
switch (B_TYPE(bk->type)) {
|
||||||
|
case B_DUPLICATE:
|
||||||
|
nbytes = BOVERFLOW_SIZE;
|
||||||
|
break;
|
||||||
|
case B_OVERFLOW:
|
||||||
|
nbytes = BOVERFLOW_SIZE;
|
||||||
|
if ((ret = __db_doff(
|
||||||
|
dbc, (GET_BOVERFLOW(dbp, h, indx))->pgno)) != 0)
|
||||||
|
return (ret);
|
||||||
|
break;
|
||||||
|
case B_KEYDATA:
|
||||||
|
nbytes = BKEYDATA_SIZE(bk->len);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return (__db_pgfmt(dbp->env, PGNO(h)));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return (__db_pgfmt(dbp->env, PGNO(h)));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Delete the item and mark the page dirty. */
|
||||||
|
if ((ret = __db_ditem(dbc, h, indx, nbytes)) != 0)
|
||||||
|
return (ret);
|
||||||
|
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_adjindx --
|
||||||
|
* Adjust an index on the page.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_adjindx __P((DBC *, PAGE *, u_int32_t, u_int32_t, int));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_adjindx(dbc, h, indx, indx_copy, is_insert)
|
||||||
|
DBC *dbc;
|
||||||
|
PAGE *h;
|
||||||
|
u_int32_t indx, indx_copy;
|
||||||
|
int is_insert;
|
||||||
|
{
|
||||||
|
DB *dbp;
|
||||||
|
db_indx_t copy, *inp;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
dbp = dbc->dbp;
|
||||||
|
inp = P_INP(dbp, h);
|
||||||
|
|
||||||
|
/* Log the change. */
|
||||||
|
if (DBC_LOGGING(dbc)) {
|
||||||
|
if ((ret = __bam_adj_log(dbp, dbc->txn, &LSN(h), 0,
|
||||||
|
PGNO(h), &LSN(h), indx, indx_copy, (u_int32_t)is_insert)) != 0)
|
||||||
|
return (ret);
|
||||||
|
} else
|
||||||
|
LSN_NOT_LOGGED(LSN(h));
|
||||||
|
|
||||||
|
/* Shuffle the indices and mark the page dirty. */
|
||||||
|
if (is_insert) {
|
||||||
|
copy = inp[indx_copy];
|
||||||
|
if (indx != NUM_ENT(h))
|
||||||
|
memmove(&inp[indx + O_INDX], &inp[indx],
|
||||||
|
sizeof(db_indx_t) * (NUM_ENT(h) - indx));
|
||||||
|
inp[indx] = copy;
|
||||||
|
++NUM_ENT(h);
|
||||||
|
} else {
|
||||||
|
--NUM_ENT(h);
|
||||||
|
if (indx != NUM_ENT(h))
|
||||||
|
memmove(&inp[indx], &inp[indx + O_INDX],
|
||||||
|
sizeof(db_indx_t) * (NUM_ENT(h) - indx));
|
||||||
|
}
|
||||||
|
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_dpages --
|
||||||
|
* Delete a set of locked pages.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_dpages __P((DBC *, int, int));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_dpages(dbc, use_top, update)
|
||||||
|
DBC *dbc;
|
||||||
|
int use_top;
|
||||||
|
int update;
|
||||||
|
{
|
||||||
|
BINTERNAL *bi;
|
||||||
|
BTREE_CURSOR *cp;
|
||||||
|
DB *dbp;
|
||||||
|
DBT a, b;
|
||||||
|
DB_LOCK c_lock, p_lock;
|
||||||
|
DB_MPOOLFILE *mpf;
|
||||||
|
EPG *epg, *save_sp, *stack_epg;
|
||||||
|
PAGE *child, *parent;
|
||||||
|
db_indx_t nitems;
|
||||||
|
db_pgno_t pgno, root_pgno;
|
||||||
|
db_recno_t rcnt;
|
||||||
|
int done, ret, t_ret;
|
||||||
|
|
||||||
|
dbp = dbc->dbp;
|
||||||
|
mpf = dbp->mpf;
|
||||||
|
cp = (BTREE_CURSOR *)dbc->internal;
|
||||||
|
nitems = 0;
|
||||||
|
pgno = PGNO_INVALID;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We have the entire stack of deletable pages locked.
|
||||||
|
*
|
||||||
|
* Btree calls us with the first page in the stack is to have a
|
||||||
|
* single item deleted, and the rest of the pages are to be removed.
|
||||||
|
*
|
||||||
|
* Recno always has a stack to the root and __bam_merge operations
|
||||||
|
* may have unneeded items in the sack. We find the lowest page
|
||||||
|
* in the stack that has more than one record in it and start there.
|
||||||
|
*/
|
||||||
|
ret = 0;
|
||||||
|
if (use_top)
|
||||||
|
stack_epg = cp->sp;
|
||||||
|
else
|
||||||
|
for (stack_epg = cp->csp; stack_epg > cp->sp; --stack_epg)
|
||||||
|
if (NUM_ENT(stack_epg->page) > 1)
|
||||||
|
break;
|
||||||
|
epg = stack_epg;
|
||||||
|
/*
|
||||||
|
* !!!
|
||||||
|
* There is an interesting deadlock situation here. We have to relink
|
||||||
|
* the leaf page chain around the leaf page being deleted. Consider
|
||||||
|
* a cursor walking through the leaf pages, that has the previous page
|
||||||
|
* read-locked and is waiting on a lock for the page we're deleting.
|
||||||
|
* It will deadlock here. Before we unlink the subtree, we relink the
|
||||||
|
* leaf page chain.
|
||||||
|
*/
|
||||||
|
if (LEVEL(cp->csp->page) == 1 &&
|
||||||
|
(ret = __bam_relink(dbc, cp->csp->page, PGNO_INVALID)) != 0)
|
||||||
|
goto discard;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Delete the last item that references the underlying pages that are
|
||||||
|
* to be deleted, and adjust cursors that reference that page. Then,
|
||||||
|
* save that page's page number and item count and release it. If
|
||||||
|
* the application isn't retaining locks because it's running without
|
||||||
|
* transactions, this lets the rest of the tree get back to business
|
||||||
|
* immediately.
|
||||||
|
*/
|
||||||
|
if ((ret = __memp_dirty(mpf,
|
||||||
|
&epg->page, dbc->thread_info, dbc->txn, dbc->priority, 0)) != 0)
|
||||||
|
goto discard;
|
||||||
|
if ((ret = __bam_ditem(dbc, epg->page, epg->indx)) != 0)
|
||||||
|
goto discard;
|
||||||
|
if ((ret = __bam_ca_di(dbc, PGNO(epg->page), epg->indx, -1)) != 0)
|
||||||
|
goto discard;
|
||||||
|
|
||||||
|
if (update && epg->indx == 0) {
|
||||||
|
save_sp = cp->csp;
|
||||||
|
cp->csp = epg;
|
||||||
|
ret = __bam_pupdate(dbc, epg->page);
|
||||||
|
cp->csp = save_sp;
|
||||||
|
if (ret != 0)
|
||||||
|
goto discard;
|
||||||
|
}
|
||||||
|
|
||||||
|
pgno = PGNO(epg->page);
|
||||||
|
nitems = NUM_ENT(epg->page);
|
||||||
|
|
||||||
|
ret = __memp_fput(mpf, dbc->thread_info, epg->page, dbc->priority);
|
||||||
|
epg->page = NULL;
|
||||||
|
if ((t_ret = __TLPUT(dbc, epg->lock)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
if (ret != 0)
|
||||||
|
goto err_inc;
|
||||||
|
|
||||||
|
/* Then, discard any pages that we don't care about. */
|
||||||
|
discard: for (epg = cp->sp; epg < stack_epg; ++epg) {
|
||||||
|
if ((t_ret = __memp_fput(mpf, dbc->thread_info,
|
||||||
|
epg->page, dbc->priority)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
epg->page = NULL;
|
||||||
|
if ((t_ret = __TLPUT(dbc, epg->lock)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
}
|
||||||
|
if (ret != 0)
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
/* Free the rest of the pages in the stack. */
|
||||||
|
while (++epg <= cp->csp) {
|
||||||
|
if ((ret = __memp_dirty(mpf, &epg->page,
|
||||||
|
dbc->thread_info, dbc->txn, dbc->priority, 0)) != 0)
|
||||||
|
goto err;
|
||||||
|
/*
|
||||||
|
* Delete page entries so they will be restored as part of
|
||||||
|
* recovery. We don't need to do cursor adjustment here as
|
||||||
|
* the pages are being emptied by definition and so cannot
|
||||||
|
* be referenced by a cursor.
|
||||||
|
*/
|
||||||
|
if (NUM_ENT(epg->page) != 0) {
|
||||||
|
DB_ASSERT(dbp->env, LEVEL(epg->page) != 1);
|
||||||
|
|
||||||
|
if ((ret = __bam_ditem(dbc, epg->page, epg->indx)) != 0)
|
||||||
|
goto err;
|
||||||
|
/*
|
||||||
|
* Sheer paranoia: if we find any pages that aren't
|
||||||
|
* emptied by the delete, someone else added an item
|
||||||
|
* while we were walking the tree, and we discontinue
|
||||||
|
* the delete. Shouldn't be possible, but we check
|
||||||
|
* regardless.
|
||||||
|
*/
|
||||||
|
if (NUM_ENT(epg->page) != 0)
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = __db_free(dbc, epg->page);
|
||||||
|
if (cp->page == epg->page)
|
||||||
|
cp->page = NULL;
|
||||||
|
epg->page = NULL;
|
||||||
|
if ((t_ret = __TLPUT(dbc, epg->lock)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
if (ret != 0)
|
||||||
|
goto err_inc;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (0) {
|
||||||
|
err_inc: ++epg;
|
||||||
|
err: for (; epg <= cp->csp; ++epg) {
|
||||||
|
if (epg->page != NULL) {
|
||||||
|
(void)__memp_fput(mpf, dbc->thread_info,
|
||||||
|
epg->page, dbc->priority);
|
||||||
|
epg->page = NULL;
|
||||||
|
}
|
||||||
|
(void)__TLPUT(dbc, epg->lock);
|
||||||
|
}
|
||||||
|
BT_STK_CLR(cp);
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
BT_STK_CLR(cp);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If we just deleted the next-to-last item from the root page, the
|
||||||
|
* tree can collapse one or more levels. While there remains only a
|
||||||
|
* single item on the root page, write lock the last page referenced
|
||||||
|
* by the root page and copy it over the root page.
|
||||||
|
*/
|
||||||
|
root_pgno = cp->root;
|
||||||
|
if (pgno != root_pgno || nitems != 1)
|
||||||
|
return (0);
|
||||||
|
|
||||||
|
for (done = 0; !done;) {
|
||||||
|
/* Initialize. */
|
||||||
|
parent = child = NULL;
|
||||||
|
LOCK_INIT(p_lock);
|
||||||
|
LOCK_INIT(c_lock);
|
||||||
|
|
||||||
|
/* Lock the root. */
|
||||||
|
pgno = root_pgno;
|
||||||
|
if ((ret =
|
||||||
|
__db_lget(dbc, 0, pgno, DB_LOCK_WRITE, 0, &p_lock)) != 0)
|
||||||
|
goto stop;
|
||||||
|
if ((ret = __memp_fget(mpf, &pgno, dbc->thread_info, dbc->txn,
|
||||||
|
DB_MPOOL_DIRTY, &parent)) != 0)
|
||||||
|
goto stop;
|
||||||
|
|
||||||
|
if (NUM_ENT(parent) != 1)
|
||||||
|
goto stop;
|
||||||
|
|
||||||
|
switch (TYPE(parent)) {
|
||||||
|
case P_IBTREE:
|
||||||
|
/*
|
||||||
|
* If this is overflow, then try to delete it.
|
||||||
|
* The child may or may not still point at it.
|
||||||
|
*/
|
||||||
|
bi = GET_BINTERNAL(dbp, parent, 0);
|
||||||
|
if (B_TYPE(bi->type) == B_OVERFLOW)
|
||||||
|
if ((ret = __db_doff(dbc,
|
||||||
|
((BOVERFLOW *)bi->data)->pgno)) != 0)
|
||||||
|
goto stop;
|
||||||
|
pgno = bi->pgno;
|
||||||
|
break;
|
||||||
|
case P_IRECNO:
|
||||||
|
pgno = GET_RINTERNAL(dbp, parent, 0)->pgno;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
goto stop;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Lock the child page. */
|
||||||
|
if ((ret =
|
||||||
|
__db_lget(dbc, 0, pgno, DB_LOCK_WRITE, 0, &c_lock)) != 0)
|
||||||
|
goto stop;
|
||||||
|
if ((ret = __memp_fget(mpf, &pgno, dbc->thread_info, dbc->txn,
|
||||||
|
DB_MPOOL_DIRTY, &child)) != 0)
|
||||||
|
goto stop;
|
||||||
|
|
||||||
|
/* Log the change. */
|
||||||
|
if (DBC_LOGGING(dbc)) {
|
||||||
|
memset(&a, 0, sizeof(a));
|
||||||
|
a.data = child;
|
||||||
|
a.size = dbp->pgsize;
|
||||||
|
memset(&b, 0, sizeof(b));
|
||||||
|
b.data = P_ENTRY(dbp, parent, 0);
|
||||||
|
b.size = TYPE(parent) == P_IRECNO ? RINTERNAL_SIZE :
|
||||||
|
BINTERNAL_SIZE(((BINTERNAL *)b.data)->len);
|
||||||
|
if ((ret = __bam_rsplit_log(dbp, dbc->txn,
|
||||||
|
&child->lsn, 0, PGNO(child), &a, PGNO(parent),
|
||||||
|
RE_NREC(parent), &b, &parent->lsn)) != 0)
|
||||||
|
goto stop;
|
||||||
|
} else
|
||||||
|
LSN_NOT_LOGGED(child->lsn);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Make the switch.
|
||||||
|
*
|
||||||
|
* One fixup -- internal pages below the top level do not store
|
||||||
|
* a record count, so we have to preserve it if we're not
|
||||||
|
* converting to a leaf page. Note also that we are about to
|
||||||
|
* overwrite the parent page, including its LSN. This is OK
|
||||||
|
* because the log message we wrote describing this update
|
||||||
|
* stores its LSN on the child page. When the child is copied
|
||||||
|
* onto the parent, the correct LSN is copied into place.
|
||||||
|
*/
|
||||||
|
COMPQUIET(rcnt, 0);
|
||||||
|
if (F_ISSET(cp, C_RECNUM) && LEVEL(child) > LEAFLEVEL)
|
||||||
|
rcnt = RE_NREC(parent);
|
||||||
|
memcpy(parent, child, dbp->pgsize);
|
||||||
|
PGNO(parent) = root_pgno;
|
||||||
|
if (F_ISSET(cp, C_RECNUM) && LEVEL(child) > LEAFLEVEL)
|
||||||
|
RE_NREC_SET(parent, rcnt);
|
||||||
|
|
||||||
|
/* Adjust the cursors. */
|
||||||
|
if ((ret = __bam_ca_rsplit(dbc, PGNO(child), root_pgno)) != 0)
|
||||||
|
goto stop;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Free the page copied onto the root page and discard its
|
||||||
|
* lock. (The call to __db_free() discards our reference
|
||||||
|
* to the page.)
|
||||||
|
*/
|
||||||
|
if ((ret = __db_free(dbc, child)) != 0) {
|
||||||
|
child = NULL;
|
||||||
|
goto stop;
|
||||||
|
}
|
||||||
|
child = NULL;
|
||||||
|
|
||||||
|
if (0) {
|
||||||
|
stop: done = 1;
|
||||||
|
}
|
||||||
|
if ((t_ret = __TLPUT(dbc, p_lock)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
if (parent != NULL &&
|
||||||
|
(t_ret = __memp_fput(mpf, dbc->thread_info,
|
||||||
|
parent, dbc->priority)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
if ((t_ret = __TLPUT(dbc, c_lock)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
if (child != NULL &&
|
||||||
|
(t_ret = __memp_fput(mpf, dbc->thread_info,
|
||||||
|
child, dbc->priority)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_relink --
|
||||||
|
* Relink around a deleted page.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_relink __P((DBC *, PAGE *, db_pgno_t));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_relink(dbc, pagep, new_pgno)
|
||||||
|
DBC *dbc;
|
||||||
|
PAGE *pagep;
|
||||||
|
db_pgno_t new_pgno;
|
||||||
|
{
|
||||||
|
DB *dbp;
|
||||||
|
DB_LOCK npl, ppl;
|
||||||
|
DB_LSN *nlsnp, *plsnp, ret_lsn;
|
||||||
|
DB_MPOOLFILE *mpf;
|
||||||
|
PAGE *np, *pp;
|
||||||
|
int ret, t_ret;
|
||||||
|
|
||||||
|
dbp = dbc->dbp;
|
||||||
|
np = pp = NULL;
|
||||||
|
LOCK_INIT(npl);
|
||||||
|
LOCK_INIT(ppl);
|
||||||
|
nlsnp = plsnp = NULL;
|
||||||
|
mpf = dbp->mpf;
|
||||||
|
ret = 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Retrieve and lock the one/two pages. For a remove, we may need
|
||||||
|
* two pages (the before and after). For an add, we only need one
|
||||||
|
* because, the split took care of the prev.
|
||||||
|
*/
|
||||||
|
if (pagep->next_pgno != PGNO_INVALID) {
|
||||||
|
if ((ret = __db_lget(dbc,
|
||||||
|
0, pagep->next_pgno, DB_LOCK_WRITE, 0, &npl)) != 0)
|
||||||
|
goto err;
|
||||||
|
if ((ret = __memp_fget(mpf, &pagep->next_pgno,
|
||||||
|
dbc->thread_info, dbc->txn, DB_MPOOL_DIRTY, &np)) != 0) {
|
||||||
|
ret = __db_pgerr(dbp, pagep->next_pgno, ret);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
nlsnp = &np->lsn;
|
||||||
|
}
|
||||||
|
if (pagep->prev_pgno != PGNO_INVALID) {
|
||||||
|
if ((ret = __db_lget(dbc,
|
||||||
|
0, pagep->prev_pgno, DB_LOCK_WRITE, 0, &ppl)) != 0)
|
||||||
|
goto err;
|
||||||
|
if ((ret = __memp_fget(mpf, &pagep->prev_pgno,
|
||||||
|
dbc->thread_info, dbc->txn, DB_MPOOL_DIRTY, &pp)) != 0) {
|
||||||
|
ret = __db_pgerr(dbp, pagep->prev_pgno, ret);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
plsnp = &pp->lsn;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Log the change. */
|
||||||
|
if (DBC_LOGGING(dbc)) {
|
||||||
|
if ((ret = __bam_relink_log(dbp, dbc->txn, &ret_lsn, 0,
|
||||||
|
pagep->pgno, new_pgno, pagep->prev_pgno, plsnp,
|
||||||
|
pagep->next_pgno, nlsnp)) != 0)
|
||||||
|
goto err;
|
||||||
|
} else
|
||||||
|
LSN_NOT_LOGGED(ret_lsn);
|
||||||
|
if (np != NULL)
|
||||||
|
np->lsn = ret_lsn;
|
||||||
|
if (pp != NULL)
|
||||||
|
pp->lsn = ret_lsn;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Modify and release the two pages.
|
||||||
|
*/
|
||||||
|
if (np != NULL) {
|
||||||
|
if (new_pgno == PGNO_INVALID)
|
||||||
|
np->prev_pgno = pagep->prev_pgno;
|
||||||
|
else
|
||||||
|
np->prev_pgno = new_pgno;
|
||||||
|
ret = __memp_fput(mpf, dbc->thread_info, np, dbc->priority);
|
||||||
|
if ((t_ret = __TLPUT(dbc, npl)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
if (ret != 0)
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pp != NULL) {
|
||||||
|
if (new_pgno == PGNO_INVALID)
|
||||||
|
pp->next_pgno = pagep->next_pgno;
|
||||||
|
else
|
||||||
|
pp->next_pgno = new_pgno;
|
||||||
|
ret = __memp_fput(mpf, dbc->thread_info, pp, dbc->priority);
|
||||||
|
if ((t_ret = __TLPUT(dbc, ppl)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
if (ret != 0)
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
|
||||||
|
err: if (np != NULL)
|
||||||
|
(void)__memp_fput(mpf, dbc->thread_info, np, dbc->priority);
|
||||||
|
(void)__TLPUT(dbc, npl);
|
||||||
|
if (pp != NULL)
|
||||||
|
(void)__memp_fput(mpf, dbc->thread_info, pp, dbc->priority);
|
||||||
|
(void)__TLPUT(dbc, ppl);
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_pupdate --
|
||||||
|
* Update parent key pointers up the tree.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_pupdate __P((DBC *, PAGE *));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_pupdate(dbc, lpg)
|
||||||
|
DBC *dbc;
|
||||||
|
PAGE *lpg;
|
||||||
|
{
|
||||||
|
BTREE_CURSOR *cp;
|
||||||
|
ENV *env;
|
||||||
|
EPG *epg;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
env = dbc->env;
|
||||||
|
cp = (BTREE_CURSOR *)dbc->internal;
|
||||||
|
ret = 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Update the parents up the tree. __bam_pinsert only looks at the
|
||||||
|
* left child if is a leaf page, so we don't need to change it. We
|
||||||
|
* just do a delete and insert; a replace is possible but reusing
|
||||||
|
* pinsert is better.
|
||||||
|
*/
|
||||||
|
for (epg = &cp->csp[-1]; epg >= cp->sp; epg--) {
|
||||||
|
if ((ret = __memp_dirty(dbc->dbp->mpf, &epg->page,
|
||||||
|
dbc->thread_info, dbc->txn, dbc->priority, 0)) != 0)
|
||||||
|
return (ret);
|
||||||
|
if ((ret = __bam_ditem(dbc, epg->page, epg->indx)) != 0)
|
||||||
|
return (ret);
|
||||||
|
epg->indx--;
|
||||||
|
if ((ret = __bam_pinsert(dbc, epg, 0,
|
||||||
|
lpg, epg[1].page, BPI_NORECNUM)) != 0) {
|
||||||
|
if (ret == DB_NEEDSPLIT) {
|
||||||
|
/* This should not happen. */
|
||||||
|
__db_errx(env,
|
||||||
|
"Not enough room in parent: %s: page %lu",
|
||||||
|
dbc->dbp->fname, (u_long)PGNO(epg->page));
|
||||||
|
ret = __env_panic(env, EINVAL);
|
||||||
|
}
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
509
btree/bt_method.c
Normal file
509
btree/bt_method.c
Normal file
@@ -0,0 +1,509 @@
|
|||||||
|
/*-
|
||||||
|
* See the file LICENSE for redistribution information.
|
||||||
|
*
|
||||||
|
* Copyright (c) 1999,2008 Oracle. All rights reserved.
|
||||||
|
*
|
||||||
|
* $Id: bt_method.c 63573 2008-05-23 21:43:21Z trent.nelson $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "db_config.h"
|
||||||
|
|
||||||
|
#include "db_int.h"
|
||||||
|
#include "dbinc/db_page.h"
|
||||||
|
#include "dbinc/btree.h"
|
||||||
|
#include "dbinc/qam.h"
|
||||||
|
|
||||||
|
static int __bam_set_bt_minkey __P((DB *, u_int32_t));
|
||||||
|
static int __bam_set_bt_prefix
|
||||||
|
__P((DB *, size_t(*)(DB *, const DBT *, const DBT *)));
|
||||||
|
static int __ram_get_re_delim __P((DB *, int *));
|
||||||
|
static int __ram_set_re_delim __P((DB *, int));
|
||||||
|
static int __ram_set_re_len __P((DB *, u_int32_t));
|
||||||
|
static int __ram_set_re_pad __P((DB *, int));
|
||||||
|
static int __ram_get_re_source __P((DB *, const char **));
|
||||||
|
static int __ram_set_re_source __P((DB *, const char *));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_db_create --
|
||||||
|
* Btree specific initialization of the DB structure.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_db_create __P((DB *));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_db_create(dbp)
|
||||||
|
DB *dbp;
|
||||||
|
{
|
||||||
|
BTREE *t;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
/* Allocate and initialize the private btree structure. */
|
||||||
|
if ((ret = __os_calloc(dbp->env, 1, sizeof(BTREE), &t)) != 0)
|
||||||
|
return (ret);
|
||||||
|
dbp->bt_internal = t;
|
||||||
|
|
||||||
|
t->bt_minkey = DEFMINKEYPAGE; /* Btree */
|
||||||
|
t->bt_compare = __bam_defcmp;
|
||||||
|
t->bt_prefix = __bam_defpfx;
|
||||||
|
|
||||||
|
dbp->set_bt_compare = __bam_set_bt_compare;
|
||||||
|
dbp->get_bt_minkey = __bam_get_bt_minkey;
|
||||||
|
dbp->set_bt_minkey = __bam_set_bt_minkey;
|
||||||
|
dbp->set_bt_prefix = __bam_set_bt_prefix;
|
||||||
|
|
||||||
|
t->re_pad = ' '; /* Recno */
|
||||||
|
t->re_delim = '\n';
|
||||||
|
t->re_eof = 1;
|
||||||
|
|
||||||
|
dbp->get_re_delim = __ram_get_re_delim;
|
||||||
|
dbp->set_re_delim = __ram_set_re_delim;
|
||||||
|
dbp->get_re_len = __ram_get_re_len;
|
||||||
|
dbp->set_re_len = __ram_set_re_len;
|
||||||
|
dbp->get_re_pad = __ram_get_re_pad;
|
||||||
|
dbp->set_re_pad = __ram_set_re_pad;
|
||||||
|
dbp->get_re_source = __ram_get_re_source;
|
||||||
|
dbp->set_re_source = __ram_set_re_source;
|
||||||
|
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_db_close --
|
||||||
|
* Btree specific discard of the DB structure.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_db_close __P((DB *));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_db_close(dbp)
|
||||||
|
DB *dbp;
|
||||||
|
{
|
||||||
|
BTREE *t;
|
||||||
|
|
||||||
|
if ((t = dbp->bt_internal) == NULL)
|
||||||
|
return (0);
|
||||||
|
/* Recno */
|
||||||
|
/* Close any backing source file descriptor. */
|
||||||
|
if (t->re_fp != NULL)
|
||||||
|
(void)fclose(t->re_fp);
|
||||||
|
|
||||||
|
/* Free any backing source file name. */
|
||||||
|
if (t->re_source != NULL)
|
||||||
|
__os_free(dbp->env, t->re_source);
|
||||||
|
|
||||||
|
__os_free(dbp->env, t);
|
||||||
|
dbp->bt_internal = NULL;
|
||||||
|
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_map_flags --
|
||||||
|
* Map Btree specific flags from public to the internal values.
|
||||||
|
*
|
||||||
|
* PUBLIC: void __bam_map_flags __P((DB *, u_int32_t *, u_int32_t *));
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
__bam_map_flags(dbp, inflagsp, outflagsp)
|
||||||
|
DB *dbp;
|
||||||
|
u_int32_t *inflagsp, *outflagsp;
|
||||||
|
{
|
||||||
|
COMPQUIET(dbp, NULL);
|
||||||
|
|
||||||
|
if (FLD_ISSET(*inflagsp, DB_DUP)) {
|
||||||
|
FLD_SET(*outflagsp, DB_AM_DUP);
|
||||||
|
FLD_CLR(*inflagsp, DB_DUP);
|
||||||
|
}
|
||||||
|
if (FLD_ISSET(*inflagsp, DB_DUPSORT)) {
|
||||||
|
FLD_SET(*outflagsp, DB_AM_DUP | DB_AM_DUPSORT);
|
||||||
|
FLD_CLR(*inflagsp, DB_DUPSORT);
|
||||||
|
}
|
||||||
|
if (FLD_ISSET(*inflagsp, DB_RECNUM)) {
|
||||||
|
FLD_SET(*outflagsp, DB_AM_RECNUM);
|
||||||
|
FLD_CLR(*inflagsp, DB_RECNUM);
|
||||||
|
}
|
||||||
|
if (FLD_ISSET(*inflagsp, DB_REVSPLITOFF)) {
|
||||||
|
FLD_SET(*outflagsp, DB_AM_REVSPLITOFF);
|
||||||
|
FLD_CLR(*inflagsp, DB_REVSPLITOFF);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_set_flags --
|
||||||
|
* Set Btree specific flags.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_set_flags __P((DB *, u_int32_t *flagsp));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_set_flags(dbp, flagsp)
|
||||||
|
DB *dbp;
|
||||||
|
u_int32_t *flagsp;
|
||||||
|
{
|
||||||
|
u_int32_t flags;
|
||||||
|
|
||||||
|
flags = *flagsp;
|
||||||
|
if (LF_ISSET(DB_DUP | DB_DUPSORT | DB_RECNUM | DB_REVSPLITOFF))
|
||||||
|
DB_ILLEGAL_AFTER_OPEN(dbp, "DB->set_flags");
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The DB_DUP and DB_DUPSORT flags are shared by the Hash
|
||||||
|
* and Btree access methods.
|
||||||
|
*/
|
||||||
|
if (LF_ISSET(DB_DUP | DB_DUPSORT))
|
||||||
|
DB_ILLEGAL_METHOD(dbp, DB_OK_BTREE | DB_OK_HASH);
|
||||||
|
|
||||||
|
if (LF_ISSET(DB_RECNUM | DB_REVSPLITOFF))
|
||||||
|
DB_ILLEGAL_METHOD(dbp, DB_OK_BTREE);
|
||||||
|
|
||||||
|
/* DB_DUP/DB_DUPSORT is incompatible with DB_RECNUM. */
|
||||||
|
if (LF_ISSET(DB_DUP | DB_DUPSORT) && F_ISSET(dbp, DB_AM_RECNUM))
|
||||||
|
goto incompat;
|
||||||
|
|
||||||
|
/* DB_RECNUM is incompatible with DB_DUP/DB_DUPSORT. */
|
||||||
|
if (LF_ISSET(DB_RECNUM) && F_ISSET(dbp, DB_AM_DUP))
|
||||||
|
goto incompat;
|
||||||
|
|
||||||
|
if (LF_ISSET(DB_DUPSORT) && dbp->dup_compare == NULL)
|
||||||
|
dbp->dup_compare = __bam_defcmp;
|
||||||
|
|
||||||
|
__bam_map_flags(dbp, flagsp, &dbp->flags);
|
||||||
|
return (0);
|
||||||
|
|
||||||
|
incompat:
|
||||||
|
return (__db_ferr(dbp->env, "DB->set_flags", 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_set_bt_compare --
|
||||||
|
* Set the comparison function.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_set_bt_compare
|
||||||
|
* PUBLIC: __P((DB *, int (*)(DB *, const DBT *, const DBT *)));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_set_bt_compare(dbp, func)
|
||||||
|
DB *dbp;
|
||||||
|
int (*func) __P((DB *, const DBT *, const DBT *));
|
||||||
|
{
|
||||||
|
BTREE *t;
|
||||||
|
|
||||||
|
DB_ILLEGAL_AFTER_OPEN(dbp, "DB->set_bt_compare");
|
||||||
|
DB_ILLEGAL_METHOD(dbp, DB_OK_BTREE);
|
||||||
|
|
||||||
|
t = dbp->bt_internal;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Can't default the prefix routine if the user supplies a comparison
|
||||||
|
* routine; shortening the keys can break their comparison algorithm.
|
||||||
|
*/
|
||||||
|
t->bt_compare = func;
|
||||||
|
if (t->bt_prefix == __bam_defpfx)
|
||||||
|
t->bt_prefix = NULL;
|
||||||
|
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __db_get_bt_minkey --
|
||||||
|
* Get the minimum keys per page.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_get_bt_minkey __P((DB *, u_int32_t *));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_get_bt_minkey(dbp, bt_minkeyp)
|
||||||
|
DB *dbp;
|
||||||
|
u_int32_t *bt_minkeyp;
|
||||||
|
{
|
||||||
|
BTREE *t;
|
||||||
|
|
||||||
|
DB_ILLEGAL_METHOD(dbp, DB_OK_BTREE);
|
||||||
|
|
||||||
|
t = dbp->bt_internal;
|
||||||
|
*bt_minkeyp = t->bt_minkey;
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_set_bt_minkey --
|
||||||
|
* Set the minimum keys per page.
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
__bam_set_bt_minkey(dbp, bt_minkey)
|
||||||
|
DB *dbp;
|
||||||
|
u_int32_t bt_minkey;
|
||||||
|
{
|
||||||
|
BTREE *t;
|
||||||
|
|
||||||
|
DB_ILLEGAL_AFTER_OPEN(dbp, "DB->set_bt_minkey");
|
||||||
|
DB_ILLEGAL_METHOD(dbp, DB_OK_BTREE);
|
||||||
|
|
||||||
|
t = dbp->bt_internal;
|
||||||
|
|
||||||
|
if (bt_minkey < 2) {
|
||||||
|
__db_errx(dbp->env, "minimum bt_minkey value is 2");
|
||||||
|
return (EINVAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
t->bt_minkey = bt_minkey;
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_set_bt_prefix --
|
||||||
|
* Set the prefix function.
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
__bam_set_bt_prefix(dbp, func)
|
||||||
|
DB *dbp;
|
||||||
|
size_t (*func) __P((DB *, const DBT *, const DBT *));
|
||||||
|
{
|
||||||
|
BTREE *t;
|
||||||
|
|
||||||
|
DB_ILLEGAL_AFTER_OPEN(dbp, "DB->set_bt_prefix");
|
||||||
|
DB_ILLEGAL_METHOD(dbp, DB_OK_BTREE);
|
||||||
|
|
||||||
|
t = dbp->bt_internal;
|
||||||
|
|
||||||
|
t->bt_prefix = func;
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __ram_map_flags --
|
||||||
|
* Map Recno specific flags from public to the internal values.
|
||||||
|
*
|
||||||
|
* PUBLIC: void __ram_map_flags __P((DB *, u_int32_t *, u_int32_t *));
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
__ram_map_flags(dbp, inflagsp, outflagsp)
|
||||||
|
DB *dbp;
|
||||||
|
u_int32_t *inflagsp, *outflagsp;
|
||||||
|
{
|
||||||
|
COMPQUIET(dbp, NULL);
|
||||||
|
|
||||||
|
if (FLD_ISSET(*inflagsp, DB_RENUMBER)) {
|
||||||
|
FLD_SET(*outflagsp, DB_AM_RENUMBER);
|
||||||
|
FLD_CLR(*inflagsp, DB_RENUMBER);
|
||||||
|
}
|
||||||
|
if (FLD_ISSET(*inflagsp, DB_SNAPSHOT)) {
|
||||||
|
FLD_SET(*outflagsp, DB_AM_SNAPSHOT);
|
||||||
|
FLD_CLR(*inflagsp, DB_SNAPSHOT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __ram_set_flags --
|
||||||
|
* Set Recno specific flags.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __ram_set_flags __P((DB *, u_int32_t *flagsp));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__ram_set_flags(dbp, flagsp)
|
||||||
|
DB *dbp;
|
||||||
|
u_int32_t *flagsp;
|
||||||
|
{
|
||||||
|
u_int32_t flags;
|
||||||
|
|
||||||
|
flags = *flagsp;
|
||||||
|
if (LF_ISSET(DB_RENUMBER | DB_SNAPSHOT)) {
|
||||||
|
DB_ILLEGAL_AFTER_OPEN(dbp, "DB->set_flags");
|
||||||
|
DB_ILLEGAL_METHOD(dbp, DB_OK_RECNO);
|
||||||
|
}
|
||||||
|
|
||||||
|
__ram_map_flags(dbp, flagsp, &dbp->flags);
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __db_get_re_delim --
|
||||||
|
* Get the variable-length input record delimiter.
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
__ram_get_re_delim(dbp, re_delimp)
|
||||||
|
DB *dbp;
|
||||||
|
int *re_delimp;
|
||||||
|
{
|
||||||
|
BTREE *t;
|
||||||
|
|
||||||
|
DB_ILLEGAL_METHOD(dbp, DB_OK_RECNO);
|
||||||
|
t = dbp->bt_internal;
|
||||||
|
*re_delimp = t->re_delim;
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __ram_set_re_delim --
|
||||||
|
* Set the variable-length input record delimiter.
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
__ram_set_re_delim(dbp, re_delim)
|
||||||
|
DB *dbp;
|
||||||
|
int re_delim;
|
||||||
|
{
|
||||||
|
BTREE *t;
|
||||||
|
|
||||||
|
DB_ILLEGAL_AFTER_OPEN(dbp, "DB->set_re_delim");
|
||||||
|
DB_ILLEGAL_METHOD(dbp, DB_OK_RECNO);
|
||||||
|
|
||||||
|
t = dbp->bt_internal;
|
||||||
|
|
||||||
|
t->re_delim = re_delim;
|
||||||
|
F_SET(dbp, DB_AM_DELIMITER);
|
||||||
|
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __db_get_re_len --
|
||||||
|
* Get the variable-length input record length.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __ram_get_re_len __P((DB *, u_int32_t *));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__ram_get_re_len(dbp, re_lenp)
|
||||||
|
DB *dbp;
|
||||||
|
u_int32_t *re_lenp;
|
||||||
|
{
|
||||||
|
BTREE *t;
|
||||||
|
QUEUE *q;
|
||||||
|
|
||||||
|
DB_ILLEGAL_METHOD(dbp, DB_OK_QUEUE | DB_OK_RECNO);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This has to work for all access methods, before or after opening the
|
||||||
|
* database. When the record length is set with __ram_set_re_len, the
|
||||||
|
* value in both the BTREE and QUEUE structs will be correct.
|
||||||
|
* Otherwise, this only makes sense after the database in opened, in
|
||||||
|
* which case we know the type.
|
||||||
|
*/
|
||||||
|
if (dbp->type == DB_QUEUE) {
|
||||||
|
q = dbp->q_internal;
|
||||||
|
*re_lenp = q->re_len;
|
||||||
|
} else {
|
||||||
|
t = dbp->bt_internal;
|
||||||
|
*re_lenp = t->re_len;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __ram_set_re_len --
|
||||||
|
* Set the variable-length input record length.
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
__ram_set_re_len(dbp, re_len)
|
||||||
|
DB *dbp;
|
||||||
|
u_int32_t re_len;
|
||||||
|
{
|
||||||
|
BTREE *t;
|
||||||
|
QUEUE *q;
|
||||||
|
|
||||||
|
DB_ILLEGAL_AFTER_OPEN(dbp, "DB->set_re_len");
|
||||||
|
DB_ILLEGAL_METHOD(dbp, DB_OK_QUEUE | DB_OK_RECNO);
|
||||||
|
|
||||||
|
t = dbp->bt_internal;
|
||||||
|
t->re_len = re_len;
|
||||||
|
|
||||||
|
q = dbp->q_internal;
|
||||||
|
q->re_len = re_len;
|
||||||
|
|
||||||
|
F_SET(dbp, DB_AM_FIXEDLEN);
|
||||||
|
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __db_get_re_pad --
|
||||||
|
* Get the fixed-length record pad character.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __ram_get_re_pad __P((DB *, int *));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__ram_get_re_pad(dbp, re_padp)
|
||||||
|
DB *dbp;
|
||||||
|
int *re_padp;
|
||||||
|
{
|
||||||
|
BTREE *t;
|
||||||
|
QUEUE *q;
|
||||||
|
|
||||||
|
DB_ILLEGAL_METHOD(dbp, DB_OK_QUEUE | DB_OK_RECNO);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This has to work for all access methods, before or after opening the
|
||||||
|
* database. When the record length is set with __ram_set_re_pad, the
|
||||||
|
* value in both the BTREE and QUEUE structs will be correct.
|
||||||
|
* Otherwise, this only makes sense after the database in opened, in
|
||||||
|
* which case we know the type.
|
||||||
|
*/
|
||||||
|
if (dbp->type == DB_QUEUE) {
|
||||||
|
q = dbp->q_internal;
|
||||||
|
*re_padp = q->re_pad;
|
||||||
|
} else {
|
||||||
|
t = dbp->bt_internal;
|
||||||
|
*re_padp = t->re_pad;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __ram_set_re_pad --
|
||||||
|
* Set the fixed-length record pad character.
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
__ram_set_re_pad(dbp, re_pad)
|
||||||
|
DB *dbp;
|
||||||
|
int re_pad;
|
||||||
|
{
|
||||||
|
BTREE *t;
|
||||||
|
QUEUE *q;
|
||||||
|
|
||||||
|
DB_ILLEGAL_AFTER_OPEN(dbp, "DB->set_re_pad");
|
||||||
|
DB_ILLEGAL_METHOD(dbp, DB_OK_QUEUE | DB_OK_RECNO);
|
||||||
|
|
||||||
|
t = dbp->bt_internal;
|
||||||
|
t->re_pad = re_pad;
|
||||||
|
|
||||||
|
q = dbp->q_internal;
|
||||||
|
q->re_pad = re_pad;
|
||||||
|
|
||||||
|
F_SET(dbp, DB_AM_PAD);
|
||||||
|
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __db_get_re_source --
|
||||||
|
* Get the backing source file name.
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
__ram_get_re_source(dbp, re_sourcep)
|
||||||
|
DB *dbp;
|
||||||
|
const char **re_sourcep;
|
||||||
|
{
|
||||||
|
BTREE *t;
|
||||||
|
|
||||||
|
DB_ILLEGAL_METHOD(dbp, DB_OK_RECNO);
|
||||||
|
|
||||||
|
t = dbp->bt_internal;
|
||||||
|
*re_sourcep = t->re_source;
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __ram_set_re_source --
|
||||||
|
* Set the backing source file name.
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
__ram_set_re_source(dbp, re_source)
|
||||||
|
DB *dbp;
|
||||||
|
const char *re_source;
|
||||||
|
{
|
||||||
|
BTREE *t;
|
||||||
|
|
||||||
|
DB_ILLEGAL_AFTER_OPEN(dbp, "DB->set_re_source");
|
||||||
|
DB_ILLEGAL_METHOD(dbp, DB_OK_RECNO);
|
||||||
|
|
||||||
|
t = dbp->bt_internal;
|
||||||
|
|
||||||
|
return (__os_strdup(dbp->env, re_source, &t->re_source));
|
||||||
|
}
|
||||||
621
btree/bt_open.c
Normal file
621
btree/bt_open.c
Normal file
@@ -0,0 +1,621 @@
|
|||||||
|
/*-
|
||||||
|
* See the file LICENSE for redistribution information.
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996,2008 Oracle. All rights reserved.
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1990, 1993, 1994, 1995, 1996
|
||||||
|
* Keith Bostic. All rights reserved.
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1990, 1993, 1994, 1995
|
||||||
|
* The Regents of the University of California. All rights reserved.
|
||||||
|
*
|
||||||
|
* This code is derived from software contributed to Berkeley by
|
||||||
|
* Mike Olson.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 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. 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.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* $Id: bt_open.c 63573 2008-05-23 21:43:21Z trent.nelson $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "db_config.h"
|
||||||
|
|
||||||
|
#include "db_int.h"
|
||||||
|
#include "dbinc/crypto.h"
|
||||||
|
#include "dbinc/db_page.h"
|
||||||
|
#include "dbinc/db_swap.h"
|
||||||
|
#include "dbinc/btree.h"
|
||||||
|
#include "dbinc/lock.h"
|
||||||
|
#include "dbinc/log.h"
|
||||||
|
#include "dbinc/mp.h"
|
||||||
|
#include "dbinc/fop.h"
|
||||||
|
|
||||||
|
static void __bam_init_meta __P((DB *, BTMETA *, db_pgno_t, DB_LSN *));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_open --
|
||||||
|
* Open a btree.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_open __P((DB *, DB_THREAD_INFO *,
|
||||||
|
* PUBLIC: DB_TXN *, const char *, db_pgno_t, u_int32_t));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_open(dbp, ip, txn, name, base_pgno, flags)
|
||||||
|
DB *dbp;
|
||||||
|
DB_THREAD_INFO *ip;
|
||||||
|
DB_TXN *txn;
|
||||||
|
const char *name;
|
||||||
|
db_pgno_t base_pgno;
|
||||||
|
u_int32_t flags;
|
||||||
|
{
|
||||||
|
BTREE *t;
|
||||||
|
|
||||||
|
COMPQUIET(name, NULL);
|
||||||
|
t = dbp->bt_internal;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We don't permit the user to specify a prefix routine if they didn't
|
||||||
|
* also specify a comparison routine, they can't know enough about our
|
||||||
|
* comparison routine to get it right.
|
||||||
|
*/
|
||||||
|
if (t->bt_compare == __bam_defcmp && t->bt_prefix != __bam_defpfx) {
|
||||||
|
__db_errx(dbp->env,
|
||||||
|
"prefix comparison may not be specified for default comparison routine");
|
||||||
|
return (EINVAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Verify that the bt_minkey value specified won't cause the
|
||||||
|
* calculation of ovflsize to underflow [#2406] for this pagesize.
|
||||||
|
*/
|
||||||
|
if (B_MINKEY_TO_OVFLSIZE(dbp, t->bt_minkey, dbp->pgsize) >
|
||||||
|
B_MINKEY_TO_OVFLSIZE(dbp, DEFMINKEYPAGE, dbp->pgsize)) {
|
||||||
|
__db_errx(dbp->env,
|
||||||
|
"bt_minkey value of %lu too high for page size of %lu",
|
||||||
|
(u_long)t->bt_minkey, (u_long)dbp->pgsize);
|
||||||
|
return (EINVAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Start up the tree. */
|
||||||
|
return (__bam_read_root(dbp, ip, txn, base_pgno, flags));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_metachk --
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_metachk __P((DB *, const char *, BTMETA *));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_metachk(dbp, name, btm)
|
||||||
|
DB *dbp;
|
||||||
|
const char *name;
|
||||||
|
BTMETA *btm;
|
||||||
|
{
|
||||||
|
ENV *env;
|
||||||
|
u_int32_t vers;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
env = dbp->env;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* At this point, all we know is that the magic number is for a Btree.
|
||||||
|
* Check the version, the database may be out of date.
|
||||||
|
*/
|
||||||
|
vers = btm->dbmeta.version;
|
||||||
|
if (F_ISSET(dbp, DB_AM_SWAP))
|
||||||
|
M_32_SWAP(vers);
|
||||||
|
switch (vers) {
|
||||||
|
case 6:
|
||||||
|
case 7:
|
||||||
|
__db_errx(env,
|
||||||
|
"%s: btree version %lu requires a version upgrade",
|
||||||
|
name, (u_long)vers);
|
||||||
|
return (DB_OLD_VERSION);
|
||||||
|
case 8:
|
||||||
|
case 9:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
__db_errx(env,
|
||||||
|
"%s: unsupported btree version: %lu", name, (u_long)vers);
|
||||||
|
return (EINVAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Swap the page if we need to. */
|
||||||
|
if (F_ISSET(dbp, DB_AM_SWAP) &&
|
||||||
|
(ret = __bam_mswap(env, (PAGE *)btm)) != 0)
|
||||||
|
return (ret);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check application info against metadata info, and set info, flags,
|
||||||
|
* and type based on metadata info.
|
||||||
|
*/
|
||||||
|
if ((ret =
|
||||||
|
__db_fchk(env, "DB->open", btm->dbmeta.flags, BTM_MASK)) != 0)
|
||||||
|
return (ret);
|
||||||
|
|
||||||
|
if (F_ISSET(&btm->dbmeta, BTM_RECNO)) {
|
||||||
|
if (dbp->type == DB_BTREE)
|
||||||
|
goto wrong_type;
|
||||||
|
dbp->type = DB_RECNO;
|
||||||
|
DB_ILLEGAL_METHOD(dbp, DB_OK_RECNO);
|
||||||
|
} else {
|
||||||
|
if (dbp->type == DB_RECNO)
|
||||||
|
goto wrong_type;
|
||||||
|
dbp->type = DB_BTREE;
|
||||||
|
DB_ILLEGAL_METHOD(dbp, DB_OK_BTREE);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (F_ISSET(&btm->dbmeta, BTM_DUP))
|
||||||
|
F_SET(dbp, DB_AM_DUP);
|
||||||
|
else
|
||||||
|
if (F_ISSET(dbp, DB_AM_DUP)) {
|
||||||
|
__db_errx(env,
|
||||||
|
"%s: DB_DUP specified to open method but not set in database",
|
||||||
|
name);
|
||||||
|
return (EINVAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (F_ISSET(&btm->dbmeta, BTM_RECNUM)) {
|
||||||
|
if (dbp->type != DB_BTREE)
|
||||||
|
goto wrong_type;
|
||||||
|
F_SET(dbp, DB_AM_RECNUM);
|
||||||
|
|
||||||
|
if ((ret = __db_fcchk(env,
|
||||||
|
"DB->open", dbp->flags, DB_AM_DUP, DB_AM_RECNUM)) != 0)
|
||||||
|
return (ret);
|
||||||
|
} else
|
||||||
|
if (F_ISSET(dbp, DB_AM_RECNUM)) {
|
||||||
|
__db_errx(env,
|
||||||
|
"%s: DB_RECNUM specified to open method but not set in database",
|
||||||
|
name);
|
||||||
|
return (EINVAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (F_ISSET(&btm->dbmeta, BTM_FIXEDLEN)) {
|
||||||
|
if (dbp->type != DB_RECNO)
|
||||||
|
goto wrong_type;
|
||||||
|
F_SET(dbp, DB_AM_FIXEDLEN);
|
||||||
|
} else
|
||||||
|
if (F_ISSET(dbp, DB_AM_FIXEDLEN)) {
|
||||||
|
__db_errx(env,
|
||||||
|
"%s: DB_FIXEDLEN specified to open method but not set in database",
|
||||||
|
name);
|
||||||
|
return (EINVAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (F_ISSET(&btm->dbmeta, BTM_RENUMBER)) {
|
||||||
|
if (dbp->type != DB_RECNO)
|
||||||
|
goto wrong_type;
|
||||||
|
F_SET(dbp, DB_AM_RENUMBER);
|
||||||
|
} else
|
||||||
|
if (F_ISSET(dbp, DB_AM_RENUMBER)) {
|
||||||
|
__db_errx(env,
|
||||||
|
"%s: DB_RENUMBER specified to open method but not set in database",
|
||||||
|
name);
|
||||||
|
return (EINVAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (F_ISSET(&btm->dbmeta, BTM_SUBDB))
|
||||||
|
F_SET(dbp, DB_AM_SUBDB);
|
||||||
|
else
|
||||||
|
if (F_ISSET(dbp, DB_AM_SUBDB)) {
|
||||||
|
__db_errx(env,
|
||||||
|
"%s: multiple databases specified but not supported by file",
|
||||||
|
name);
|
||||||
|
return (EINVAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (F_ISSET(&btm->dbmeta, BTM_DUPSORT)) {
|
||||||
|
if (dbp->dup_compare == NULL)
|
||||||
|
dbp->dup_compare = __bam_defcmp;
|
||||||
|
F_SET(dbp, DB_AM_DUPSORT);
|
||||||
|
} else
|
||||||
|
if (dbp->dup_compare != NULL) {
|
||||||
|
__db_errx(env,
|
||||||
|
"%s: duplicate sort specified but not supported in database",
|
||||||
|
name);
|
||||||
|
return (EINVAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set the page size. */
|
||||||
|
dbp->pgsize = btm->dbmeta.pagesize;
|
||||||
|
|
||||||
|
/* Copy the file's ID. */
|
||||||
|
memcpy(dbp->fileid, btm->dbmeta.uid, DB_FILE_ID_LEN);
|
||||||
|
|
||||||
|
return (0);
|
||||||
|
|
||||||
|
wrong_type:
|
||||||
|
if (dbp->type == DB_BTREE)
|
||||||
|
__db_errx(env,
|
||||||
|
"open method type is Btree, database type is Recno");
|
||||||
|
else
|
||||||
|
__db_errx(env,
|
||||||
|
"open method type is Recno, database type is Btree");
|
||||||
|
return (EINVAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_read_root --
|
||||||
|
* Read the root page and check a tree.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_read_root __P((DB *,
|
||||||
|
* PUBLIC: DB_THREAD_INFO *, DB_TXN *, db_pgno_t, u_int32_t));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_read_root(dbp, ip, txn, base_pgno, flags)
|
||||||
|
DB *dbp;
|
||||||
|
DB_THREAD_INFO *ip;
|
||||||
|
DB_TXN *txn;
|
||||||
|
db_pgno_t base_pgno;
|
||||||
|
u_int32_t flags;
|
||||||
|
{
|
||||||
|
BTMETA *meta;
|
||||||
|
BTREE *t;
|
||||||
|
DBC *dbc;
|
||||||
|
DB_LOCK metalock;
|
||||||
|
DB_MPOOLFILE *mpf;
|
||||||
|
int ret, t_ret;
|
||||||
|
|
||||||
|
COMPQUIET(flags, 0);
|
||||||
|
|
||||||
|
meta = NULL;
|
||||||
|
t = dbp->bt_internal;
|
||||||
|
LOCK_INIT(metalock);
|
||||||
|
mpf = dbp->mpf;
|
||||||
|
ret = 0;
|
||||||
|
|
||||||
|
/* Get a cursor. */
|
||||||
|
if ((ret = __db_cursor(dbp, ip, txn, &dbc, 0)) != 0)
|
||||||
|
return (ret);
|
||||||
|
|
||||||
|
/* Get the metadata page. */
|
||||||
|
if ((ret =
|
||||||
|
__db_lget(dbc, 0, base_pgno, DB_LOCK_READ, 0, &metalock)) != 0)
|
||||||
|
goto err;
|
||||||
|
if ((ret = __memp_fget(mpf, &base_pgno, ip, dbc->txn, 0, &meta)) != 0)
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If the magic number is set, the tree has been created. Correct
|
||||||
|
* any fields that may not be right. Note, all of the local flags
|
||||||
|
* were set by DB->open.
|
||||||
|
*
|
||||||
|
* Otherwise, we'd better be in recovery or abort, in which case the
|
||||||
|
* metadata page will be created/initialized elsewhere.
|
||||||
|
*/
|
||||||
|
if (meta->dbmeta.magic == DB_BTREEMAGIC) {
|
||||||
|
t->bt_minkey = meta->minkey;
|
||||||
|
t->re_pad = (int)meta->re_pad;
|
||||||
|
t->re_len = meta->re_len;
|
||||||
|
|
||||||
|
t->bt_meta = base_pgno;
|
||||||
|
t->bt_root = meta->root;
|
||||||
|
if (PGNO(meta) == PGNO_BASE_MD && !F_ISSET(dbp, DB_AM_RECOVER))
|
||||||
|
__memp_set_last_pgno(mpf, meta->dbmeta.last_pgno);
|
||||||
|
} else {
|
||||||
|
DB_ASSERT(dbp->env,
|
||||||
|
IS_RECOVERING(dbp->env) || F_ISSET(dbp, DB_AM_RECOVER));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* !!!
|
||||||
|
* If creating a subdatabase, we've already done an insert when
|
||||||
|
* we put the subdatabase's entry into the master database, so
|
||||||
|
* our last-page-inserted value is wrongly initialized for the
|
||||||
|
* master database, not the subdatabase we're creating. I'm not
|
||||||
|
* sure where the *right* place to clear this value is, it's not
|
||||||
|
* intuitively obvious that it belongs here.
|
||||||
|
*/
|
||||||
|
t->bt_lpgno = PGNO_INVALID;
|
||||||
|
|
||||||
|
err: /* Put the metadata page back. */
|
||||||
|
if (meta != NULL && (t_ret = __memp_fput(mpf,
|
||||||
|
ip, meta, dbc->priority)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
if ((t_ret = __LPUT(dbc, metalock)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
|
||||||
|
if ((t_ret = __dbc_close(dbc)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_init_meta --
|
||||||
|
*
|
||||||
|
* Initialize a btree meta-data page. The following fields may need
|
||||||
|
* to be updated later: last_pgno, root.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
__bam_init_meta(dbp, meta, pgno, lsnp)
|
||||||
|
DB *dbp;
|
||||||
|
BTMETA *meta;
|
||||||
|
db_pgno_t pgno;
|
||||||
|
DB_LSN *lsnp;
|
||||||
|
{
|
||||||
|
BTREE *t;
|
||||||
|
ENV *env;
|
||||||
|
|
||||||
|
env = dbp->env;
|
||||||
|
t = dbp->bt_internal;
|
||||||
|
|
||||||
|
memset(meta, 0, sizeof(BTMETA));
|
||||||
|
meta->dbmeta.lsn = *lsnp;
|
||||||
|
meta->dbmeta.pgno = pgno;
|
||||||
|
meta->dbmeta.magic = DB_BTREEMAGIC;
|
||||||
|
meta->dbmeta.version = DB_BTREEVERSION;
|
||||||
|
meta->dbmeta.pagesize = dbp->pgsize;
|
||||||
|
if (F_ISSET(dbp, DB_AM_CHKSUM))
|
||||||
|
FLD_SET(meta->dbmeta.metaflags, DBMETA_CHKSUM);
|
||||||
|
if (F_ISSET(dbp, DB_AM_ENCRYPT)) {
|
||||||
|
meta->dbmeta.encrypt_alg = env->crypto_handle->alg;
|
||||||
|
DB_ASSERT(env, meta->dbmeta.encrypt_alg != 0);
|
||||||
|
meta->crypto_magic = meta->dbmeta.magic;
|
||||||
|
}
|
||||||
|
meta->dbmeta.type = P_BTREEMETA;
|
||||||
|
meta->dbmeta.free = PGNO_INVALID;
|
||||||
|
meta->dbmeta.last_pgno = pgno;
|
||||||
|
if (F_ISSET(dbp, DB_AM_DUP))
|
||||||
|
F_SET(&meta->dbmeta, BTM_DUP);
|
||||||
|
if (F_ISSET(dbp, DB_AM_FIXEDLEN))
|
||||||
|
F_SET(&meta->dbmeta, BTM_FIXEDLEN);
|
||||||
|
if (F_ISSET(dbp, DB_AM_RECNUM))
|
||||||
|
F_SET(&meta->dbmeta, BTM_RECNUM);
|
||||||
|
if (F_ISSET(dbp, DB_AM_RENUMBER))
|
||||||
|
F_SET(&meta->dbmeta, BTM_RENUMBER);
|
||||||
|
if (F_ISSET(dbp, DB_AM_SUBDB))
|
||||||
|
F_SET(&meta->dbmeta, BTM_SUBDB);
|
||||||
|
if (dbp->dup_compare != NULL)
|
||||||
|
F_SET(&meta->dbmeta, BTM_DUPSORT);
|
||||||
|
if (dbp->type == DB_RECNO)
|
||||||
|
F_SET(&meta->dbmeta, BTM_RECNO);
|
||||||
|
memcpy(meta->dbmeta.uid, dbp->fileid, DB_FILE_ID_LEN);
|
||||||
|
|
||||||
|
meta->minkey = t->bt_minkey;
|
||||||
|
meta->re_len = t->re_len;
|
||||||
|
meta->re_pad = (u_int32_t)t->re_pad;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_new_file --
|
||||||
|
* Create the necessary pages to begin a new database file.
|
||||||
|
*
|
||||||
|
* This code appears more complex than it is because of the two cases (named
|
||||||
|
* and unnamed). The way to read the code is that for each page being created,
|
||||||
|
* there are three parts: 1) a "get page" chunk (which either uses malloc'd
|
||||||
|
* memory or calls __memp_fget), 2) the initialization, and 3) the "put page"
|
||||||
|
* chunk which either does a fop write or an __memp_fput.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_new_file __P((DB *,
|
||||||
|
* PUBLIC: DB_THREAD_INFO *, DB_TXN *, DB_FH *, const char *));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_new_file(dbp, ip, txn, fhp, name)
|
||||||
|
DB *dbp;
|
||||||
|
DB_THREAD_INFO *ip;
|
||||||
|
DB_TXN *txn;
|
||||||
|
DB_FH *fhp;
|
||||||
|
const char *name;
|
||||||
|
{
|
||||||
|
BTMETA *meta;
|
||||||
|
DBT pdbt;
|
||||||
|
DB_LSN lsn;
|
||||||
|
DB_MPOOLFILE *mpf;
|
||||||
|
DB_PGINFO pginfo;
|
||||||
|
ENV *env;
|
||||||
|
PAGE *root;
|
||||||
|
db_pgno_t pgno;
|
||||||
|
int ret, t_ret;
|
||||||
|
void *buf;
|
||||||
|
|
||||||
|
env = dbp->env;
|
||||||
|
mpf = dbp->mpf;
|
||||||
|
root = NULL;
|
||||||
|
meta = NULL;
|
||||||
|
buf = NULL;
|
||||||
|
|
||||||
|
if (F_ISSET(dbp, DB_AM_INMEM)) {
|
||||||
|
/* Build the meta-data page. */
|
||||||
|
pgno = PGNO_BASE_MD;
|
||||||
|
if ((ret = __memp_fget(mpf, &pgno, ip, txn,
|
||||||
|
DB_MPOOL_CREATE | DB_MPOOL_DIRTY, &meta)) != 0)
|
||||||
|
return (ret);
|
||||||
|
LSN_NOT_LOGGED(lsn);
|
||||||
|
__bam_init_meta(dbp, meta, PGNO_BASE_MD, &lsn);
|
||||||
|
meta->root = 1;
|
||||||
|
meta->dbmeta.last_pgno = 1;
|
||||||
|
if ((ret =
|
||||||
|
__db_log_page(dbp, txn, &lsn, pgno, (PAGE *)meta)) != 0)
|
||||||
|
goto err;
|
||||||
|
ret = __memp_fput(mpf, ip, meta, dbp->priority);
|
||||||
|
meta = NULL;
|
||||||
|
if (ret != 0)
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
/* Build the root page. */
|
||||||
|
pgno = 1;
|
||||||
|
if ((ret = __memp_fget(mpf, &pgno,
|
||||||
|
ip, txn, DB_MPOOL_CREATE, &root)) != 0)
|
||||||
|
goto err;
|
||||||
|
P_INIT(root, dbp->pgsize, 1, PGNO_INVALID, PGNO_INVALID,
|
||||||
|
LEAFLEVEL, dbp->type == DB_RECNO ? P_LRECNO : P_LBTREE);
|
||||||
|
LSN_NOT_LOGGED(root->lsn);
|
||||||
|
if ((ret =
|
||||||
|
__db_log_page(dbp, txn, &root->lsn, pgno, root)) != 0)
|
||||||
|
goto err;
|
||||||
|
ret = __memp_fput(mpf, ip, root, dbp->priority);
|
||||||
|
root = NULL;
|
||||||
|
if (ret != 0)
|
||||||
|
goto err;
|
||||||
|
} else {
|
||||||
|
memset(&pdbt, 0, sizeof(pdbt));
|
||||||
|
|
||||||
|
/* Build the meta-data page. */
|
||||||
|
pginfo.db_pagesize = dbp->pgsize;
|
||||||
|
pginfo.flags =
|
||||||
|
F_ISSET(dbp, (DB_AM_CHKSUM | DB_AM_ENCRYPT | DB_AM_SWAP));
|
||||||
|
pginfo.type = dbp->type;
|
||||||
|
pdbt.data = &pginfo;
|
||||||
|
pdbt.size = sizeof(pginfo);
|
||||||
|
if ((ret = __os_calloc(env, 1, dbp->pgsize, &buf)) != 0)
|
||||||
|
return (ret);
|
||||||
|
meta = (BTMETA *)buf;
|
||||||
|
LSN_NOT_LOGGED(lsn);
|
||||||
|
__bam_init_meta(dbp, meta, PGNO_BASE_MD, &lsn);
|
||||||
|
meta->root = 1;
|
||||||
|
meta->dbmeta.last_pgno = 1;
|
||||||
|
if ((ret = __db_pgout(
|
||||||
|
dbp->dbenv, PGNO_BASE_MD, meta, &pdbt)) != 0)
|
||||||
|
goto err;
|
||||||
|
if ((ret = __fop_write(env, txn, name, DB_APP_DATA, fhp,
|
||||||
|
dbp->pgsize, 0, 0, buf, dbp->pgsize, 1, F_ISSET(
|
||||||
|
dbp, DB_AM_NOT_DURABLE) ? DB_LOG_NOT_DURABLE : 0)) != 0)
|
||||||
|
goto err;
|
||||||
|
meta = NULL;
|
||||||
|
|
||||||
|
/* Build the root page. */
|
||||||
|
#ifdef DIAGNOSTIC
|
||||||
|
memset(buf, CLEAR_BYTE, dbp->pgsize);
|
||||||
|
#endif
|
||||||
|
root = (PAGE *)buf;
|
||||||
|
P_INIT(root, dbp->pgsize, 1, PGNO_INVALID, PGNO_INVALID,
|
||||||
|
LEAFLEVEL, dbp->type == DB_RECNO ? P_LRECNO : P_LBTREE);
|
||||||
|
LSN_NOT_LOGGED(root->lsn);
|
||||||
|
if ((ret =
|
||||||
|
__db_pgout(dbp->dbenv, root->pgno, root, &pdbt)) != 0)
|
||||||
|
goto err;
|
||||||
|
if ((ret = __fop_write(env, txn, name, DB_APP_DATA, fhp,
|
||||||
|
dbp->pgsize, 1, 0, buf, dbp->pgsize, 1, F_ISSET(
|
||||||
|
dbp, DB_AM_NOT_DURABLE) ? DB_LOG_NOT_DURABLE : 0)) != 0)
|
||||||
|
goto err;
|
||||||
|
root = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
err: if (buf != NULL)
|
||||||
|
__os_free(env, buf);
|
||||||
|
else {
|
||||||
|
if (meta != NULL &&
|
||||||
|
(t_ret = __memp_fput(mpf, ip,
|
||||||
|
meta, dbp->priority)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
if (root != NULL &&
|
||||||
|
(t_ret = __memp_fput(mpf, ip,
|
||||||
|
root, dbp->priority)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
}
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_new_subdb --
|
||||||
|
* Create a metadata page and a root page for a new btree.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_new_subdb __P((DB *, DB *, DB_THREAD_INFO *, DB_TXN *));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_new_subdb(mdbp, dbp, ip, txn)
|
||||||
|
DB *mdbp, *dbp;
|
||||||
|
DB_THREAD_INFO *ip;
|
||||||
|
DB_TXN *txn;
|
||||||
|
{
|
||||||
|
BTMETA *meta;
|
||||||
|
DBC *dbc;
|
||||||
|
DB_LOCK metalock;
|
||||||
|
DB_LSN lsn;
|
||||||
|
DB_MPOOLFILE *mpf;
|
||||||
|
ENV *env;
|
||||||
|
PAGE *root;
|
||||||
|
int ret, t_ret;
|
||||||
|
|
||||||
|
env = mdbp->env;
|
||||||
|
mpf = mdbp->mpf;
|
||||||
|
dbc = NULL;
|
||||||
|
meta = NULL;
|
||||||
|
root = NULL;
|
||||||
|
|
||||||
|
if ((ret = __db_cursor(mdbp, ip, txn,
|
||||||
|
&dbc, CDB_LOCKING(env) ? DB_WRITECURSOR : 0)) != 0)
|
||||||
|
return (ret);
|
||||||
|
|
||||||
|
/* Get, and optionally create the metadata page. */
|
||||||
|
if ((ret = __db_lget(dbc,
|
||||||
|
0, dbp->meta_pgno, DB_LOCK_WRITE, 0, &metalock)) != 0)
|
||||||
|
goto err;
|
||||||
|
if ((ret = __memp_fget(mpf, &dbp->meta_pgno,
|
||||||
|
ip, txn, DB_MPOOL_CREATE, &meta)) != 0)
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
/* Build meta-data page. */
|
||||||
|
lsn = meta->dbmeta.lsn;
|
||||||
|
__bam_init_meta(dbp, meta, dbp->meta_pgno, &lsn);
|
||||||
|
if ((ret = __db_log_page(mdbp,
|
||||||
|
txn, &meta->dbmeta.lsn, dbp->meta_pgno, (PAGE *)meta)) != 0)
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
/* Create and initialize a root page. */
|
||||||
|
if ((ret = __db_new(dbc,
|
||||||
|
dbp->type == DB_RECNO ? P_LRECNO : P_LBTREE, &root)) != 0)
|
||||||
|
goto err;
|
||||||
|
root->level = LEAFLEVEL;
|
||||||
|
|
||||||
|
if (DBENV_LOGGING(env) &&
|
||||||
|
#if !defined(DEBUG_WOP)
|
||||||
|
txn != NULL &&
|
||||||
|
#endif
|
||||||
|
|
||||||
|
(ret = __bam_root_log(mdbp, txn, &meta->dbmeta.lsn, 0,
|
||||||
|
meta->dbmeta.pgno, root->pgno, &meta->dbmeta.lsn)) != 0)
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
meta->root = root->pgno;
|
||||||
|
if ((ret =
|
||||||
|
__db_log_page(mdbp, txn, &root->lsn, root->pgno, root)) != 0)
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
/* Release the metadata and root pages. */
|
||||||
|
if ((ret = __memp_fput(mpf, ip, meta, dbc->priority)) != 0)
|
||||||
|
goto err;
|
||||||
|
meta = NULL;
|
||||||
|
if ((ret = __memp_fput(mpf, ip, root, dbc->priority)) != 0)
|
||||||
|
goto err;
|
||||||
|
root = NULL;
|
||||||
|
err:
|
||||||
|
if (meta != NULL)
|
||||||
|
if ((t_ret = __memp_fput(mpf, ip,
|
||||||
|
meta, dbc->priority)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
if (root != NULL)
|
||||||
|
if ((t_ret = __memp_fput(mpf, ip,
|
||||||
|
root, dbc->priority)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
if ((t_ret = __LPUT(dbc, metalock)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
if (dbc != NULL)
|
||||||
|
if ((t_ret = __dbc_close(dbc)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
916
btree/bt_put.c
Normal file
916
btree/bt_put.c
Normal file
@@ -0,0 +1,916 @@
|
|||||||
|
/*-
|
||||||
|
* See the file LICENSE for redistribution information.
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996,2008 Oracle. All rights reserved.
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1990, 1993, 1994, 1995, 1996
|
||||||
|
* Keith Bostic. All rights reserved.
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1990, 1993, 1994, 1995
|
||||||
|
* The Regents of the University of California. All rights reserved.
|
||||||
|
*
|
||||||
|
* This code is derived from software contributed to Berkeley by
|
||||||
|
* Mike Olson.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 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. 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.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* $Id: bt_put.c 63573 2008-05-23 21:43:21Z trent.nelson $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "db_config.h"
|
||||||
|
|
||||||
|
#include "db_int.h"
|
||||||
|
#include "dbinc/db_page.h"
|
||||||
|
#include "dbinc/btree.h"
|
||||||
|
#include "dbinc/mp.h"
|
||||||
|
|
||||||
|
static int __bam_build
|
||||||
|
__P((DBC *, u_int32_t, DBT *, PAGE *, u_int32_t, u_int32_t));
|
||||||
|
static int __bam_dup_check __P((DBC *, u_int32_t,
|
||||||
|
PAGE *, u_int32_t, u_int32_t, db_indx_t *));
|
||||||
|
static int __bam_dup_convert __P((DBC *, PAGE *, u_int32_t, u_int32_t));
|
||||||
|
static int __bam_ovput
|
||||||
|
__P((DBC *, u_int32_t, db_pgno_t, PAGE *, u_int32_t, DBT *));
|
||||||
|
static u_int32_t
|
||||||
|
__bam_partsize __P((DB *, u_int32_t, DBT *, PAGE *, u_int32_t));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_iitem --
|
||||||
|
* Insert an item into the tree.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_iitem __P((DBC *, DBT *, DBT *, u_int32_t, u_int32_t));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_iitem(dbc, key, data, op, flags)
|
||||||
|
DBC *dbc;
|
||||||
|
DBT *key, *data;
|
||||||
|
u_int32_t op, flags;
|
||||||
|
{
|
||||||
|
BKEYDATA *bk, bk_tmp;
|
||||||
|
BTREE *t;
|
||||||
|
BTREE_CURSOR *cp;
|
||||||
|
DB *dbp;
|
||||||
|
DBT bk_hdr, tdbt;
|
||||||
|
DB_MPOOLFILE *mpf;
|
||||||
|
ENV *env;
|
||||||
|
PAGE *h;
|
||||||
|
db_indx_t cnt, indx;
|
||||||
|
u_int32_t data_size, have_bytes, need_bytes, needed, pages, pagespace;
|
||||||
|
int cmp, bigkey, bigdata, del, dupadjust;
|
||||||
|
int padrec, replace, ret, t_ret, was_deleted;
|
||||||
|
|
||||||
|
COMPQUIET(cnt, 0);
|
||||||
|
|
||||||
|
dbp = dbc->dbp;
|
||||||
|
env = dbp->env;
|
||||||
|
mpf = dbp->mpf;
|
||||||
|
cp = (BTREE_CURSOR *)dbc->internal;
|
||||||
|
t = dbp->bt_internal;
|
||||||
|
h = cp->page;
|
||||||
|
indx = cp->indx;
|
||||||
|
del = dupadjust = replace = was_deleted = 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Fixed-length records with partial puts: it's an error to specify
|
||||||
|
* anything other simple overwrite.
|
||||||
|
*/
|
||||||
|
if (F_ISSET(dbp, DB_AM_FIXEDLEN) &&
|
||||||
|
F_ISSET(data, DB_DBT_PARTIAL) && data->size != data->dlen)
|
||||||
|
return (__db_rec_repl(env, data->size, data->dlen));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Figure out how much space the data will take, including if it's a
|
||||||
|
* partial record.
|
||||||
|
*
|
||||||
|
* Fixed-length records: it's an error to specify a record that's
|
||||||
|
* longer than the fixed-length, and we never require less than
|
||||||
|
* the fixed-length record size.
|
||||||
|
*/
|
||||||
|
data_size = F_ISSET(data, DB_DBT_PARTIAL) ?
|
||||||
|
__bam_partsize(dbp, op, data, h, indx) : data->size;
|
||||||
|
padrec = 0;
|
||||||
|
if (F_ISSET(dbp, DB_AM_FIXEDLEN)) {
|
||||||
|
if (data_size > t->re_len)
|
||||||
|
return (__db_rec_toobig(env, data_size, t->re_len));
|
||||||
|
|
||||||
|
/* Records that are deleted anyway needn't be padded out. */
|
||||||
|
if (!LF_ISSET(BI_DELETED) && data_size < t->re_len) {
|
||||||
|
padrec = 1;
|
||||||
|
data_size = t->re_len;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Handle partial puts or short fixed-length records: build the
|
||||||
|
* real record.
|
||||||
|
*/
|
||||||
|
if (padrec || F_ISSET(data, DB_DBT_PARTIAL)) {
|
||||||
|
tdbt = *data;
|
||||||
|
if ((ret =
|
||||||
|
__bam_build(dbc, op, &tdbt, h, indx, data_size)) != 0)
|
||||||
|
return (ret);
|
||||||
|
data = &tdbt;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If the user has specified a duplicate comparison function, return
|
||||||
|
* an error if DB_CURRENT was specified and the replacement data
|
||||||
|
* doesn't compare equal to the current data. This stops apps from
|
||||||
|
* screwing up the duplicate sort order. We have to do this after
|
||||||
|
* we build the real record so that we're comparing the real items.
|
||||||
|
*/
|
||||||
|
if (op == DB_CURRENT && dbp->dup_compare != NULL) {
|
||||||
|
if ((ret = __bam_cmp(dbp, dbc->thread_info, dbc->txn, data, h,
|
||||||
|
indx + (TYPE(h) == P_LBTREE ? O_INDX : 0),
|
||||||
|
dbp->dup_compare, &cmp)) != 0)
|
||||||
|
return (ret);
|
||||||
|
if (cmp != 0) {
|
||||||
|
__db_errx(env,
|
||||||
|
"Existing data sorts differently from put data");
|
||||||
|
return (EINVAL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If the key or data item won't fit on a page, we'll have to store
|
||||||
|
* them on overflow pages.
|
||||||
|
*/
|
||||||
|
needed = 0;
|
||||||
|
bigdata = data_size > cp->ovflsize;
|
||||||
|
switch (op) {
|
||||||
|
case DB_KEYFIRST:
|
||||||
|
/* We're adding a new key and data pair. */
|
||||||
|
bigkey = key->size > cp->ovflsize;
|
||||||
|
if (bigkey)
|
||||||
|
needed += BOVERFLOW_PSIZE;
|
||||||
|
else
|
||||||
|
needed += BKEYDATA_PSIZE(key->size);
|
||||||
|
if (bigdata)
|
||||||
|
needed += BOVERFLOW_PSIZE;
|
||||||
|
else
|
||||||
|
needed += BKEYDATA_PSIZE(data_size);
|
||||||
|
break;
|
||||||
|
case DB_AFTER:
|
||||||
|
case DB_BEFORE:
|
||||||
|
case DB_CURRENT:
|
||||||
|
/*
|
||||||
|
* We're either overwriting the data item of a key/data pair
|
||||||
|
* or we're creating a new on-page duplicate and only adding
|
||||||
|
* a data item.
|
||||||
|
*
|
||||||
|
* !!!
|
||||||
|
* We're not currently correcting for space reclaimed from
|
||||||
|
* already deleted items, but I don't think it's worth the
|
||||||
|
* complexity.
|
||||||
|
*/
|
||||||
|
bigkey = 0;
|
||||||
|
if (op == DB_CURRENT) {
|
||||||
|
bk = GET_BKEYDATA(dbp, h,
|
||||||
|
indx + (TYPE(h) == P_LBTREE ? O_INDX : 0));
|
||||||
|
if (B_TYPE(bk->type) == B_KEYDATA)
|
||||||
|
have_bytes = BKEYDATA_PSIZE(bk->len);
|
||||||
|
else
|
||||||
|
have_bytes = BOVERFLOW_PSIZE;
|
||||||
|
need_bytes = 0;
|
||||||
|
} else {
|
||||||
|
have_bytes = 0;
|
||||||
|
need_bytes = sizeof(db_indx_t);
|
||||||
|
}
|
||||||
|
if (bigdata)
|
||||||
|
need_bytes += BOVERFLOW_PSIZE;
|
||||||
|
else
|
||||||
|
need_bytes += BKEYDATA_PSIZE(data_size);
|
||||||
|
|
||||||
|
if (have_bytes < need_bytes)
|
||||||
|
needed += need_bytes - have_bytes;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return (__db_unknown_flag(env, "DB->put", op));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Split the page if there's not enough room. */
|
||||||
|
if (P_FREESPACE(dbp, h) < needed)
|
||||||
|
return (DB_NEEDSPLIT);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check to see if we will convert to off page duplicates -- if
|
||||||
|
* so, we'll need a page.
|
||||||
|
*/
|
||||||
|
if (F_ISSET(dbp, DB_AM_DUP) &&
|
||||||
|
TYPE(h) == P_LBTREE && op != DB_KEYFIRST &&
|
||||||
|
P_FREESPACE(dbp, h) - needed <= dbp->pgsize / 2 &&
|
||||||
|
__bam_dup_check(dbc, op, h, indx, needed, &cnt)) {
|
||||||
|
pages = 1;
|
||||||
|
dupadjust = 1;
|
||||||
|
} else
|
||||||
|
pages = 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If we are not using transactions and there is a page limit
|
||||||
|
* set on the file, then figure out if things will fit before
|
||||||
|
* taking action.
|
||||||
|
*/
|
||||||
|
if (dbc->txn == NULL && mpf->mfp->maxpgno != 0) {
|
||||||
|
pagespace = P_MAXSPACE(dbp, dbp->pgsize);
|
||||||
|
if (bigdata)
|
||||||
|
pages += ((data_size - 1) / pagespace) + 1;
|
||||||
|
if (bigkey)
|
||||||
|
pages += ((key->size - 1) / pagespace) + 1;
|
||||||
|
|
||||||
|
if (pages > (mpf->mfp->maxpgno - mpf->mfp->last_pgno))
|
||||||
|
return (__db_space_err(dbp));
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((ret = __memp_dirty(mpf, &h,
|
||||||
|
dbc->thread_info, dbc->txn, dbc->priority, 0)) != 0)
|
||||||
|
return (ret);
|
||||||
|
if (cp->csp->page == cp->page)
|
||||||
|
cp->csp->page = h;
|
||||||
|
cp->page = h;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The code breaks it up into five cases:
|
||||||
|
*
|
||||||
|
* 1. Insert a new key/data pair.
|
||||||
|
* 2. Append a new data item (a new duplicate).
|
||||||
|
* 3. Insert a new data item (a new duplicate).
|
||||||
|
* 4. Delete and re-add the data item (overflow item).
|
||||||
|
* 5. Overwrite the data item.
|
||||||
|
*/
|
||||||
|
switch (op) {
|
||||||
|
case DB_KEYFIRST: /* 1. Insert a new key/data pair. */
|
||||||
|
if (bigkey) {
|
||||||
|
if ((ret = __bam_ovput(dbc,
|
||||||
|
B_OVERFLOW, PGNO_INVALID, h, indx, key)) != 0)
|
||||||
|
return (ret);
|
||||||
|
} else
|
||||||
|
if ((ret = __db_pitem(dbc, h, indx,
|
||||||
|
BKEYDATA_SIZE(key->size), NULL, key)) != 0)
|
||||||
|
return (ret);
|
||||||
|
|
||||||
|
if ((ret = __bam_ca_di(dbc, PGNO(h), indx, 1)) != 0)
|
||||||
|
return (ret);
|
||||||
|
++indx;
|
||||||
|
break;
|
||||||
|
case DB_AFTER: /* 2. Append a new data item. */
|
||||||
|
if (TYPE(h) == P_LBTREE) {
|
||||||
|
/* Copy the key for the duplicate and adjust cursors. */
|
||||||
|
if ((ret =
|
||||||
|
__bam_adjindx(dbc, h, indx + P_INDX, indx, 1)) != 0)
|
||||||
|
return (ret);
|
||||||
|
if ((ret =
|
||||||
|
__bam_ca_di(dbc, PGNO(h), indx + P_INDX, 1)) != 0)
|
||||||
|
return (ret);
|
||||||
|
|
||||||
|
indx += 3;
|
||||||
|
|
||||||
|
cp->indx += 2;
|
||||||
|
} else {
|
||||||
|
++indx;
|
||||||
|
cp->indx += 1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case DB_BEFORE: /* 3. Insert a new data item. */
|
||||||
|
if (TYPE(h) == P_LBTREE) {
|
||||||
|
/* Copy the key for the duplicate and adjust cursors. */
|
||||||
|
if ((ret = __bam_adjindx(dbc, h, indx, indx, 1)) != 0)
|
||||||
|
return (ret);
|
||||||
|
if ((ret = __bam_ca_di(dbc, PGNO(h), indx, 1)) != 0)
|
||||||
|
return (ret);
|
||||||
|
|
||||||
|
++indx;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case DB_CURRENT:
|
||||||
|
/*
|
||||||
|
* Clear the cursor's deleted flag. The problem is that if
|
||||||
|
* we deadlock or fail while deleting the overflow item or
|
||||||
|
* replacing the non-overflow item, a subsequent cursor close
|
||||||
|
* will try and remove the item because the cursor's delete
|
||||||
|
* flag is set.
|
||||||
|
*/
|
||||||
|
if ((ret = __bam_ca_delete(dbp, PGNO(h), indx, 0, NULL)) != 0)
|
||||||
|
return (ret);
|
||||||
|
|
||||||
|
if (TYPE(h) == P_LBTREE)
|
||||||
|
++indx;
|
||||||
|
bk = GET_BKEYDATA(dbp, h, indx);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* In a Btree deleted records aren't counted (deleted records
|
||||||
|
* are counted in a Recno because all accesses are based on
|
||||||
|
* record number). If it's a Btree and it's a DB_CURRENT
|
||||||
|
* operation overwriting a previously deleted record, increment
|
||||||
|
* the record count.
|
||||||
|
*/
|
||||||
|
if (TYPE(h) == P_LBTREE || TYPE(h) == P_LDUP)
|
||||||
|
was_deleted = B_DISSET(bk->type);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 4. Delete and re-add the data item.
|
||||||
|
*
|
||||||
|
* If we're changing the type of the on-page structure, or we
|
||||||
|
* are referencing offpage items, we have to delete and then
|
||||||
|
* re-add the item. We do not do any cursor adjustments here
|
||||||
|
* because we're going to immediately re-add the item into the
|
||||||
|
* same slot.
|
||||||
|
*/
|
||||||
|
if (bigdata || B_TYPE(bk->type) != B_KEYDATA) {
|
||||||
|
if ((ret = __bam_ditem(dbc, h, indx)) != 0)
|
||||||
|
return (ret);
|
||||||
|
del = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 5. Overwrite the data item. */
|
||||||
|
replace = 1;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return (__db_unknown_flag(env, "DB->put", op));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Add the data. */
|
||||||
|
if (bigdata) {
|
||||||
|
/*
|
||||||
|
* We do not have to handle deleted (BI_DELETED) records
|
||||||
|
* in this case; the actual records should never be created.
|
||||||
|
*/
|
||||||
|
DB_ASSERT(env, !LF_ISSET(BI_DELETED));
|
||||||
|
ret = __bam_ovput(dbc,
|
||||||
|
B_OVERFLOW, PGNO_INVALID, h, indx, data);
|
||||||
|
} else {
|
||||||
|
if (LF_ISSET(BI_DELETED)) {
|
||||||
|
B_TSET_DELETED(bk_tmp.type, B_KEYDATA);
|
||||||
|
bk_tmp.len = data->size;
|
||||||
|
bk_hdr.data = &bk_tmp;
|
||||||
|
bk_hdr.size = SSZA(BKEYDATA, data);
|
||||||
|
ret = __db_pitem(dbc, h, indx,
|
||||||
|
BKEYDATA_SIZE(data->size), &bk_hdr, data);
|
||||||
|
} else if (replace)
|
||||||
|
ret = __bam_ritem(dbc, h, indx, data);
|
||||||
|
else
|
||||||
|
ret = __db_pitem(dbc, h, indx,
|
||||||
|
BKEYDATA_SIZE(data->size), NULL, data);
|
||||||
|
}
|
||||||
|
if (ret != 0) {
|
||||||
|
if (del == 1 && (t_ret =
|
||||||
|
__bam_ca_di(dbc, PGNO(h), indx + 1, -1)) != 0) {
|
||||||
|
__db_err(env, t_ret,
|
||||||
|
"cursor adjustment after delete failed");
|
||||||
|
return (__env_panic(env, t_ret));
|
||||||
|
}
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Re-position the cursors if necessary and reset the current cursor
|
||||||
|
* to point to the new item.
|
||||||
|
*/
|
||||||
|
if (op != DB_CURRENT) {
|
||||||
|
if ((ret = __bam_ca_di(dbc, PGNO(h), indx, 1)) != 0)
|
||||||
|
return (ret);
|
||||||
|
cp->indx = TYPE(h) == P_LBTREE ? indx - O_INDX : indx;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If we've changed the record count, update the tree. There's no
|
||||||
|
* need to adjust the count if the operation not performed on the
|
||||||
|
* current record or when the current record was previously deleted.
|
||||||
|
*/
|
||||||
|
if (F_ISSET(cp, C_RECNUM) && (op != DB_CURRENT || was_deleted))
|
||||||
|
if ((ret = __bam_adjust(dbc, 1)) != 0)
|
||||||
|
return (ret);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If a Btree leaf page is at least 50% full and we may have added or
|
||||||
|
* modified a duplicate data item, see if the set of duplicates takes
|
||||||
|
* up at least 25% of the space on the page. If it does, move it onto
|
||||||
|
* its own page.
|
||||||
|
*/
|
||||||
|
if (dupadjust &&
|
||||||
|
(ret = __bam_dup_convert(dbc, h, indx - O_INDX, cnt)) != 0)
|
||||||
|
return (ret);
|
||||||
|
|
||||||
|
/* If we've modified a recno file, set the flag. */
|
||||||
|
if (dbc->dbtype == DB_RECNO)
|
||||||
|
t->re_modified = 1;
|
||||||
|
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_partsize --
|
||||||
|
* Figure out how much space a partial data item is in total.
|
||||||
|
*/
|
||||||
|
static u_int32_t
|
||||||
|
__bam_partsize(dbp, op, data, h, indx)
|
||||||
|
DB *dbp;
|
||||||
|
u_int32_t op, indx;
|
||||||
|
DBT *data;
|
||||||
|
PAGE *h;
|
||||||
|
{
|
||||||
|
BKEYDATA *bk;
|
||||||
|
u_int32_t nbytes;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If the record doesn't already exist, it's simply the data we're
|
||||||
|
* provided.
|
||||||
|
*/
|
||||||
|
if (op != DB_CURRENT)
|
||||||
|
return (data->doff + data->size);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Otherwise, it's the data provided plus any already existing data
|
||||||
|
* that we're not replacing.
|
||||||
|
*/
|
||||||
|
bk = GET_BKEYDATA(dbp, h, indx + (TYPE(h) == P_LBTREE ? O_INDX : 0));
|
||||||
|
nbytes =
|
||||||
|
B_TYPE(bk->type) == B_OVERFLOW ? ((BOVERFLOW *)bk)->tlen : bk->len;
|
||||||
|
|
||||||
|
return (__db_partsize(nbytes, data));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_build --
|
||||||
|
* Build the real record for a partial put, or short fixed-length record.
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
__bam_build(dbc, op, dbt, h, indx, nbytes)
|
||||||
|
DBC *dbc;
|
||||||
|
u_int32_t op, indx, nbytes;
|
||||||
|
DBT *dbt;
|
||||||
|
PAGE *h;
|
||||||
|
{
|
||||||
|
BKEYDATA *bk, tbk;
|
||||||
|
BOVERFLOW *bo;
|
||||||
|
BTREE *t;
|
||||||
|
DB *dbp;
|
||||||
|
DBT copy, *rdata;
|
||||||
|
u_int32_t len, tlen;
|
||||||
|
u_int8_t *p;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
COMPQUIET(bo, NULL);
|
||||||
|
|
||||||
|
dbp = dbc->dbp;
|
||||||
|
t = dbp->bt_internal;
|
||||||
|
|
||||||
|
/* We use the record data return memory, it's only a short-term use. */
|
||||||
|
rdata = &dbc->my_rdata;
|
||||||
|
if (rdata->ulen < nbytes) {
|
||||||
|
if ((ret = __os_realloc(dbp->env,
|
||||||
|
nbytes, &rdata->data)) != 0) {
|
||||||
|
rdata->ulen = 0;
|
||||||
|
rdata->data = NULL;
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
rdata->ulen = nbytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We use nul or pad bytes for any part of the record that isn't
|
||||||
|
* specified; get it over with.
|
||||||
|
*/
|
||||||
|
memset(rdata->data,
|
||||||
|
F_ISSET(dbp, DB_AM_FIXEDLEN) ? t->re_pad : 0, nbytes);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* In the next clauses, we need to do three things: a) set p to point
|
||||||
|
* to the place at which to copy the user's data, b) set tlen to the
|
||||||
|
* total length of the record, not including the bytes contributed by
|
||||||
|
* the user, and c) copy any valid data from an existing record. If
|
||||||
|
* it's not a partial put (this code is called for both partial puts
|
||||||
|
* and fixed-length record padding) or it's a new key, we can cut to
|
||||||
|
* the chase.
|
||||||
|
*/
|
||||||
|
if (!F_ISSET(dbt, DB_DBT_PARTIAL) || op != DB_CURRENT) {
|
||||||
|
p = (u_int8_t *)rdata->data + dbt->doff;
|
||||||
|
tlen = dbt->doff;
|
||||||
|
goto user_copy;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Find the current record. */
|
||||||
|
if (indx < NUM_ENT(h)) {
|
||||||
|
bk = GET_BKEYDATA(dbp, h, indx + (TYPE(h) == P_LBTREE ?
|
||||||
|
O_INDX : 0));
|
||||||
|
bo = (BOVERFLOW *)bk;
|
||||||
|
} else {
|
||||||
|
bk = &tbk;
|
||||||
|
B_TSET(bk->type, B_KEYDATA);
|
||||||
|
bk->len = 0;
|
||||||
|
}
|
||||||
|
if (B_TYPE(bk->type) == B_OVERFLOW) {
|
||||||
|
/*
|
||||||
|
* In the case of an overflow record, we shift things around
|
||||||
|
* in the current record rather than allocate a separate copy.
|
||||||
|
*/
|
||||||
|
memset(©, 0, sizeof(copy));
|
||||||
|
if ((ret = __db_goff(dbp, dbc->thread_info, dbc->txn, ©,
|
||||||
|
bo->tlen, bo->pgno, &rdata->data, &rdata->ulen)) != 0)
|
||||||
|
return (ret);
|
||||||
|
|
||||||
|
/* Skip any leading data from the original record. */
|
||||||
|
tlen = dbt->doff;
|
||||||
|
p = (u_int8_t *)rdata->data + dbt->doff;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copy in any trailing data from the original record.
|
||||||
|
*
|
||||||
|
* If the original record was larger than the original offset
|
||||||
|
* plus the bytes being deleted, there is trailing data in the
|
||||||
|
* original record we need to preserve. If we aren't deleting
|
||||||
|
* the same number of bytes as we're inserting, copy it up or
|
||||||
|
* down, into place.
|
||||||
|
*
|
||||||
|
* Use memmove(), the regions may overlap.
|
||||||
|
*/
|
||||||
|
if (bo->tlen > dbt->doff + dbt->dlen) {
|
||||||
|
len = bo->tlen - (dbt->doff + dbt->dlen);
|
||||||
|
if (dbt->dlen != dbt->size)
|
||||||
|
memmove(p + dbt->size, p + dbt->dlen, len);
|
||||||
|
tlen += len;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
/* Copy in any leading data from the original record. */
|
||||||
|
memcpy(rdata->data,
|
||||||
|
bk->data, dbt->doff > bk->len ? bk->len : dbt->doff);
|
||||||
|
tlen = dbt->doff;
|
||||||
|
p = (u_int8_t *)rdata->data + dbt->doff;
|
||||||
|
|
||||||
|
/* Copy in any trailing data from the original record. */
|
||||||
|
len = dbt->doff + dbt->dlen;
|
||||||
|
if (bk->len > len) {
|
||||||
|
memcpy(p + dbt->size, bk->data + len, bk->len - len);
|
||||||
|
tlen += bk->len - len;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
user_copy:
|
||||||
|
/*
|
||||||
|
* Copy in the application provided data -- p and tlen must have been
|
||||||
|
* initialized above.
|
||||||
|
*/
|
||||||
|
memcpy(p, dbt->data, dbt->size);
|
||||||
|
tlen += dbt->size;
|
||||||
|
|
||||||
|
/* Set the DBT to reference our new record. */
|
||||||
|
rdata->size = F_ISSET(dbp, DB_AM_FIXEDLEN) ? t->re_len : tlen;
|
||||||
|
rdata->dlen = 0;
|
||||||
|
rdata->doff = 0;
|
||||||
|
rdata->flags = 0;
|
||||||
|
*dbt = *rdata;
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_ritem --
|
||||||
|
* Replace an item on a page.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_ritem __P((DBC *, PAGE *, u_int32_t, DBT *));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_ritem(dbc, h, indx, data)
|
||||||
|
DBC *dbc;
|
||||||
|
PAGE *h;
|
||||||
|
u_int32_t indx;
|
||||||
|
DBT *data;
|
||||||
|
{
|
||||||
|
BKEYDATA *bk;
|
||||||
|
DB *dbp;
|
||||||
|
DBT orig, repl;
|
||||||
|
db_indx_t cnt, lo, ln, min, off, prefix, suffix;
|
||||||
|
int32_t nbytes;
|
||||||
|
int ret;
|
||||||
|
db_indx_t *inp;
|
||||||
|
u_int8_t *p, *t;
|
||||||
|
|
||||||
|
dbp = dbc->dbp;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Replace a single item onto a page. The logic figuring out where
|
||||||
|
* to insert and whether it fits is handled in the caller. All we do
|
||||||
|
* here is manage the page shuffling.
|
||||||
|
*/
|
||||||
|
bk = GET_BKEYDATA(dbp, h, indx);
|
||||||
|
|
||||||
|
/* Log the change. */
|
||||||
|
if (DBC_LOGGING(dbc)) {
|
||||||
|
/*
|
||||||
|
* We might as well check to see if the two data items share
|
||||||
|
* a common prefix and suffix -- it can save us a lot of log
|
||||||
|
* message if they're large.
|
||||||
|
*/
|
||||||
|
min = data->size < bk->len ? data->size : bk->len;
|
||||||
|
for (prefix = 0,
|
||||||
|
p = bk->data, t = data->data;
|
||||||
|
prefix < min && *p == *t; ++prefix, ++p, ++t)
|
||||||
|
;
|
||||||
|
|
||||||
|
min -= prefix;
|
||||||
|
for (suffix = 0,
|
||||||
|
p = (u_int8_t *)bk->data + bk->len - 1,
|
||||||
|
t = (u_int8_t *)data->data + data->size - 1;
|
||||||
|
suffix < min && *p == *t; ++suffix, --p, --t)
|
||||||
|
;
|
||||||
|
|
||||||
|
/* We only log the parts of the keys that have changed. */
|
||||||
|
orig.data = (u_int8_t *)bk->data + prefix;
|
||||||
|
orig.size = bk->len - (prefix + suffix);
|
||||||
|
repl.data = (u_int8_t *)data->data + prefix;
|
||||||
|
repl.size = data->size - (prefix + suffix);
|
||||||
|
if ((ret = __bam_repl_log(dbp, dbc->txn, &LSN(h), 0, PGNO(h),
|
||||||
|
&LSN(h), (u_int32_t)indx, (u_int32_t)B_DISSET(bk->type),
|
||||||
|
&orig, &repl, (u_int32_t)prefix, (u_int32_t)suffix)) != 0)
|
||||||
|
return (ret);
|
||||||
|
} else
|
||||||
|
LSN_NOT_LOGGED(LSN(h));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set references to the first in-use byte on the page and the
|
||||||
|
* first byte of the item being replaced.
|
||||||
|
*/
|
||||||
|
inp = P_INP(dbp, h);
|
||||||
|
p = (u_int8_t *)h + HOFFSET(h);
|
||||||
|
t = (u_int8_t *)bk;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If the entry is growing in size, shift the beginning of the data
|
||||||
|
* part of the page down. If the entry is shrinking in size, shift
|
||||||
|
* the beginning of the data part of the page up. Use memmove(3),
|
||||||
|
* the regions overlap.
|
||||||
|
*/
|
||||||
|
lo = BKEYDATA_SIZE(bk->len);
|
||||||
|
ln = (db_indx_t)BKEYDATA_SIZE(data->size);
|
||||||
|
if (lo != ln) {
|
||||||
|
nbytes = lo - ln; /* Signed difference. */
|
||||||
|
if (p == t) /* First index is fast. */
|
||||||
|
inp[indx] += nbytes;
|
||||||
|
else { /* Else, shift the page. */
|
||||||
|
memmove(p + nbytes, p, (size_t)(t - p));
|
||||||
|
|
||||||
|
/* Adjust the indices' offsets. */
|
||||||
|
off = inp[indx];
|
||||||
|
for (cnt = 0; cnt < NUM_ENT(h); ++cnt)
|
||||||
|
if (inp[cnt] <= off)
|
||||||
|
inp[cnt] += nbytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Clean up the page and adjust the item's reference. */
|
||||||
|
HOFFSET(h) += nbytes;
|
||||||
|
t += nbytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Copy the new item onto the page. */
|
||||||
|
bk = (BKEYDATA *)t;
|
||||||
|
B_TSET(bk->type, B_KEYDATA);
|
||||||
|
bk->len = data->size;
|
||||||
|
memcpy(bk->data, data->data, data->size);
|
||||||
|
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_dup_check --
|
||||||
|
* Check to see if the duplicate set at indx should have its own page.
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
__bam_dup_check(dbc, op, h, indx, sz, cntp)
|
||||||
|
DBC *dbc;
|
||||||
|
u_int32_t op;
|
||||||
|
PAGE *h;
|
||||||
|
u_int32_t indx, sz;
|
||||||
|
db_indx_t *cntp;
|
||||||
|
{
|
||||||
|
BKEYDATA *bk;
|
||||||
|
DB *dbp;
|
||||||
|
db_indx_t cnt, first, *inp;
|
||||||
|
|
||||||
|
dbp = dbc->dbp;
|
||||||
|
inp = P_INP(dbp, h);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Count the duplicate records and calculate how much room they're
|
||||||
|
* using on the page.
|
||||||
|
*/
|
||||||
|
while (indx > 0 && inp[indx] == inp[indx - P_INDX])
|
||||||
|
indx -= P_INDX;
|
||||||
|
|
||||||
|
/* Count the key once. */
|
||||||
|
bk = GET_BKEYDATA(dbp, h, indx);
|
||||||
|
sz += B_TYPE(bk->type) == B_KEYDATA ?
|
||||||
|
BKEYDATA_PSIZE(bk->len) : BOVERFLOW_PSIZE;
|
||||||
|
|
||||||
|
/* Sum up all the data items. */
|
||||||
|
first = indx;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Account for the record being inserted. If we are replacing it,
|
||||||
|
* don't count it twice.
|
||||||
|
*
|
||||||
|
* We execute the loop with first == indx to get the size of the
|
||||||
|
* first record.
|
||||||
|
*/
|
||||||
|
cnt = op == DB_CURRENT ? 0 : 1;
|
||||||
|
for (first = indx;
|
||||||
|
indx < NUM_ENT(h) && inp[first] == inp[indx];
|
||||||
|
++cnt, indx += P_INDX) {
|
||||||
|
bk = GET_BKEYDATA(dbp, h, indx + O_INDX);
|
||||||
|
sz += B_TYPE(bk->type) == B_KEYDATA ?
|
||||||
|
BKEYDATA_PSIZE(bk->len) : BOVERFLOW_PSIZE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We have to do these checks when the user is replacing the cursor's
|
||||||
|
* data item -- if the application replaces a duplicate item with a
|
||||||
|
* larger data item, it can increase the amount of space used by the
|
||||||
|
* duplicates, requiring this check. But that means we may have done
|
||||||
|
* this check when it wasn't a duplicate item after all.
|
||||||
|
*/
|
||||||
|
if (cnt == 1)
|
||||||
|
return (0);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If this set of duplicates is using more than 25% of the page, move
|
||||||
|
* them off. The choice of 25% is a WAG, but the value must be small
|
||||||
|
* enough that we can always split a page without putting duplicates
|
||||||
|
* on two different pages.
|
||||||
|
*/
|
||||||
|
if (sz < dbp->pgsize / 4)
|
||||||
|
return (0);
|
||||||
|
|
||||||
|
*cntp = cnt;
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_dup_convert --
|
||||||
|
* Move a set of duplicates off-page and into their own tree.
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
__bam_dup_convert(dbc, h, indx, cnt)
|
||||||
|
DBC *dbc;
|
||||||
|
PAGE *h;
|
||||||
|
u_int32_t indx, cnt;
|
||||||
|
{
|
||||||
|
BKEYDATA *bk;
|
||||||
|
DB *dbp;
|
||||||
|
DBT hdr;
|
||||||
|
DB_MPOOLFILE *mpf;
|
||||||
|
PAGE *dp;
|
||||||
|
db_indx_t cpindx, dindx, first, *inp;
|
||||||
|
int ret, t_ret;
|
||||||
|
|
||||||
|
dbp = dbc->dbp;
|
||||||
|
mpf = dbp->mpf;
|
||||||
|
inp = P_INP(dbp, h);
|
||||||
|
|
||||||
|
/* Move to the beginning of the dup set. */
|
||||||
|
while (indx > 0 && inp[indx] == inp[indx - P_INDX])
|
||||||
|
indx -= P_INDX;
|
||||||
|
|
||||||
|
/* Get a new page. */
|
||||||
|
if ((ret = __db_new(dbc,
|
||||||
|
dbp->dup_compare == NULL ? P_LRECNO : P_LDUP, &dp)) != 0)
|
||||||
|
return (ret);
|
||||||
|
P_INIT(dp, dbp->pgsize, dp->pgno,
|
||||||
|
PGNO_INVALID, PGNO_INVALID, LEAFLEVEL, TYPE(dp));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Move this set of duplicates off the page. First points to the first
|
||||||
|
* key of the first duplicate key/data pair, cnt is the number of pairs
|
||||||
|
* we're dealing with.
|
||||||
|
*/
|
||||||
|
memset(&hdr, 0, sizeof(hdr));
|
||||||
|
first = indx;
|
||||||
|
dindx = indx;
|
||||||
|
cpindx = 0;
|
||||||
|
do {
|
||||||
|
/* Move cursors referencing the old entry to the new entry. */
|
||||||
|
if ((ret = __bam_ca_dup(dbc, first,
|
||||||
|
PGNO(h), indx, PGNO(dp), cpindx)) != 0)
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copy the entry to the new page. If the off-duplicate page
|
||||||
|
* If the off-duplicate page is a Btree page (i.e. dup_compare
|
||||||
|
* will be non-NULL, we use Btree pages for sorted dups,
|
||||||
|
* and Recno pages for unsorted dups), move all entries
|
||||||
|
* normally, even deleted ones. If it's a Recno page,
|
||||||
|
* deleted entries are discarded (if the deleted entry is
|
||||||
|
* overflow, then free up those pages).
|
||||||
|
*/
|
||||||
|
bk = GET_BKEYDATA(dbp, h, dindx + 1);
|
||||||
|
hdr.data = bk;
|
||||||
|
hdr.size = B_TYPE(bk->type) == B_KEYDATA ?
|
||||||
|
BKEYDATA_SIZE(bk->len) : BOVERFLOW_SIZE;
|
||||||
|
if (dbp->dup_compare == NULL && B_DISSET(bk->type)) {
|
||||||
|
/*
|
||||||
|
* Unsorted dups, i.e. recno page, and we have
|
||||||
|
* a deleted entry, don't move it, but if it was
|
||||||
|
* an overflow entry, we need to free those pages.
|
||||||
|
*/
|
||||||
|
if (B_TYPE(bk->type) == B_OVERFLOW &&
|
||||||
|
(ret = __db_doff(dbc,
|
||||||
|
(GET_BOVERFLOW(dbp, h, dindx + 1))->pgno)) != 0)
|
||||||
|
goto err;
|
||||||
|
} else {
|
||||||
|
if ((ret = __db_pitem(
|
||||||
|
dbc, dp, cpindx, hdr.size, &hdr, NULL)) != 0)
|
||||||
|
goto err;
|
||||||
|
++cpindx;
|
||||||
|
}
|
||||||
|
/* Delete all but the last reference to the key. */
|
||||||
|
if (cnt != 1) {
|
||||||
|
if ((ret = __bam_adjindx(dbc,
|
||||||
|
h, dindx, first + 1, 0)) != 0)
|
||||||
|
goto err;
|
||||||
|
} else
|
||||||
|
dindx++;
|
||||||
|
|
||||||
|
/* Delete the data item. */
|
||||||
|
if ((ret = __db_ditem(dbc, h, dindx, hdr.size)) != 0)
|
||||||
|
goto err;
|
||||||
|
indx += P_INDX;
|
||||||
|
} while (--cnt);
|
||||||
|
|
||||||
|
/* Put in a new data item that points to the duplicates page. */
|
||||||
|
if ((ret = __bam_ovput(dbc,
|
||||||
|
B_DUPLICATE, dp->pgno, h, first + 1, NULL)) != 0)
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
/* Adjust cursors for all the above movements. */
|
||||||
|
ret = __bam_ca_di(dbc,
|
||||||
|
PGNO(h), first + P_INDX, (int)(first + P_INDX - indx));
|
||||||
|
|
||||||
|
err: if ((t_ret = __memp_fput(mpf,
|
||||||
|
dbc->thread_info, dp, dbc->priority)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_ovput --
|
||||||
|
* Build an item for an off-page duplicates page or overflow page and
|
||||||
|
* insert it on the page.
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
__bam_ovput(dbc, type, pgno, h, indx, item)
|
||||||
|
DBC *dbc;
|
||||||
|
u_int32_t type, indx;
|
||||||
|
db_pgno_t pgno;
|
||||||
|
PAGE *h;
|
||||||
|
DBT *item;
|
||||||
|
{
|
||||||
|
BOVERFLOW bo;
|
||||||
|
DBT hdr;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
UMRW_SET(bo.unused1);
|
||||||
|
B_TSET(bo.type, type);
|
||||||
|
UMRW_SET(bo.unused2);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If we're creating an overflow item, do so and acquire the page
|
||||||
|
* number for it. If we're creating an off-page duplicates tree,
|
||||||
|
* we are giving the page number as an argument.
|
||||||
|
*/
|
||||||
|
if (type == B_OVERFLOW) {
|
||||||
|
if ((ret = __db_poff(dbc, item, &bo.pgno)) != 0)
|
||||||
|
return (ret);
|
||||||
|
bo.tlen = item->size;
|
||||||
|
} else {
|
||||||
|
bo.pgno = pgno;
|
||||||
|
bo.tlen = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Store the new record on the page. */
|
||||||
|
memset(&hdr, 0, sizeof(hdr));
|
||||||
|
hdr.data = &bo;
|
||||||
|
hdr.size = BOVERFLOW_SIZE;
|
||||||
|
return (__db_pitem(dbc, h, indx, BOVERFLOW_SIZE, &hdr, NULL));
|
||||||
|
}
|
||||||
1663
btree/bt_rec.c
Normal file
1663
btree/bt_rec.c
Normal file
File diff suppressed because it is too large
Load Diff
82
btree/bt_reclaim.c
Normal file
82
btree/bt_reclaim.c
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
/*-
|
||||||
|
* See the file LICENSE for redistribution information.
|
||||||
|
*
|
||||||
|
* Copyright (c) 1998,2008 Oracle. All rights reserved.
|
||||||
|
*
|
||||||
|
* $Id: bt_reclaim.c 63573 2008-05-23 21:43:21Z trent.nelson $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "db_config.h"
|
||||||
|
|
||||||
|
#include "db_int.h"
|
||||||
|
#include "dbinc/db_page.h"
|
||||||
|
#include "dbinc/btree.h"
|
||||||
|
#include "dbinc/lock.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_reclaim --
|
||||||
|
* Free a database.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_reclaim __P((DB *, DB_THREAD_INFO *, DB_TXN *));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_reclaim(dbp, ip, txn)
|
||||||
|
DB *dbp;
|
||||||
|
DB_THREAD_INFO *ip;
|
||||||
|
DB_TXN *txn;
|
||||||
|
{
|
||||||
|
DBC *dbc;
|
||||||
|
DB_LOCK meta_lock;
|
||||||
|
int ret, t_ret;
|
||||||
|
|
||||||
|
/* Acquire a cursor. */
|
||||||
|
if ((ret = __db_cursor(dbp, ip, txn, &dbc, 0)) != 0)
|
||||||
|
return (ret);
|
||||||
|
|
||||||
|
/* Write lock the metapage for deallocations. */
|
||||||
|
if ((ret = __db_lget(dbc,
|
||||||
|
0, PGNO_BASE_MD, DB_LOCK_WRITE, 0, &meta_lock)) != 0)
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
/* Avoid locking every page, we have the handle locked exclusive. */
|
||||||
|
F_SET(dbc, DBC_DONTLOCK);
|
||||||
|
|
||||||
|
/* Walk the tree, freeing pages. */
|
||||||
|
ret = __bam_traverse(dbc,
|
||||||
|
DB_LOCK_WRITE, dbc->internal->root, __db_reclaim_callback, NULL);
|
||||||
|
|
||||||
|
if ((t_ret = __TLPUT(dbc, meta_lock)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
|
||||||
|
/* Discard the cursor. */
|
||||||
|
err: if ((t_ret = __dbc_close(dbc)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_truncate --
|
||||||
|
* Truncate a database.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_truncate __P((DBC *, u_int32_t *));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_truncate(dbc, countp)
|
||||||
|
DBC *dbc;
|
||||||
|
u_int32_t *countp;
|
||||||
|
{
|
||||||
|
u_int32_t count;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
count = 0;
|
||||||
|
|
||||||
|
/* Walk the tree, freeing pages. */
|
||||||
|
ret = __bam_traverse(dbc,
|
||||||
|
DB_LOCK_WRITE, dbc->internal->root, __db_truncate_callback, &count);
|
||||||
|
|
||||||
|
if (countp != NULL)
|
||||||
|
*countp = count;
|
||||||
|
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
1356
btree/bt_recno.c
Normal file
1356
btree/bt_recno.c
Normal file
File diff suppressed because it is too large
Load Diff
433
btree/bt_rsearch.c
Normal file
433
btree/bt_rsearch.c
Normal file
@@ -0,0 +1,433 @@
|
|||||||
|
/*-
|
||||||
|
* See the file LICENSE for redistribution information.
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996,2008 Oracle. All rights reserved.
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1990, 1993, 1994, 1995, 1996
|
||||||
|
* Keith Bostic. All rights reserved.
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1990, 1993
|
||||||
|
* The Regents of the University of California. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 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. 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.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* $Id: bt_rsearch.c 63573 2008-05-23 21:43:21Z trent.nelson $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "db_config.h"
|
||||||
|
|
||||||
|
#include "db_int.h"
|
||||||
|
#include "dbinc/db_page.h"
|
||||||
|
#include "dbinc/btree.h"
|
||||||
|
#include "dbinc/lock.h"
|
||||||
|
#include "dbinc/mp.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_rsearch --
|
||||||
|
* Search a btree for a record number.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_rsearch __P((DBC *, db_recno_t *, u_int32_t, int, int *));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_rsearch(dbc, recnop, flags, stop, exactp)
|
||||||
|
DBC *dbc;
|
||||||
|
db_recno_t *recnop;
|
||||||
|
u_int32_t flags;
|
||||||
|
int stop, *exactp;
|
||||||
|
{
|
||||||
|
BINTERNAL *bi;
|
||||||
|
BTREE_CURSOR *cp;
|
||||||
|
DB *dbp;
|
||||||
|
DB_LOCK lock;
|
||||||
|
DB_MPOOLFILE *mpf;
|
||||||
|
PAGE *h;
|
||||||
|
RINTERNAL *ri;
|
||||||
|
db_indx_t adjust, deloffset, indx, top;
|
||||||
|
db_lockmode_t lock_mode;
|
||||||
|
db_pgno_t pg;
|
||||||
|
db_recno_t recno, t_recno, total;
|
||||||
|
int ret, stack, t_ret;
|
||||||
|
|
||||||
|
dbp = dbc->dbp;
|
||||||
|
mpf = dbp->mpf;
|
||||||
|
cp = (BTREE_CURSOR *)dbc->internal;
|
||||||
|
h = NULL;
|
||||||
|
|
||||||
|
BT_STK_CLR(cp);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* There are several ways we search a btree tree. The flags argument
|
||||||
|
* specifies if we're acquiring read or write locks and if we are
|
||||||
|
* locking pairs of pages. In addition, if we're adding or deleting
|
||||||
|
* an item, we have to lock the entire tree, regardless. See btree.h
|
||||||
|
* for more details.
|
||||||
|
*
|
||||||
|
* If write-locking pages, we need to know whether or not to acquire a
|
||||||
|
* write lock on a page before getting it. This depends on how deep it
|
||||||
|
* is in tree, which we don't know until we acquire the root page. So,
|
||||||
|
* if we need to lock the root page we may have to upgrade it later,
|
||||||
|
* because we won't get the correct lock initially.
|
||||||
|
*
|
||||||
|
* Retrieve the root page.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if ((ret = __bam_get_root(dbc, cp->root, stop, flags, &stack)) != 0)
|
||||||
|
return (ret);
|
||||||
|
lock_mode = cp->csp->lock_mode;
|
||||||
|
lock = cp->csp->lock;
|
||||||
|
h = cp->csp->page;
|
||||||
|
|
||||||
|
BT_STK_CLR(cp);
|
||||||
|
/*
|
||||||
|
* If appending to the tree, set the record number now -- we have the
|
||||||
|
* root page locked.
|
||||||
|
*
|
||||||
|
* Delete only deletes exact matches, read only returns exact matches.
|
||||||
|
* Note, this is different from __bam_search(), which returns non-exact
|
||||||
|
* matches for read.
|
||||||
|
*
|
||||||
|
* The record may not exist. We can only return the correct location
|
||||||
|
* for the record immediately after the last record in the tree, so do
|
||||||
|
* a fast check now.
|
||||||
|
*/
|
||||||
|
total = RE_NREC(h);
|
||||||
|
if (LF_ISSET(SR_APPEND)) {
|
||||||
|
*exactp = 0;
|
||||||
|
*recnop = recno = total + 1;
|
||||||
|
} else {
|
||||||
|
recno = *recnop;
|
||||||
|
if (recno <= total)
|
||||||
|
*exactp = 1;
|
||||||
|
else {
|
||||||
|
*exactp = 0;
|
||||||
|
if (!LF_ISSET(SR_PAST_EOF) || recno > total + 1) {
|
||||||
|
/*
|
||||||
|
* Keep the page locked for serializability.
|
||||||
|
*
|
||||||
|
* XXX
|
||||||
|
* This leaves the root page locked, which will
|
||||||
|
* eliminate any concurrency. A possible fix
|
||||||
|
* would be to lock the last leaf page instead.
|
||||||
|
*/
|
||||||
|
ret = __memp_fput(mpf,
|
||||||
|
dbc->thread_info, h, dbc->priority);
|
||||||
|
if ((t_ret =
|
||||||
|
__TLPUT(dbc, lock)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
return (ret == 0 ? DB_NOTFOUND : ret);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* !!!
|
||||||
|
* Record numbers in the tree are 0-based, but the recno is
|
||||||
|
* 1-based. All of the calculations below have to take this
|
||||||
|
* into account.
|
||||||
|
*/
|
||||||
|
for (total = 0;;) {
|
||||||
|
switch (TYPE(h)) {
|
||||||
|
case P_LBTREE:
|
||||||
|
case P_LDUP:
|
||||||
|
recno -= total;
|
||||||
|
/*
|
||||||
|
* There may be logically deleted records on the page.
|
||||||
|
* If there are enough, the record may not exist.
|
||||||
|
*/
|
||||||
|
if (TYPE(h) == P_LBTREE) {
|
||||||
|
adjust = P_INDX;
|
||||||
|
deloffset = O_INDX;
|
||||||
|
} else {
|
||||||
|
adjust = O_INDX;
|
||||||
|
deloffset = 0;
|
||||||
|
}
|
||||||
|
for (t_recno = 0, indx = 0;; indx += adjust) {
|
||||||
|
if (indx >= NUM_ENT(h)) {
|
||||||
|
*exactp = 0;
|
||||||
|
if (!LF_ISSET(SR_PAST_EOF) ||
|
||||||
|
recno > t_recno + 1) {
|
||||||
|
ret = __memp_fput(mpf,
|
||||||
|
dbc->thread_info,
|
||||||
|
h, dbc->priority);
|
||||||
|
h = NULL;
|
||||||
|
if ((t_ret = __TLPUT(dbc,
|
||||||
|
lock)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
if (ret == 0)
|
||||||
|
ret = DB_NOTFOUND;
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!B_DISSET(GET_BKEYDATA(dbp, h,
|
||||||
|
indx + deloffset)->type) &&
|
||||||
|
++t_recno == recno)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Correct from 1-based to 0-based for a page offset. */
|
||||||
|
BT_STK_ENTER(dbp->env,
|
||||||
|
cp, h, indx, lock, lock_mode, ret);
|
||||||
|
if (ret != 0)
|
||||||
|
goto err;
|
||||||
|
return (0);
|
||||||
|
case P_IBTREE:
|
||||||
|
for (indx = 0, top = NUM_ENT(h);;) {
|
||||||
|
bi = GET_BINTERNAL(dbp, h, indx);
|
||||||
|
if (++indx == top || total + bi->nrecs >= recno)
|
||||||
|
break;
|
||||||
|
total += bi->nrecs;
|
||||||
|
}
|
||||||
|
pg = bi->pgno;
|
||||||
|
break;
|
||||||
|
case P_LRECNO:
|
||||||
|
recno -= total;
|
||||||
|
|
||||||
|
/* Correct from 1-based to 0-based for a page offset. */
|
||||||
|
--recno;
|
||||||
|
BT_STK_ENTER(dbp->env,
|
||||||
|
cp, h, recno, lock, lock_mode, ret);
|
||||||
|
if (ret != 0)
|
||||||
|
goto err;
|
||||||
|
return (0);
|
||||||
|
case P_IRECNO:
|
||||||
|
for (indx = 0, top = NUM_ENT(h);;) {
|
||||||
|
ri = GET_RINTERNAL(dbp, h, indx);
|
||||||
|
if (++indx == top || total + ri->nrecs >= recno)
|
||||||
|
break;
|
||||||
|
total += ri->nrecs;
|
||||||
|
}
|
||||||
|
pg = ri->pgno;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return (__db_pgfmt(dbp->env, h->pgno));
|
||||||
|
}
|
||||||
|
--indx;
|
||||||
|
|
||||||
|
/* Return if this is the lowest page wanted. */
|
||||||
|
if (stop == LEVEL(h)) {
|
||||||
|
BT_STK_ENTER(dbp->env,
|
||||||
|
cp, h, indx, lock, lock_mode, ret);
|
||||||
|
if (ret != 0)
|
||||||
|
goto err;
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
if (stack) {
|
||||||
|
BT_STK_PUSH(dbp->env,
|
||||||
|
cp, h, indx, lock, lock_mode, ret);
|
||||||
|
if (ret != 0)
|
||||||
|
goto err;
|
||||||
|
h = NULL;
|
||||||
|
|
||||||
|
lock_mode = DB_LOCK_WRITE;
|
||||||
|
if ((ret =
|
||||||
|
__db_lget(dbc, 0, pg, lock_mode, 0, &lock)) != 0)
|
||||||
|
goto err;
|
||||||
|
} else {
|
||||||
|
/*
|
||||||
|
* Decide if we want to return a pointer to the next
|
||||||
|
* page in the stack. If we do, write lock it and
|
||||||
|
* never unlock it.
|
||||||
|
*/
|
||||||
|
if ((LF_ISSET(SR_PARENT) &&
|
||||||
|
(u_int8_t)(stop + 1) >= (u_int8_t)(LEVEL(h) - 1)) ||
|
||||||
|
(LEVEL(h) - 1) == LEAFLEVEL)
|
||||||
|
stack = 1;
|
||||||
|
|
||||||
|
if ((ret = __memp_fput(mpf,
|
||||||
|
dbc->thread_info, h, dbc->priority)) != 0)
|
||||||
|
goto err;
|
||||||
|
h = NULL;
|
||||||
|
|
||||||
|
lock_mode = stack &&
|
||||||
|
LF_ISSET(SR_WRITE) ? DB_LOCK_WRITE : DB_LOCK_READ;
|
||||||
|
if ((ret = __db_lget(dbc,
|
||||||
|
LCK_COUPLE_ALWAYS, pg, lock_mode, 0, &lock)) != 0) {
|
||||||
|
/*
|
||||||
|
* If we fail, discard the lock we held. This
|
||||||
|
* is OK because this only happens when we are
|
||||||
|
* descending the tree holding read-locks.
|
||||||
|
*/
|
||||||
|
(void)__LPUT(dbc, lock);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((ret = __memp_fget(mpf, &pg,
|
||||||
|
dbc->thread_info, dbc->txn, 0, &h)) != 0)
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
/* NOTREACHED */
|
||||||
|
|
||||||
|
err: if (h != NULL && (t_ret = __memp_fput(mpf,
|
||||||
|
dbc->thread_info, h, dbc->priority)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
|
||||||
|
BT_STK_POP(cp);
|
||||||
|
__bam_stkrel(dbc, 0);
|
||||||
|
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_adjust --
|
||||||
|
* Adjust the tree after adding or deleting a record.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_adjust __P((DBC *, int32_t));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_adjust(dbc, adjust)
|
||||||
|
DBC *dbc;
|
||||||
|
int32_t adjust;
|
||||||
|
{
|
||||||
|
BTREE_CURSOR *cp;
|
||||||
|
DB *dbp;
|
||||||
|
DB_MPOOLFILE *mpf;
|
||||||
|
EPG *epg;
|
||||||
|
PAGE *h;
|
||||||
|
db_pgno_t root_pgno;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
dbp = dbc->dbp;
|
||||||
|
mpf = dbp->mpf;
|
||||||
|
cp = (BTREE_CURSOR *)dbc->internal;
|
||||||
|
root_pgno = cp->root;
|
||||||
|
|
||||||
|
/* Update the record counts for the tree. */
|
||||||
|
for (epg = cp->sp; epg <= cp->csp; ++epg) {
|
||||||
|
h = epg->page;
|
||||||
|
if (TYPE(h) == P_IBTREE || TYPE(h) == P_IRECNO) {
|
||||||
|
if ((ret = __memp_dirty(mpf, &h,
|
||||||
|
dbc->thread_info, dbc->txn, dbc->priority, 0)) != 0)
|
||||||
|
return (ret);
|
||||||
|
epg->page = h;
|
||||||
|
if (DBC_LOGGING(dbc)) {
|
||||||
|
if ((ret = __bam_cadjust_log(dbp, dbc->txn,
|
||||||
|
&LSN(h), 0, PGNO(h), &LSN(h),
|
||||||
|
(u_int32_t)epg->indx, adjust,
|
||||||
|
PGNO(h) == root_pgno ?
|
||||||
|
CAD_UPDATEROOT : 0)) != 0)
|
||||||
|
return (ret);
|
||||||
|
} else
|
||||||
|
LSN_NOT_LOGGED(LSN(h));
|
||||||
|
|
||||||
|
if (TYPE(h) == P_IBTREE)
|
||||||
|
GET_BINTERNAL(dbp, h, epg->indx)->nrecs +=
|
||||||
|
adjust;
|
||||||
|
else
|
||||||
|
GET_RINTERNAL(dbp, h, epg->indx)->nrecs +=
|
||||||
|
adjust;
|
||||||
|
|
||||||
|
if (PGNO(h) == root_pgno)
|
||||||
|
RE_NREC_ADJ(h, adjust);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_nrecs --
|
||||||
|
* Return the number of records in the tree.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_nrecs __P((DBC *, db_recno_t *));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_nrecs(dbc, rep)
|
||||||
|
DBC *dbc;
|
||||||
|
db_recno_t *rep;
|
||||||
|
{
|
||||||
|
DB *dbp;
|
||||||
|
DB_LOCK lock;
|
||||||
|
DB_MPOOLFILE *mpf;
|
||||||
|
PAGE *h;
|
||||||
|
db_pgno_t pgno;
|
||||||
|
int ret, t_ret;
|
||||||
|
|
||||||
|
dbp = dbc->dbp;
|
||||||
|
mpf = dbp->mpf;
|
||||||
|
|
||||||
|
pgno = dbc->internal->root;
|
||||||
|
if ((ret = __db_lget(dbc, 0, pgno, DB_LOCK_READ, 0, &lock)) != 0)
|
||||||
|
return (ret);
|
||||||
|
if ((ret = __memp_fget(mpf, &pgno,
|
||||||
|
dbc->thread_info, dbc->txn, 0, &h)) != 0)
|
||||||
|
return (ret);
|
||||||
|
|
||||||
|
*rep = RE_NREC(h);
|
||||||
|
|
||||||
|
ret = __memp_fput(mpf, dbc->thread_info, h, dbc->priority);
|
||||||
|
if ((t_ret = __TLPUT(dbc, lock)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_total --
|
||||||
|
* Return the number of records below a page.
|
||||||
|
*
|
||||||
|
* PUBLIC: db_recno_t __bam_total __P((DB *, PAGE *));
|
||||||
|
*/
|
||||||
|
db_recno_t
|
||||||
|
__bam_total(dbp, h)
|
||||||
|
DB *dbp;
|
||||||
|
PAGE *h;
|
||||||
|
{
|
||||||
|
db_recno_t nrecs;
|
||||||
|
db_indx_t indx, top;
|
||||||
|
|
||||||
|
nrecs = 0;
|
||||||
|
top = NUM_ENT(h);
|
||||||
|
|
||||||
|
switch (TYPE(h)) {
|
||||||
|
case P_LBTREE:
|
||||||
|
/* Check for logically deleted records. */
|
||||||
|
for (indx = 0; indx < top; indx += P_INDX)
|
||||||
|
if (!B_DISSET(
|
||||||
|
GET_BKEYDATA(dbp, h, indx + O_INDX)->type))
|
||||||
|
++nrecs;
|
||||||
|
break;
|
||||||
|
case P_LDUP:
|
||||||
|
/* Check for logically deleted records. */
|
||||||
|
for (indx = 0; indx < top; indx += O_INDX)
|
||||||
|
if (!B_DISSET(GET_BKEYDATA(dbp, h, indx)->type))
|
||||||
|
++nrecs;
|
||||||
|
break;
|
||||||
|
case P_IBTREE:
|
||||||
|
for (indx = 0; indx < top; indx += O_INDX)
|
||||||
|
nrecs += GET_BINTERNAL(dbp, h, indx)->nrecs;
|
||||||
|
break;
|
||||||
|
case P_LRECNO:
|
||||||
|
nrecs = NUM_ENT(h);
|
||||||
|
break;
|
||||||
|
case P_IRECNO:
|
||||||
|
for (indx = 0; indx < top; indx += O_INDX)
|
||||||
|
nrecs += GET_RINTERNAL(dbp, h, indx)->nrecs;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (nrecs);
|
||||||
|
}
|
||||||
715
btree/bt_search.c
Normal file
715
btree/bt_search.c
Normal file
@@ -0,0 +1,715 @@
|
|||||||
|
/*-
|
||||||
|
* See the file LICENSE for redistribution information.
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996,2008 Oracle. All rights reserved.
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1990, 1993, 1994, 1995, 1996
|
||||||
|
* Keith Bostic. All rights reserved.
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1990, 1993, 1994, 1995
|
||||||
|
* The Regents of the University of California. All rights reserved.
|
||||||
|
*
|
||||||
|
* This code is derived from software contributed to Berkeley by
|
||||||
|
* Mike Olson.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 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. 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.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* $Id: bt_search.c 63573 2008-05-23 21:43:21Z trent.nelson $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "db_config.h"
|
||||||
|
|
||||||
|
#include "db_int.h"
|
||||||
|
#include "dbinc/db_page.h"
|
||||||
|
#include "dbinc/btree.h"
|
||||||
|
#include "dbinc/lock.h"
|
||||||
|
#include "dbinc/mp.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_get_root --
|
||||||
|
* Fetch the root of a tree and see if we want to keep
|
||||||
|
* it in the stack.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_get_root __P((DBC *, db_pgno_t, int, u_int32_t, int *));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_get_root(dbc, pg, slevel, flags, stack)
|
||||||
|
DBC *dbc;
|
||||||
|
db_pgno_t pg;
|
||||||
|
int slevel;
|
||||||
|
u_int32_t flags;
|
||||||
|
int *stack;
|
||||||
|
{
|
||||||
|
BTREE_CURSOR *cp;
|
||||||
|
DB *dbp;
|
||||||
|
DB_LOCK lock;
|
||||||
|
DB_MPOOLFILE *mpf;
|
||||||
|
PAGE *h;
|
||||||
|
db_lockmode_t lock_mode;
|
||||||
|
int ret, t_ret;
|
||||||
|
|
||||||
|
dbp = dbc->dbp;
|
||||||
|
mpf = dbp->mpf;
|
||||||
|
cp = (BTREE_CURSOR *)dbc->internal;
|
||||||
|
/*
|
||||||
|
* If write-locking pages, we need to know whether or not to acquire a
|
||||||
|
* write lock on a page before getting it. This depends on how deep it
|
||||||
|
* is in tree, which we don't know until we acquire the root page. So,
|
||||||
|
* if we need to lock the root page we may have to upgrade it later,
|
||||||
|
* because we won't get the correct lock initially.
|
||||||
|
*
|
||||||
|
* Retrieve the root page.
|
||||||
|
*/
|
||||||
|
try_again:
|
||||||
|
*stack = LF_ISSET(SR_STACK) &&
|
||||||
|
(dbc->dbtype == DB_RECNO || F_ISSET(cp, C_RECNUM));
|
||||||
|
lock_mode = DB_LOCK_READ;
|
||||||
|
if (*stack ||
|
||||||
|
LF_ISSET(SR_DEL) || (LF_ISSET(SR_NEXT) && LF_ISSET(SR_WRITE)))
|
||||||
|
lock_mode = DB_LOCK_WRITE;
|
||||||
|
if ((ret = __db_lget(dbc, 0, pg, lock_mode, 0, &lock)) != 0)
|
||||||
|
return (ret);
|
||||||
|
if ((ret = __memp_fget(mpf, &pg,
|
||||||
|
dbc->thread_info, dbc->txn, 0, &h)) != 0) {
|
||||||
|
/* Did not read it, so we can release the lock */
|
||||||
|
(void)__LPUT(dbc, lock);
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Decide if we need to save this page; if we do, write lock it.
|
||||||
|
* We deliberately don't lock-couple on this call. If the tree
|
||||||
|
* is tiny, i.e., one page, and two threads are busily updating
|
||||||
|
* the root page, we're almost guaranteed deadlocks galore, as
|
||||||
|
* each one gets a read lock and then blocks the other's attempt
|
||||||
|
* for a write lock.
|
||||||
|
*/
|
||||||
|
if (!*stack &&
|
||||||
|
((LF_ISSET(SR_PARENT) && (u_int8_t)(slevel + 1) >= LEVEL(h)) ||
|
||||||
|
(LF_ISSET(SR_WRITE) && LEVEL(h) == LEAFLEVEL) ||
|
||||||
|
(LF_ISSET(SR_START) && slevel == LEVEL(h)))) {
|
||||||
|
if (!STD_LOCKING(dbc))
|
||||||
|
goto no_relock;
|
||||||
|
ret = __memp_fput(mpf, dbc->thread_info, h, dbc->priority);
|
||||||
|
if ((t_ret = __LPUT(dbc, lock)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
if (ret != 0)
|
||||||
|
return (ret);
|
||||||
|
lock_mode = DB_LOCK_WRITE;
|
||||||
|
if ((ret = __db_lget(dbc, 0, pg, lock_mode, 0, &lock)) != 0)
|
||||||
|
return (ret);
|
||||||
|
if ((ret = __memp_fget(mpf, &pg,
|
||||||
|
dbc->thread_info, dbc->txn, 0, &h)) != 0) {
|
||||||
|
/* Did not read it, so we can release the lock */
|
||||||
|
(void)__LPUT(dbc, lock);
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
if (!((LF_ISSET(SR_PARENT) &&
|
||||||
|
(u_int8_t)(slevel + 1) >= LEVEL(h)) ||
|
||||||
|
(LF_ISSET(SR_WRITE) && LEVEL(h) == LEAFLEVEL) ||
|
||||||
|
(LF_ISSET(SR_START) && slevel == LEVEL(h)))) {
|
||||||
|
/* Someone else split the root, start over. */
|
||||||
|
ret = __memp_fput(mpf,
|
||||||
|
dbc->thread_info, h, dbc->priority);
|
||||||
|
if ((t_ret = __LPUT(dbc, lock)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
if (ret != 0)
|
||||||
|
return (ret);
|
||||||
|
goto try_again;
|
||||||
|
}
|
||||||
|
no_relock: *stack = 1;
|
||||||
|
}
|
||||||
|
BT_STK_ENTER(dbp->env, cp, h, 0, lock, lock_mode, ret);
|
||||||
|
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_search --
|
||||||
|
* Search a btree for a key.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_search __P((DBC *, db_pgno_t,
|
||||||
|
* PUBLIC: const DBT *, u_int32_t, int, db_recno_t *, int *));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_search(dbc, root_pgno, key, flags, slevel, recnop, exactp)
|
||||||
|
DBC *dbc;
|
||||||
|
db_pgno_t root_pgno;
|
||||||
|
const DBT *key;
|
||||||
|
u_int32_t flags;
|
||||||
|
int slevel, *exactp;
|
||||||
|
db_recno_t *recnop;
|
||||||
|
{
|
||||||
|
BTREE *t;
|
||||||
|
BTREE_CURSOR *cp;
|
||||||
|
DB *dbp;
|
||||||
|
DB_LOCK lock;
|
||||||
|
DB_MPOOLFILE *mpf;
|
||||||
|
ENV *env;
|
||||||
|
PAGE *h;
|
||||||
|
db_indx_t base, i, indx, *inp, lim;
|
||||||
|
db_lockmode_t lock_mode;
|
||||||
|
db_pgno_t pg;
|
||||||
|
db_recno_t recno;
|
||||||
|
int adjust, cmp, deloffset, ret, set_stack, stack, t_ret;
|
||||||
|
int (*func) __P((DB *, const DBT *, const DBT *));
|
||||||
|
|
||||||
|
dbp = dbc->dbp;
|
||||||
|
env = dbp->env;
|
||||||
|
mpf = dbp->mpf;
|
||||||
|
cp = (BTREE_CURSOR *)dbc->internal;
|
||||||
|
h = NULL;
|
||||||
|
t = dbp->bt_internal;
|
||||||
|
recno = 0;
|
||||||
|
set_stack = 0;
|
||||||
|
|
||||||
|
BT_STK_CLR(cp);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* There are several ways we search a btree tree. The flags argument
|
||||||
|
* specifies if we're acquiring read or write locks, if we position
|
||||||
|
* to the first or last item in a set of duplicates, if we return
|
||||||
|
* deleted items, and if we are locking pairs of pages. In addition,
|
||||||
|
* if we're modifying record numbers, we have to lock the entire tree
|
||||||
|
* regardless. See btree.h for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (root_pgno == PGNO_INVALID)
|
||||||
|
root_pgno = cp->root;
|
||||||
|
if ((ret = __bam_get_root(dbc, root_pgno, slevel, flags, &stack)) != 0)
|
||||||
|
return (ret);
|
||||||
|
lock_mode = cp->csp->lock_mode;
|
||||||
|
lock = cp->csp->lock;
|
||||||
|
h = cp->csp->page;
|
||||||
|
|
||||||
|
BT_STK_CLR(cp);
|
||||||
|
|
||||||
|
/* Choose a comparison function. */
|
||||||
|
func = F_ISSET(dbc, DBC_OPD) ?
|
||||||
|
(dbp->dup_compare == NULL ? __bam_defcmp : dbp->dup_compare) :
|
||||||
|
t->bt_compare;
|
||||||
|
|
||||||
|
for (;;) {
|
||||||
|
inp = P_INP(dbp, h);
|
||||||
|
adjust = TYPE(h) == P_LBTREE ? P_INDX : O_INDX;
|
||||||
|
if (LF_ISSET(SR_MIN | SR_MAX)) {
|
||||||
|
if (LF_ISSET(SR_MIN) || NUM_ENT(h) == 0)
|
||||||
|
indx = 0;
|
||||||
|
else if (TYPE(h) == P_LBTREE)
|
||||||
|
indx = NUM_ENT(h) - 2;
|
||||||
|
else
|
||||||
|
indx = NUM_ENT(h) - 1;
|
||||||
|
|
||||||
|
if (LEVEL(h) == LEAFLEVEL ||
|
||||||
|
(!LF_ISSET(SR_START) && LEVEL(h) == slevel)) {
|
||||||
|
if (LF_ISSET(SR_NEXT))
|
||||||
|
goto get_next;
|
||||||
|
goto found;
|
||||||
|
}
|
||||||
|
goto next;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* Do a binary search on the current page. If we're searching
|
||||||
|
* a Btree leaf page, we have to walk the indices in groups of
|
||||||
|
* two. If we're searching an internal page or a off-page dup
|
||||||
|
* page, they're an index per page item. If we find an exact
|
||||||
|
* match on a leaf page, we're done.
|
||||||
|
*/
|
||||||
|
DB_BINARY_SEARCH_FOR(base, lim, h, adjust) {
|
||||||
|
DB_BINARY_SEARCH_INCR(indx, base, lim, adjust);
|
||||||
|
if ((ret = __bam_cmp(dbp, dbc->thread_info,
|
||||||
|
dbc->txn, key, h, indx, func, &cmp)) != 0)
|
||||||
|
goto err;
|
||||||
|
if (cmp == 0) {
|
||||||
|
if (LEVEL(h) == LEAFLEVEL ||
|
||||||
|
(!LF_ISSET(SR_START) &&
|
||||||
|
LEVEL(h) == slevel)) {
|
||||||
|
if (LF_ISSET(SR_NEXT))
|
||||||
|
goto get_next;
|
||||||
|
goto found;
|
||||||
|
}
|
||||||
|
goto next;
|
||||||
|
}
|
||||||
|
if (cmp > 0)
|
||||||
|
DB_BINARY_SEARCH_SHIFT_BASE(indx, base,
|
||||||
|
lim, adjust);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* No match found. Base is the smallest index greater than
|
||||||
|
* key and may be zero or a last + O_INDX index.
|
||||||
|
*
|
||||||
|
* If it's a leaf page or the stopping point,
|
||||||
|
* return base as the "found" value.
|
||||||
|
* Delete only deletes exact matches.
|
||||||
|
*/
|
||||||
|
if (LEVEL(h) == LEAFLEVEL ||
|
||||||
|
(!LF_ISSET(SR_START) && LEVEL(h) == slevel)) {
|
||||||
|
*exactp = 0;
|
||||||
|
|
||||||
|
if (LF_ISSET(SR_EXACT)) {
|
||||||
|
ret = DB_NOTFOUND;
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (LF_ISSET(SR_STK_ONLY)) {
|
||||||
|
BT_STK_NUM(env, cp, h, base, ret);
|
||||||
|
if ((t_ret =
|
||||||
|
__LPUT(dbc, lock)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
if ((t_ret = __memp_fput(mpf, dbc->thread_info,
|
||||||
|
h, dbc->priority)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
if (LF_ISSET(SR_NEXT)) {
|
||||||
|
get_next: /*
|
||||||
|
* The caller could have asked for a NEXT
|
||||||
|
* at the root if the tree recently collapsed.
|
||||||
|
*/
|
||||||
|
if (PGNO(h) == root_pgno) {
|
||||||
|
ret = DB_NOTFOUND;
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* Save the root of the subtree
|
||||||
|
* and drop the rest of the subtree
|
||||||
|
* and search down again starting at
|
||||||
|
* the next child.
|
||||||
|
*/
|
||||||
|
if ((ret = __LPUT(dbc, lock)) != 0)
|
||||||
|
goto err;
|
||||||
|
if ((ret = __memp_fput(mpf,
|
||||||
|
dbc->thread_info, h, dbc->priority)) != 0)
|
||||||
|
goto err;
|
||||||
|
h = NULL;
|
||||||
|
LF_SET(SR_MIN);
|
||||||
|
LF_CLR(SR_NEXT);
|
||||||
|
indx = cp->sp->indx + 1;
|
||||||
|
if (indx == NUM_ENT(cp->sp->page)) {
|
||||||
|
ret = DB_NOTFOUND;
|
||||||
|
cp->csp++;
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
h = cp->sp->page;
|
||||||
|
cp->sp->page = NULL;
|
||||||
|
lock = cp->sp->lock;
|
||||||
|
LOCK_INIT(cp->sp->lock);
|
||||||
|
if ((ret = __bam_stkrel(dbc, STK_NOLOCK)) != 0)
|
||||||
|
goto err;
|
||||||
|
stack = 1;
|
||||||
|
goto next;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* !!!
|
||||||
|
* Possibly returning a deleted record -- DB_SET_RANGE,
|
||||||
|
* DB_KEYFIRST and DB_KEYLAST don't require an exact
|
||||||
|
* match, and we don't want to walk multiple pages here
|
||||||
|
* to find an undeleted record. This is handled by the
|
||||||
|
* calling routine.
|
||||||
|
*/
|
||||||
|
if (LF_ISSET(SR_DEL) && cp->csp == cp->sp)
|
||||||
|
cp->csp++;
|
||||||
|
BT_STK_ENTER(env, cp, h, base, lock, lock_mode, ret);
|
||||||
|
if (ret != 0)
|
||||||
|
goto err;
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If it's not a leaf page, record the internal page (which is
|
||||||
|
* a parent page for the key). Decrement the base by 1 if it's
|
||||||
|
* non-zero so that if a split later occurs, the inserted page
|
||||||
|
* will be to the right of the saved page.
|
||||||
|
*/
|
||||||
|
indx = base > 0 ? base - O_INDX : base;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If we're trying to calculate the record number, sum up
|
||||||
|
* all the record numbers on this page up to the indx point.
|
||||||
|
*/
|
||||||
|
next: if (recnop != NULL)
|
||||||
|
for (i = 0; i < indx; ++i)
|
||||||
|
recno += GET_BINTERNAL(dbp, h, i)->nrecs;
|
||||||
|
|
||||||
|
pg = GET_BINTERNAL(dbp, h, indx)->pgno;
|
||||||
|
|
||||||
|
/* See if we are at the level to start stacking. */
|
||||||
|
if (LF_ISSET(SR_START) && slevel == LEVEL(h))
|
||||||
|
stack = 1;
|
||||||
|
|
||||||
|
if (LF_ISSET(SR_STK_ONLY)) {
|
||||||
|
if (slevel == LEVEL(h)) {
|
||||||
|
BT_STK_NUM(env, cp, h, indx, ret);
|
||||||
|
if ((t_ret =
|
||||||
|
__LPUT(dbc, lock)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
if ((t_ret = __memp_fput(mpf, dbc->thread_info,
|
||||||
|
h, dbc->priority)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
BT_STK_NUMPUSH(env, cp, h, indx, ret);
|
||||||
|
(void)__memp_fput(mpf,
|
||||||
|
dbc->thread_info, h, dbc->priority);
|
||||||
|
h = NULL;
|
||||||
|
if ((ret = __db_lget(dbc,
|
||||||
|
LCK_COUPLE_ALWAYS, pg, lock_mode, 0, &lock)) != 0) {
|
||||||
|
/*
|
||||||
|
* Discard our lock and return on failure. This
|
||||||
|
* is OK because it only happens when descending
|
||||||
|
* the tree holding read-locks.
|
||||||
|
*/
|
||||||
|
(void)__LPUT(dbc, lock);
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
} else if (stack) {
|
||||||
|
/* Return if this is the lowest page wanted. */
|
||||||
|
if (LF_ISSET(SR_PARENT) && slevel == LEVEL(h)) {
|
||||||
|
BT_STK_ENTER(env,
|
||||||
|
cp, h, indx, lock, lock_mode, ret);
|
||||||
|
if (ret != 0)
|
||||||
|
goto err;
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
if (LF_ISSET(SR_DEL) && NUM_ENT(h) > 1) {
|
||||||
|
/*
|
||||||
|
* There was a page with a singleton pointer
|
||||||
|
* to a non-empty subtree.
|
||||||
|
*/
|
||||||
|
cp->csp--;
|
||||||
|
if ((ret = __bam_stkrel(dbc, STK_NOLOCK)) != 0)
|
||||||
|
goto err;
|
||||||
|
set_stack = stack = 0;
|
||||||
|
goto do_del;
|
||||||
|
}
|
||||||
|
BT_STK_PUSH(env,
|
||||||
|
cp, h, indx, lock, lock_mode, ret);
|
||||||
|
if (ret != 0)
|
||||||
|
goto err;
|
||||||
|
h = NULL;
|
||||||
|
|
||||||
|
lock_mode = DB_LOCK_WRITE;
|
||||||
|
if ((ret =
|
||||||
|
__db_lget(dbc, 0, pg, lock_mode, 0, &lock)) != 0)
|
||||||
|
goto err;
|
||||||
|
} else {
|
||||||
|
/*
|
||||||
|
* Decide if we want to return a reference to the next
|
||||||
|
* page in the return stack. If so, lock it and never
|
||||||
|
* unlock it. We will want to stack things on the
|
||||||
|
* next iteration. The stack variable cannot be
|
||||||
|
* set until we leave this clause.
|
||||||
|
*/
|
||||||
|
if ((LF_ISSET(SR_PARENT) &&
|
||||||
|
(u_int8_t)(slevel + 1) >= (LEVEL(h) - 1)) ||
|
||||||
|
(LEVEL(h) - 1) == LEAFLEVEL)
|
||||||
|
set_stack = 1;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returning a subtree. See if we have hit the start
|
||||||
|
* point if so save the parent and set stack.
|
||||||
|
* Otherwise free the parent and temporarily
|
||||||
|
* save this one.
|
||||||
|
* For SR_DEL we need to find a page with 1 entry.
|
||||||
|
* For SR_NEXT we want find the minimal subtree
|
||||||
|
* that contains the key and the next page.
|
||||||
|
* We save pages as long as we are at the right
|
||||||
|
* edge of the subtree. When we leave the right
|
||||||
|
* edge, then drop the subtree.
|
||||||
|
*/
|
||||||
|
if (!LF_ISSET(SR_DEL | SR_NEXT)) {
|
||||||
|
if ((ret = __memp_fput(mpf,
|
||||||
|
dbc->thread_info, h, dbc->priority)) != 0)
|
||||||
|
goto err;
|
||||||
|
goto lock_next;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((LF_ISSET(SR_DEL) && NUM_ENT(h) == 1)) {
|
||||||
|
/*
|
||||||
|
* We are pushing the things on the stack,
|
||||||
|
* set the stack variable now to indicate this
|
||||||
|
* has happened.
|
||||||
|
*/
|
||||||
|
stack = set_stack = 1;
|
||||||
|
LF_SET(SR_WRITE);
|
||||||
|
/* Push the parent. */
|
||||||
|
cp->csp++;
|
||||||
|
/* Push this node. */
|
||||||
|
BT_STK_PUSH(env, cp, h,
|
||||||
|
indx, lock, lock_mode, ret);
|
||||||
|
if (ret != 0)
|
||||||
|
goto err;
|
||||||
|
LOCK_INIT(lock);
|
||||||
|
} else {
|
||||||
|
/*
|
||||||
|
* See if we want to save the tree so far.
|
||||||
|
* If we are looking for the next key,
|
||||||
|
* then we must save this node if we are
|
||||||
|
* at the end of the page. If not then
|
||||||
|
* discard anything we have saved so far.
|
||||||
|
* For delete only keep one node until
|
||||||
|
* we find a singleton.
|
||||||
|
*/
|
||||||
|
do_del: if (cp->csp->page != NULL) {
|
||||||
|
if (LF_ISSET(SR_NEXT) &&
|
||||||
|
indx == NUM_ENT(h) - 1)
|
||||||
|
cp->csp++;
|
||||||
|
else if ((ret =
|
||||||
|
__bam_stkrel(dbc, STK_NOLOCK)) != 0)
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
/* Save this node. */
|
||||||
|
BT_STK_ENTER(env, cp,
|
||||||
|
h, indx, lock, lock_mode, ret);
|
||||||
|
if (ret != 0)
|
||||||
|
goto err;
|
||||||
|
LOCK_INIT(lock);
|
||||||
|
}
|
||||||
|
|
||||||
|
lock_next: h = NULL;
|
||||||
|
|
||||||
|
if (set_stack && LF_ISSET(SR_WRITE))
|
||||||
|
lock_mode = DB_LOCK_WRITE;
|
||||||
|
if ((ret = __db_lget(dbc,
|
||||||
|
LCK_COUPLE_ALWAYS, pg, lock_mode, 0, &lock)) != 0) {
|
||||||
|
/*
|
||||||
|
* If we fail, discard the lock we held. This
|
||||||
|
* is OK because this only happens when we are
|
||||||
|
* descending the tree holding read-locks.
|
||||||
|
*/
|
||||||
|
(void)__LPUT(dbc, lock);
|
||||||
|
if (LF_ISSET(SR_DEL | SR_NEXT) && !stack)
|
||||||
|
cp->csp++;
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
stack = set_stack;
|
||||||
|
}
|
||||||
|
if ((ret = __memp_fget(mpf, &pg,
|
||||||
|
dbc->thread_info, dbc->txn, 0, &h)) != 0)
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
/* NOTREACHED */
|
||||||
|
|
||||||
|
found: *exactp = 1;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If we got here, we know that we have a Btree leaf or off-page
|
||||||
|
* duplicates page. If it's a Btree leaf page, we have to handle
|
||||||
|
* on-page duplicates.
|
||||||
|
*
|
||||||
|
* If there are duplicates, go to the first/last one. This is
|
||||||
|
* safe because we know that we're not going to leave the page,
|
||||||
|
* all duplicate sets that are not on overflow pages exist on a
|
||||||
|
* single leaf page.
|
||||||
|
*/
|
||||||
|
if (TYPE(h) == P_LBTREE && NUM_ENT(h) > P_INDX) {
|
||||||
|
if (LF_ISSET(SR_DUPLAST))
|
||||||
|
while (indx < (db_indx_t)(NUM_ENT(h) - P_INDX) &&
|
||||||
|
inp[indx] == inp[indx + P_INDX])
|
||||||
|
indx += P_INDX;
|
||||||
|
else if (LF_ISSET(SR_DUPFIRST))
|
||||||
|
while (indx > 0 &&
|
||||||
|
inp[indx] == inp[indx - P_INDX])
|
||||||
|
indx -= P_INDX;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Now check if we are allowed to return deleted items; if not, then
|
||||||
|
* find the next (or previous) non-deleted duplicate entry. (We do
|
||||||
|
* not move from the original found key on the basis of the SR_DELNO
|
||||||
|
* flag.)
|
||||||
|
*/
|
||||||
|
DB_ASSERT(env, recnop == NULL || LF_ISSET(SR_DELNO));
|
||||||
|
if (LF_ISSET(SR_DELNO)) {
|
||||||
|
deloffset = TYPE(h) == P_LBTREE ? O_INDX : 0;
|
||||||
|
if (LF_ISSET(SR_DUPLAST))
|
||||||
|
while (B_DISSET(GET_BKEYDATA(dbp,
|
||||||
|
h, indx + deloffset)->type) && indx > 0 &&
|
||||||
|
inp[indx] == inp[indx - adjust])
|
||||||
|
indx -= adjust;
|
||||||
|
else
|
||||||
|
while (B_DISSET(GET_BKEYDATA(dbp,
|
||||||
|
h, indx + deloffset)->type) &&
|
||||||
|
indx < (db_indx_t)(NUM_ENT(h) - adjust) &&
|
||||||
|
inp[indx] == inp[indx + adjust])
|
||||||
|
indx += adjust;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If we weren't able to find a non-deleted duplicate, return
|
||||||
|
* DB_NOTFOUND.
|
||||||
|
*/
|
||||||
|
if (B_DISSET(GET_BKEYDATA(dbp, h, indx + deloffset)->type)) {
|
||||||
|
ret = DB_NOTFOUND;
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Increment the record counter to point to the found element.
|
||||||
|
* Ignore any deleted key/data pairs. There doesn't need to
|
||||||
|
* be any correction for duplicates, as Btree doesn't support
|
||||||
|
* duplicates and record numbers in the same tree.
|
||||||
|
*/
|
||||||
|
if (recnop != NULL) {
|
||||||
|
DB_ASSERT(env, TYPE(h) == P_LBTREE);
|
||||||
|
|
||||||
|
for (i = 0; i < indx; i += P_INDX)
|
||||||
|
if (!B_DISSET(
|
||||||
|
GET_BKEYDATA(dbp, h, i + O_INDX)->type))
|
||||||
|
++recno;
|
||||||
|
|
||||||
|
/* Correct the number for a 0-base. */
|
||||||
|
*recnop = recno + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (LF_ISSET(SR_STK_ONLY)) {
|
||||||
|
BT_STK_NUM(env, cp, h, indx, ret);
|
||||||
|
if ((t_ret = __LPUT(dbc, lock)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
if ((t_ret = __memp_fput(mpf,
|
||||||
|
dbc->thread_info, h, dbc->priority)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
} else {
|
||||||
|
if (LF_ISSET(SR_DEL) && cp->csp == cp->sp)
|
||||||
|
cp->csp++;
|
||||||
|
BT_STK_ENTER(env, cp, h, indx, lock, lock_mode, ret);
|
||||||
|
}
|
||||||
|
if (ret != 0)
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
return (0);
|
||||||
|
|
||||||
|
err: if (h != NULL && (t_ret = __memp_fput(mpf,
|
||||||
|
dbc->thread_info, h, dbc->priority)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
|
||||||
|
/* Keep any not-found page locked for serializability. */
|
||||||
|
if ((t_ret = __TLPUT(dbc, lock)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
|
||||||
|
BT_STK_POP(cp);
|
||||||
|
__bam_stkrel(dbc, 0);
|
||||||
|
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_stkrel --
|
||||||
|
* Release all pages currently held in the stack.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_stkrel __P((DBC *, u_int32_t));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_stkrel(dbc, flags)
|
||||||
|
DBC *dbc;
|
||||||
|
u_int32_t flags;
|
||||||
|
{
|
||||||
|
BTREE_CURSOR *cp;
|
||||||
|
DB *dbp;
|
||||||
|
DB_MPOOLFILE *mpf;
|
||||||
|
EPG *epg;
|
||||||
|
int ret, t_ret;
|
||||||
|
|
||||||
|
dbp = dbc->dbp;
|
||||||
|
mpf = dbp->mpf;
|
||||||
|
cp = (BTREE_CURSOR *)dbc->internal;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Release inner pages first.
|
||||||
|
*
|
||||||
|
* The caller must be sure that setting STK_NOLOCK will not effect
|
||||||
|
* either serializability or recoverability.
|
||||||
|
*/
|
||||||
|
for (ret = 0, epg = cp->sp; epg <= cp->csp; ++epg) {
|
||||||
|
if (epg->page != NULL) {
|
||||||
|
if (LF_ISSET(STK_CLRDBC) && cp->page == epg->page) {
|
||||||
|
cp->page = NULL;
|
||||||
|
LOCK_INIT(cp->lock);
|
||||||
|
}
|
||||||
|
if ((t_ret = __memp_fput(mpf, dbc->thread_info,
|
||||||
|
epg->page, dbc->priority)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
/*
|
||||||
|
* XXX
|
||||||
|
* Temporary fix for #3243 -- under certain deadlock
|
||||||
|
* conditions we call here again and re-free the page.
|
||||||
|
* The correct fix is to never release a stack that
|
||||||
|
* doesn't hold items.
|
||||||
|
*/
|
||||||
|
epg->page = NULL;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* We set this if we need to release our pins,
|
||||||
|
* but are not logically ready to have the pages
|
||||||
|
* visible.
|
||||||
|
*/
|
||||||
|
if (LF_ISSET(STK_PGONLY))
|
||||||
|
continue;
|
||||||
|
if (LF_ISSET(STK_NOLOCK)) {
|
||||||
|
if ((t_ret = __LPUT(dbc, epg->lock)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
} else
|
||||||
|
if ((t_ret = __TLPUT(dbc, epg->lock)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Clear the stack, all pages have been released. */
|
||||||
|
if (!LF_ISSET(STK_PGONLY))
|
||||||
|
BT_STK_CLR(cp);
|
||||||
|
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_stkgrow --
|
||||||
|
* Grow the stack.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_stkgrow __P((ENV *, BTREE_CURSOR *));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_stkgrow(env, cp)
|
||||||
|
ENV *env;
|
||||||
|
BTREE_CURSOR *cp;
|
||||||
|
{
|
||||||
|
EPG *p;
|
||||||
|
size_t entries;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
entries = cp->esp - cp->sp;
|
||||||
|
|
||||||
|
if ((ret = __os_calloc(env, entries * 2, sizeof(EPG), &p)) != 0)
|
||||||
|
return (ret);
|
||||||
|
memcpy(p, cp->sp, entries * sizeof(EPG));
|
||||||
|
if (cp->sp != cp->stack)
|
||||||
|
__os_free(env, cp->sp);
|
||||||
|
cp->sp = p;
|
||||||
|
cp->csp = p + entries;
|
||||||
|
cp->esp = p + entries * 2;
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
1228
btree/bt_split.c
Normal file
1228
btree/bt_split.c
Normal file
File diff suppressed because it is too large
Load Diff
656
btree/bt_stat.c
Normal file
656
btree/bt_stat.c
Normal file
@@ -0,0 +1,656 @@
|
|||||||
|
/*-
|
||||||
|
* See the file LICENSE for redistribution information.
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996,2008 Oracle. All rights reserved.
|
||||||
|
*
|
||||||
|
* $Id: bt_stat.c 63573 2008-05-23 21:43:21Z trent.nelson $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "db_config.h"
|
||||||
|
|
||||||
|
#include "db_int.h"
|
||||||
|
#include "dbinc/db_page.h"
|
||||||
|
#include "dbinc/btree.h"
|
||||||
|
#include "dbinc/lock.h"
|
||||||
|
#include "dbinc/mp.h"
|
||||||
|
|
||||||
|
#ifdef HAVE_STATISTICS
|
||||||
|
/*
|
||||||
|
* __bam_stat --
|
||||||
|
* Gather/print the btree statistics
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_stat __P((DBC *, void *, u_int32_t));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_stat(dbc, spp, flags)
|
||||||
|
DBC *dbc;
|
||||||
|
void *spp;
|
||||||
|
u_int32_t flags;
|
||||||
|
{
|
||||||
|
BTMETA *meta;
|
||||||
|
BTREE *t;
|
||||||
|
BTREE_CURSOR *cp;
|
||||||
|
DB *dbp;
|
||||||
|
DB_BTREE_STAT *sp;
|
||||||
|
DB_LOCK lock, metalock;
|
||||||
|
DB_MPOOLFILE *mpf;
|
||||||
|
ENV *env;
|
||||||
|
PAGE *h;
|
||||||
|
db_pgno_t pgno;
|
||||||
|
int ret, t_ret, write_meta;
|
||||||
|
|
||||||
|
dbp = dbc->dbp;
|
||||||
|
env = dbp->env;
|
||||||
|
|
||||||
|
meta = NULL;
|
||||||
|
t = dbp->bt_internal;
|
||||||
|
sp = NULL;
|
||||||
|
LOCK_INIT(metalock);
|
||||||
|
LOCK_INIT(lock);
|
||||||
|
mpf = dbp->mpf;
|
||||||
|
h = NULL;
|
||||||
|
ret = write_meta = 0;
|
||||||
|
|
||||||
|
cp = (BTREE_CURSOR *)dbc->internal;
|
||||||
|
|
||||||
|
/* Allocate and clear the structure. */
|
||||||
|
if ((ret = __os_umalloc(env, sizeof(*sp), &sp)) != 0)
|
||||||
|
goto err;
|
||||||
|
memset(sp, 0, sizeof(*sp));
|
||||||
|
|
||||||
|
/* Get the metadata page for the entire database. */
|
||||||
|
pgno = PGNO_BASE_MD;
|
||||||
|
if ((ret = __db_lget(dbc, 0, pgno, DB_LOCK_READ, 0, &metalock)) != 0)
|
||||||
|
goto err;
|
||||||
|
if ((ret = __memp_fget(mpf, &pgno,
|
||||||
|
dbc->thread_info, dbc->txn, 0, &meta)) != 0)
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
if (flags == DB_FAST_STAT)
|
||||||
|
goto meta_only;
|
||||||
|
|
||||||
|
/* Walk the metadata free list, counting pages. */
|
||||||
|
for (sp->bt_free = 0, pgno = meta->dbmeta.free; pgno != PGNO_INVALID;) {
|
||||||
|
++sp->bt_free;
|
||||||
|
|
||||||
|
if ((ret = __memp_fget(mpf, &pgno,
|
||||||
|
dbc->thread_info, dbc->txn, 0, &h)) != 0)
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
pgno = h->next_pgno;
|
||||||
|
if ((ret = __memp_fput(mpf,
|
||||||
|
dbc->thread_info, h, dbc->priority)) != 0)
|
||||||
|
goto err;
|
||||||
|
h = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Get the root page. */
|
||||||
|
pgno = cp->root;
|
||||||
|
if ((ret = __db_lget(dbc, 0, pgno, DB_LOCK_READ, 0, &lock)) != 0)
|
||||||
|
goto err;
|
||||||
|
if ((ret = __memp_fget(mpf, &pgno,
|
||||||
|
dbc->thread_info, dbc->txn, 0, &h)) != 0)
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
/* Get the levels from the root page. */
|
||||||
|
sp->bt_levels = h->level;
|
||||||
|
|
||||||
|
/* Discard the root page. */
|
||||||
|
ret = __memp_fput(mpf, dbc->thread_info, h, dbc->priority);
|
||||||
|
h = NULL;
|
||||||
|
if ((t_ret = __LPUT(dbc, lock)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
if (ret != 0)
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
/* Walk the tree. */
|
||||||
|
if ((ret = __bam_traverse(dbc,
|
||||||
|
DB_LOCK_READ, cp->root, __bam_stat_callback, sp)) != 0)
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get the subdatabase metadata page if it's not the same as the
|
||||||
|
* one we already have.
|
||||||
|
*/
|
||||||
|
write_meta = !F_ISSET(dbp, DB_AM_RDONLY) &&
|
||||||
|
(!MULTIVERSION(dbp) || dbc->txn != NULL);
|
||||||
|
meta_only:
|
||||||
|
if (t->bt_meta != PGNO_BASE_MD || write_meta) {
|
||||||
|
ret = __memp_fput(mpf, dbc->thread_info, meta, dbc->priority);
|
||||||
|
meta = NULL;
|
||||||
|
if ((t_ret = __LPUT(dbc, metalock)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
if (ret != 0)
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
if ((ret = __db_lget(dbc,
|
||||||
|
0, t->bt_meta, write_meta ? DB_LOCK_WRITE : DB_LOCK_READ,
|
||||||
|
0, &metalock)) != 0)
|
||||||
|
goto err;
|
||||||
|
if ((ret = __memp_fget(mpf, &t->bt_meta,
|
||||||
|
dbc->thread_info, dbc->txn,
|
||||||
|
write_meta ? DB_MPOOL_DIRTY : 0, &meta)) != 0)
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
if (flags == DB_FAST_STAT) {
|
||||||
|
if (dbp->type == DB_RECNO ||
|
||||||
|
(dbp->type == DB_BTREE && F_ISSET(dbp, DB_AM_RECNUM))) {
|
||||||
|
if ((ret = __db_lget(dbc, 0,
|
||||||
|
cp->root, DB_LOCK_READ, 0, &lock)) != 0)
|
||||||
|
goto err;
|
||||||
|
if ((ret = __memp_fget(mpf, &cp->root,
|
||||||
|
dbc->thread_info, dbc->txn, 0, &h)) != 0)
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
sp->bt_nkeys = RE_NREC(h);
|
||||||
|
} else
|
||||||
|
sp->bt_nkeys = meta->dbmeta.key_count;
|
||||||
|
|
||||||
|
sp->bt_ndata = dbp->type == DB_RECNO ?
|
||||||
|
sp->bt_nkeys : meta->dbmeta.record_count;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Get metadata page statistics. */
|
||||||
|
sp->bt_metaflags = meta->dbmeta.flags;
|
||||||
|
sp->bt_minkey = meta->minkey;
|
||||||
|
sp->bt_re_len = meta->re_len;
|
||||||
|
sp->bt_re_pad = meta->re_pad;
|
||||||
|
/*
|
||||||
|
* Don't take the page number from the meta-data page -- that value is
|
||||||
|
* only maintained in the primary database, we may have been called on
|
||||||
|
* a subdatabase. (Yes, I read the primary database meta-data page
|
||||||
|
* earlier in this function, but I'm asking the underlying cache so the
|
||||||
|
* code for the Hash and Btree methods is the same.)
|
||||||
|
*/
|
||||||
|
if ((ret = __memp_get_last_pgno(dbp->mpf, &pgno)) != 0)
|
||||||
|
goto err;
|
||||||
|
sp->bt_pagecnt = pgno + 1;
|
||||||
|
sp->bt_pagesize = meta->dbmeta.pagesize;
|
||||||
|
sp->bt_magic = meta->dbmeta.magic;
|
||||||
|
sp->bt_version = meta->dbmeta.version;
|
||||||
|
|
||||||
|
if (write_meta != 0) {
|
||||||
|
meta->dbmeta.key_count = sp->bt_nkeys;
|
||||||
|
meta->dbmeta.record_count = sp->bt_ndata;
|
||||||
|
}
|
||||||
|
|
||||||
|
*(DB_BTREE_STAT **)spp = sp;
|
||||||
|
|
||||||
|
err: /* Discard the second page. */
|
||||||
|
if ((t_ret = __LPUT(dbc, lock)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
if (h != NULL && (t_ret = __memp_fput(mpf,
|
||||||
|
dbc->thread_info, h, dbc->priority)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
|
||||||
|
/* Discard the metadata page. */
|
||||||
|
if ((t_ret = __LPUT(dbc, metalock)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
if (meta != NULL && (t_ret = __memp_fput(mpf,
|
||||||
|
dbc->thread_info, meta, dbc->priority)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
|
||||||
|
if (ret != 0 && sp != NULL) {
|
||||||
|
__os_ufree(env, sp);
|
||||||
|
*(DB_BTREE_STAT **)spp = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_stat_print --
|
||||||
|
* Display btree/recno statistics.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_stat_print __P((DBC *, u_int32_t));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_stat_print(dbc, flags)
|
||||||
|
DBC *dbc;
|
||||||
|
u_int32_t flags;
|
||||||
|
{
|
||||||
|
static const FN fn[] = {
|
||||||
|
{ BTM_DUP, "duplicates" },
|
||||||
|
{ BTM_RECNO, "recno" },
|
||||||
|
{ BTM_RECNUM, "record-numbers" },
|
||||||
|
{ BTM_FIXEDLEN, "fixed-length" },
|
||||||
|
{ BTM_RENUMBER, "renumber" },
|
||||||
|
{ BTM_SUBDB, "multiple-databases" },
|
||||||
|
{ BTM_DUPSORT, "sorted duplicates" },
|
||||||
|
{ 0, NULL }
|
||||||
|
};
|
||||||
|
DB *dbp;
|
||||||
|
DB_BTREE_STAT *sp;
|
||||||
|
ENV *env;
|
||||||
|
int lorder, ret;
|
||||||
|
const char *s;
|
||||||
|
|
||||||
|
dbp = dbc->dbp;
|
||||||
|
env = dbp->env;
|
||||||
|
|
||||||
|
if ((ret = __bam_stat(dbc, &sp, LF_ISSET(DB_FAST_STAT))) != 0)
|
||||||
|
return (ret);
|
||||||
|
|
||||||
|
if (LF_ISSET(DB_STAT_ALL)) {
|
||||||
|
__db_msg(env, "%s", DB_GLOBAL(db_line));
|
||||||
|
__db_msg(env, "Default Btree/Recno database information:");
|
||||||
|
}
|
||||||
|
|
||||||
|
__db_msg(env, "%lx\tBtree magic number", (u_long)sp->bt_magic);
|
||||||
|
__db_msg(env, "%lu\tBtree version number", (u_long)sp->bt_version);
|
||||||
|
|
||||||
|
(void)__db_get_lorder(dbp, &lorder);
|
||||||
|
switch (lorder) {
|
||||||
|
case 1234:
|
||||||
|
s = "Little-endian";
|
||||||
|
break;
|
||||||
|
case 4321:
|
||||||
|
s = "Big-endian";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
s = "Unrecognized byte order";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
__db_msg(env, "%s\tByte order", s);
|
||||||
|
__db_prflags(env, NULL, sp->bt_metaflags, fn, NULL, "\tFlags");
|
||||||
|
if (dbp->type == DB_BTREE)
|
||||||
|
__db_dl(env, "Minimum keys per-page", (u_long)sp->bt_minkey);
|
||||||
|
if (dbp->type == DB_RECNO) {
|
||||||
|
__db_dl(env,
|
||||||
|
"Fixed-length record size", (u_long)sp->bt_re_len);
|
||||||
|
__db_msg(env,
|
||||||
|
"%#x\tFixed-length record pad", (u_int)sp->bt_re_pad);
|
||||||
|
}
|
||||||
|
__db_dl(env,
|
||||||
|
"Underlying database page size", (u_long)sp->bt_pagesize);
|
||||||
|
if (dbp->type == DB_BTREE)
|
||||||
|
__db_dl(env, "Overflow key/data size",
|
||||||
|
((BTREE_CURSOR *)dbc->internal)->ovflsize);
|
||||||
|
__db_dl(env, "Number of levels in the tree", (u_long)sp->bt_levels);
|
||||||
|
__db_dl(env, dbp->type == DB_BTREE ?
|
||||||
|
"Number of unique keys in the tree" :
|
||||||
|
"Number of records in the tree", (u_long)sp->bt_nkeys);
|
||||||
|
__db_dl(env,
|
||||||
|
"Number of data items in the tree", (u_long)sp->bt_ndata);
|
||||||
|
|
||||||
|
__db_dl(env,
|
||||||
|
"Number of tree internal pages", (u_long)sp->bt_int_pg);
|
||||||
|
__db_dl_pct(env,
|
||||||
|
"Number of bytes free in tree internal pages",
|
||||||
|
(u_long)sp->bt_int_pgfree,
|
||||||
|
DB_PCT_PG(sp->bt_int_pgfree, sp->bt_int_pg, sp->bt_pagesize), "ff");
|
||||||
|
|
||||||
|
__db_dl(env,
|
||||||
|
"Number of tree leaf pages", (u_long)sp->bt_leaf_pg);
|
||||||
|
__db_dl_pct(env, "Number of bytes free in tree leaf pages",
|
||||||
|
(u_long)sp->bt_leaf_pgfree, DB_PCT_PG(
|
||||||
|
sp->bt_leaf_pgfree, sp->bt_leaf_pg, sp->bt_pagesize), "ff");
|
||||||
|
|
||||||
|
__db_dl(env,
|
||||||
|
"Number of tree duplicate pages", (u_long)sp->bt_dup_pg);
|
||||||
|
__db_dl_pct(env,
|
||||||
|
"Number of bytes free in tree duplicate pages",
|
||||||
|
(u_long)sp->bt_dup_pgfree,
|
||||||
|
DB_PCT_PG(sp->bt_dup_pgfree, sp->bt_dup_pg, sp->bt_pagesize), "ff");
|
||||||
|
|
||||||
|
__db_dl(env,
|
||||||
|
"Number of tree overflow pages", (u_long)sp->bt_over_pg);
|
||||||
|
__db_dl_pct(env, "Number of bytes free in tree overflow pages",
|
||||||
|
(u_long)sp->bt_over_pgfree, DB_PCT_PG(
|
||||||
|
sp->bt_over_pgfree, sp->bt_over_pg, sp->bt_pagesize), "ff");
|
||||||
|
__db_dl(env, "Number of empty pages", (u_long)sp->bt_empty_pg);
|
||||||
|
|
||||||
|
__db_dl(env, "Number of pages on the free list", (u_long)sp->bt_free);
|
||||||
|
|
||||||
|
__os_ufree(env, sp);
|
||||||
|
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_stat_callback --
|
||||||
|
* Statistics callback.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_stat_callback __P((DBC *, PAGE *, void *, int *));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_stat_callback(dbc, h, cookie, putp)
|
||||||
|
DBC *dbc;
|
||||||
|
PAGE *h;
|
||||||
|
void *cookie;
|
||||||
|
int *putp;
|
||||||
|
{
|
||||||
|
DB *dbp;
|
||||||
|
DB_BTREE_STAT *sp;
|
||||||
|
db_indx_t indx, *inp, top;
|
||||||
|
u_int8_t type;
|
||||||
|
|
||||||
|
dbp = dbc->dbp;
|
||||||
|
sp = cookie;
|
||||||
|
*putp = 0;
|
||||||
|
top = NUM_ENT(h);
|
||||||
|
inp = P_INP(dbp, h);
|
||||||
|
|
||||||
|
switch (TYPE(h)) {
|
||||||
|
case P_IBTREE:
|
||||||
|
case P_IRECNO:
|
||||||
|
++sp->bt_int_pg;
|
||||||
|
sp->bt_int_pgfree += P_FREESPACE(dbp, h);
|
||||||
|
break;
|
||||||
|
case P_LBTREE:
|
||||||
|
if (top == 0)
|
||||||
|
++sp->bt_empty_pg;
|
||||||
|
|
||||||
|
/* Correct for on-page duplicates and deleted items. */
|
||||||
|
for (indx = 0; indx < top; indx += P_INDX) {
|
||||||
|
type = GET_BKEYDATA(dbp, h, indx + O_INDX)->type;
|
||||||
|
/* Ignore deleted items. */
|
||||||
|
if (B_DISSET(type))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/* Ignore duplicate keys. */
|
||||||
|
if (indx + P_INDX >= top ||
|
||||||
|
inp[indx] != inp[indx + P_INDX])
|
||||||
|
++sp->bt_nkeys;
|
||||||
|
|
||||||
|
/* Ignore off-page duplicates. */
|
||||||
|
if (B_TYPE(type) != B_DUPLICATE)
|
||||||
|
++sp->bt_ndata;
|
||||||
|
}
|
||||||
|
|
||||||
|
++sp->bt_leaf_pg;
|
||||||
|
sp->bt_leaf_pgfree += P_FREESPACE(dbp, h);
|
||||||
|
break;
|
||||||
|
case P_LRECNO:
|
||||||
|
if (top == 0)
|
||||||
|
++sp->bt_empty_pg;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If walking a recno tree, then each of these items is a key.
|
||||||
|
* Otherwise, we're walking an off-page duplicate set.
|
||||||
|
*/
|
||||||
|
if (dbp->type == DB_RECNO) {
|
||||||
|
/*
|
||||||
|
* Correct for deleted items in non-renumbering Recno
|
||||||
|
* databases.
|
||||||
|
*/
|
||||||
|
if (F_ISSET(dbp, DB_AM_RENUMBER)) {
|
||||||
|
sp->bt_nkeys += top;
|
||||||
|
sp->bt_ndata += top;
|
||||||
|
} else
|
||||||
|
for (indx = 0; indx < top; indx += O_INDX) {
|
||||||
|
type = GET_BKEYDATA(dbp, h, indx)->type;
|
||||||
|
if (!B_DISSET(type)) {
|
||||||
|
++sp->bt_ndata;
|
||||||
|
++sp->bt_nkeys;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
++sp->bt_leaf_pg;
|
||||||
|
sp->bt_leaf_pgfree += P_FREESPACE(dbp, h);
|
||||||
|
} else {
|
||||||
|
sp->bt_ndata += top;
|
||||||
|
|
||||||
|
++sp->bt_dup_pg;
|
||||||
|
sp->bt_dup_pgfree += P_FREESPACE(dbp, h);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case P_LDUP:
|
||||||
|
if (top == 0)
|
||||||
|
++sp->bt_empty_pg;
|
||||||
|
|
||||||
|
/* Correct for deleted items. */
|
||||||
|
for (indx = 0; indx < top; indx += O_INDX)
|
||||||
|
if (!B_DISSET(GET_BKEYDATA(dbp, h, indx)->type))
|
||||||
|
++sp->bt_ndata;
|
||||||
|
|
||||||
|
++sp->bt_dup_pg;
|
||||||
|
sp->bt_dup_pgfree += P_FREESPACE(dbp, h);
|
||||||
|
break;
|
||||||
|
case P_OVERFLOW:
|
||||||
|
++sp->bt_over_pg;
|
||||||
|
sp->bt_over_pgfree += P_OVFLSPACE(dbp, dbp->pgsize, h);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return (__db_pgfmt(dbp->env, h->pgno));
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_print_cursor --
|
||||||
|
* Display the current internal cursor.
|
||||||
|
*
|
||||||
|
* PUBLIC: void __bam_print_cursor __P((DBC *));
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
__bam_print_cursor(dbc)
|
||||||
|
DBC *dbc;
|
||||||
|
{
|
||||||
|
static const FN fn[] = {
|
||||||
|
{ C_DELETED, "C_DELETED" },
|
||||||
|
{ C_RECNUM, "C_RECNUM" },
|
||||||
|
{ C_RENUMBER, "C_RENUMBER" },
|
||||||
|
{ 0, NULL }
|
||||||
|
};
|
||||||
|
ENV *env;
|
||||||
|
BTREE_CURSOR *cp;
|
||||||
|
|
||||||
|
env = dbc->env;
|
||||||
|
cp = (BTREE_CURSOR *)dbc->internal;
|
||||||
|
|
||||||
|
STAT_ULONG("Overflow size", cp->ovflsize);
|
||||||
|
if (dbc->dbtype == DB_RECNO)
|
||||||
|
STAT_ULONG("Recno", cp->recno);
|
||||||
|
STAT_ULONG("Order", cp->order);
|
||||||
|
__db_prflags(env, NULL, cp->flags, fn, NULL, "\tInternal Flags");
|
||||||
|
}
|
||||||
|
|
||||||
|
#else /* !HAVE_STATISTICS */
|
||||||
|
|
||||||
|
int
|
||||||
|
__bam_stat(dbc, spp, flags)
|
||||||
|
DBC *dbc;
|
||||||
|
void *spp;
|
||||||
|
u_int32_t flags;
|
||||||
|
{
|
||||||
|
COMPQUIET(spp, NULL);
|
||||||
|
COMPQUIET(flags, 0);
|
||||||
|
|
||||||
|
return (__db_stat_not_built(dbc->env));
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
__bam_stat_print(dbc, flags)
|
||||||
|
DBC *dbc;
|
||||||
|
u_int32_t flags;
|
||||||
|
{
|
||||||
|
COMPQUIET(flags, 0);
|
||||||
|
|
||||||
|
return (__db_stat_not_built(dbc->env));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_BREW
|
||||||
|
/*
|
||||||
|
* __bam_key_range --
|
||||||
|
* Return proportion of keys relative to given key. The numbers are
|
||||||
|
* slightly skewed due to on page duplicates.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_key_range __P((DBC *, DBT *, DB_KEY_RANGE *, u_int32_t));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_key_range(dbc, dbt, kp, flags)
|
||||||
|
DBC *dbc;
|
||||||
|
DBT *dbt;
|
||||||
|
DB_KEY_RANGE *kp;
|
||||||
|
u_int32_t flags;
|
||||||
|
{
|
||||||
|
BTREE_CURSOR *cp;
|
||||||
|
EPG *sp;
|
||||||
|
double factor;
|
||||||
|
int exact, ret;
|
||||||
|
|
||||||
|
COMPQUIET(flags, 0);
|
||||||
|
|
||||||
|
if ((ret = __bam_search(dbc, PGNO_INVALID,
|
||||||
|
dbt, SR_STK_ONLY, 1, NULL, &exact)) != 0)
|
||||||
|
return (ret);
|
||||||
|
|
||||||
|
cp = (BTREE_CURSOR *)dbc->internal;
|
||||||
|
kp->less = kp->greater = 0.0;
|
||||||
|
|
||||||
|
factor = 1.0;
|
||||||
|
|
||||||
|
/* Correct the leaf page. */
|
||||||
|
cp->csp->entries /= 2;
|
||||||
|
cp->csp->indx /= 2;
|
||||||
|
for (sp = cp->sp; sp <= cp->csp; ++sp) {
|
||||||
|
/*
|
||||||
|
* At each level we know that pages greater than indx contain
|
||||||
|
* keys greater than what we are looking for and those less
|
||||||
|
* than indx are less than. The one pointed to by indx may
|
||||||
|
* have some less, some greater or even equal. If indx is
|
||||||
|
* equal to the number of entries, then the key is out of range
|
||||||
|
* and everything is less.
|
||||||
|
*/
|
||||||
|
if (sp->indx == 0)
|
||||||
|
kp->greater += factor * (sp->entries - 1)/sp->entries;
|
||||||
|
else if (sp->indx == sp->entries)
|
||||||
|
kp->less += factor;
|
||||||
|
else {
|
||||||
|
kp->less += factor * sp->indx / sp->entries;
|
||||||
|
kp->greater += factor *
|
||||||
|
((sp->entries - sp->indx) - 1) / sp->entries;
|
||||||
|
}
|
||||||
|
factor *= 1.0/sp->entries;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If there was an exact match then assign 1 n'th to the key itself.
|
||||||
|
* Otherwise that factor belongs to those greater than the key, unless
|
||||||
|
* the key was out of range.
|
||||||
|
*/
|
||||||
|
if (exact)
|
||||||
|
kp->equal = factor;
|
||||||
|
else {
|
||||||
|
if (kp->less != 1)
|
||||||
|
kp->greater += factor;
|
||||||
|
kp->equal = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
BT_STK_CLR(cp);
|
||||||
|
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_traverse --
|
||||||
|
* Walk a Btree database.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_traverse __P((DBC *, db_lockmode_t,
|
||||||
|
* PUBLIC: db_pgno_t, int (*)(DBC *, PAGE *, void *, int *), void *));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_traverse(dbc, mode, root_pgno, callback, cookie)
|
||||||
|
DBC *dbc;
|
||||||
|
db_lockmode_t mode;
|
||||||
|
db_pgno_t root_pgno;
|
||||||
|
int (*callback)__P((DBC *, PAGE *, void *, int *));
|
||||||
|
void *cookie;
|
||||||
|
{
|
||||||
|
BINTERNAL *bi;
|
||||||
|
BKEYDATA *bk;
|
||||||
|
DB *dbp;
|
||||||
|
DB_LOCK lock;
|
||||||
|
DB_MPOOLFILE *mpf;
|
||||||
|
PAGE *h;
|
||||||
|
RINTERNAL *ri;
|
||||||
|
db_indx_t indx, *inp;
|
||||||
|
int already_put, ret, t_ret;
|
||||||
|
|
||||||
|
dbp = dbc->dbp;
|
||||||
|
mpf = dbp->mpf;
|
||||||
|
already_put = 0;
|
||||||
|
|
||||||
|
if ((ret = __db_lget(dbc, 0, root_pgno, mode, 0, &lock)) != 0)
|
||||||
|
return (ret);
|
||||||
|
if ((ret = __memp_fget(mpf, &root_pgno,
|
||||||
|
dbc->thread_info, dbc->txn, 0, &h)) != 0) {
|
||||||
|
(void)__TLPUT(dbc, lock);
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (TYPE(h)) {
|
||||||
|
case P_IBTREE:
|
||||||
|
for (indx = 0; indx < NUM_ENT(h); indx += O_INDX) {
|
||||||
|
bi = GET_BINTERNAL(dbp, h, indx);
|
||||||
|
if (B_TYPE(bi->type) == B_OVERFLOW &&
|
||||||
|
(ret = __db_traverse_big(dbc,
|
||||||
|
((BOVERFLOW *)bi->data)->pgno,
|
||||||
|
callback, cookie)) != 0)
|
||||||
|
goto err;
|
||||||
|
if ((ret = __bam_traverse(
|
||||||
|
dbc, mode, bi->pgno, callback, cookie)) != 0)
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case P_IRECNO:
|
||||||
|
for (indx = 0; indx < NUM_ENT(h); indx += O_INDX) {
|
||||||
|
ri = GET_RINTERNAL(dbp, h, indx);
|
||||||
|
if ((ret = __bam_traverse(
|
||||||
|
dbc, mode, ri->pgno, callback, cookie)) != 0)
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case P_LBTREE:
|
||||||
|
inp = P_INP(dbp, h);
|
||||||
|
for (indx = 0; indx < NUM_ENT(h); indx += P_INDX) {
|
||||||
|
bk = GET_BKEYDATA(dbp, h, indx);
|
||||||
|
if (B_TYPE(bk->type) == B_OVERFLOW &&
|
||||||
|
(indx + P_INDX >= NUM_ENT(h) ||
|
||||||
|
inp[indx] != inp[indx + P_INDX])) {
|
||||||
|
if ((ret = __db_traverse_big(dbc,
|
||||||
|
GET_BOVERFLOW(dbp, h, indx)->pgno,
|
||||||
|
callback, cookie)) != 0)
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
bk = GET_BKEYDATA(dbp, h, indx + O_INDX);
|
||||||
|
if (B_TYPE(bk->type) == B_DUPLICATE &&
|
||||||
|
(ret = __bam_traverse(dbc, mode,
|
||||||
|
GET_BOVERFLOW(dbp, h, indx + O_INDX)->pgno,
|
||||||
|
callback, cookie)) != 0)
|
||||||
|
goto err;
|
||||||
|
if (B_TYPE(bk->type) == B_OVERFLOW &&
|
||||||
|
(ret = __db_traverse_big(dbc,
|
||||||
|
GET_BOVERFLOW(dbp, h, indx + O_INDX)->pgno,
|
||||||
|
callback, cookie)) != 0)
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case P_LDUP:
|
||||||
|
case P_LRECNO:
|
||||||
|
for (indx = 0; indx < NUM_ENT(h); indx += O_INDX) {
|
||||||
|
bk = GET_BKEYDATA(dbp, h, indx);
|
||||||
|
if (B_TYPE(bk->type) == B_OVERFLOW &&
|
||||||
|
(ret = __db_traverse_big(dbc,
|
||||||
|
GET_BOVERFLOW(dbp, h, indx)->pgno,
|
||||||
|
callback, cookie)) != 0)
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return (__db_pgfmt(dbp->env, h->pgno));
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = callback(dbc, h, cookie, &already_put);
|
||||||
|
|
||||||
|
err: if (!already_put && (t_ret = __memp_fput(mpf,
|
||||||
|
dbc->thread_info, h, dbc->priority)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
if ((t_ret = __TLPUT(dbc, lock)) != 0 && ret == 0)
|
||||||
|
ret = t_ret;
|
||||||
|
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
153
btree/bt_upgrade.c
Normal file
153
btree/bt_upgrade.c
Normal file
@@ -0,0 +1,153 @@
|
|||||||
|
/*-
|
||||||
|
* See the file LICENSE for redistribution information.
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996,2008 Oracle. All rights reserved.
|
||||||
|
*
|
||||||
|
* $Id: bt_upgrade.c 63573 2008-05-23 21:43:21Z trent.nelson $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "db_config.h"
|
||||||
|
|
||||||
|
#include "db_int.h"
|
||||||
|
#include "dbinc/db_page.h"
|
||||||
|
#include "dbinc/db_upgrade.h"
|
||||||
|
#include "dbinc/btree.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_30_btreemeta --
|
||||||
|
* Upgrade the metadata pages from version 6 to version 7.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_30_btreemeta __P((DB *, char *, u_int8_t *));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_30_btreemeta(dbp, real_name, buf)
|
||||||
|
DB *dbp;
|
||||||
|
char *real_name;
|
||||||
|
u_int8_t *buf;
|
||||||
|
{
|
||||||
|
BTMETA2X *oldmeta;
|
||||||
|
BTMETA30 *newmeta;
|
||||||
|
ENV *env;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
env = dbp->env;
|
||||||
|
|
||||||
|
newmeta = (BTMETA30 *)buf;
|
||||||
|
oldmeta = (BTMETA2X *)buf;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Move things from the end up, so we do not overwrite things.
|
||||||
|
* We are going to create a new uid, so we can move the stuff
|
||||||
|
* at the end of the structure first, overwriting the uid.
|
||||||
|
*/
|
||||||
|
|
||||||
|
newmeta->re_pad = oldmeta->re_pad;
|
||||||
|
newmeta->re_len = oldmeta->re_len;
|
||||||
|
newmeta->minkey = oldmeta->minkey;
|
||||||
|
newmeta->maxkey = oldmeta->maxkey;
|
||||||
|
newmeta->dbmeta.free = oldmeta->free;
|
||||||
|
newmeta->dbmeta.flags = oldmeta->flags;
|
||||||
|
newmeta->dbmeta.type = P_BTREEMETA;
|
||||||
|
|
||||||
|
newmeta->dbmeta.version = 7;
|
||||||
|
/* Replace the unique ID. */
|
||||||
|
if ((ret = __os_fileid(env, real_name, 1, buf + 36)) != 0)
|
||||||
|
return (ret);
|
||||||
|
|
||||||
|
newmeta->root = 1;
|
||||||
|
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_31_btreemeta --
|
||||||
|
* Upgrade the database from version 7 to version 8.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_31_btreemeta
|
||||||
|
* PUBLIC: __P((DB *, char *, u_int32_t, DB_FH *, PAGE *, int *));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_31_btreemeta(dbp, real_name, flags, fhp, h, dirtyp)
|
||||||
|
DB *dbp;
|
||||||
|
char *real_name;
|
||||||
|
u_int32_t flags;
|
||||||
|
DB_FH *fhp;
|
||||||
|
PAGE *h;
|
||||||
|
int *dirtyp;
|
||||||
|
{
|
||||||
|
BTMETA30 *oldmeta;
|
||||||
|
BTMETA31 *newmeta;
|
||||||
|
|
||||||
|
COMPQUIET(dbp, NULL);
|
||||||
|
COMPQUIET(real_name, NULL);
|
||||||
|
COMPQUIET(fhp, NULL);
|
||||||
|
|
||||||
|
newmeta = (BTMETA31 *)h;
|
||||||
|
oldmeta = (BTMETA30 *)h;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copy the effected fields down the page.
|
||||||
|
* The fields may overlap each other so we
|
||||||
|
* start at the bottom and use memmove.
|
||||||
|
*/
|
||||||
|
newmeta->root = oldmeta->root;
|
||||||
|
newmeta->re_pad = oldmeta->re_pad;
|
||||||
|
newmeta->re_len = oldmeta->re_len;
|
||||||
|
newmeta->minkey = oldmeta->minkey;
|
||||||
|
newmeta->maxkey = oldmeta->maxkey;
|
||||||
|
memmove(newmeta->dbmeta.uid,
|
||||||
|
oldmeta->dbmeta.uid, sizeof(oldmeta->dbmeta.uid));
|
||||||
|
newmeta->dbmeta.flags = oldmeta->dbmeta.flags;
|
||||||
|
newmeta->dbmeta.record_count = 0;
|
||||||
|
newmeta->dbmeta.key_count = 0;
|
||||||
|
ZERO_LSN(newmeta->dbmeta.unused3);
|
||||||
|
|
||||||
|
/* Set the version number. */
|
||||||
|
newmeta->dbmeta.version = 8;
|
||||||
|
|
||||||
|
/* Upgrade the flags. */
|
||||||
|
if (LF_ISSET(DB_DUPSORT))
|
||||||
|
F_SET(&newmeta->dbmeta, BTM_DUPSORT);
|
||||||
|
|
||||||
|
*dirtyp = 1;
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __bam_31_lbtree --
|
||||||
|
* Upgrade the database btree leaf pages.
|
||||||
|
*
|
||||||
|
* PUBLIC: int __bam_31_lbtree
|
||||||
|
* PUBLIC: __P((DB *, char *, u_int32_t, DB_FH *, PAGE *, int *));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_31_lbtree(dbp, real_name, flags, fhp, h, dirtyp)
|
||||||
|
DB *dbp;
|
||||||
|
char *real_name;
|
||||||
|
u_int32_t flags;
|
||||||
|
DB_FH *fhp;
|
||||||
|
PAGE *h;
|
||||||
|
int *dirtyp;
|
||||||
|
{
|
||||||
|
BKEYDATA *bk;
|
||||||
|
db_pgno_t pgno;
|
||||||
|
db_indx_t indx;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = 0;
|
||||||
|
for (indx = O_INDX; indx < NUM_ENT(h); indx += P_INDX) {
|
||||||
|
bk = GET_BKEYDATA(dbp, h, indx);
|
||||||
|
if (B_TYPE(bk->type) == B_DUPLICATE) {
|
||||||
|
pgno = GET_BOVERFLOW(dbp, h, indx)->pgno;
|
||||||
|
if ((ret = __db_31_offdup(dbp, real_name, fhp,
|
||||||
|
LF_ISSET(DB_DUPSORT) ? 1 : 0, &pgno)) != 0)
|
||||||
|
break;
|
||||||
|
if (pgno != GET_BOVERFLOW(dbp, h, indx)->pgno) {
|
||||||
|
*dirtyp = 1;
|
||||||
|
GET_BOVERFLOW(dbp, h, indx)->pgno = pgno;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
2546
btree/bt_verify.c
Normal file
2546
btree/bt_verify.c
Normal file
File diff suppressed because it is too large
Load Diff
271
btree/btree.src
Normal file
271
btree/btree.src
Normal file
@@ -0,0 +1,271 @@
|
|||||||
|
/*-
|
||||||
|
* See the file LICENSE for redistribution information.
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996,2008 Oracle. All rights reserved.
|
||||||
|
*
|
||||||
|
* $Id: btree.src,v 12.16 2008/02/11 04:22:02 mjc Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
DBPRIVATE
|
||||||
|
PREFIX __bam
|
||||||
|
|
||||||
|
INCLUDE #include "db_int.h"
|
||||||
|
INCLUDE #include "dbinc/crypto.h"
|
||||||
|
INCLUDE #include "dbinc/db_page.h"
|
||||||
|
INCLUDE #include "dbinc/db_am.h"
|
||||||
|
INCLUDE #include "dbinc/btree.h"
|
||||||
|
INCLUDE #include "dbinc/log.h"
|
||||||
|
INCLUDE #include "dbinc/txn.h"
|
||||||
|
INCLUDE
|
||||||
|
|
||||||
|
/*
|
||||||
|
* BTREE-split: used to log a page split.
|
||||||
|
*
|
||||||
|
* left: the page number for the low-order contents.
|
||||||
|
* llsn: the left page's original LSN.
|
||||||
|
* right: the page number for the high-order contents.
|
||||||
|
* rlsn: the right page's original LSN.
|
||||||
|
* indx: the number of entries that went to the left page.
|
||||||
|
* npgno: the next page number
|
||||||
|
* nlsn: the next page's original LSN (or 0 if no next page).
|
||||||
|
* root_pgno: the root page number
|
||||||
|
* pg: the split page's contents before the split.
|
||||||
|
* opflags: SPL_NRECS: if splitting a tree that maintains a record count.
|
||||||
|
*/
|
||||||
|
BEGIN split 42 62
|
||||||
|
DB fileid int32_t ld
|
||||||
|
ARG left db_pgno_t lu
|
||||||
|
POINTER llsn DB_LSN * lu
|
||||||
|
ARG right db_pgno_t lu
|
||||||
|
POINTER rlsn DB_LSN * lu
|
||||||
|
ARG indx u_int32_t lu
|
||||||
|
ARG npgno db_pgno_t lu
|
||||||
|
POINTER nlsn DB_LSN * lu
|
||||||
|
ARG root_pgno db_pgno_t lu
|
||||||
|
PGDBT pg DBT s
|
||||||
|
ARG opflags u_int32_t lu
|
||||||
|
END
|
||||||
|
|
||||||
|
/*
|
||||||
|
* BTREE-rsplit: used to log a reverse-split
|
||||||
|
*
|
||||||
|
* pgno: the page number of the page copied over the root.
|
||||||
|
* pgdbt: the page being copied on the root page.
|
||||||
|
* root_pgno: the root page number.
|
||||||
|
* nrec: the tree's record count.
|
||||||
|
* rootent: last entry on the root page.
|
||||||
|
* rootlsn: the root page's original lsn.
|
||||||
|
*/
|
||||||
|
BEGIN rsplit 42 63
|
||||||
|
DB fileid int32_t ld
|
||||||
|
ARG pgno db_pgno_t lu
|
||||||
|
PGDBT pgdbt DBT s
|
||||||
|
ARG root_pgno db_pgno_t lu
|
||||||
|
ARG nrec db_pgno_t lu
|
||||||
|
DBT rootent DBT s
|
||||||
|
POINTER rootlsn DB_LSN * lu
|
||||||
|
END
|
||||||
|
|
||||||
|
/*
|
||||||
|
* BTREE-adj: used to log the adjustment of an index.
|
||||||
|
*
|
||||||
|
* pgno: the page modified.
|
||||||
|
* lsn: the page's original lsn.
|
||||||
|
* indx: the index adjusted.
|
||||||
|
* indx_copy: the index to copy if inserting.
|
||||||
|
* is_insert: 0 if a delete, 1 if an insert.
|
||||||
|
*/
|
||||||
|
BEGIN adj 42 55
|
||||||
|
DB fileid int32_t ld
|
||||||
|
ARG pgno db_pgno_t lu
|
||||||
|
POINTER lsn DB_LSN * lu
|
||||||
|
ARG indx u_int32_t lu
|
||||||
|
ARG indx_copy u_int32_t lu
|
||||||
|
ARG is_insert u_int32_t lu
|
||||||
|
END
|
||||||
|
|
||||||
|
/*
|
||||||
|
* BTREE-cadjust: used to adjust the count change in an internal page.
|
||||||
|
*
|
||||||
|
* pgno: the page modified.
|
||||||
|
* lsn: the page's original lsn.
|
||||||
|
* indx: the index to be adjusted.
|
||||||
|
* adjust: the signed adjustment.
|
||||||
|
* opflags: CAD_UPDATEROOT: if root page count was adjusted.
|
||||||
|
*/
|
||||||
|
BEGIN cadjust 42 56
|
||||||
|
DB fileid int32_t ld
|
||||||
|
ARG pgno db_pgno_t lu
|
||||||
|
POINTER lsn DB_LSN * lu
|
||||||
|
ARG indx u_int32_t lu
|
||||||
|
ARG adjust int32_t ld
|
||||||
|
ARG opflags u_int32_t lu
|
||||||
|
END
|
||||||
|
|
||||||
|
/*
|
||||||
|
* BTREE-cdel: used to log the intent-to-delete of a cursor record.
|
||||||
|
*
|
||||||
|
* pgno: the page modified.
|
||||||
|
* lsn: the page's original lsn.
|
||||||
|
* indx: the index to be deleted.
|
||||||
|
*/
|
||||||
|
BEGIN cdel 42 57
|
||||||
|
DB fileid int32_t ld
|
||||||
|
ARG pgno db_pgno_t lu
|
||||||
|
POINTER lsn DB_LSN * lu
|
||||||
|
ARG indx u_int32_t lu
|
||||||
|
END
|
||||||
|
|
||||||
|
/*
|
||||||
|
* BTREE-repl: used to log the replacement of an item.
|
||||||
|
*
|
||||||
|
* pgno: the page modified.
|
||||||
|
* lsn: the page's original lsn.
|
||||||
|
* indx: the index to be replaced.
|
||||||
|
* isdeleted: set if the record was previously deleted.
|
||||||
|
* orig: the original data.
|
||||||
|
* repl: the replacement data.
|
||||||
|
* prefix: the prefix of the replacement that matches the original.
|
||||||
|
* suffix: the suffix of the replacement that matches the original.
|
||||||
|
*/
|
||||||
|
BEGIN repl 42 58
|
||||||
|
DB fileid int32_t ld
|
||||||
|
ARG pgno db_pgno_t lu
|
||||||
|
POINTER lsn DB_LSN * lu
|
||||||
|
ARG indx u_int32_t lu
|
||||||
|
ARG isdeleted u_int32_t lu
|
||||||
|
DBT orig DBT s
|
||||||
|
DBT repl DBT s
|
||||||
|
ARG prefix u_int32_t lu
|
||||||
|
ARG suffix u_int32_t lu
|
||||||
|
END
|
||||||
|
|
||||||
|
/*
|
||||||
|
* BTREE-root: log the assignment of a root btree page.
|
||||||
|
*/
|
||||||
|
BEGIN root 42 59
|
||||||
|
DB fileid int32_t ld
|
||||||
|
ARG meta_pgno db_pgno_t lu
|
||||||
|
ARG root_pgno db_pgno_t lu
|
||||||
|
POINTER meta_lsn DB_LSN * lu
|
||||||
|
END
|
||||||
|
|
||||||
|
/*
|
||||||
|
* BTREE-curadj: undo cursor adjustments on txn abort.
|
||||||
|
* Should only be processed during DB_TXN_ABORT.
|
||||||
|
* NOTE: the first_indx field gets used to hold
|
||||||
|
* signed index adjustment in one case.
|
||||||
|
* care should be taken if its size is changed.
|
||||||
|
*/
|
||||||
|
BEGIN curadj 42 64
|
||||||
|
/* Fileid of db affected. */
|
||||||
|
DB fileid int32_t ld
|
||||||
|
/* Which adjustment. */
|
||||||
|
ARG mode db_ca_mode ld
|
||||||
|
/* Page entry is from. */
|
||||||
|
ARG from_pgno db_pgno_t lu
|
||||||
|
/* Page entry went to. */
|
||||||
|
ARG to_pgno db_pgno_t lu
|
||||||
|
/* Left page of root split. */
|
||||||
|
ARG left_pgno db_pgno_t lu
|
||||||
|
/* First index of dup set. Also used as adjustment. */
|
||||||
|
ARG first_indx u_int32_t lu
|
||||||
|
/* Index entry is from. */
|
||||||
|
ARG from_indx u_int32_t lu
|
||||||
|
/* Index where entry went. */
|
||||||
|
ARG to_indx u_int32_t lu
|
||||||
|
END
|
||||||
|
|
||||||
|
/*
|
||||||
|
* BTREE-rcuradj: undo cursor adjustments on txn abort in
|
||||||
|
* renumbering recno trees.
|
||||||
|
* Should only be processed during DB_TXN_ABORT.
|
||||||
|
*/
|
||||||
|
BEGIN rcuradj 42 65
|
||||||
|
/* Fileid of db affected. */
|
||||||
|
DB fileid int32_t ld
|
||||||
|
/* Which adjustment. */
|
||||||
|
ARG mode ca_recno_arg ld
|
||||||
|
/* Root page number. */
|
||||||
|
ARG root db_pgno_t ld
|
||||||
|
/* Recno of the adjustment. */
|
||||||
|
ARG recno db_recno_t ld
|
||||||
|
/* Order number of the adjustment. */
|
||||||
|
ARG order u_int32_t lu
|
||||||
|
END
|
||||||
|
|
||||||
|
/*
|
||||||
|
* BTREE-relink -- Handles relinking around a deleted leaf page.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
BEGIN_COMPAT relink 43 147
|
||||||
|
/* Fileid of db affected. */
|
||||||
|
DB fileid int32_t ld
|
||||||
|
/* The page being removed. */
|
||||||
|
ARG pgno db_pgno_t lu
|
||||||
|
/* The page's original lsn. */
|
||||||
|
POINTER lsn DB_LSN * lu
|
||||||
|
/* The previous page. */
|
||||||
|
ARG prev db_pgno_t lu
|
||||||
|
/* The previous page's original lsn. */
|
||||||
|
POINTER lsn_prev DB_LSN * lu
|
||||||
|
/* The next page. */
|
||||||
|
ARG next db_pgno_t lu
|
||||||
|
/* The previous page's original lsn. */
|
||||||
|
POINTER lsn_next DB_LSN * lu
|
||||||
|
END
|
||||||
|
|
||||||
|
BEGIN relink 44 147
|
||||||
|
/* Fileid of db affected. */
|
||||||
|
DB fileid int32_t ld
|
||||||
|
/* The page being removed. */
|
||||||
|
ARG pgno db_pgno_t lu
|
||||||
|
/* The new page number, if any. */
|
||||||
|
ARG new_pgno db_pgno_t lu
|
||||||
|
/* The previous page. */
|
||||||
|
ARG prev db_pgno_t lu
|
||||||
|
/* The previous page's original lsn. */
|
||||||
|
POINTER lsn_prev DB_LSN * lu
|
||||||
|
/* The next page. */
|
||||||
|
ARG next db_pgno_t lu
|
||||||
|
/* The previous page's original lsn. */
|
||||||
|
POINTER lsn_next DB_LSN * lu
|
||||||
|
END
|
||||||
|
|
||||||
|
/*
|
||||||
|
* BTREE-merge -- Handles merging of pages during a compaction.
|
||||||
|
*/
|
||||||
|
BEGIN_COMPAT merge 44 148
|
||||||
|
DB fileid int32_t ld
|
||||||
|
ARG pgno db_pgno_t lu
|
||||||
|
POINTER lsn DB_LSN * lu
|
||||||
|
ARG npgno db_pgno_t lu
|
||||||
|
POINTER nlsn DB_LSN * lu
|
||||||
|
DBT hdr DBT s
|
||||||
|
DBT data DBT s
|
||||||
|
DBT ind DBT s
|
||||||
|
END
|
||||||
|
|
||||||
|
BEGIN merge 47 148
|
||||||
|
DB fileid int32_t ld
|
||||||
|
ARG pgno db_pgno_t lu
|
||||||
|
POINTER lsn DB_LSN * lu
|
||||||
|
ARG npgno db_pgno_t lu
|
||||||
|
POINTER nlsn DB_LSN * lu
|
||||||
|
PGDBT hdr DBT s
|
||||||
|
PGDDBT data DBT s
|
||||||
|
ARG pg_copy int32_t lu
|
||||||
|
END
|
||||||
|
|
||||||
|
/*
|
||||||
|
* BTREE-pgno -- Handles replacing a page number in the record
|
||||||
|
* reference on pgno by indx.
|
||||||
|
*/
|
||||||
|
BEGIN pgno 44 149
|
||||||
|
DB fileid int32_t ld
|
||||||
|
ARG pgno db_pgno_t lu
|
||||||
|
POINTER lsn DB_LSN * lu
|
||||||
|
ARG indx u_int32_t lu
|
||||||
|
ARG opgno db_pgno_t lu
|
||||||
|
ARG npgno db_pgno_t lu
|
||||||
|
END
|
||||||
3398
btree/btree_auto.c
Normal file
3398
btree/btree_auto.c
Normal file
File diff suppressed because it is too large
Load Diff
697
btree/btree_autop.c
Normal file
697
btree/btree_autop.c
Normal file
@@ -0,0 +1,697 @@
|
|||||||
|
/* Do not edit: automatically built by gen_rec.awk. */
|
||||||
|
|
||||||
|
#include "db_config.h"
|
||||||
|
|
||||||
|
#include "db_int.h"
|
||||||
|
#include "dbinc/crypto.h"
|
||||||
|
#include "dbinc/db_page.h"
|
||||||
|
#include "dbinc/db_am.h"
|
||||||
|
#include "dbinc/btree.h"
|
||||||
|
#include "dbinc/log.h"
|
||||||
|
#include "dbinc/txn.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* PUBLIC: int __bam_split_print __P((ENV *, DBT *, DB_LSN *,
|
||||||
|
* PUBLIC: db_recops, void *));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_split_print(env, dbtp, lsnp, notused2, notused3)
|
||||||
|
ENV *env;
|
||||||
|
DBT *dbtp;
|
||||||
|
DB_LSN *lsnp;
|
||||||
|
db_recops notused2;
|
||||||
|
void *notused3;
|
||||||
|
{
|
||||||
|
__bam_split_args *argp;
|
||||||
|
u_int32_t i;
|
||||||
|
int ch;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
notused2 = DB_TXN_PRINT;
|
||||||
|
notused3 = NULL;
|
||||||
|
|
||||||
|
if ((ret =
|
||||||
|
__bam_split_read(env, NULL, NULL, dbtp->data, &argp)) != 0)
|
||||||
|
return (ret);
|
||||||
|
(void)printf(
|
||||||
|
"[%lu][%lu]__bam_split%s: rec: %lu txnp %lx prevlsn [%lu][%lu]\n",
|
||||||
|
(u_long)lsnp->file, (u_long)lsnp->offset,
|
||||||
|
(argp->type & DB_debug_FLAG) ? "_debug" : "",
|
||||||
|
(u_long)argp->type,
|
||||||
|
(u_long)argp->txnp->txnid,
|
||||||
|
(u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
|
||||||
|
(void)printf("\tfileid: %ld\n", (long)argp->fileid);
|
||||||
|
(void)printf("\tleft: %lu\n", (u_long)argp->left);
|
||||||
|
(void)printf("\tllsn: [%lu][%lu]\n",
|
||||||
|
(u_long)argp->llsn.file, (u_long)argp->llsn.offset);
|
||||||
|
(void)printf("\tright: %lu\n", (u_long)argp->right);
|
||||||
|
(void)printf("\trlsn: [%lu][%lu]\n",
|
||||||
|
(u_long)argp->rlsn.file, (u_long)argp->rlsn.offset);
|
||||||
|
(void)printf("\tindx: %lu\n", (u_long)argp->indx);
|
||||||
|
(void)printf("\tnpgno: %lu\n", (u_long)argp->npgno);
|
||||||
|
(void)printf("\tnlsn: [%lu][%lu]\n",
|
||||||
|
(u_long)argp->nlsn.file, (u_long)argp->nlsn.offset);
|
||||||
|
(void)printf("\troot_pgno: %lu\n", (u_long)argp->root_pgno);
|
||||||
|
(void)printf("\tpg: ");
|
||||||
|
for (i = 0; i < argp->pg.size; i++) {
|
||||||
|
ch = ((u_int8_t *)argp->pg.data)[i];
|
||||||
|
printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
|
||||||
|
}
|
||||||
|
(void)printf("\n");
|
||||||
|
(void)printf("\topflags: %lu\n", (u_long)argp->opflags);
|
||||||
|
(void)printf("\n");
|
||||||
|
__os_free(env, argp);
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* PUBLIC: int __bam_rsplit_print __P((ENV *, DBT *, DB_LSN *,
|
||||||
|
* PUBLIC: db_recops, void *));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_rsplit_print(env, dbtp, lsnp, notused2, notused3)
|
||||||
|
ENV *env;
|
||||||
|
DBT *dbtp;
|
||||||
|
DB_LSN *lsnp;
|
||||||
|
db_recops notused2;
|
||||||
|
void *notused3;
|
||||||
|
{
|
||||||
|
__bam_rsplit_args *argp;
|
||||||
|
u_int32_t i;
|
||||||
|
int ch;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
notused2 = DB_TXN_PRINT;
|
||||||
|
notused3 = NULL;
|
||||||
|
|
||||||
|
if ((ret =
|
||||||
|
__bam_rsplit_read(env, NULL, NULL, dbtp->data, &argp)) != 0)
|
||||||
|
return (ret);
|
||||||
|
(void)printf(
|
||||||
|
"[%lu][%lu]__bam_rsplit%s: rec: %lu txnp %lx prevlsn [%lu][%lu]\n",
|
||||||
|
(u_long)lsnp->file, (u_long)lsnp->offset,
|
||||||
|
(argp->type & DB_debug_FLAG) ? "_debug" : "",
|
||||||
|
(u_long)argp->type,
|
||||||
|
(u_long)argp->txnp->txnid,
|
||||||
|
(u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
|
||||||
|
(void)printf("\tfileid: %ld\n", (long)argp->fileid);
|
||||||
|
(void)printf("\tpgno: %lu\n", (u_long)argp->pgno);
|
||||||
|
(void)printf("\tpgdbt: ");
|
||||||
|
for (i = 0; i < argp->pgdbt.size; i++) {
|
||||||
|
ch = ((u_int8_t *)argp->pgdbt.data)[i];
|
||||||
|
printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
|
||||||
|
}
|
||||||
|
(void)printf("\n");
|
||||||
|
(void)printf("\troot_pgno: %lu\n", (u_long)argp->root_pgno);
|
||||||
|
(void)printf("\tnrec: %lu\n", (u_long)argp->nrec);
|
||||||
|
(void)printf("\trootent: ");
|
||||||
|
for (i = 0; i < argp->rootent.size; i++) {
|
||||||
|
ch = ((u_int8_t *)argp->rootent.data)[i];
|
||||||
|
printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
|
||||||
|
}
|
||||||
|
(void)printf("\n");
|
||||||
|
(void)printf("\trootlsn: [%lu][%lu]\n",
|
||||||
|
(u_long)argp->rootlsn.file, (u_long)argp->rootlsn.offset);
|
||||||
|
(void)printf("\n");
|
||||||
|
__os_free(env, argp);
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* PUBLIC: int __bam_adj_print __P((ENV *, DBT *, DB_LSN *,
|
||||||
|
* PUBLIC: db_recops, void *));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_adj_print(env, dbtp, lsnp, notused2, notused3)
|
||||||
|
ENV *env;
|
||||||
|
DBT *dbtp;
|
||||||
|
DB_LSN *lsnp;
|
||||||
|
db_recops notused2;
|
||||||
|
void *notused3;
|
||||||
|
{
|
||||||
|
__bam_adj_args *argp;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
notused2 = DB_TXN_PRINT;
|
||||||
|
notused3 = NULL;
|
||||||
|
|
||||||
|
if ((ret =
|
||||||
|
__bam_adj_read(env, NULL, NULL, dbtp->data, &argp)) != 0)
|
||||||
|
return (ret);
|
||||||
|
(void)printf(
|
||||||
|
"[%lu][%lu]__bam_adj%s: rec: %lu txnp %lx prevlsn [%lu][%lu]\n",
|
||||||
|
(u_long)lsnp->file, (u_long)lsnp->offset,
|
||||||
|
(argp->type & DB_debug_FLAG) ? "_debug" : "",
|
||||||
|
(u_long)argp->type,
|
||||||
|
(u_long)argp->txnp->txnid,
|
||||||
|
(u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
|
||||||
|
(void)printf("\tfileid: %ld\n", (long)argp->fileid);
|
||||||
|
(void)printf("\tpgno: %lu\n", (u_long)argp->pgno);
|
||||||
|
(void)printf("\tlsn: [%lu][%lu]\n",
|
||||||
|
(u_long)argp->lsn.file, (u_long)argp->lsn.offset);
|
||||||
|
(void)printf("\tindx: %lu\n", (u_long)argp->indx);
|
||||||
|
(void)printf("\tindx_copy: %lu\n", (u_long)argp->indx_copy);
|
||||||
|
(void)printf("\tis_insert: %lu\n", (u_long)argp->is_insert);
|
||||||
|
(void)printf("\n");
|
||||||
|
__os_free(env, argp);
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* PUBLIC: int __bam_cadjust_print __P((ENV *, DBT *, DB_LSN *,
|
||||||
|
* PUBLIC: db_recops, void *));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_cadjust_print(env, dbtp, lsnp, notused2, notused3)
|
||||||
|
ENV *env;
|
||||||
|
DBT *dbtp;
|
||||||
|
DB_LSN *lsnp;
|
||||||
|
db_recops notused2;
|
||||||
|
void *notused3;
|
||||||
|
{
|
||||||
|
__bam_cadjust_args *argp;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
notused2 = DB_TXN_PRINT;
|
||||||
|
notused3 = NULL;
|
||||||
|
|
||||||
|
if ((ret =
|
||||||
|
__bam_cadjust_read(env, NULL, NULL, dbtp->data, &argp)) != 0)
|
||||||
|
return (ret);
|
||||||
|
(void)printf(
|
||||||
|
"[%lu][%lu]__bam_cadjust%s: rec: %lu txnp %lx prevlsn [%lu][%lu]\n",
|
||||||
|
(u_long)lsnp->file, (u_long)lsnp->offset,
|
||||||
|
(argp->type & DB_debug_FLAG) ? "_debug" : "",
|
||||||
|
(u_long)argp->type,
|
||||||
|
(u_long)argp->txnp->txnid,
|
||||||
|
(u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
|
||||||
|
(void)printf("\tfileid: %ld\n", (long)argp->fileid);
|
||||||
|
(void)printf("\tpgno: %lu\n", (u_long)argp->pgno);
|
||||||
|
(void)printf("\tlsn: [%lu][%lu]\n",
|
||||||
|
(u_long)argp->lsn.file, (u_long)argp->lsn.offset);
|
||||||
|
(void)printf("\tindx: %lu\n", (u_long)argp->indx);
|
||||||
|
(void)printf("\tadjust: %ld\n", (long)argp->adjust);
|
||||||
|
(void)printf("\topflags: %lu\n", (u_long)argp->opflags);
|
||||||
|
(void)printf("\n");
|
||||||
|
__os_free(env, argp);
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* PUBLIC: int __bam_cdel_print __P((ENV *, DBT *, DB_LSN *,
|
||||||
|
* PUBLIC: db_recops, void *));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_cdel_print(env, dbtp, lsnp, notused2, notused3)
|
||||||
|
ENV *env;
|
||||||
|
DBT *dbtp;
|
||||||
|
DB_LSN *lsnp;
|
||||||
|
db_recops notused2;
|
||||||
|
void *notused3;
|
||||||
|
{
|
||||||
|
__bam_cdel_args *argp;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
notused2 = DB_TXN_PRINT;
|
||||||
|
notused3 = NULL;
|
||||||
|
|
||||||
|
if ((ret =
|
||||||
|
__bam_cdel_read(env, NULL, NULL, dbtp->data, &argp)) != 0)
|
||||||
|
return (ret);
|
||||||
|
(void)printf(
|
||||||
|
"[%lu][%lu]__bam_cdel%s: rec: %lu txnp %lx prevlsn [%lu][%lu]\n",
|
||||||
|
(u_long)lsnp->file, (u_long)lsnp->offset,
|
||||||
|
(argp->type & DB_debug_FLAG) ? "_debug" : "",
|
||||||
|
(u_long)argp->type,
|
||||||
|
(u_long)argp->txnp->txnid,
|
||||||
|
(u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
|
||||||
|
(void)printf("\tfileid: %ld\n", (long)argp->fileid);
|
||||||
|
(void)printf("\tpgno: %lu\n", (u_long)argp->pgno);
|
||||||
|
(void)printf("\tlsn: [%lu][%lu]\n",
|
||||||
|
(u_long)argp->lsn.file, (u_long)argp->lsn.offset);
|
||||||
|
(void)printf("\tindx: %lu\n", (u_long)argp->indx);
|
||||||
|
(void)printf("\n");
|
||||||
|
__os_free(env, argp);
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* PUBLIC: int __bam_repl_print __P((ENV *, DBT *, DB_LSN *,
|
||||||
|
* PUBLIC: db_recops, void *));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_repl_print(env, dbtp, lsnp, notused2, notused3)
|
||||||
|
ENV *env;
|
||||||
|
DBT *dbtp;
|
||||||
|
DB_LSN *lsnp;
|
||||||
|
db_recops notused2;
|
||||||
|
void *notused3;
|
||||||
|
{
|
||||||
|
__bam_repl_args *argp;
|
||||||
|
u_int32_t i;
|
||||||
|
int ch;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
notused2 = DB_TXN_PRINT;
|
||||||
|
notused3 = NULL;
|
||||||
|
|
||||||
|
if ((ret =
|
||||||
|
__bam_repl_read(env, NULL, NULL, dbtp->data, &argp)) != 0)
|
||||||
|
return (ret);
|
||||||
|
(void)printf(
|
||||||
|
"[%lu][%lu]__bam_repl%s: rec: %lu txnp %lx prevlsn [%lu][%lu]\n",
|
||||||
|
(u_long)lsnp->file, (u_long)lsnp->offset,
|
||||||
|
(argp->type & DB_debug_FLAG) ? "_debug" : "",
|
||||||
|
(u_long)argp->type,
|
||||||
|
(u_long)argp->txnp->txnid,
|
||||||
|
(u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
|
||||||
|
(void)printf("\tfileid: %ld\n", (long)argp->fileid);
|
||||||
|
(void)printf("\tpgno: %lu\n", (u_long)argp->pgno);
|
||||||
|
(void)printf("\tlsn: [%lu][%lu]\n",
|
||||||
|
(u_long)argp->lsn.file, (u_long)argp->lsn.offset);
|
||||||
|
(void)printf("\tindx: %lu\n", (u_long)argp->indx);
|
||||||
|
(void)printf("\tisdeleted: %lu\n", (u_long)argp->isdeleted);
|
||||||
|
(void)printf("\torig: ");
|
||||||
|
for (i = 0; i < argp->orig.size; i++) {
|
||||||
|
ch = ((u_int8_t *)argp->orig.data)[i];
|
||||||
|
printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
|
||||||
|
}
|
||||||
|
(void)printf("\n");
|
||||||
|
(void)printf("\trepl: ");
|
||||||
|
for (i = 0; i < argp->repl.size; i++) {
|
||||||
|
ch = ((u_int8_t *)argp->repl.data)[i];
|
||||||
|
printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
|
||||||
|
}
|
||||||
|
(void)printf("\n");
|
||||||
|
(void)printf("\tprefix: %lu\n", (u_long)argp->prefix);
|
||||||
|
(void)printf("\tsuffix: %lu\n", (u_long)argp->suffix);
|
||||||
|
(void)printf("\n");
|
||||||
|
__os_free(env, argp);
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* PUBLIC: int __bam_root_print __P((ENV *, DBT *, DB_LSN *,
|
||||||
|
* PUBLIC: db_recops, void *));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_root_print(env, dbtp, lsnp, notused2, notused3)
|
||||||
|
ENV *env;
|
||||||
|
DBT *dbtp;
|
||||||
|
DB_LSN *lsnp;
|
||||||
|
db_recops notused2;
|
||||||
|
void *notused3;
|
||||||
|
{
|
||||||
|
__bam_root_args *argp;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
notused2 = DB_TXN_PRINT;
|
||||||
|
notused3 = NULL;
|
||||||
|
|
||||||
|
if ((ret =
|
||||||
|
__bam_root_read(env, NULL, NULL, dbtp->data, &argp)) != 0)
|
||||||
|
return (ret);
|
||||||
|
(void)printf(
|
||||||
|
"[%lu][%lu]__bam_root%s: rec: %lu txnp %lx prevlsn [%lu][%lu]\n",
|
||||||
|
(u_long)lsnp->file, (u_long)lsnp->offset,
|
||||||
|
(argp->type & DB_debug_FLAG) ? "_debug" : "",
|
||||||
|
(u_long)argp->type,
|
||||||
|
(u_long)argp->txnp->txnid,
|
||||||
|
(u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
|
||||||
|
(void)printf("\tfileid: %ld\n", (long)argp->fileid);
|
||||||
|
(void)printf("\tmeta_pgno: %lu\n", (u_long)argp->meta_pgno);
|
||||||
|
(void)printf("\troot_pgno: %lu\n", (u_long)argp->root_pgno);
|
||||||
|
(void)printf("\tmeta_lsn: [%lu][%lu]\n",
|
||||||
|
(u_long)argp->meta_lsn.file, (u_long)argp->meta_lsn.offset);
|
||||||
|
(void)printf("\n");
|
||||||
|
__os_free(env, argp);
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* PUBLIC: int __bam_curadj_print __P((ENV *, DBT *, DB_LSN *,
|
||||||
|
* PUBLIC: db_recops, void *));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_curadj_print(env, dbtp, lsnp, notused2, notused3)
|
||||||
|
ENV *env;
|
||||||
|
DBT *dbtp;
|
||||||
|
DB_LSN *lsnp;
|
||||||
|
db_recops notused2;
|
||||||
|
void *notused3;
|
||||||
|
{
|
||||||
|
__bam_curadj_args *argp;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
notused2 = DB_TXN_PRINT;
|
||||||
|
notused3 = NULL;
|
||||||
|
|
||||||
|
if ((ret =
|
||||||
|
__bam_curadj_read(env, NULL, NULL, dbtp->data, &argp)) != 0)
|
||||||
|
return (ret);
|
||||||
|
(void)printf(
|
||||||
|
"[%lu][%lu]__bam_curadj%s: rec: %lu txnp %lx prevlsn [%lu][%lu]\n",
|
||||||
|
(u_long)lsnp->file, (u_long)lsnp->offset,
|
||||||
|
(argp->type & DB_debug_FLAG) ? "_debug" : "",
|
||||||
|
(u_long)argp->type,
|
||||||
|
(u_long)argp->txnp->txnid,
|
||||||
|
(u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
|
||||||
|
(void)printf("\tfileid: %ld\n", (long)argp->fileid);
|
||||||
|
(void)printf("\tmode: %ld\n", (long)argp->mode);
|
||||||
|
(void)printf("\tfrom_pgno: %lu\n", (u_long)argp->from_pgno);
|
||||||
|
(void)printf("\tto_pgno: %lu\n", (u_long)argp->to_pgno);
|
||||||
|
(void)printf("\tleft_pgno: %lu\n", (u_long)argp->left_pgno);
|
||||||
|
(void)printf("\tfirst_indx: %lu\n", (u_long)argp->first_indx);
|
||||||
|
(void)printf("\tfrom_indx: %lu\n", (u_long)argp->from_indx);
|
||||||
|
(void)printf("\tto_indx: %lu\n", (u_long)argp->to_indx);
|
||||||
|
(void)printf("\n");
|
||||||
|
__os_free(env, argp);
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* PUBLIC: int __bam_rcuradj_print __P((ENV *, DBT *, DB_LSN *,
|
||||||
|
* PUBLIC: db_recops, void *));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_rcuradj_print(env, dbtp, lsnp, notused2, notused3)
|
||||||
|
ENV *env;
|
||||||
|
DBT *dbtp;
|
||||||
|
DB_LSN *lsnp;
|
||||||
|
db_recops notused2;
|
||||||
|
void *notused3;
|
||||||
|
{
|
||||||
|
__bam_rcuradj_args *argp;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
notused2 = DB_TXN_PRINT;
|
||||||
|
notused3 = NULL;
|
||||||
|
|
||||||
|
if ((ret =
|
||||||
|
__bam_rcuradj_read(env, NULL, NULL, dbtp->data, &argp)) != 0)
|
||||||
|
return (ret);
|
||||||
|
(void)printf(
|
||||||
|
"[%lu][%lu]__bam_rcuradj%s: rec: %lu txnp %lx prevlsn [%lu][%lu]\n",
|
||||||
|
(u_long)lsnp->file, (u_long)lsnp->offset,
|
||||||
|
(argp->type & DB_debug_FLAG) ? "_debug" : "",
|
||||||
|
(u_long)argp->type,
|
||||||
|
(u_long)argp->txnp->txnid,
|
||||||
|
(u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
|
||||||
|
(void)printf("\tfileid: %ld\n", (long)argp->fileid);
|
||||||
|
(void)printf("\tmode: %ld\n", (long)argp->mode);
|
||||||
|
(void)printf("\troot: %ld\n", (long)argp->root);
|
||||||
|
(void)printf("\trecno: %ld\n", (long)argp->recno);
|
||||||
|
(void)printf("\torder: %lu\n", (u_long)argp->order);
|
||||||
|
(void)printf("\n");
|
||||||
|
__os_free(env, argp);
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* PUBLIC: int __bam_relink_43_print __P((ENV *, DBT *, DB_LSN *,
|
||||||
|
* PUBLIC: db_recops, void *));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_relink_43_print(env, dbtp, lsnp, notused2, notused3)
|
||||||
|
ENV *env;
|
||||||
|
DBT *dbtp;
|
||||||
|
DB_LSN *lsnp;
|
||||||
|
db_recops notused2;
|
||||||
|
void *notused3;
|
||||||
|
{
|
||||||
|
__bam_relink_43_args *argp;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
notused2 = DB_TXN_PRINT;
|
||||||
|
notused3 = NULL;
|
||||||
|
|
||||||
|
if ((ret =
|
||||||
|
__bam_relink_43_read(env, NULL, NULL, dbtp->data, &argp)) != 0)
|
||||||
|
return (ret);
|
||||||
|
(void)printf(
|
||||||
|
"[%lu][%lu]__bam_relink_43%s: rec: %lu txnp %lx prevlsn [%lu][%lu]\n",
|
||||||
|
(u_long)lsnp->file, (u_long)lsnp->offset,
|
||||||
|
(argp->type & DB_debug_FLAG) ? "_debug" : "",
|
||||||
|
(u_long)argp->type,
|
||||||
|
(u_long)argp->txnp->txnid,
|
||||||
|
(u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
|
||||||
|
(void)printf("\tfileid: %ld\n", (long)argp->fileid);
|
||||||
|
(void)printf("\tpgno: %lu\n", (u_long)argp->pgno);
|
||||||
|
(void)printf("\tlsn: [%lu][%lu]\n",
|
||||||
|
(u_long)argp->lsn.file, (u_long)argp->lsn.offset);
|
||||||
|
(void)printf("\tprev: %lu\n", (u_long)argp->prev);
|
||||||
|
(void)printf("\tlsn_prev: [%lu][%lu]\n",
|
||||||
|
(u_long)argp->lsn_prev.file, (u_long)argp->lsn_prev.offset);
|
||||||
|
(void)printf("\tnext: %lu\n", (u_long)argp->next);
|
||||||
|
(void)printf("\tlsn_next: [%lu][%lu]\n",
|
||||||
|
(u_long)argp->lsn_next.file, (u_long)argp->lsn_next.offset);
|
||||||
|
(void)printf("\n");
|
||||||
|
__os_free(env, argp);
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* PUBLIC: int __bam_relink_print __P((ENV *, DBT *, DB_LSN *,
|
||||||
|
* PUBLIC: db_recops, void *));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_relink_print(env, dbtp, lsnp, notused2, notused3)
|
||||||
|
ENV *env;
|
||||||
|
DBT *dbtp;
|
||||||
|
DB_LSN *lsnp;
|
||||||
|
db_recops notused2;
|
||||||
|
void *notused3;
|
||||||
|
{
|
||||||
|
__bam_relink_args *argp;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
notused2 = DB_TXN_PRINT;
|
||||||
|
notused3 = NULL;
|
||||||
|
|
||||||
|
if ((ret =
|
||||||
|
__bam_relink_read(env, NULL, NULL, dbtp->data, &argp)) != 0)
|
||||||
|
return (ret);
|
||||||
|
(void)printf(
|
||||||
|
"[%lu][%lu]__bam_relink%s: rec: %lu txnp %lx prevlsn [%lu][%lu]\n",
|
||||||
|
(u_long)lsnp->file, (u_long)lsnp->offset,
|
||||||
|
(argp->type & DB_debug_FLAG) ? "_debug" : "",
|
||||||
|
(u_long)argp->type,
|
||||||
|
(u_long)argp->txnp->txnid,
|
||||||
|
(u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
|
||||||
|
(void)printf("\tfileid: %ld\n", (long)argp->fileid);
|
||||||
|
(void)printf("\tpgno: %lu\n", (u_long)argp->pgno);
|
||||||
|
(void)printf("\tnew_pgno: %lu\n", (u_long)argp->new_pgno);
|
||||||
|
(void)printf("\tprev: %lu\n", (u_long)argp->prev);
|
||||||
|
(void)printf("\tlsn_prev: [%lu][%lu]\n",
|
||||||
|
(u_long)argp->lsn_prev.file, (u_long)argp->lsn_prev.offset);
|
||||||
|
(void)printf("\tnext: %lu\n", (u_long)argp->next);
|
||||||
|
(void)printf("\tlsn_next: [%lu][%lu]\n",
|
||||||
|
(u_long)argp->lsn_next.file, (u_long)argp->lsn_next.offset);
|
||||||
|
(void)printf("\n");
|
||||||
|
__os_free(env, argp);
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* PUBLIC: int __bam_merge_44_print __P((ENV *, DBT *, DB_LSN *,
|
||||||
|
* PUBLIC: db_recops, void *));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_merge_44_print(env, dbtp, lsnp, notused2, notused3)
|
||||||
|
ENV *env;
|
||||||
|
DBT *dbtp;
|
||||||
|
DB_LSN *lsnp;
|
||||||
|
db_recops notused2;
|
||||||
|
void *notused3;
|
||||||
|
{
|
||||||
|
__bam_merge_44_args *argp;
|
||||||
|
u_int32_t i;
|
||||||
|
int ch;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
notused2 = DB_TXN_PRINT;
|
||||||
|
notused3 = NULL;
|
||||||
|
|
||||||
|
if ((ret =
|
||||||
|
__bam_merge_44_read(env, NULL, NULL, dbtp->data, &argp)) != 0)
|
||||||
|
return (ret);
|
||||||
|
(void)printf(
|
||||||
|
"[%lu][%lu]__bam_merge_44%s: rec: %lu txnp %lx prevlsn [%lu][%lu]\n",
|
||||||
|
(u_long)lsnp->file, (u_long)lsnp->offset,
|
||||||
|
(argp->type & DB_debug_FLAG) ? "_debug" : "",
|
||||||
|
(u_long)argp->type,
|
||||||
|
(u_long)argp->txnp->txnid,
|
||||||
|
(u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
|
||||||
|
(void)printf("\tfileid: %ld\n", (long)argp->fileid);
|
||||||
|
(void)printf("\tpgno: %lu\n", (u_long)argp->pgno);
|
||||||
|
(void)printf("\tlsn: [%lu][%lu]\n",
|
||||||
|
(u_long)argp->lsn.file, (u_long)argp->lsn.offset);
|
||||||
|
(void)printf("\tnpgno: %lu\n", (u_long)argp->npgno);
|
||||||
|
(void)printf("\tnlsn: [%lu][%lu]\n",
|
||||||
|
(u_long)argp->nlsn.file, (u_long)argp->nlsn.offset);
|
||||||
|
(void)printf("\thdr: ");
|
||||||
|
for (i = 0; i < argp->hdr.size; i++) {
|
||||||
|
ch = ((u_int8_t *)argp->hdr.data)[i];
|
||||||
|
printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
|
||||||
|
}
|
||||||
|
(void)printf("\n");
|
||||||
|
(void)printf("\tdata: ");
|
||||||
|
for (i = 0; i < argp->data.size; i++) {
|
||||||
|
ch = ((u_int8_t *)argp->data.data)[i];
|
||||||
|
printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
|
||||||
|
}
|
||||||
|
(void)printf("\n");
|
||||||
|
(void)printf("\tind: ");
|
||||||
|
for (i = 0; i < argp->ind.size; i++) {
|
||||||
|
ch = ((u_int8_t *)argp->ind.data)[i];
|
||||||
|
printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
|
||||||
|
}
|
||||||
|
(void)printf("\n");
|
||||||
|
(void)printf("\n");
|
||||||
|
__os_free(env, argp);
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* PUBLIC: int __bam_merge_print __P((ENV *, DBT *, DB_LSN *,
|
||||||
|
* PUBLIC: db_recops, void *));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_merge_print(env, dbtp, lsnp, notused2, notused3)
|
||||||
|
ENV *env;
|
||||||
|
DBT *dbtp;
|
||||||
|
DB_LSN *lsnp;
|
||||||
|
db_recops notused2;
|
||||||
|
void *notused3;
|
||||||
|
{
|
||||||
|
__bam_merge_args *argp;
|
||||||
|
u_int32_t i;
|
||||||
|
int ch;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
notused2 = DB_TXN_PRINT;
|
||||||
|
notused3 = NULL;
|
||||||
|
|
||||||
|
if ((ret =
|
||||||
|
__bam_merge_read(env, NULL, NULL, dbtp->data, &argp)) != 0)
|
||||||
|
return (ret);
|
||||||
|
(void)printf(
|
||||||
|
"[%lu][%lu]__bam_merge%s: rec: %lu txnp %lx prevlsn [%lu][%lu]\n",
|
||||||
|
(u_long)lsnp->file, (u_long)lsnp->offset,
|
||||||
|
(argp->type & DB_debug_FLAG) ? "_debug" : "",
|
||||||
|
(u_long)argp->type,
|
||||||
|
(u_long)argp->txnp->txnid,
|
||||||
|
(u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
|
||||||
|
(void)printf("\tfileid: %ld\n", (long)argp->fileid);
|
||||||
|
(void)printf("\tpgno: %lu\n", (u_long)argp->pgno);
|
||||||
|
(void)printf("\tlsn: [%lu][%lu]\n",
|
||||||
|
(u_long)argp->lsn.file, (u_long)argp->lsn.offset);
|
||||||
|
(void)printf("\tnpgno: %lu\n", (u_long)argp->npgno);
|
||||||
|
(void)printf("\tnlsn: [%lu][%lu]\n",
|
||||||
|
(u_long)argp->nlsn.file, (u_long)argp->nlsn.offset);
|
||||||
|
(void)printf("\thdr: ");
|
||||||
|
for (i = 0; i < argp->hdr.size; i++) {
|
||||||
|
ch = ((u_int8_t *)argp->hdr.data)[i];
|
||||||
|
printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
|
||||||
|
}
|
||||||
|
(void)printf("\n");
|
||||||
|
(void)printf("\tdata: ");
|
||||||
|
for (i = 0; i < argp->data.size; i++) {
|
||||||
|
ch = ((u_int8_t *)argp->data.data)[i];
|
||||||
|
printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
|
||||||
|
}
|
||||||
|
(void)printf("\n");
|
||||||
|
(void)printf("\tpg_copy: %lu\n", (u_long)argp->pg_copy);
|
||||||
|
(void)printf("\n");
|
||||||
|
__os_free(env, argp);
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* PUBLIC: int __bam_pgno_print __P((ENV *, DBT *, DB_LSN *,
|
||||||
|
* PUBLIC: db_recops, void *));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_pgno_print(env, dbtp, lsnp, notused2, notused3)
|
||||||
|
ENV *env;
|
||||||
|
DBT *dbtp;
|
||||||
|
DB_LSN *lsnp;
|
||||||
|
db_recops notused2;
|
||||||
|
void *notused3;
|
||||||
|
{
|
||||||
|
__bam_pgno_args *argp;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
notused2 = DB_TXN_PRINT;
|
||||||
|
notused3 = NULL;
|
||||||
|
|
||||||
|
if ((ret =
|
||||||
|
__bam_pgno_read(env, NULL, NULL, dbtp->data, &argp)) != 0)
|
||||||
|
return (ret);
|
||||||
|
(void)printf(
|
||||||
|
"[%lu][%lu]__bam_pgno%s: rec: %lu txnp %lx prevlsn [%lu][%lu]\n",
|
||||||
|
(u_long)lsnp->file, (u_long)lsnp->offset,
|
||||||
|
(argp->type & DB_debug_FLAG) ? "_debug" : "",
|
||||||
|
(u_long)argp->type,
|
||||||
|
(u_long)argp->txnp->txnid,
|
||||||
|
(u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
|
||||||
|
(void)printf("\tfileid: %ld\n", (long)argp->fileid);
|
||||||
|
(void)printf("\tpgno: %lu\n", (u_long)argp->pgno);
|
||||||
|
(void)printf("\tlsn: [%lu][%lu]\n",
|
||||||
|
(u_long)argp->lsn.file, (u_long)argp->lsn.offset);
|
||||||
|
(void)printf("\tindx: %lu\n", (u_long)argp->indx);
|
||||||
|
(void)printf("\topgno: %lu\n", (u_long)argp->opgno);
|
||||||
|
(void)printf("\tnpgno: %lu\n", (u_long)argp->npgno);
|
||||||
|
(void)printf("\n");
|
||||||
|
__os_free(env, argp);
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* PUBLIC: int __bam_init_print __P((ENV *, DB_DISTAB *));
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__bam_init_print(env, dtabp)
|
||||||
|
ENV *env;
|
||||||
|
DB_DISTAB *dtabp;
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if ((ret = __db_add_recovery_int(env, dtabp,
|
||||||
|
__bam_split_print, DB___bam_split)) != 0)
|
||||||
|
return (ret);
|
||||||
|
if ((ret = __db_add_recovery_int(env, dtabp,
|
||||||
|
__bam_rsplit_print, DB___bam_rsplit)) != 0)
|
||||||
|
return (ret);
|
||||||
|
if ((ret = __db_add_recovery_int(env, dtabp,
|
||||||
|
__bam_adj_print, DB___bam_adj)) != 0)
|
||||||
|
return (ret);
|
||||||
|
if ((ret = __db_add_recovery_int(env, dtabp,
|
||||||
|
__bam_cadjust_print, DB___bam_cadjust)) != 0)
|
||||||
|
return (ret);
|
||||||
|
if ((ret = __db_add_recovery_int(env, dtabp,
|
||||||
|
__bam_cdel_print, DB___bam_cdel)) != 0)
|
||||||
|
return (ret);
|
||||||
|
if ((ret = __db_add_recovery_int(env, dtabp,
|
||||||
|
__bam_repl_print, DB___bam_repl)) != 0)
|
||||||
|
return (ret);
|
||||||
|
if ((ret = __db_add_recovery_int(env, dtabp,
|
||||||
|
__bam_root_print, DB___bam_root)) != 0)
|
||||||
|
return (ret);
|
||||||
|
if ((ret = __db_add_recovery_int(env, dtabp,
|
||||||
|
__bam_curadj_print, DB___bam_curadj)) != 0)
|
||||||
|
return (ret);
|
||||||
|
if ((ret = __db_add_recovery_int(env, dtabp,
|
||||||
|
__bam_rcuradj_print, DB___bam_rcuradj)) != 0)
|
||||||
|
return (ret);
|
||||||
|
if ((ret = __db_add_recovery_int(env, dtabp,
|
||||||
|
__bam_relink_print, DB___bam_relink)) != 0)
|
||||||
|
return (ret);
|
||||||
|
if ((ret = __db_add_recovery_int(env, dtabp,
|
||||||
|
__bam_merge_print, DB___bam_merge)) != 0)
|
||||||
|
return (ret);
|
||||||
|
if ((ret = __db_add_recovery_int(env, dtabp,
|
||||||
|
__bam_pgno_print, DB___bam_pgno)) != 0)
|
||||||
|
return (ret);
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
628
build_brew/bdb_brew.dsp
Normal file
628
build_brew/bdb_brew.dsp
Normal file
@@ -0,0 +1,628 @@
|
|||||||
|
# Microsoft Developer Studio Project File - Name="bdb_brew" - Package Owner=<4>
|
||||||
|
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
||||||
|
# ** DO NOT EDIT **
|
||||||
|
|
||||||
|
# TARGTYPE "Win32 (x86) Static Library" 0x0104
|
||||||
|
|
||||||
|
CFG=bdb_brew - Win32 Debug
|
||||||
|
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||||
|
!MESSAGE use the Export Makefile command and run
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE NMAKE /f "bdb_brew.mak".
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE You can specify a configuration when running NMAKE
|
||||||
|
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE NMAKE /f "bdb_brew.mak" CFG="bdb_brew - Win32 Debug"
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE Possible choices for configuration are:
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE "bdb_brew - Win32 Release" (based on "Win32 (x86) Static Library")
|
||||||
|
!MESSAGE "bdb_brew - Win32 Debug" (based on "Win32 (x86) Static Library")
|
||||||
|
!MESSAGE
|
||||||
|
|
||||||
|
# Begin Project
|
||||||
|
# PROP AllowPerConfigDependencies 0
|
||||||
|
# PROP Scc_ProjName ""
|
||||||
|
# PROP Scc_LocalPath ""
|
||||||
|
CPP=cl.exe
|
||||||
|
RSC=rc.exe
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "bdb_brew - Win32 Release"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 0
|
||||||
|
# PROP BASE Output_Dir "Release"
|
||||||
|
# PROP BASE Intermediate_Dir "Release/bdb_brew"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 0
|
||||||
|
# PROP Use_Debug_Libraries 0
|
||||||
|
# PROP Output_Dir "Release"
|
||||||
|
# PROP Intermediate_Dir "Release/bdb_brew"
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
LINK32=link.exe
|
||||||
|
# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
|
||||||
|
# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /I "$(BREWDIR)\inc" /D "UNICODE" /D "_UNICODE" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
|
||||||
|
# ADD BASE RSC /l 0xc09
|
||||||
|
# ADD RSC /l 0xc09
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo
|
||||||
|
LIB32=link.exe -lib
|
||||||
|
# ADD BASE LIB32 /nologo
|
||||||
|
# ADD LIB32 /nologo
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "bdb_brew - Win32 Debug"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 1
|
||||||
|
# PROP BASE Output_Dir "Debug"
|
||||||
|
# PROP BASE Intermediate_Dir "Debug/bdb_brew"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 0
|
||||||
|
# PROP Use_Debug_Libraries 1
|
||||||
|
# PROP Output_Dir "Debug"
|
||||||
|
# PROP Intermediate_Dir "Debug/bdb_brew"
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
LINK32=link.exe
|
||||||
|
# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "DIAGNOSTIC" /D "UNICODE" /D "_UNICODE" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
|
||||||
|
# ADD CPP /nologo /MDd /W3 /GX /ZI /Od /X /I "." /I ".." /I "$(BREWDIR)\inc" /D "DIAGNOSTIC" /D "UNICODE" /D "_UNICODE" /D "_DEBUG" /D "AEE_SIMULATOR" /D "__NO_SYSTEM_INCLUDES" /FR /FD /c
|
||||||
|
# ADD BASE RSC /l 0xc09
|
||||||
|
# ADD RSC /l 0xc09
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo
|
||||||
|
LIB32=link.exe -lib
|
||||||
|
# ADD BASE LIB32 /nologo
|
||||||
|
# ADD LIB32 /nologo
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
# Begin Target
|
||||||
|
|
||||||
|
# Name "bdb_brew - Win32 Release"
|
||||||
|
# Name "bdb_brew - Win32 Debug"
|
||||||
|
# Begin Group "header_files"
|
||||||
|
|
||||||
|
# PROP Default_Filter ""
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\brew_db.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\clib_port.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\db.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\db_config.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\db_int.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\errno.h
|
||||||
|
# End Source File
|
||||||
|
# End Group
|
||||||
|
# Begin Group "source_files"
|
||||||
|
|
||||||
|
# PROP Default_Filter ""
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\btree\bt_compact.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\btree\bt_compare.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\btree\bt_conv.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\btree\bt_curadj.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\btree\bt_cursor.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\btree\bt_delete.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\btree\bt_method.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\btree\bt_open.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\btree\bt_put.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\btree\bt_rec.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\btree\bt_reclaim.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\btree\bt_recno.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\btree\bt_rsearch.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\btree\bt_search.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\btree\bt_split.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\btree\bt_stat.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\btree\btree_auto.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\clib\atol.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\clib\isalpha.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\clib\isdigit.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\clib\isprint.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\clib\isspace.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\clib\printf.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\clib\qsort.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\clib\rand.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\clib\strcasecmp.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\clib\strerror.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\clib\strncat.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\clib\strsep.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\clib\strtol.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\clib\time.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\common\crypto_stub.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\common\db_byteorder.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\common\db_err.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\common\db_getlong.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\common\db_idspace.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\common\db_log2.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\common\db_shash.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\common\dbt.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\common\mkpath.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\common\zerofill.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\db\crdel_auto.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\db\crdel_rec.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\db\db.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\db\db_am.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\db\db_auto.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\db\db_cam.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\db\db_cds.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\db\db_conv.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\db\db_dispatch.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\db\db_dup.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\db\db_iface.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\db\db_join.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\db\db_meta.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\db\db_method.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\db\db_open.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\db\db_overflow.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\db\db_pr.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\db\db_rec.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\db\db_reclaim.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\db\db_remove.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\db\db_rename.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\db\db_ret.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\db\db_setid.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\db\db_setlsn.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\db\db_stati.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\db\db_truncate.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\db\db_upg.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\db\db_vrfy_stub.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\dbreg\dbreg.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\dbreg\dbreg_auto.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\dbreg\dbreg_rec.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\dbreg\dbreg_stat.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\dbreg\dbreg_util.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\env\env_alloc.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\env\env_config.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\env\env_failchk.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\env\env_file.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\env\env_method.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\env\env_name.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\env\env_open.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\env\env_recover.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\env\env_region.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\env\env_register.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\env\env_sig.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\env\env_stat.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\fileops\fileops_auto.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\fileops\fop_basic.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\fileops\fop_rec.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\fileops\fop_util.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\hash\hash_func.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\hash\hash_stub.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\hmac\hmac.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\hmac\sha1.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\lock\lock_stub.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\log\log.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\log\log_archive.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\log\log_compare.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\log\log_debug.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\log\log_get.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\log\log_method.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\log\log_put.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\log\log_stat.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\mp\mp_alloc.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\mp\mp_bh.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\mp\mp_fget.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\mp\mp_fmethod.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\mp\mp_fopen.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\mp\mp_fput.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\mp\mp_fset.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\mp\mp_method.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\mp\mp_mvcc.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\mp\mp_region.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\mp\mp_register.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\mp\mp_resize.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\mp\mp_stat.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\mp\mp_sync.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\mp\mp_trickle.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\mutex\mut_stub.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\os\os_alloc.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\os\os_cpu.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\os\os_fid.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\os\os_flock.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\os\os_getenv.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\os\os_map.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\os\os_root.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\os\os_rpath.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\os\os_stack.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\os\os_tmpdir.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\os\os_uid.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\os_brew\ctime.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\os_brew\fclose.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\os_brew\fgetc.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\os_brew\fgets.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\os_brew\fopen.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\os_brew\fwrite.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\os_brew\getcwd.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\os_brew\globals.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\os_brew\localtime.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\os_brew\os_abort.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\os_brew\os_abs.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\os_brew\os_clock.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\os_brew\os_config.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\os_brew\os_dir.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\os_brew\os_errno.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\os_brew\os_handle.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\os_brew\os_mkdir.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\os_brew\os_open.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\os_brew\os_pid.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\os_brew\os_rename.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\os_brew\os_rw.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\os_brew\os_seek.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\os_brew\os_stat.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\os_brew\os_truncate.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\os_brew\os_unlink.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\os_brew\os_yield.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\qam\qam_stub.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\rep\rep_stub.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\repmgr\repmgr_stub.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\txn\txn.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\txn\txn_auto.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\txn\txn_chkpt.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\txn\txn_failchk.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\txn\txn_method.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\txn\txn_rec.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\txn\txn_recover.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\txn\txn_region.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\txn\txn_stat.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\txn\txn_util.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
SOURCE=..\xa\xa_stub.c
|
||||||
|
# End Source File
|
||||||
|
# End Group
|
||||||
|
# End Target
|
||||||
|
# End Project
|
||||||
29
build_brew/bdb_brew.dsw
Normal file
29
build_brew/bdb_brew.dsw
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
Microsoft Developer Studio Workspace File, Format Version 6.00
|
||||||
|
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
Project: "bdb_brew"=.\bdb_brew.dsp - Package Owner=<4>
|
||||||
|
|
||||||
|
Package=<5>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
Package=<4>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
Global:
|
||||||
|
|
||||||
|
Package=<5>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
Package=<3>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
588
build_brew/bdbread.mak
Normal file
588
build_brew/bdbread.mak
Normal file
@@ -0,0 +1,588 @@
|
|||||||
|
#============================================================================
|
||||||
|
# Name:
|
||||||
|
# $(TARGET).MAK
|
||||||
|
#
|
||||||
|
# Description:
|
||||||
|
# Makefile to build the $(TARGET) downloadable module.
|
||||||
|
#
|
||||||
|
# The following nmake targets are available in this makefile:
|
||||||
|
#
|
||||||
|
# all - make .elf and .mod image files (default)
|
||||||
|
# clean - delete object directory and image files
|
||||||
|
# filename.o - make object file
|
||||||
|
#
|
||||||
|
# The above targets can be made with the following command:
|
||||||
|
#
|
||||||
|
# nmake /f $(TARGET).mak [target]
|
||||||
|
#
|
||||||
|
# Assumptions:
|
||||||
|
# 1. The environment variable ADSHOME is set to the root directory of the
|
||||||
|
# arm tools.
|
||||||
|
# 2. The version of ADS is 1.2 or above.
|
||||||
|
#
|
||||||
|
# Notes:
|
||||||
|
# None.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Copyright <20> 2000-2003 QUALCOMM Incorporated.
|
||||||
|
# All Rights Reserved.
|
||||||
|
# QUALCOMM Proprietary/GTDR
|
||||||
|
#
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
#============================================================================
|
||||||
|
BREW_HOME =$(BREWDIR)
|
||||||
|
ARM_HOME =$(ARMHOME)
|
||||||
|
TARGET =D:\DB7588~1.BRE\BUILD_~1\bdb_brew
|
||||||
|
OBJS =bdbread.o AEEModGen.o AEEAppGen.o bt_compact.o bt_compare.o bt_conv.o bt_curadj.o bt_cursor.o bt_delete.o bt_method.o bt_open.o bt_put.o bt_rec.o bt_reclaim.o bt_recno.o bt_rsearch.o bt_search.o bt_split.o bt_stat.o btree_auto.o atol.o isalpha.o isdigit.o isprint.o isspace.o printf.o qsort.o rand.o strcasecmp.o strerror.o strncat.o strsep.o strtol.o time.o crypto_stub.o db_byteorder.o db_err.o db_getlong.o db_idspace.o db_log2.o db_shash.o dbt.o mkpath.o zerofill.o crdel_auto.o crdel_rec.o db.o db_am.o db_auto.o db_cam.o db_cds.o db_conv.o db_dispatch.o db_dup.o db_iface.o db_join.o db_meta.o db_method.o db_open.o db_overflow.o db_pr.o db_rec.o db_reclaim.o db_remove.o db_rename.o db_ret.o db_setid.o db_setlsn.o db_stati.o db_truncate.o db_upg.o db_vrfy_stub.o dbreg.o dbreg_auto.o dbreg_rec.o dbreg_stat.o dbreg_util.o env_alloc.o env_config.o env_failchk.o env_file.o env_method.o env_name.o env_open.o env_recover.o env_region.o env_register.o env_sig.o env_stat.o fileops_auto.o fop_basic.o fop_rec.o fop_util.o hash_func.o hash_stub.o hmac.o sha1.o lock_stub.o log.o log_archive.o log_compare.o log_debug.o log_get.o log_method.o log_put.o log_stat.o mp_alloc.o mp_bh.o mp_fget.o mp_fmethod.o mp_fopen.o mp_fput.o mp_fset.o mp_method.o mp_mvcc.o mp_region.o mp_register.o mp_resize.o mp_stat.o mp_sync.o mp_trickle.o mut_stub.o os_alloc.o os_cpu.o os_fid.o os_flock.o os_getenv.o os_map.o os_root.o os_rpath.o os_stack.o os_tmpdir.o os_uid.o ctime.o fclose.o fgetc.o fgets.o fopen.o fwrite.o getcwd.o globals.o localtime.o os_abort.o os_abs.o os_clock.o os_config.o os_dir.o os_errno.o os_handle.o os_mkdir.o os_open.o os_pid.o os_rename.o os_rw.o os_seek.o os_stat.o os_truncate.o os_unlink.o os_yield.o qam_stub.o rep_stub.o repmgr_stub.o txn.o txn_auto.o txn_chkpt.o txn_failchk.o txn_method.o txn_rec.o txn_recover.o txn_region.o txn_stat.o txn_util.o xa_stub.o
|
||||||
|
APP_INCLUDES = -I ..\build_brew -I ..
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Target file name and type definitions
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
EXETYPE = elf # Target image file format
|
||||||
|
MODULE = mod # Downloadable module extension
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Target compile time symbol definitions
|
||||||
|
#
|
||||||
|
# Tells the SDK source stuffs that we're building a dynamic app.
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
DYNAPP = -DDYNAMIC_APP
|
||||||
|
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Software tool and environment definitions
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
AEESRCPATH = $(BREW_HOME)\src
|
||||||
|
AEEINCPATH = $(BREW_HOME)\inc
|
||||||
|
|
||||||
|
ARMBIN = $(ARM_HOME)\bin # ARM ADS application directory
|
||||||
|
ARMINC = $(ARM_HOME)\include # ARM ADS include file directory
|
||||||
|
ARMLIB = $(ARM_HOME)\lib # ARM ADS library directory
|
||||||
|
|
||||||
|
ARMCC = $(ARMBIN)\armcc # ARM ADS ARM 32-bit inst. set ANSI C compiler
|
||||||
|
LD = $(ARMBIN)\armlink # ARM ADS linker
|
||||||
|
HEXTOOL = $(ARMBIN)\fromelf # ARM ADS utility to create hex file from image
|
||||||
|
|
||||||
|
OBJ_CMD = -o # Command line option to specify output filename
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Processor architecture options
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
CPU = -cpu ARM7TDMI # ARM7TDMI target processor
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# ARM Procedure Call Standard (APCS) options
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
ROPI = ropi # Read-Only(code) Position independence
|
||||||
|
INTERWRK = interwork # Allow ARM-Thumb interworking
|
||||||
|
|
||||||
|
APCS = -apcs /$(ROPI)/$(INTERWRK)/norwpi
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Additional compile time error checking options
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
CHK = -fa # Check for data flow anomolies
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Compiler output options
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
OUT = -c # Object file output only
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Compiler/assembler debug options
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
DBG = -g # Enable debug
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Compiler optimization options
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
OPT = -Ospace -O2 # Full compiler optimization for space
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Compiler code generation options
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
END = -littleend # Compile for little endian memory architecture
|
||||||
|
ZA = -zo # LDR may only access 32-bit aligned addresses
|
||||||
|
|
||||||
|
CODE = $(END) $(ZA)
|
||||||
|
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Include file search path options
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
INC = -I. -I$(AEEINCPATH) $(APP_INCLUDES)
|
||||||
|
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Compiler pragma emulation options
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Linker options
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
LINK_CMD = -o #Command line option to specify output file
|
||||||
|
#on linking
|
||||||
|
|
||||||
|
ROPILINK = -ropi #Link image as Read-Only Position Independent
|
||||||
|
|
||||||
|
LINK_ORDER = -first AEEMod_Load
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# HEXTOOL options
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
BINFORMAT = -bin
|
||||||
|
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Compiler flag definitions
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
NO_WARNING= -W
|
||||||
|
|
||||||
|
CFLAGS0 = $(OUT) $(DYNAPP) $(CPU) $(APCS) $(CODE) $(CHK) $(DBG)
|
||||||
|
CFLAGS = $(NO_WARNING) $(CFLAGS0) $(OPT)
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Linker flag definitions
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# the -entry flag is not really needed, but it keeps the linker from reporting
|
||||||
|
# warning L6305W (no entry point). The address
|
||||||
|
LFLAGS = $(ROPILINK) -rwpi -entry 0x8000#
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
# Default target
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
all : $(TARGET).$(MODULE)
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
# Clean target
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# The object subdirectory, target image file, and target hex file are deleted.
|
||||||
|
|
||||||
|
clean :
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
@echo CLEAN
|
||||||
|
-del /f $(OBJS)
|
||||||
|
-del /f $(TARGET).$(EXETYPE)
|
||||||
|
-del /f $(TARGET).$(MODULE)
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
|
||||||
|
#============================================================================
|
||||||
|
# DEFAULT SUFFIX RULES
|
||||||
|
#============================================================================
|
||||||
|
|
||||||
|
# The following are the default suffix rules used to compile all objects that
|
||||||
|
# are not specifically included in one of the module specific rules defined
|
||||||
|
# in the next section.
|
||||||
|
|
||||||
|
# The following macros are used to specify the output object file, MSG_FILE
|
||||||
|
# symbol definition and input source file on the compile line in the rules
|
||||||
|
# defined below.
|
||||||
|
|
||||||
|
SRC_FILE = $(@F:.o=.c) # Input source file specification
|
||||||
|
OBJ_FILE = $(OBJ_CMD) $(@F) # Output object file specification
|
||||||
|
|
||||||
|
.SUFFIXES :
|
||||||
|
.SUFFIXES : .o .dep .c
|
||||||
|
|
||||||
|
#--------------------------------------------------------------------------
|
||||||
|
# C code inference rules
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.c.o:
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
@echo OBJECT $(@F)
|
||||||
|
$(ARMCC) $(CFLAGS) $(INC) $(OBJ_FILE) $(SRC_FILE)
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
|
||||||
|
.c.mix:
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
@echo OBJECT $(@F)
|
||||||
|
$(ARMCC) -S -fs $(CFLAGS) $(INC) $(OBJ_FILE) $<
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
{$(AEESRCPATH)}.c.o:
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
@echo OBJECT $(@F)
|
||||||
|
$(ARMCC) $(CFLAGS) $(INC) $(OBJ_FILE) $(AEESRCPATH)\$(SRC_FILE)
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
#===============================================================================
|
||||||
|
# MODULE SPECIFIC RULES
|
||||||
|
#===============================================================================
|
||||||
|
|
||||||
|
APP_OBJS = $(OBJS)
|
||||||
|
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
# Lib file targets
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
$(TARGET).$(MODULE) : $(TARGET).$(EXETYPE)
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
@echo TARGET $@
|
||||||
|
$(HEXTOOL) $(TARGET).$(EXETYPE) $(BINFORMAT) $(TARGET).$(MODULE)
|
||||||
|
|
||||||
|
$(TARGET).$(EXETYPE) : $(APP_OBJS)
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
@echo TARGET $@
|
||||||
|
$(LD) $(LINK_CMD) $(TARGET).$(EXETYPE) $(LFLAGS) $(APP_OBJS) $(LINK_ORDER)
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
# Applet Specific Rules
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
RULE1 = ..\clib
|
||||||
|
{$(RULE1)}.c.o:
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
@echo OBJECT $(@F)
|
||||||
|
$(ARMCC) $(CFLAGS) $(INC) $(OBJ_FILE) $(RULE1)\$(SRC_FILE)
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
RULE2 = ..\btree
|
||||||
|
{$(RULE2)}.c.o:
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
@echo OBJECT $(@F)
|
||||||
|
$(ARMCC) $(CFLAGS) $(INC) $(OBJ_FILE) $(RULE2)\$(SRC_FILE)
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
RULE3 = ..\db
|
||||||
|
{$(RULE3)}.c.o:
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
@echo OBJECT $(@F)
|
||||||
|
$(ARMCC) $(CFLAGS) $(INC) $(OBJ_FILE) $(RULE3)\$(SRC_FILE)
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
RULE4 = ..\common
|
||||||
|
{$(RULE4)}.c.o:
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
@echo OBJECT $(@F)
|
||||||
|
$(ARMCC) $(CFLAGS) $(INC) $(OBJ_FILE) $(RULE4)\$(SRC_FILE)
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
RULE5 = ..\os_brew
|
||||||
|
{$(RULE5)}.c.o:
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
@echo OBJECT $(@F)
|
||||||
|
$(ARMCC) $(CFLAGS) $(INC) $(OBJ_FILE) $(RULE5)\$(SRC_FILE)
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
RULE6 = ..\env
|
||||||
|
{$(RULE6)}.c.o:
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
@echo OBJECT $(@F)
|
||||||
|
$(ARMCC) $(CFLAGS) $(INC) $(OBJ_FILE) $(RULE6)\$(SRC_FILE)
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
RULE7 = ..\dbreg
|
||||||
|
{$(RULE7)}.c.o:
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
@echo OBJECT $(@F)
|
||||||
|
$(ARMCC) $(CFLAGS) $(INC) $(OBJ_FILE) $(RULE7)\$(SRC_FILE)
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
RULE8 = ..\fileops
|
||||||
|
{$(RULE8)}.c.o:
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
@echo OBJECT $(@F)
|
||||||
|
$(ARMCC) $(CFLAGS) $(INC) $(OBJ_FILE) $(RULE8)\$(SRC_FILE)
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
RULE9 = ..\hash
|
||||||
|
{$(RULE9)}.c.o:
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
@echo OBJECT $(@F)
|
||||||
|
$(ARMCC) $(CFLAGS) $(INC) $(OBJ_FILE) $(RULE9)\$(SRC_FILE)
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
RULE10 = ..\hmac
|
||||||
|
{$(RULE10)}.c.o:
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
@echo OBJECT $(@F)
|
||||||
|
$(ARMCC) $(CFLAGS) $(INC) $(OBJ_FILE) $(RULE10)\$(SRC_FILE)
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
RULE11 = ..\lock
|
||||||
|
{$(RULE11)}.c.o:
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
@echo OBJECT $(@F)
|
||||||
|
$(ARMCC) $(CFLAGS) $(INC) $(OBJ_FILE) $(RULE11)\$(SRC_FILE)
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
RULE12 = ..\log
|
||||||
|
{$(RULE12)}.c.o:
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
@echo OBJECT $(@F)
|
||||||
|
$(ARMCC) $(CFLAGS) $(INC) $(OBJ_FILE) $(RULE12)\$(SRC_FILE)
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
RULE13 = ..\mp
|
||||||
|
{$(RULE13)}.c.o:
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
@echo OBJECT $(@F)
|
||||||
|
$(ARMCC) $(CFLAGS) $(INC) $(OBJ_FILE) $(RULE13)\$(SRC_FILE)
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
RULE14 = ..\mutex
|
||||||
|
{$(RULE14)}.c.o:
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
@echo OBJECT $(@F)
|
||||||
|
$(ARMCC) $(CFLAGS) $(INC) $(OBJ_FILE) $(RULE14)\$(SRC_FILE)
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
RULE15 = ..\os
|
||||||
|
{$(RULE15)}.c.o:
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
@echo OBJECT $(@F)
|
||||||
|
$(ARMCC) $(CFLAGS) $(INC) $(OBJ_FILE) $(RULE15)\$(SRC_FILE)
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
RULE16 = ..\qam
|
||||||
|
{$(RULE16)}.c.o:
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
@echo OBJECT $(@F)
|
||||||
|
$(ARMCC) $(CFLAGS) $(INC) $(OBJ_FILE) $(RULE16)\$(SRC_FILE)
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
RULE17 = ..\rep
|
||||||
|
{$(RULE17)}.c.o:
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
@echo OBJECT $(@F)
|
||||||
|
$(ARMCC) $(CFLAGS) $(INC) $(OBJ_FILE) $(RULE17)\$(SRC_FILE)
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
RULE18 = ..\txn
|
||||||
|
{$(RULE18)}.c.o:
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
@echo OBJECT $(@F)
|
||||||
|
$(ARMCC) $(CFLAGS) $(INC) $(OBJ_FILE) $(RULE18)\$(SRC_FILE)
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
RULE19 = ..\xa
|
||||||
|
{$(RULE19)}.c.o:
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
@echo OBJECT $(@F)
|
||||||
|
$(ARMCC) $(CFLAGS) $(INC) $(OBJ_FILE) $(RULE19)\$(SRC_FILE)
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
RULE20 = ..\bdbread
|
||||||
|
{$(RULE20)}.c.o:
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
@echo OBJECT $(@F)
|
||||||
|
$(ARMCC) $(CFLAGS) $(INC) $(OBJ_FILE) $(RULE20)\$(SRC_FILE)
|
||||||
|
@echo ---------------------------------------------------------------
|
||||||
|
|
||||||
|
# --------------------------------------------
|
||||||
|
# DEPENDENCY LIST, DO NOT EDIT BELOW THIS LINE
|
||||||
|
# --------------------------------------------
|
||||||
|
|
||||||
|
bdbread.o : ..\bdbread\bdbread.c
|
||||||
|
AEEModGen.o : ..\bdbread\AEEModGen.c
|
||||||
|
AEEAppGen.o : ..\bdbread\AEEAppGen.c
|
||||||
|
bt_compact.o: ..\btree\bt_compact.c
|
||||||
|
bt_compare.o: ..\btree\bt_compare.c
|
||||||
|
bt_conv.o: ..\btree\bt_conv.c
|
||||||
|
bt_curadj.o: ..\btree\bt_curadj.c
|
||||||
|
bt_cursor.o: ..\btree\bt_cursor.c
|
||||||
|
bt_delete.o: ..\btree\bt_delete.c
|
||||||
|
bt_method.o: ..\btree\bt_method.c
|
||||||
|
bt_open.o: ..\btree\bt_open.c
|
||||||
|
bt_put.o: ..\btree\bt_put.c
|
||||||
|
bt_rec.o: ..\btree\bt_rec.c
|
||||||
|
bt_reclaim.o: ..\btree\bt_reclaim.c
|
||||||
|
bt_recno.o: ..\btree\bt_recno.c
|
||||||
|
bt_rsearch.o: ..\btree\bt_rsearch.c
|
||||||
|
bt_search.o: ..\btree\bt_search.c
|
||||||
|
bt_split.o: ..\btree\bt_split.c
|
||||||
|
bt_stat.o: ..\btree\bt_stat.c
|
||||||
|
btree_auto.o: ..\btree\btree_auto.c
|
||||||
|
atol.o: ..\clib\atol.c
|
||||||
|
isalpha.o: ..\clib\isalpha.c
|
||||||
|
isdigit.o: ..\clib\isdigit.c
|
||||||
|
isprint.o: ..\clib\isprint.c
|
||||||
|
isspace.o: ..\clib\isspace.c
|
||||||
|
printf.o: ..\clib\printf.c
|
||||||
|
qsort.o: ..\clib\qsort.c
|
||||||
|
rand.o: ..\clib\rand.c
|
||||||
|
strcasecmp.o: ..\clib\strcasecmp.c
|
||||||
|
strerror.o: ..\clib\strerror.c
|
||||||
|
strncat.o: ..\clib\strncat.c
|
||||||
|
strsep.o: ..\clib\strsep.c
|
||||||
|
strtol.o: ..\clib\strtol.c
|
||||||
|
time.o: ..\clib\time.c
|
||||||
|
crypto_stub.o: ..\common\crypto_stub.c
|
||||||
|
db_byteorder.o: ..\common\db_byteorder.c
|
||||||
|
db_err.o: ..\common\db_err.c
|
||||||
|
db_getlong.o: ..\common\db_getlong.c
|
||||||
|
db_idspace.o: ..\common\db_idspace.c
|
||||||
|
db_log2.o: ..\common\db_log2.c
|
||||||
|
db_shash.o: ..\common\db_shash.c
|
||||||
|
dbt.o: ..\common\dbt.c
|
||||||
|
mkpath.o: ..\common\mkpath.c
|
||||||
|
zerofill.o: ..\common\zerofill.c
|
||||||
|
crdel_auto.o: ..\db\crdel_auto.c
|
||||||
|
crdel_rec.o: ..\db\crdel_rec.c
|
||||||
|
db.o: ..\db\db.c
|
||||||
|
db_am.o: ..\db\db_am.c
|
||||||
|
db_auto.o: ..\db\db_auto.c
|
||||||
|
db_cam.o: ..\db\db_cam.c
|
||||||
|
db_cds.o: ..\db\db_cds.c
|
||||||
|
db_conv.o: ..\db\db_conv.c
|
||||||
|
db_dispatch.o: ..\db\db_dispatch.c
|
||||||
|
db_dup.o: ..\db\db_dup.c
|
||||||
|
db_iface.o: ..\db\db_iface.c
|
||||||
|
db_join.o: ..\db\db_join.c
|
||||||
|
db_meta.o: ..\db\db_meta.c
|
||||||
|
db_method.o: ..\db\db_method.c
|
||||||
|
db_open.o: ..\db\db_open.c
|
||||||
|
db_overflow.o: ..\db\db_overflow.c
|
||||||
|
db_pr.o: ..\db\db_pr.c
|
||||||
|
db_rec.o: ..\db\db_rec.c
|
||||||
|
db_reclaim.o: ..\db\db_reclaim.c
|
||||||
|
db_remove.o: ..\db\db_remove.c
|
||||||
|
db_rename.o: ..\db\db_rename.c
|
||||||
|
db_ret.o: ..\db\db_ret.c
|
||||||
|
db_setid.o: ..\db\db_setid.c
|
||||||
|
db_setlsn.o: ..\db\db_setlsn.c
|
||||||
|
db_stati.o: ..\db\db_stati.c
|
||||||
|
db_truncate.o: ..\db\db_truncate.c
|
||||||
|
db_upg.o: ..\db\db_upg.c
|
||||||
|
db_vrfy_stub.o: ..\db\db_vrfy_stub.c
|
||||||
|
dbreg.o: ..\dbreg\dbreg.c
|
||||||
|
dbreg_auto.o: ..\dbreg\dbreg_auto.c
|
||||||
|
dbreg_rec.o: ..\dbreg\dbreg_rec.c
|
||||||
|
dbreg_stat.o: ..\dbreg\dbreg_stat.c
|
||||||
|
dbreg_util.o: ..\dbreg\dbreg_util.c
|
||||||
|
env_alloc.o: ..\env\env_alloc.c
|
||||||
|
env_config.o: ..\env\env_config.c
|
||||||
|
env_failchk.o: ..\env\env_failchk.c
|
||||||
|
env_file.o: ..\env\env_file.c
|
||||||
|
env_method.o: ..\env\env_method.c
|
||||||
|
env_name.o: ..\env\env_name.c
|
||||||
|
env_open.o: ..\env\env_open.c
|
||||||
|
env_recover.o: ..\env\env_recover.c
|
||||||
|
env_region.o: ..\env\env_region.c
|
||||||
|
env_register.o: ..\env\env_register.c
|
||||||
|
env_sig.o: ..\env\env_sig.c
|
||||||
|
env_stat.o: ..\env\env_stat.c
|
||||||
|
fileops_auto.o: ..\fileops\fileops_auto.c
|
||||||
|
fop_basic.o: ..\fileops\fop_basic.c
|
||||||
|
fop_rec.o: ..\fileops\fop_rec.c
|
||||||
|
fop_util.o: ..\fileops\fop_util.c
|
||||||
|
hash_func.o: ..\hash\hash_func.c
|
||||||
|
hash_stub.o: ..\hash\hash_stub.c
|
||||||
|
hmac.o: ..\hmac\hmac.c
|
||||||
|
sha1.o: ..\hmac\sha1.c
|
||||||
|
lock_stub.o: ..\lock\lock_stub.c
|
||||||
|
log.o: ..\log\log.c
|
||||||
|
log_archive.o: ..\log\log_archive.c
|
||||||
|
log_compare.o: ..\log\log_compare.c
|
||||||
|
log_debug.o: ..\log\log_debug.c
|
||||||
|
log_get.o: ..\log\log_get.c
|
||||||
|
log_method.o: ..\log\log_method.c
|
||||||
|
log_put.o: ..\log\log_put.c
|
||||||
|
log_stat.o: ..\log\log_stat.c
|
||||||
|
mp_alloc.o: ..\mp\mp_alloc.c
|
||||||
|
mp_bh.o: ..\mp\mp_bh.c
|
||||||
|
mp_fget.o: ..\mp\mp_fget.c
|
||||||
|
mp_fmethod.o: ..\mp\mp_fmethod.c
|
||||||
|
mp_fopen.o: ..\mp\mp_fopen.c
|
||||||
|
mp_fput.o: ..\mp\mp_fput.c
|
||||||
|
mp_fset.o: ..\mp\mp_fset.c
|
||||||
|
mp_method.o: ..\mp\mp_method.c
|
||||||
|
mp_mvcc.o: ..\mp\mp_mvcc.c
|
||||||
|
mp_region.o: ..\mp\mp_region.c
|
||||||
|
mp_register.o: ..\mp\mp_register.c
|
||||||
|
mp_resize.o: ..\mp\mp_resize.c
|
||||||
|
mp_stat.o: ..\mp\mp_stat.c
|
||||||
|
mp_sync.o: ..\mp\mp_sync.c
|
||||||
|
mp_trickle.o: ..\mp\mp_trickle.c
|
||||||
|
mut_stub.o: ..\mutex\mut_stub.c
|
||||||
|
os_alloc.o: ..\os\os_alloc.c
|
||||||
|
os_cpu.o: ..\os\os_cpu.c
|
||||||
|
os_fid.o: ..\os\os_fid.c
|
||||||
|
os_flock.o: ..\os\os_flock.c
|
||||||
|
os_getenv.o: ..\os\os_getenv.c
|
||||||
|
os_map.o: ..\os\os_map.c
|
||||||
|
os_root.o: ..\os\os_root.c
|
||||||
|
os_rpath.o: ..\os\os_rpath.c
|
||||||
|
os_stack.o: ..\os\os_stack.c
|
||||||
|
os_tmpdir.o: ..\os\os_tmpdir.c
|
||||||
|
os_uid.o: ..\os\os_uid.c
|
||||||
|
ctime.o: ..\os_brew\ctime.c
|
||||||
|
fclose.o: ..\os_brew\fclose.c
|
||||||
|
fgetc.o: ..\os_brew\fgetc.c
|
||||||
|
fgets.o: ..\os_brew\fgets.c
|
||||||
|
fopen.o: ..\os_brew\fopen.c
|
||||||
|
fwrite.o: ..\os_brew\fwrite.c
|
||||||
|
getcwd.o: ..\os_brew\getcwd.c
|
||||||
|
globals.o: ..\os_brew\globals.c
|
||||||
|
localtime.o: ..\os_brew\localtime.c
|
||||||
|
os_abort.o: ..\os_brew\os_abort.c
|
||||||
|
os_abs.o: ..\os_brew\os_abs.c
|
||||||
|
os_clock.o: ..\os_brew\os_clock.c
|
||||||
|
os_config.o: ..\os_brew\os_config.c
|
||||||
|
os_dir.o: ..\os_brew\os_dir.c
|
||||||
|
os_errno.o: ..\os_brew\os_errno.c
|
||||||
|
os_handle.o: ..\os_brew\os_handle.c
|
||||||
|
os_mkdir.o: ..\os_brew\os_mkdir.c
|
||||||
|
os_open.o: ..\os_brew\os_open.c
|
||||||
|
os_pid.o: ..\os_brew\os_pid.c
|
||||||
|
os_rename.o: ..\os_brew\os_rename.c
|
||||||
|
os_rw.o: ..\os_brew\os_rw.c
|
||||||
|
os_seek.o: ..\os_brew\os_seek.c
|
||||||
|
os_stat.o: ..\os_brew\os_stat.c
|
||||||
|
os_truncate.o: ..\os_brew\os_truncate.c
|
||||||
|
os_unlink.o: ..\os_brew\os_unlink.c
|
||||||
|
os_yield.o: ..\os_brew\os_yield.c
|
||||||
|
qam_stub.o: ..\qam\qam_stub.c
|
||||||
|
rep_stub.o: ..\rep\rep_stub.c
|
||||||
|
repmgr_stub.o: ..\repmgr\repmgr_stub.c
|
||||||
|
txn.o: ..\txn\txn.c
|
||||||
|
txn_auto.o: ..\txn\txn_auto.c
|
||||||
|
txn_chkpt.o: ..\txn\txn_chkpt.c
|
||||||
|
txn_failchk.o: ..\txn\txn_failchk.c
|
||||||
|
txn_method.o: ..\txn\txn_method.c
|
||||||
|
txn_rec.o: ..\txn\txn_rec.c
|
||||||
|
txn_recover.o: ..\txn\txn_recover.c
|
||||||
|
txn_region.o: ..\txn\txn_region.c
|
||||||
|
txn_stat.o: ..\txn\txn_stat.c
|
||||||
|
txn_util.o: ..\txn\txn_util.c
|
||||||
|
xa_stub.o: ..\xa\xa_stub.c
|
||||||
150
build_brew/brew_db.h
Normal file
150
build_brew/brew_db.h
Normal file
@@ -0,0 +1,150 @@
|
|||||||
|
/*-
|
||||||
|
* $Id: brew_db.h 63573 2008-05-23 21:43:21Z trent.nelson $
|
||||||
|
*
|
||||||
|
* The following provides the information necessary to build Berkeley DB
|
||||||
|
* on BREW.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <AEEAppGen.h>
|
||||||
|
#include <AEEShell.h>
|
||||||
|
#include <AEEFile.h>
|
||||||
|
#include <AEEStdLib.h>
|
||||||
|
|
||||||
|
#include "errno.h"
|
||||||
|
#include "db.h"
|
||||||
|
#include "clib_port.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* BREW doesn't have stdio.
|
||||||
|
*/
|
||||||
|
#define EOF (-1) /* Declare stdio's EOF. */
|
||||||
|
#define stderr ((IFile *)1) /* Flag to call DBGPRINTF. */
|
||||||
|
#define stdout ((IFile *)1)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* POSIX time structure/function compatibility.
|
||||||
|
*
|
||||||
|
* !!!
|
||||||
|
* This is likely wrong, we should probably move all Berkeley DB time-specific
|
||||||
|
* functionality into os/.
|
||||||
|
*/
|
||||||
|
struct tm {
|
||||||
|
int tm_sec; /* seconds after the minute - [0,59] */
|
||||||
|
int tm_min; /* minutes after the hour - [0,59] */
|
||||||
|
int tm_hour; /* hours since midnight - [0,23] */
|
||||||
|
int tm_mday; /* day of the month - [1,31] */
|
||||||
|
int tm_mon; /* months since January - [0,11] */
|
||||||
|
int tm_year; /* years since 1900 */
|
||||||
|
int tm_wday; /* days since Sunday - [0,6] */
|
||||||
|
int tm_yday; /* days since January 1 - [0,365] */
|
||||||
|
int tm_isdst; /* daylight savings time flag */
|
||||||
|
/*
|
||||||
|
* We don't provide tm_zone or tm_gmtoff because BREW doesn't
|
||||||
|
* provide them.
|
||||||
|
*/
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The ctime() function converts the time pointed to by clock, representing
|
||||||
|
* time in seconds since the Epoch to local time in the form of a string.
|
||||||
|
*
|
||||||
|
* Berkeley DB uses POSIX time values internally.
|
||||||
|
*
|
||||||
|
* The POSIX time function returns seconds since the Epoch, which was
|
||||||
|
* 1970/01/01 00:00:00 UTC.
|
||||||
|
*
|
||||||
|
* BREW's GETUTCSECONDS() returns the number of seconds since
|
||||||
|
* 1980/01/06 00:00:00 UTC.
|
||||||
|
*
|
||||||
|
* To convert from BREW to POSIX, add the seconds between 1970 and 1980 plus
|
||||||
|
* 6 more days.
|
||||||
|
*/
|
||||||
|
#define BREW_EPOCH_OFFSET (315964800L)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Map ANSI C library functions to BREW specific APIs.
|
||||||
|
*/
|
||||||
|
#define atoi(a) ATOI(a)
|
||||||
|
#define free(a) FREE(a)
|
||||||
|
#define malloc(a) MALLOC(a)
|
||||||
|
#define memcmp(a, b, c) MEMCMP(a, b, c)
|
||||||
|
#define memmove(a, b, c) MEMMOVE(a, b, c)
|
||||||
|
#define memset(a, b, c) MEMSET(a, b, c)
|
||||||
|
#define realloc(a, b) REALLOC(a, b)
|
||||||
|
#define snprintf SNPRINTF
|
||||||
|
#define sprintf SPRINTF
|
||||||
|
#define strcat(a, b) STRCAT(a, b)
|
||||||
|
#define strchr(a, b) STRCHR(a, b)
|
||||||
|
#define strcmp(a, b) STRCMP(a, b)
|
||||||
|
#define strcpy(a, b) STRCPY(a, b)
|
||||||
|
#define strdup(a) STRDUP(a)
|
||||||
|
#define strlen(a) STRLEN(a)
|
||||||
|
#define strncmp(a, b, c) STRNCMP(a, b, c)
|
||||||
|
#define strncpy(a, b, c) STRNCPY(a, b, c)
|
||||||
|
#define strrchr(a, b) STRRCHR(a, b)
|
||||||
|
#define strtoul(a, b, c) STRTOUL(a, b, c)
|
||||||
|
#define vsnprintf(a, b, c, d) VSNPRINTF(a, b, c, d)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* !!!
|
||||||
|
* Don't #define memcpy to MEMCPY, even though it exists, because that results
|
||||||
|
* in a C pre-processor loop and compile failure.
|
||||||
|
*
|
||||||
|
* Don't #define memcpy to MEMMOVE directly, that results in failure as well.
|
||||||
|
*/
|
||||||
|
#define memcpy memmove
|
||||||
|
|
||||||
|
/*
|
||||||
|
* BREW does not have concept of 'sync'.
|
||||||
|
*
|
||||||
|
* It depends on the implementation of the BREW on various platforms, but
|
||||||
|
* Mobilus confirms the version of BREW that ships to North America in 3G
|
||||||
|
* models has sync features guaranteeing safe physical writes whenever a
|
||||||
|
* write is performed using BREW API. Therefore, the issue is not on the
|
||||||
|
* applications running top of BREW, but the implementation of BREW itself
|
||||||
|
* that has to be checked in order to provide durability.
|
||||||
|
*/
|
||||||
|
#define __os_fsync(a, b) (0)
|
||||||
|
#define fflush(a) (0)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The ANSI C library functions for which we wrote local versions.
|
||||||
|
*/
|
||||||
|
int fclose(FILE *);
|
||||||
|
int fgetc(FILE *);
|
||||||
|
char *fgets(char *, int, FILE *);
|
||||||
|
FILE *fopen(const char *, const char *);
|
||||||
|
size_t fwrite(const void *, size_t, size_t, FILE *);
|
||||||
|
char *getcwd(char *, size_t);
|
||||||
|
struct tm *localtime(const time_t *);
|
||||||
|
time_t time(time_t *);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* FILE_MANAGER_CREATE --
|
||||||
|
* Instantiate file manager instance.
|
||||||
|
*/
|
||||||
|
#define FILE_MANAGER_CREATE(dbenv, mgr, ret) do { \
|
||||||
|
AEEApplet *__app = (AEEApplet *)GETAPPINSTANCE(); \
|
||||||
|
int __ret; \
|
||||||
|
if ((__ret = ISHELL_CreateInstance(__app->m_pIShell, \
|
||||||
|
AEECLSID_FILEMGR, (void **)&(mgr))) == SUCCESS) \
|
||||||
|
ret = 0; \
|
||||||
|
else { \
|
||||||
|
__db_syserr(dbenv, __ret, "ISHELL_CreateInstance"); \
|
||||||
|
ret = __os_posix_err(__ret); \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* FILE_MANAGER_ERR --
|
||||||
|
* Handle file manager method error.
|
||||||
|
*/
|
||||||
|
#define FILE_MANAGER_ERR(dbenv, mgr, name, op, ret) do { \
|
||||||
|
int __ret; \
|
||||||
|
__ret = IFILEMGR_GetLastError(mgr); \
|
||||||
|
if ((name) == NULL) \
|
||||||
|
__db_syserr(dbenv, __ret, "%s", op); \
|
||||||
|
else \
|
||||||
|
__db_syserr(dbenv, __ret, "%s: %s", name, op); \
|
||||||
|
(ret) = __os_posix_err(__ret); \
|
||||||
|
} while (0)
|
||||||
274
build_brew/clib_port.h
Normal file
274
build_brew/clib_port.h
Normal file
@@ -0,0 +1,274 @@
|
|||||||
|
/* DO NOT EDIT: automatically built from dist/clib_port.in. */
|
||||||
|
/*
|
||||||
|
* Minimum/maximum values for various types.
|
||||||
|
*/
|
||||||
|
#ifndef UINT16_MAX /* Maximum 16-bit unsigned. */
|
||||||
|
#define UINT16_MAX 65535
|
||||||
|
#endif
|
||||||
|
#ifndef UINT32_MAX /* Maximum 32-bit unsigned. */
|
||||||
|
#define UINT32_MAX 4294967295U
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef INT_MAX
|
||||||
|
#if SIZEOF_INT == 4
|
||||||
|
#define INT_MAX 2147483647
|
||||||
|
#endif
|
||||||
|
#if SIZEOF_INT == 8
|
||||||
|
#define INT_MAX 9223372036854775807
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef INT_MIN /* minimum (signed) int value */
|
||||||
|
#define INT_MIN (-INT_MAX-1)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef UINT_MAX /* maximum (signed) int value */
|
||||||
|
#if SIZEOF_INT == 4
|
||||||
|
#define UINT_MAX 4294967295U
|
||||||
|
#endif
|
||||||
|
#if SIZEOF_INT == 8
|
||||||
|
#define UINT_MAX 18446744073709551615U
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef LONG_MAX /* maximum (signed) long value */
|
||||||
|
#if SIZEOF_LONG == 4
|
||||||
|
#define LONG_MAX 2147483647
|
||||||
|
#endif
|
||||||
|
#if SIZEOF_LONG == 8
|
||||||
|
#define LONG_MAX 9223372036854775807L
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef LONG_MIN /* minimum (signed) long value */
|
||||||
|
#define LONG_MIN (-LONG_MAX-1)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef ULONG_MAX /* maximum (unsigned) long value */
|
||||||
|
#if SIZEOF_LONG == 4
|
||||||
|
#define ULONG_MAX 4294967295U
|
||||||
|
#endif
|
||||||
|
#if SIZEOF_LONG == 8
|
||||||
|
#define ULONG_MAX 18446744073709551615UL
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(HAVE_64BIT_TYPES)
|
||||||
|
/*
|
||||||
|
* Override the system's 64-bit min/max constants. AIX's 32-bit compiler can
|
||||||
|
* handle 64-bit values, but the system's constants don't include the LL/ULL
|
||||||
|
* suffix, and so can't be compiled using the 32-bit compiler.
|
||||||
|
*/
|
||||||
|
#undef INT64_MAX
|
||||||
|
#undef INT64_MIN
|
||||||
|
#undef UINT64_MAX
|
||||||
|
|
||||||
|
#ifdef DB_WIN32
|
||||||
|
#define INT64_MAX _I64_MAX
|
||||||
|
#define INT64_MIN _I64_MIN
|
||||||
|
#define UINT64_MAX _UI64_MAX
|
||||||
|
#else
|
||||||
|
#define INT64_MAX 9223372036854775807LL
|
||||||
|
#define INT64_MIN (-INT64_MAX-1)
|
||||||
|
#define UINT64_MAX 18446744073709551615ULL
|
||||||
|
#endif /* DB_WIN32 */
|
||||||
|
|
||||||
|
#endif /* HAVE_64BIT_TYPES */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Exit success/failure macros.
|
||||||
|
*/
|
||||||
|
#ifndef HAVE_EXIT_SUCCESS
|
||||||
|
#define EXIT_FAILURE 1
|
||||||
|
#define EXIT_SUCCESS 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* File modes.
|
||||||
|
*/
|
||||||
|
#ifdef DB_WIN32
|
||||||
|
#ifndef S_IREAD /* WinCE doesn't have S_IREAD. */
|
||||||
|
#define S_IREAD 0
|
||||||
|
#endif
|
||||||
|
#ifndef S_IWRITE /* WinCE doesn't have S_IWRITE. */
|
||||||
|
#define S_IWRITE 0
|
||||||
|
#endif
|
||||||
|
#ifndef S_IRUSR
|
||||||
|
#define S_IRUSR S_IREAD /* R for owner */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IWUSR
|
||||||
|
#define S_IWUSR S_IWRITE /* W for owner */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IXUSR
|
||||||
|
#define S_IXUSR 0 /* X for owner */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IRGRP
|
||||||
|
#define S_IRGRP 0 /* R for group */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IWGRP
|
||||||
|
#define S_IWGRP 0 /* W for group */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IXGRP
|
||||||
|
#define S_IXGRP 0 /* X for group */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IROTH
|
||||||
|
#define S_IROTH 0 /* R for other */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IWOTH
|
||||||
|
#define S_IWOTH 0 /* W for other */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IXOTH
|
||||||
|
#define S_IXOTH 0 /* X for other */
|
||||||
|
#endif
|
||||||
|
#else /* !DB_WIN32 */
|
||||||
|
#ifndef S_IRUSR
|
||||||
|
#define S_IRUSR 0000400 /* R for owner */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IWUSR
|
||||||
|
#define S_IWUSR 0000200 /* W for owner */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IXUSR
|
||||||
|
#define S_IXUSR 0000100 /* X for owner */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IRGRP
|
||||||
|
#define S_IRGRP 0000040 /* R for group */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IWGRP
|
||||||
|
#define S_IWGRP 0000020 /* W for group */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IXGRP
|
||||||
|
#define S_IXGRP 0000010 /* X for group */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IROTH
|
||||||
|
#define S_IROTH 0000004 /* R for other */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IWOTH
|
||||||
|
#define S_IWOTH 0000002 /* W for other */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IXOTH
|
||||||
|
#define S_IXOTH 0000001 /* X for other */
|
||||||
|
#endif
|
||||||
|
#endif /* !DB_WIN32 */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Don't step on the namespace. Other libraries may have their own
|
||||||
|
* implementations of these functions, we don't want to use their
|
||||||
|
* implementations or force them to use ours based on the load order.
|
||||||
|
*/
|
||||||
|
#ifndef HAVE_ATOI
|
||||||
|
#define atoi __db_Catoi
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_ATOL
|
||||||
|
#define atol __db_Catol
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_FCLOSE
|
||||||
|
#define fclose __db_Cfclose
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_FGETC
|
||||||
|
#define fgetc __db_Cfgetc
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_FGETS
|
||||||
|
#define fgets __db_Cfgets
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_FOPEN
|
||||||
|
#define fopen __db_Cfopen
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_FWRITE
|
||||||
|
#define fwrite __db_Cfwrite
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_GETADDRINFO
|
||||||
|
#define freeaddrinfo(a) __db_Cfreeaddrinfo(a)
|
||||||
|
#define getaddrinfo(a, b, c, d) __db_Cgetaddrinfo(a, b, c, d)
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_GETCWD
|
||||||
|
#define getcwd __db_Cgetcwd
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_GETOPT
|
||||||
|
#define getopt __db_Cgetopt
|
||||||
|
#define optarg __db_Coptarg
|
||||||
|
#define opterr __db_Copterr
|
||||||
|
#define optind __db_Coptind
|
||||||
|
#define optopt __db_Coptopt
|
||||||
|
#define optreset __db_Coptreset
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_ISALPHA
|
||||||
|
#define isalpha __db_Cisalpha
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_ISDIGIT
|
||||||
|
#define isdigit __db_Cisdigit
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_ISPRINT
|
||||||
|
#define isprint __db_Cisprint
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_ISSPACE
|
||||||
|
#define isspace __db_Cisspace
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_LOCALTIME
|
||||||
|
#define localtime __db_Clocaltime
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_MEMCMP
|
||||||
|
#define memcmp __db_Cmemcmp
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_MEMCPY
|
||||||
|
#define memcpy __db_Cmemcpy
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_MEMMOVE
|
||||||
|
#define memmove __db_Cmemmove
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_PRINTF
|
||||||
|
#define printf __db_Cprintf
|
||||||
|
#define fprintf __db_Cfprintf
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_QSORT
|
||||||
|
#define qsort __db_Cqsort
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_RAISE
|
||||||
|
#define raise __db_Craise
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_RAND
|
||||||
|
#define rand __db_Crand
|
||||||
|
#define srand __db_Csrand
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_SNPRINTF
|
||||||
|
#define snprintf __db_Csnprintf
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_STRCASECMP
|
||||||
|
#define strcasecmp __db_Cstrcasecmp
|
||||||
|
#define strncasecmp __db_Cstrncasecmp
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_STRCAT
|
||||||
|
#define strcat __db_Cstrcat
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_STRCHR
|
||||||
|
#define strchr __db_Cstrchr
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_STRDUP
|
||||||
|
#define strdup __db_Cstrdup
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_STRERROR
|
||||||
|
#define strerror __db_Cstrerror
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_STRNCAT
|
||||||
|
#define strncat __db_Cstrncat
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_STRNCMP
|
||||||
|
#define strncmp __db_Cstrncmp
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_STRRCHR
|
||||||
|
#define strrchr __db_Cstrrchr
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_STRSEP
|
||||||
|
#define strsep __db_Cstrsep
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_STRTOL
|
||||||
|
#define strtol __db_Cstrtol
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_STRTOUL
|
||||||
|
#define strtoul __db_Cstrtoul
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_TIME
|
||||||
|
#define time __db_Ctime
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_VSNPRINTF
|
||||||
|
#define vsnprintf __db_Cvsnprintf
|
||||||
|
#endif
|
||||||
2491
build_brew/db.h
Normal file
2491
build_brew/db.h
Normal file
File diff suppressed because it is too large
Load Diff
573
build_brew/db_config.h
Normal file
573
build_brew/db_config.h
Normal file
@@ -0,0 +1,573 @@
|
|||||||
|
/* DO NOT EDIT: automatically built by dist/s_brew. */
|
||||||
|
/* Define to 1 if you want to build a version for running the test suite. */
|
||||||
|
/* #undef CONFIG_TEST */
|
||||||
|
|
||||||
|
/* We use DB_WIN32 much as one would use _WIN32 -- to specify that we're using
|
||||||
|
an operating system environment that supports Win32 calls and semantics. We
|
||||||
|
don't use _WIN32 because Cygwin/GCC also defines _WIN32, even though
|
||||||
|
Cygwin/GCC closely emulates the Unix environment. */
|
||||||
|
/* #undef DB_WIN32 */
|
||||||
|
|
||||||
|
/* Define to 1 if you want a debugging version. */
|
||||||
|
#if defined(_DEBUG)
|
||||||
|
#if !defined(DEBUG)
|
||||||
|
#define DEBUG 1
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Define to 1 if you want a version that logs read operations. */
|
||||||
|
/* #undef DEBUG_ROP */
|
||||||
|
|
||||||
|
/* Define to 1 if you want a version that logs write operations. */
|
||||||
|
/* #undef DEBUG_WOP */
|
||||||
|
|
||||||
|
/* Define to 1 if you want a version with run-time diagnostic checking. */
|
||||||
|
/* #undef DIAGNOSTIC */
|
||||||
|
|
||||||
|
/* Define to 1 if 64-bit types are available. */
|
||||||
|
/* #undef HAVE_64BIT_TYPES */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `abort' function. */
|
||||||
|
/* #undef HAVE_ABORT */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `atoi' function. */
|
||||||
|
#define HAVE_ATOI 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `atol' function. */
|
||||||
|
/* #undef HAVE_ATOL */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `backtrace' function. */
|
||||||
|
/* #undef HAVE_BACKTRACE */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `backtrace_symbols' function. */
|
||||||
|
/* #undef HAVE_BACKTRACE_SYMBOLS */
|
||||||
|
|
||||||
|
/* Define to 1 if building BREW. */
|
||||||
|
#define HAVE_BREW 1
|
||||||
|
|
||||||
|
/* Define to 1 if building on BREW (SDK2). */
|
||||||
|
#define HAVE_BREW_SDK2 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `clock_gettime' function. */
|
||||||
|
/* #undef HAVE_CLOCK_GETTIME */
|
||||||
|
|
||||||
|
/* Define to 1 if clock_gettime supports CLOCK_MONOTONIC. */
|
||||||
|
/* #undef HAVE_CLOCK_MONOTONIC */
|
||||||
|
|
||||||
|
/* Define to 1 if Berkeley DB release includes strong cryptography. */
|
||||||
|
/* #undef HAVE_CRYPTO */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `ctime_r' function. */
|
||||||
|
/* #undef HAVE_CTIME_R */
|
||||||
|
|
||||||
|
/* Define to 1 if ctime_r takes a buffer length as a third argument. */
|
||||||
|
/* #undef HAVE_CTIME_R_3ARG */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `directio' function. */
|
||||||
|
/* #undef HAVE_DIRECTIO */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
|
||||||
|
*/
|
||||||
|
/* #undef HAVE_DIRENT_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <dlfcn.h> header file. */
|
||||||
|
/* #undef HAVE_DLFCN_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <execinfo.h> header file. */
|
||||||
|
/* #undef HAVE_EXECINFO_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have EXIT_SUCCESS/EXIT_FAILURE #defines. */
|
||||||
|
#define HAVE_EXIT_SUCCESS 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fchmod' function. */
|
||||||
|
/* #undef HAVE_FCHMOD */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fclose' function. */
|
||||||
|
/* #undef HAVE_FCLOSE */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fcntl' function. */
|
||||||
|
/* #undef HAVE_FCNTL */
|
||||||
|
|
||||||
|
/* Define to 1 if fcntl/F_SETFD denies child access to file descriptors. */
|
||||||
|
/* #undef HAVE_FCNTL_F_SETFD */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fdatasync' function. */
|
||||||
|
/* #undef HAVE_FDATASYNC */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fgetc' function. */
|
||||||
|
/* #undef HAVE_FGETC */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fgets' function. */
|
||||||
|
/* #undef HAVE_FGETS */
|
||||||
|
|
||||||
|
/* Define to 1 if allocated filesystem blocks are not zeroed. */
|
||||||
|
#define HAVE_FILESYSTEM_NOTZERO 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fopen' function. */
|
||||||
|
/* #undef HAVE_FOPEN */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `ftruncate' function. */
|
||||||
|
#define HAVE_FTRUNCATE 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fwrite' function. */
|
||||||
|
/* #undef HAVE_FWRITE */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getaddrinfo' function. */
|
||||||
|
/* #undef HAVE_GETADDRINFO */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getcwd' function. */
|
||||||
|
/* #undef HAVE_GETCWD */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getenv' function. */
|
||||||
|
/* #undef HAVE_GETENV */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getgid' function. */
|
||||||
|
#define HAVE_GETGID 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getopt' function. */
|
||||||
|
/* #undef HAVE_GETOPT */
|
||||||
|
|
||||||
|
/* Define to 1 if getopt supports the optreset variable. */
|
||||||
|
/* #undef HAVE_GETOPT_OPTRESET */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getrusage' function. */
|
||||||
|
/* #undef HAVE_GETRUSAGE */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `gettimeofday' function. */
|
||||||
|
/* #undef HAVE_GETTIMEOFDAY */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getuid' function. */
|
||||||
|
/* #undef HAVE_GETUID */
|
||||||
|
|
||||||
|
/* Define to 1 if building Hash access method. */
|
||||||
|
/* #undef HAVE_HASH */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `hstrerror' function. */
|
||||||
|
/* #undef HAVE_HSTRERROR */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||||
|
/* #undef HAVE_INTTYPES_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `isspace' function. */
|
||||||
|
/* #undef HAVE_ISALPHA */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `isspace' function. */
|
||||||
|
/* #undef HAVE_ISDIGIT */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `isspace' function. */
|
||||||
|
/* #undef HAVE_ISPRINT */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `isspace' function. */
|
||||||
|
/* #undef HAVE_ISSPACE */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `localtime' function. */
|
||||||
|
/* #undef HAVE_LOCALTIME */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `memcmp' function. */
|
||||||
|
#define HAVE_MEMCMP 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `memcpy' function. */
|
||||||
|
#define HAVE_MEMCPY 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `memmove' function. */
|
||||||
|
#define HAVE_MEMMOVE 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <memory.h> header file. */
|
||||||
|
/* #undef HAVE_MEMORY_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `mlock' function. */
|
||||||
|
/* #undef HAVE_MLOCK */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `mmap' function. */
|
||||||
|
/* #undef HAVE_MMAP */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `mprotect' function. */
|
||||||
|
/* #undef HAVE_MPROTECT */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `munlock' function. */
|
||||||
|
/* #undef HAVE_MUNLOCK */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `munmap' function. */
|
||||||
|
/* #undef HAVE_MUNMAP */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and 68K assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_68K_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the AIX _check_lock mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_AIX_CHECK_LOCK */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and Alpha assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_ALPHA_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and ARM assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_ARM_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the Apple/Darwin _spin_lock_try mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_DARWIN_SPIN_LOCK_TRY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the UNIX fcntl system call mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_FCNTL */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and PaRisc assembly language mutexes.
|
||||||
|
*/
|
||||||
|
/* #undef HAVE_MUTEX_HPPA_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the msem_XXX mutexes on HP-UX. */
|
||||||
|
/* #undef HAVE_MUTEX_HPPA_MSEM_INIT */
|
||||||
|
|
||||||
|
/* Define to 1 to use test-and-set mutexes with blocking mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_HYBRID */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and IA64 assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_IA64_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and MIPS assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_MIPS_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the msem_XXX mutexes on systems other than HP-UX. */
|
||||||
|
/* #undef HAVE_MUTEX_MSEM_INIT */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and PowerPC assembly language mutexes.
|
||||||
|
*/
|
||||||
|
/* #undef HAVE_MUTEX_PPC_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use POSIX 1003.1 pthread_XXX mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_PTHREADS */
|
||||||
|
|
||||||
|
/* Define to 1 to use Reliant UNIX initspin mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_RELIANTUNIX_INITSPIN */
|
||||||
|
|
||||||
|
/* Define to 1 to use the IBM C compiler and S/390 assembly language mutexes.
|
||||||
|
*/
|
||||||
|
/* #undef HAVE_MUTEX_S390_CC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and S/390 assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_S390_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the SCO compiler and x86 assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_SCO_X86_CC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the obsolete POSIX 1003.1 sema_XXX mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_SEMA_INIT */
|
||||||
|
|
||||||
|
/* Define to 1 to use the SGI XXX_lock mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_SGI_INIT_LOCK */
|
||||||
|
|
||||||
|
/* Define to 1 to use the Solaris _lock_XXX mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_SOLARIS_LOCK_TRY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the Solaris lwp threads mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_SOLARIS_LWP */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and Sparc assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_SPARC_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 if the Berkeley DB library should support mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_SUPPORT */
|
||||||
|
|
||||||
|
/* Define to 1 if mutexes hold system resources. */
|
||||||
|
/* #undef HAVE_MUTEX_SYSTEM_RESOURCES */
|
||||||
|
|
||||||
|
/* Define to 1 to configure mutexes intra-process only. */
|
||||||
|
/* #undef HAVE_MUTEX_THREAD_ONLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the CC compiler and Tru64 assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_TRU64_CC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the UNIX International mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_UI_THREADS */
|
||||||
|
|
||||||
|
/* Define to 1 to use the UTS compiler and assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_UTS_CC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use VMS mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_VMS */
|
||||||
|
|
||||||
|
/* Define to 1 to use VxWorks mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_VXWORKS */
|
||||||
|
|
||||||
|
/* Define to 1 to use the MSVC compiler and Windows mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_WIN32 */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and Windows mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_WIN32_GCC */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and 64-bit x86 assembly language
|
||||||
|
mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_X86_64_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and 32-bit x86 assembly language
|
||||||
|
mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_X86_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
|
||||||
|
/* #undef HAVE_NDIR_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the O_DIRECT flag. */
|
||||||
|
/* #undef HAVE_O_DIRECT */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `pread' function. */
|
||||||
|
/* #undef HAVE_PREAD */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `printf' function. */
|
||||||
|
/* #undef HAVE_PRINTF */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `pstat_getdynamic' function. */
|
||||||
|
/* #undef HAVE_PSTAT_GETDYNAMIC */
|
||||||
|
|
||||||
|
/* Define to 1 to configure Berkeley DB for POSIX pthread API. */
|
||||||
|
/* #undef HAVE_PTHREAD_API */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `pthread_yield' function. */
|
||||||
|
/* #undef HAVE_PTHREAD_YIELD */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `pwrite' function. */
|
||||||
|
/* #undef HAVE_PWRITE */
|
||||||
|
|
||||||
|
/* Define to 1 if building on QNX. */
|
||||||
|
/* #undef HAVE_QNX */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `qsort' function. */
|
||||||
|
/* #undef HAVE_QSORT */
|
||||||
|
|
||||||
|
/* Define to 1 if building Queue access method. */
|
||||||
|
/* #undef HAVE_QUEUE */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `raise' function. */
|
||||||
|
/* #undef HAVE_RAISE */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `rand' function. */
|
||||||
|
/* #undef HAVE_RAND */
|
||||||
|
|
||||||
|
/* Define to 1 if building replication support. */
|
||||||
|
/* #undef HAVE_REPLICATION */
|
||||||
|
|
||||||
|
/* Define to 1 if building the Berkeley DB replication framework. */
|
||||||
|
/* #undef HAVE_REPLICATION_THREADS */
|
||||||
|
|
||||||
|
/* Define to 1 if building RPC client/server. */
|
||||||
|
/* #undef HAVE_RPC */
|
||||||
|
|
||||||
|
/* Define to 1 if building on S60. */
|
||||||
|
/* #undef HAVE_S60 */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `sched_yield' function. */
|
||||||
|
/* #undef HAVE_SCHED_YIELD */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `select' function. */
|
||||||
|
/* #undef HAVE_SELECT */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `setgid' function. */
|
||||||
|
#define HAVE_SETGID 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `setuid' function. */
|
||||||
|
#define HAVE_SETUID 1
|
||||||
|
|
||||||
|
/* Define to 1 if shmctl/SHM_LOCK locks down shared memory segments. */
|
||||||
|
/* #undef HAVE_SHMCTL_SHM_LOCK */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `shmget' function. */
|
||||||
|
/* #undef HAVE_SHMGET */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `sigaction' function. */
|
||||||
|
/* #undef HAVE_SIGACTION */
|
||||||
|
|
||||||
|
/* Define to 1 if thread identifier type db_threadid_t is integral. */
|
||||||
|
/* #undef HAVE_SIMPLE_THREAD_TYPE */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `snprintf' function. */
|
||||||
|
#define HAVE_SNPRINTF 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `stat' function. */
|
||||||
|
/* #undef HAVE_STAT */
|
||||||
|
|
||||||
|
/* Define to 1 if building statistics support. */
|
||||||
|
/* #undef HAVE_STATISTICS */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <stdint.h> header file. */
|
||||||
|
/* #undef HAVE_STDINT_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||||
|
/* #undef HAVE_STDLIB_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strcasecmp' function. */
|
||||||
|
/* #undef HAVE_STRCASECMP */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strcat' function. */
|
||||||
|
#define HAVE_STRCAT 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strchr' function. */
|
||||||
|
#define HAVE_STRCHR 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strdup' function. */
|
||||||
|
#define HAVE_STRDUP 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strerror' function. */
|
||||||
|
/* #undef HAVE_STRERROR */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strftime' function. */
|
||||||
|
/* #undef HAVE_STRFTIME */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <strings.h> header file. */
|
||||||
|
/* #undef HAVE_STRINGS_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <string.h> header file. */
|
||||||
|
/* #undef HAVE_STRING_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strncat' function. */
|
||||||
|
/* #undef HAVE_STRNCAT */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strncmp' function. */
|
||||||
|
#define HAVE_STRNCMP 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strrchr' function. */
|
||||||
|
#define HAVE_STRRCHR 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strsep' function. */
|
||||||
|
/* #undef HAVE_STRSEP */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strtol' function. */
|
||||||
|
/* #undef HAVE_STRTOL */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strtoul' function. */
|
||||||
|
#define HAVE_STRTOUL 1
|
||||||
|
|
||||||
|
/* Define to 1 if `st_blksize' is member of `struct stat'. */
|
||||||
|
/* #undef HAVE_STRUCT_STAT_ST_BLKSIZE */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `sysconf' function. */
|
||||||
|
/* #undef HAVE_SYSCONF */
|
||||||
|
|
||||||
|
/* Define to 1 if port includes files in the Berkeley DB source code. */
|
||||||
|
/* #undef HAVE_SYSTEM_INCLUDE_FILES */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
|
||||||
|
*/
|
||||||
|
/* #undef HAVE_SYS_DIR_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
|
||||||
|
*/
|
||||||
|
/* #undef HAVE_SYS_NDIR_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/select.h> header file. */
|
||||||
|
/* #undef HAVE_SYS_SELECT_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/socket.h> header file. */
|
||||||
|
/* #undef HAVE_SYS_SOCKET_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||||
|
/* #undef HAVE_SYS_STAT_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/time.h> header file. */
|
||||||
|
/* #undef HAVE_SYS_TIME_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||||
|
/* #undef HAVE_SYS_TYPES_H 1*/
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `time' function. */
|
||||||
|
/* #undef HAVE_TIME */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <unistd.h> header file. */
|
||||||
|
/* #undef HAVE_UNISTD_H */
|
||||||
|
|
||||||
|
/* Define to 1 if unlink of file with open file descriptors will fail. */
|
||||||
|
/* #undef HAVE_UNLINK_WITH_OPEN_FAILURE */
|
||||||
|
|
||||||
|
/* Define to 1 if port includes historic database upgrade support. */
|
||||||
|
/* #undef HAVE_UPGRADE_SUPPORT */
|
||||||
|
|
||||||
|
/* Define to 1 if building access method verification support. */
|
||||||
|
/* #undef HAVE_VERIFY */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `vsnprintf' function. */
|
||||||
|
#define HAVE_VSNPRINTF 1
|
||||||
|
|
||||||
|
/* Define to 1 if building VxWorks. */
|
||||||
|
/* #undef HAVE_VXWORKS */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `yield' function. */
|
||||||
|
/* #undef HAVE_YIELD */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `_fstati64' function. */
|
||||||
|
/* #undef HAVE__FSTATI64 1*/
|
||||||
|
|
||||||
|
/* Define to the address where bug reports for this package should be sent. */
|
||||||
|
#define PACKAGE_BUGREPORT "support@sleepycat.com"
|
||||||
|
|
||||||
|
/* Define to the full name of this package. */
|
||||||
|
#define PACKAGE_NAME "Berkeley DB"
|
||||||
|
|
||||||
|
/* Define to the full name and version of this package. */
|
||||||
|
#define PACKAGE_STRING "Berkeley DB 4.7.25"
|
||||||
|
|
||||||
|
/* Define to the one symbol short name of this package. */
|
||||||
|
#define PACKAGE_TARNAME "db-4.7.25"
|
||||||
|
|
||||||
|
/* Define to the version of this package. */
|
||||||
|
#define PACKAGE_VERSION "4.7.25"
|
||||||
|
|
||||||
|
/* The size of a `char', as computed by sizeof. */
|
||||||
|
#define SIZEOF_CHAR 1
|
||||||
|
|
||||||
|
/* The size of a `char *', as computed by sizeof. */
|
||||||
|
#define SIZEOF_CHAR_P 4
|
||||||
|
|
||||||
|
/* The size of a `int', as computed by sizeof. */
|
||||||
|
#define SIZEOF_INT 4
|
||||||
|
|
||||||
|
/* The size of a `long', as computed by sizeof. */
|
||||||
|
#define SIZEOF_LONG 4
|
||||||
|
|
||||||
|
/* The size of a `long long', as computed by sizeof. */
|
||||||
|
/* #undef SIZEOF_LONG_LONG */
|
||||||
|
|
||||||
|
/* The size of a `short', as computed by sizeof. */
|
||||||
|
#define SIZEOF_SHORT 2
|
||||||
|
|
||||||
|
/* The size of a `size_t', as computed by sizeof. */
|
||||||
|
#define SIZEOF_SIZE_T 4
|
||||||
|
|
||||||
|
/* The size of a `unsigned char', as computed by sizeof. */
|
||||||
|
#define SIZEOF_UNSIGNED_CHAR 1
|
||||||
|
|
||||||
|
/* The size of a `unsigned int', as computed by sizeof. */
|
||||||
|
#define SIZEOF_UNSIGNED_INT 4
|
||||||
|
|
||||||
|
/* The size of a `unsigned long', as computed by sizeof. */
|
||||||
|
#define SIZEOF_UNSIGNED_LONG 4
|
||||||
|
|
||||||
|
/* The size of a `unsigned long long', as computed by sizeof. */
|
||||||
|
/* #undef SIZEOF_UNSIGNED_LONG_LONG */
|
||||||
|
|
||||||
|
/* The size of a `unsigned short', as computed by sizeof. */
|
||||||
|
#define SIZEOF_UNSIGNED_SHORT 2
|
||||||
|
|
||||||
|
/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */
|
||||||
|
/* #undef STAT_MACROS_BROKEN */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the ANSI C header files. */
|
||||||
|
#define STDC_HEADERS 1
|
||||||
|
|
||||||
|
/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
|
||||||
|
/* #undef TIME_WITH_SYS_TIME */
|
||||||
|
|
||||||
|
/* Define to 1 to mask harmless uninitialized memory read/writes. */
|
||||||
|
/* #undef UMRW */
|
||||||
|
|
||||||
|
/* Number of bits in a file offset, on hosts where this is settable. */
|
||||||
|
/* #undef _FILE_OFFSET_BITS */
|
||||||
|
|
||||||
|
/* Define for large files, on AIX-style hosts. */
|
||||||
|
/* #undef _LARGE_FILES */
|
||||||
|
|
||||||
|
/* Define to empty if `const' does not conform to ANSI C. */
|
||||||
|
/* #undef const */
|
||||||
|
|
||||||
|
/* Define to `__inline__' or `__inline' if that's what the C compiler
|
||||||
|
calls it, or to nothing if 'inline' is not supported under any name. */
|
||||||
|
#ifndef __cplusplus
|
||||||
|
#define inline
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* type to use in place of socklen_t if not defined */
|
||||||
|
/* #undef socklen_t */
|
||||||
914
build_brew/db_int.h
Normal file
914
build_brew/db_int.h
Normal file
@@ -0,0 +1,914 @@
|
|||||||
|
/* DO NOT EDIT: automatically built by dist/s_brew. */
|
||||||
|
/*-
|
||||||
|
* See the file LICENSE for redistribution information.
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996,2008 Oracle. All rights reserved.
|
||||||
|
*
|
||||||
|
* $Id: db_int.h 63573 2008-05-23 21:43:21Z trent.nelson $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _DB_INT_H_
|
||||||
|
#define _DB_INT_H_
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Berkeley DB ANSI/POSIX include files.
|
||||||
|
*******************************************************/
|
||||||
|
#ifdef HAVE_SYSTEM_INCLUDE_FILES
|
||||||
|
#include <sys/types.h>
|
||||||
|
#ifdef DIAG_MVCC
|
||||||
|
#include <sys/mman.h>
|
||||||
|
#endif
|
||||||
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
#if defined(__INCLUDE_SELECT_H)
|
||||||
|
#ifdef HAVE_SYS_SELECT_H
|
||||||
|
#include <sys/select.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_VXWORKS
|
||||||
|
#include <selectLib.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if TIME_WITH_SYS_TIME
|
||||||
|
#include <sys/time.h>
|
||||||
|
#include <time.h>
|
||||||
|
#else
|
||||||
|
#if HAVE_SYS_TIME_H
|
||||||
|
#include <sys/time.h>
|
||||||
|
#else
|
||||||
|
#include <time.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_VXWORKS
|
||||||
|
#include <net/uio.h>
|
||||||
|
#else
|
||||||
|
#include <sys/uio.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__INCLUDE_NETWORKING)
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <netdb.h>
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(STDC_HEADERS) || defined(__cplusplus)
|
||||||
|
#include <stdarg.h>
|
||||||
|
#else
|
||||||
|
#include <varargs.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <limits.h>
|
||||||
|
#include <signal.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#if defined(__INCLUDE_DIRECTORY)
|
||||||
|
#if HAVE_DIRENT_H
|
||||||
|
# include <dirent.h>
|
||||||
|
# define NAMLEN(dirent) strlen((dirent)->d_name)
|
||||||
|
#else
|
||||||
|
# define dirent direct
|
||||||
|
# define NAMLEN(dirent) (dirent)->d_namlen
|
||||||
|
# if HAVE_SYS_NDIR_H
|
||||||
|
# include <sys/ndir.h>
|
||||||
|
# endif
|
||||||
|
# if HAVE_SYS_DIR_H
|
||||||
|
# include <sys/dir.h>
|
||||||
|
# endif
|
||||||
|
# if HAVE_NDIR_H
|
||||||
|
# include <ndir.h>
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
#endif /* __INCLUDE_DIRECTORY */
|
||||||
|
|
||||||
|
#endif /* !HAVE_SYSTEM_INCLUDE_FILES */
|
||||||
|
#include "brew_db.h"
|
||||||
|
|
||||||
|
#ifdef DB_WIN32
|
||||||
|
#include "dbinc/win_db.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "db.h"
|
||||||
|
#include "clib_port.h"
|
||||||
|
|
||||||
|
#include "dbinc/queue.h"
|
||||||
|
#include "dbinc/shqueue.h"
|
||||||
|
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Forward structure declarations.
|
||||||
|
*******************************************************/
|
||||||
|
struct __db_reginfo_t; typedef struct __db_reginfo_t REGINFO;
|
||||||
|
struct __db_txnhead; typedef struct __db_txnhead DB_TXNHEAD;
|
||||||
|
struct __db_txnlist; typedef struct __db_txnlist DB_TXNLIST;
|
||||||
|
struct __vrfy_childinfo;typedef struct __vrfy_childinfo VRFY_CHILDINFO;
|
||||||
|
struct __vrfy_dbinfo; typedef struct __vrfy_dbinfo VRFY_DBINFO;
|
||||||
|
struct __vrfy_pageinfo; typedef struct __vrfy_pageinfo VRFY_PAGEINFO;
|
||||||
|
|
||||||
|
typedef SH_TAILQ_HEAD(__hash_head) DB_HASHTAB;
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* General purpose constants and macros.
|
||||||
|
*******************************************************/
|
||||||
|
#undef FALSE
|
||||||
|
#define FALSE 0
|
||||||
|
#undef TRUE
|
||||||
|
#define TRUE (!FALSE)
|
||||||
|
|
||||||
|
#define MEGABYTE 1048576
|
||||||
|
#define GIGABYTE 1073741824
|
||||||
|
|
||||||
|
#define NS_PER_MS 1000000 /* Nanoseconds in a millisecond */
|
||||||
|
#define NS_PER_US 1000 /* Nanoseconds in a microsecond */
|
||||||
|
#define NS_PER_SEC 1000000000 /* Nanoseconds in a second */
|
||||||
|
#define US_PER_MS 1000 /* Microseconds in a millisecond */
|
||||||
|
#define US_PER_SEC 1000000 /* Microseconds in a second */
|
||||||
|
#define MS_PER_SEC 1000 /* Milliseconds in a second */
|
||||||
|
|
||||||
|
#define RECNO_OOB 0 /* Illegal record number. */
|
||||||
|
|
||||||
|
/* Test for a power-of-two (tests true for zero, which doesn't matter here). */
|
||||||
|
#define POWER_OF_TWO(x) (((x) & ((x) - 1)) == 0)
|
||||||
|
|
||||||
|
/* Test for valid page sizes. */
|
||||||
|
#define DB_MIN_PGSIZE 0x000200 /* Minimum page size (512). */
|
||||||
|
#define DB_MAX_PGSIZE 0x010000 /* Maximum page size (65536). */
|
||||||
|
#define IS_VALID_PAGESIZE(x) \
|
||||||
|
(POWER_OF_TWO(x) && (x) >= DB_MIN_PGSIZE && ((x) <= DB_MAX_PGSIZE))
|
||||||
|
|
||||||
|
/* Minimum number of pages cached, by default. */
|
||||||
|
#define DB_MINPAGECACHE 16
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If we are unable to determine the underlying filesystem block size, use
|
||||||
|
* 8K on the grounds that most OS's use less than 8K for a VM page size.
|
||||||
|
*/
|
||||||
|
#define DB_DEF_IOSIZE (8 * 1024)
|
||||||
|
|
||||||
|
/* Align an integer to a specific boundary. */
|
||||||
|
#undef DB_ALIGN
|
||||||
|
#define DB_ALIGN(v, bound) \
|
||||||
|
(((v) + (bound) - 1) & ~(((uintmax_t)(bound)) - 1))
|
||||||
|
|
||||||
|
/* Increment a pointer to a specific boundary. */
|
||||||
|
#undef ALIGNP_INC
|
||||||
|
#define ALIGNP_INC(p, bound) \
|
||||||
|
(void *)(((uintptr_t)(p) + (bound) - 1) & ~(((uintptr_t)(bound)) - 1))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Print an address as a u_long (a u_long is the largest type we can print
|
||||||
|
* portably). Most 64-bit systems have made longs 64-bits, so this should
|
||||||
|
* work.
|
||||||
|
*/
|
||||||
|
#define P_TO_ULONG(p) ((u_long)(uintptr_t)(p))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Convert a pointer to a small integral value.
|
||||||
|
*
|
||||||
|
* The (u_int16_t)(uintptr_t) cast avoids warnings: the (uintptr_t) cast
|
||||||
|
* converts the value to an integral type, and the (u_int16_t) cast converts
|
||||||
|
* it to a small integral type so we don't get complaints when we assign the
|
||||||
|
* final result to an integral type smaller than uintptr_t.
|
||||||
|
*/
|
||||||
|
#define P_TO_UINT32(p) ((u_int32_t)(uintptr_t)(p))
|
||||||
|
#define P_TO_UINT16(p) ((u_int16_t)(uintptr_t)(p))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* There are several on-page structures that are declared to have a number of
|
||||||
|
* fields followed by a variable length array of items. The structure size
|
||||||
|
* without including the variable length array or the address of the first of
|
||||||
|
* those elements can be found using SSZ.
|
||||||
|
*
|
||||||
|
* This macro can also be used to find the offset of a structure element in a
|
||||||
|
* structure. This is used in various places to copy structure elements from
|
||||||
|
* unaligned memory references, e.g., pointers into a packed page.
|
||||||
|
*
|
||||||
|
* There are two versions because compilers object if you take the address of
|
||||||
|
* an array.
|
||||||
|
*/
|
||||||
|
#undef SSZ
|
||||||
|
#define SSZ(name, field) P_TO_UINT16(&(((name *)0)->field))
|
||||||
|
|
||||||
|
#undef SSZA
|
||||||
|
#define SSZA(name, field) P_TO_UINT16(&(((name *)0)->field[0]))
|
||||||
|
|
||||||
|
/* Structure used to print flag values. */
|
||||||
|
typedef struct __fn {
|
||||||
|
u_int32_t mask; /* Flag value. */
|
||||||
|
const char *name; /* Flag name. */
|
||||||
|
} FN;
|
||||||
|
|
||||||
|
/* Set, clear and test flags. */
|
||||||
|
#define FLD_CLR(fld, f) (fld) &= ~(f)
|
||||||
|
#define FLD_ISSET(fld, f) ((fld) & (f))
|
||||||
|
#define FLD_SET(fld, f) (fld) |= (f)
|
||||||
|
#define F_CLR(p, f) (p)->flags &= ~(f)
|
||||||
|
#define F_ISSET(p, f) ((p)->flags & (f))
|
||||||
|
#define F_SET(p, f) (p)->flags |= (f)
|
||||||
|
#define LF_CLR(f) ((flags) &= ~(f))
|
||||||
|
#define LF_ISSET(f) ((flags) & (f))
|
||||||
|
#define LF_SET(f) ((flags) |= (f))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Calculate a percentage. The values can overflow 32-bit integer arithmetic
|
||||||
|
* so we use floating point.
|
||||||
|
*
|
||||||
|
* When calculating a bytes-vs-page size percentage, we're getting the inverse
|
||||||
|
* of the percentage in all cases, that is, we want 100 minus the percentage we
|
||||||
|
* calculate.
|
||||||
|
*/
|
||||||
|
#define DB_PCT(v, total) \
|
||||||
|
((int)((total) == 0 ? 0 : ((double)(v) * 100) / (total)))
|
||||||
|
#define DB_PCT_PG(v, total, pgsize) \
|
||||||
|
((int)((total) == 0 ? 0 : \
|
||||||
|
100 - ((double)(v) * 100) / (((double)total) * (pgsize))))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Statistics update shared memory and so are expensive -- don't update the
|
||||||
|
* values unless we're going to display the results.
|
||||||
|
*/
|
||||||
|
#undef STAT
|
||||||
|
#ifdef HAVE_STATISTICS
|
||||||
|
#define STAT(x) x
|
||||||
|
#else
|
||||||
|
#define STAT(x)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Structure used for callback message aggregation.
|
||||||
|
*
|
||||||
|
* Display values in XXX_stat_print calls.
|
||||||
|
*/
|
||||||
|
typedef struct __db_msgbuf {
|
||||||
|
char *buf; /* Heap allocated buffer. */
|
||||||
|
char *cur; /* Current end of message. */
|
||||||
|
size_t len; /* Allocated length of buffer. */
|
||||||
|
} DB_MSGBUF;
|
||||||
|
#define DB_MSGBUF_INIT(a) do { \
|
||||||
|
(a)->buf = (a)->cur = NULL; \
|
||||||
|
(a)->len = 0; \
|
||||||
|
} while (0)
|
||||||
|
#define DB_MSGBUF_FLUSH(env, a) do { \
|
||||||
|
if ((a)->buf != NULL) { \
|
||||||
|
if ((a)->cur != (a)->buf) \
|
||||||
|
__db_msg(env, "%s", (a)->buf); \
|
||||||
|
__os_free(env, (a)->buf); \
|
||||||
|
DB_MSGBUF_INIT(a); \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
#define STAT_FMT(msg, fmt, type, v) do { \
|
||||||
|
DB_MSGBUF __mb; \
|
||||||
|
DB_MSGBUF_INIT(&__mb); \
|
||||||
|
__db_msgadd(env, &__mb, fmt, (type)(v)); \
|
||||||
|
__db_msgadd(env, &__mb, "\t%s", msg); \
|
||||||
|
DB_MSGBUF_FLUSH(env, &__mb); \
|
||||||
|
} while (0)
|
||||||
|
#define STAT_HEX(msg, v) \
|
||||||
|
__db_msg(env, "%#lx\t%s", (u_long)(v), msg)
|
||||||
|
#define STAT_ISSET(msg, p) \
|
||||||
|
__db_msg(env, "%sSet\t%s", (p) == NULL ? "!" : " ", msg)
|
||||||
|
#define STAT_LONG(msg, v) \
|
||||||
|
__db_msg(env, "%ld\t%s", (long)(v), msg)
|
||||||
|
#define STAT_LSN(msg, lsnp) \
|
||||||
|
__db_msg(env, "%lu/%lu\t%s", \
|
||||||
|
(u_long)(lsnp)->file, (u_long)(lsnp)->offset, msg)
|
||||||
|
#define STAT_POINTER(msg, v) \
|
||||||
|
__db_msg(env, "%#lx\t%s", P_TO_ULONG(v), msg)
|
||||||
|
#define STAT_STRING(msg, p) do { \
|
||||||
|
const char *__p = p; /* p may be a function call. */ \
|
||||||
|
__db_msg(env, "%s\t%s", __p == NULL ? "!Set" : __p, msg); \
|
||||||
|
} while (0)
|
||||||
|
#define STAT_ULONG(msg, v) \
|
||||||
|
__db_msg(env, "%lu\t%s", (u_long)(v), msg)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* There are quite a few places in Berkeley DB where we want to initialize
|
||||||
|
* a DBT from a string or other random pointer type, using a length typed
|
||||||
|
* to size_t in most cases. This macro avoids a lot of casting. The macro
|
||||||
|
* comes in two flavors because we often want to clear the DBT first.
|
||||||
|
*/
|
||||||
|
#define DB_SET_DBT(dbt, d, s) do { \
|
||||||
|
(dbt).data = (void *)(d); \
|
||||||
|
(dbt).size = (u_int32_t)(s); \
|
||||||
|
} while (0)
|
||||||
|
#define DB_INIT_DBT(dbt, d, s) do { \
|
||||||
|
memset(&(dbt), 0, sizeof(dbt)); \
|
||||||
|
DB_SET_DBT(dbt, d, s); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* API return values
|
||||||
|
*******************************************************/
|
||||||
|
/*
|
||||||
|
* Return values that are OK for each different call. Most calls have a
|
||||||
|
* standard 'return of 0 is only OK value', but some, like db->get have
|
||||||
|
* DB_NOTFOUND as a return value, but it really isn't an error.
|
||||||
|
*/
|
||||||
|
#define DB_RETOK_STD(ret) ((ret) == 0)
|
||||||
|
#define DB_RETOK_DBCDEL(ret) ((ret) == 0 || (ret) == DB_KEYEMPTY || \
|
||||||
|
(ret) == DB_NOTFOUND)
|
||||||
|
#define DB_RETOK_DBCGET(ret) ((ret) == 0 || (ret) == DB_KEYEMPTY || \
|
||||||
|
(ret) == DB_NOTFOUND)
|
||||||
|
#define DB_RETOK_DBCPUT(ret) ((ret) == 0 || (ret) == DB_KEYEXIST || \
|
||||||
|
(ret) == DB_NOTFOUND)
|
||||||
|
#define DB_RETOK_DBDEL(ret) DB_RETOK_DBCDEL(ret)
|
||||||
|
#define DB_RETOK_DBGET(ret) DB_RETOK_DBCGET(ret)
|
||||||
|
#define DB_RETOK_DBPUT(ret) ((ret) == 0 || (ret) == DB_KEYEXIST)
|
||||||
|
#define DB_RETOK_EXISTS(ret) DB_RETOK_DBCGET(ret)
|
||||||
|
#define DB_RETOK_LGGET(ret) ((ret) == 0 || (ret) == DB_NOTFOUND)
|
||||||
|
#define DB_RETOK_MPGET(ret) ((ret) == 0 || (ret) == DB_PAGE_NOTFOUND)
|
||||||
|
#define DB_RETOK_REPPMSG(ret) ((ret) == 0 || \
|
||||||
|
(ret) == DB_REP_IGNORE || \
|
||||||
|
(ret) == DB_REP_ISPERM || \
|
||||||
|
(ret) == DB_REP_NEWMASTER || \
|
||||||
|
(ret) == DB_REP_NEWSITE || \
|
||||||
|
(ret) == DB_REP_NOTPERM)
|
||||||
|
|
||||||
|
/* Find a reasonable operation-not-supported error. */
|
||||||
|
#ifdef EOPNOTSUPP
|
||||||
|
#define DB_OPNOTSUP EOPNOTSUPP
|
||||||
|
#else
|
||||||
|
#ifdef ENOTSUP
|
||||||
|
#define DB_OPNOTSUP ENOTSUP
|
||||||
|
#else
|
||||||
|
#define DB_OPNOTSUP EINVAL
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Files.
|
||||||
|
*******************************************************/
|
||||||
|
/*
|
||||||
|
* We use 1024 as the maximum path length. It's too hard to figure out what
|
||||||
|
* the real path length is, as it was traditionally stored in <sys/param.h>,
|
||||||
|
* and that file isn't always available.
|
||||||
|
*/
|
||||||
|
#define DB_MAXPATHLEN 1024
|
||||||
|
|
||||||
|
#define PATH_DOT "." /* Current working directory. */
|
||||||
|
/* Path separator character(s). */
|
||||||
|
#define PATH_SEPARATOR "\\/:"
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Environment.
|
||||||
|
*******************************************************/
|
||||||
|
/* Type passed to __db_appname(). */
|
||||||
|
typedef enum {
|
||||||
|
DB_APP_NONE=0, /* No type (region). */
|
||||||
|
DB_APP_DATA, /* Data file. */
|
||||||
|
DB_APP_LOG, /* Log file. */
|
||||||
|
DB_APP_TMP /* Temporary file. */
|
||||||
|
} APPNAME;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* A set of macros to check if various functionality has been configured.
|
||||||
|
*
|
||||||
|
* ALIVE_ON The is_alive function is configured.
|
||||||
|
* CDB_LOCKING CDB product locking.
|
||||||
|
* CRYPTO_ON Security has been configured.
|
||||||
|
* LOCKING_ON Locking has been configured.
|
||||||
|
* LOGGING_ON Logging has been configured.
|
||||||
|
* MUTEX_ON Mutexes have been configured.
|
||||||
|
* MPOOL_ON Memory pool has been configured.
|
||||||
|
* REP_ON Replication has been configured.
|
||||||
|
* RPC_ON RPC has been configured.
|
||||||
|
* TXN_ON Transactions have been configured.
|
||||||
|
*
|
||||||
|
* REP_ON is more complex than most: if the BDB library was compiled without
|
||||||
|
* replication support, ENV->rep_handle will be NULL; if the BDB library has
|
||||||
|
* replication support, but it was not configured, the region reference will
|
||||||
|
* be NULL.
|
||||||
|
*/
|
||||||
|
#define ALIVE_ON(env) ((env)->dbenv->is_alive != NULL)
|
||||||
|
#define CDB_LOCKING(env) F_ISSET(env, ENV_CDB)
|
||||||
|
#define CRYPTO_ON(env) ((env)->crypto_handle != NULL)
|
||||||
|
#define LOCKING_ON(env) ((env)->lk_handle != NULL)
|
||||||
|
#define LOGGING_ON(env) ((env)->lg_handle != NULL)
|
||||||
|
#define MPOOL_ON(env) ((env)->mp_handle != NULL)
|
||||||
|
#define MUTEX_ON(env) ((env)->mutex_handle != NULL)
|
||||||
|
#define REP_ON(env) \
|
||||||
|
((env)->rep_handle != NULL && (env)->rep_handle->region != NULL)
|
||||||
|
#define RPC_ON(dbenv) ((dbenv)->cl_handle != NULL)
|
||||||
|
#define TXN_ON(env) ((env)->tx_handle != NULL)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* STD_LOCKING Standard locking, that is, locking was configured and CDB
|
||||||
|
* was not. We do not do locking in off-page duplicate trees,
|
||||||
|
* so we check for that in the cursor first.
|
||||||
|
*/
|
||||||
|
#define STD_LOCKING(dbc) \
|
||||||
|
(!F_ISSET(dbc, DBC_OPD) && \
|
||||||
|
!CDB_LOCKING((dbc)->env) && LOCKING_ON((dbc)->env))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* IS_RECOVERING: The system is running recovery.
|
||||||
|
*/
|
||||||
|
#define IS_RECOVERING(env) \
|
||||||
|
(LOGGING_ON(env) && F_ISSET((env)->lg_handle, DBLOG_RECOVER))
|
||||||
|
|
||||||
|
/* Initialization methods are often illegal before/after open is called. */
|
||||||
|
#define ENV_ILLEGAL_AFTER_OPEN(env, name) \
|
||||||
|
if (F_ISSET((env), ENV_OPEN_CALLED)) \
|
||||||
|
return (__db_mi_open(env, name, 1));
|
||||||
|
#define ENV_ILLEGAL_BEFORE_OPEN(env, name) \
|
||||||
|
if (!F_ISSET((env), ENV_OPEN_CALLED)) \
|
||||||
|
return (__db_mi_open(env, name, 0));
|
||||||
|
|
||||||
|
/* We're not actually user hostile, honest. */
|
||||||
|
#define ENV_REQUIRES_CONFIG(env, handle, i, flags) \
|
||||||
|
if (handle == NULL) \
|
||||||
|
return (__env_not_config(env, i, flags));
|
||||||
|
#define ENV_REQUIRES_CONFIG_XX(env, handle, i, flags) \
|
||||||
|
if ((env)->handle->region == NULL) \
|
||||||
|
return (__env_not_config(env, i, flags));
|
||||||
|
#define ENV_NOT_CONFIGURED(env, handle, i, flags) \
|
||||||
|
if (F_ISSET((env), ENV_OPEN_CALLED)) \
|
||||||
|
ENV_REQUIRES_CONFIG(env, handle, i, flags)
|
||||||
|
|
||||||
|
#define ENV_ENTER(env, ip) do { \
|
||||||
|
int __ret; \
|
||||||
|
PANIC_CHECK(env); \
|
||||||
|
if ((env)->thr_hashtab == NULL) \
|
||||||
|
ip = NULL; \
|
||||||
|
else { \
|
||||||
|
if ((__ret = \
|
||||||
|
__env_set_state(env, &(ip), THREAD_ACTIVE)) != 0) \
|
||||||
|
return (__ret); \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define ENV_GET_THREAD_INFO(env, ip) ENV_ENTER(env, ip)
|
||||||
|
|
||||||
|
#ifdef DIAGNOSTIC
|
||||||
|
#define ENV_LEAVE(env, ip) do { \
|
||||||
|
if ((ip) != NULL) { \
|
||||||
|
DB_ASSERT(env, (ip)->dbth_state == THREAD_ACTIVE); \
|
||||||
|
(ip)->dbth_state = THREAD_OUT; \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
#else
|
||||||
|
#define ENV_LEAVE(env, ip) do { \
|
||||||
|
if ((ip) != NULL) \
|
||||||
|
(ip)->dbth_state = THREAD_OUT; \
|
||||||
|
} while (0)
|
||||||
|
#endif
|
||||||
|
#ifdef DIAGNOSTIC
|
||||||
|
#define CHECK_THREAD(env) do { \
|
||||||
|
if ((env)->thr_hashtab != NULL) \
|
||||||
|
(void)__env_set_state(env, NULL, THREAD_VERIFY); \
|
||||||
|
} while (0)
|
||||||
|
#ifdef HAVE_STATISTICS
|
||||||
|
#define CHECK_MTX_THREAD(env, mtx) do { \
|
||||||
|
if (mtx->alloc_id != MTX_MUTEX_REGION && \
|
||||||
|
mtx->alloc_id != MTX_ENV_REGION && \
|
||||||
|
mtx->alloc_id != MTX_APPLICATION) \
|
||||||
|
CHECK_THREAD(env); \
|
||||||
|
} while (0)
|
||||||
|
#else
|
||||||
|
#define CHECK_MTX_THREAD(env, mtx)
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#define CHECK_THREAD(env)
|
||||||
|
#define CHECK_MTX_THREAD(env, mtx)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
THREAD_SLOT_NOT_IN_USE=0,
|
||||||
|
THREAD_OUT,
|
||||||
|
THREAD_ACTIVE,
|
||||||
|
THREAD_BLOCKED,
|
||||||
|
THREAD_BLOCKED_DEAD
|
||||||
|
#ifdef DIAGNOSTIC
|
||||||
|
, THREAD_VERIFY
|
||||||
|
#endif
|
||||||
|
} DB_THREAD_STATE;
|
||||||
|
|
||||||
|
typedef struct __pin_list {
|
||||||
|
roff_t b_ref; /* offset to buffer. */
|
||||||
|
int region; /* region containing buffer. */
|
||||||
|
} PIN_LIST;
|
||||||
|
#define PINMAX 4
|
||||||
|
|
||||||
|
struct __db_thread_info {
|
||||||
|
pid_t dbth_pid;
|
||||||
|
db_threadid_t dbth_tid;
|
||||||
|
DB_THREAD_STATE dbth_state;
|
||||||
|
SH_TAILQ_ENTRY dbth_links;
|
||||||
|
/*
|
||||||
|
* The following fields track which buffers this thread of
|
||||||
|
* control has pinned in the mpool buffer cache.
|
||||||
|
*/
|
||||||
|
u_int16_t dbth_pincount; /* Number of pins for this thread. */
|
||||||
|
u_int16_t dbth_pinmax; /* Number of slots allocated. */
|
||||||
|
roff_t dbth_pinlist; /* List of pins. */
|
||||||
|
PIN_LIST dbth_pinarray[PINMAX]; /* Initial array of slots. */
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct __env_thread_info {
|
||||||
|
u_int32_t thr_count;
|
||||||
|
u_int32_t thr_max;
|
||||||
|
u_int32_t thr_nbucket;
|
||||||
|
roff_t thr_hashoff;
|
||||||
|
} THREAD_INFO;
|
||||||
|
|
||||||
|
#define DB_EVENT(env, e, einfo) do { \
|
||||||
|
DB_ENV *__dbenv = (env)->dbenv; \
|
||||||
|
if (__dbenv->db_event_func != NULL) \
|
||||||
|
__dbenv->db_event_func(__dbenv, e, einfo); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
typedef struct __flag_map {
|
||||||
|
u_int32_t inflag, outflag;
|
||||||
|
} FLAG_MAP;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Internal database environment structure.
|
||||||
|
*
|
||||||
|
* This is the private database environment handle. The public environment
|
||||||
|
* handle is the DB_ENV structure. The library owns this structure, the user
|
||||||
|
* owns the DB_ENV structure. The reason there are two structures is because
|
||||||
|
* the user's configuration outlives any particular DB_ENV->open call, and
|
||||||
|
* separate structures allows us to easily discard internal information without
|
||||||
|
* discarding the user's configuration.
|
||||||
|
*/
|
||||||
|
struct __env {
|
||||||
|
DB_ENV *dbenv; /* Linked DB_ENV structure */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The ENV structure can be used concurrently, so field access is
|
||||||
|
* protected.
|
||||||
|
*/
|
||||||
|
db_mutex_t mtx_env; /* ENV structure mutex */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Some fields are included in the ENV structure rather than in the
|
||||||
|
* DB_ENV structure because they are only set as arguments to the
|
||||||
|
* DB_ENV->open method. In other words, because of the historic API,
|
||||||
|
* not for any rational reason.
|
||||||
|
*
|
||||||
|
* Arguments to DB_ENV->open.
|
||||||
|
*/
|
||||||
|
char *db_home; /* Database home */
|
||||||
|
u_int32_t open_flags; /* Flags */
|
||||||
|
int db_mode; /* Default open permissions */
|
||||||
|
|
||||||
|
pid_t pid_cache; /* Cached process ID */
|
||||||
|
|
||||||
|
DB_FH *lockfhp; /* fcntl(2) locking file handle */
|
||||||
|
|
||||||
|
DB_LOCKER *env_lref; /* Locker in non-threaded handles */
|
||||||
|
|
||||||
|
DB_DISTAB recover_dtab; /* Dispatch table for recover funcs */
|
||||||
|
|
||||||
|
int dir_mode; /* Intermediate directory perms. */
|
||||||
|
|
||||||
|
/* Thread tracking */
|
||||||
|
u_int32_t thr_nbucket; /* Number of hash buckets */
|
||||||
|
DB_HASHTAB *thr_hashtab; /* Hash table of DB_THREAD_INFO */
|
||||||
|
|
||||||
|
/* Mutex allocation */
|
||||||
|
struct {
|
||||||
|
int alloc_id; /* Allocation ID argument */
|
||||||
|
u_int32_t flags; /* Flags argument */
|
||||||
|
} *mutex_iq; /* Initial mutexes queue */
|
||||||
|
u_int mutex_iq_next; /* Count of initial mutexes */
|
||||||
|
u_int mutex_iq_max; /* Maximum initial mutexes */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* List of open DB handles for this ENV, used for cursor
|
||||||
|
* adjustment. Must be protected for multi-threaded support.
|
||||||
|
*/
|
||||||
|
db_mutex_t mtx_dblist;
|
||||||
|
int db_ref; /* DB handle reference count */
|
||||||
|
TAILQ_HEAD(__dblist, __db) dblist;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* XA support.
|
||||||
|
*/
|
||||||
|
int xa_rmid; /* XA Resource Manager ID */
|
||||||
|
TAILQ_ENTRY(__env) links; /* XA environments */
|
||||||
|
TAILQ_HEAD(__xa_txn, __db_txn) xa_txn; /* XA active transactions */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* List of open file handles for this ENV. Must be protected
|
||||||
|
* for multi-threaded support.
|
||||||
|
*/
|
||||||
|
TAILQ_HEAD(__fdlist, __fh_t) fdlist;
|
||||||
|
|
||||||
|
db_mutex_t mtx_mt; /* Mersenne Twister mutex */
|
||||||
|
int mti; /* Mersenne Twister index */
|
||||||
|
u_long *mt; /* Mersenne Twister state vector */
|
||||||
|
|
||||||
|
DB_CIPHER *crypto_handle; /* Crypto handle */
|
||||||
|
DB_LOCKTAB *lk_handle; /* Lock handle */
|
||||||
|
DB_LOG *lg_handle; /* Log handle */
|
||||||
|
DB_MPOOL *mp_handle; /* Mpool handle */
|
||||||
|
DB_MUTEXMGR *mutex_handle; /* Mutex handle */
|
||||||
|
DB_REP *rep_handle; /* Replication handle */
|
||||||
|
DB_TXNMGR *tx_handle; /* Txn handle */
|
||||||
|
|
||||||
|
/* Application callback to copy data to/from a custom data source */
|
||||||
|
#define DB_USERCOPY_GETDATA 0x0001
|
||||||
|
#define DB_USERCOPY_SETDATA 0x0002
|
||||||
|
int (*dbt_usercopy)
|
||||||
|
__P((DBT *, u_int32_t, void *, u_int32_t, u_int32_t));
|
||||||
|
|
||||||
|
REGINFO *reginfo; /* REGINFO structure reference */
|
||||||
|
|
||||||
|
#define DB_TEST_ELECTINIT 1 /* after __rep_elect_init */
|
||||||
|
#define DB_TEST_ELECTVOTE1 2 /* after sending VOTE1 */
|
||||||
|
#define DB_TEST_POSTDESTROY 3 /* after destroy op */
|
||||||
|
#define DB_TEST_POSTLOG 4 /* after logging all pages */
|
||||||
|
#define DB_TEST_POSTLOGMETA 5 /* after logging meta in btree */
|
||||||
|
#define DB_TEST_POSTOPEN 6 /* after __os_open */
|
||||||
|
#define DB_TEST_POSTSYNC 7 /* after syncing the log */
|
||||||
|
#define DB_TEST_PREDESTROY 8 /* before destroy op */
|
||||||
|
#define DB_TEST_PREOPEN 9 /* before __os_open */
|
||||||
|
#define DB_TEST_SUBDB_LOCKS 10 /* subdb locking tests */
|
||||||
|
int test_abort; /* Abort value for testing */
|
||||||
|
int test_check; /* Checkpoint value for testing */
|
||||||
|
int test_copy; /* Copy value for testing */
|
||||||
|
|
||||||
|
#define ENV_CDB 0x00000001 /* DB_INIT_CDB */
|
||||||
|
#define ENV_DBLOCAL 0x00000002 /* Environment for a private DB */
|
||||||
|
#define ENV_LITTLEENDIAN 0x00000004 /* Little endian system. */
|
||||||
|
#define ENV_LOCKDOWN 0x00000008 /* DB_LOCKDOWN set */
|
||||||
|
#define ENV_NO_OUTPUT_SET 0x00000010 /* No output channel set */
|
||||||
|
#define ENV_OPEN_CALLED 0x00000020 /* DB_ENV->open called */
|
||||||
|
#define ENV_PRIVATE 0x00000040 /* DB_PRIVATE set */
|
||||||
|
#define ENV_RECOVER_FATAL 0x00000080 /* Doing fatal recovery in env */
|
||||||
|
#define ENV_REF_COUNTED 0x00000100 /* Region references this handle */
|
||||||
|
#define ENV_SYSTEM_MEM 0x00000200 /* DB_SYSTEM_MEM set */
|
||||||
|
#define ENV_THREAD 0x00000400 /* DB_THREAD set */
|
||||||
|
u_int32_t flags;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Database Access Methods.
|
||||||
|
*******************************************************/
|
||||||
|
/*
|
||||||
|
* DB_IS_THREADED --
|
||||||
|
* The database handle is free-threaded (was opened with DB_THREAD).
|
||||||
|
*/
|
||||||
|
#define DB_IS_THREADED(dbp) \
|
||||||
|
((dbp)->mutex != MUTEX_INVALID)
|
||||||
|
|
||||||
|
/* Initialization methods are often illegal before/after open is called. */
|
||||||
|
#define DB_ILLEGAL_AFTER_OPEN(dbp, name) \
|
||||||
|
if (F_ISSET((dbp), DB_AM_OPEN_CALLED)) \
|
||||||
|
return (__db_mi_open((dbp)->env, name, 1));
|
||||||
|
#define DB_ILLEGAL_BEFORE_OPEN(dbp, name) \
|
||||||
|
if (!F_ISSET((dbp), DB_AM_OPEN_CALLED)) \
|
||||||
|
return (__db_mi_open((dbp)->env, name, 0));
|
||||||
|
/* Some initialization methods are illegal if environment isn't local. */
|
||||||
|
#define DB_ILLEGAL_IN_ENV(dbp, name) \
|
||||||
|
if (!F_ISSET((dbp)->env, ENV_DBLOCAL)) \
|
||||||
|
return (__db_mi_env((dbp)->env, name));
|
||||||
|
#define DB_ILLEGAL_METHOD(dbp, flags) { \
|
||||||
|
int __ret; \
|
||||||
|
if ((__ret = __dbh_am_chk(dbp, flags)) != 0) \
|
||||||
|
return (__ret); \
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Common DBC->internal fields. Each access method adds additional fields
|
||||||
|
* to this list, but the initial fields are common.
|
||||||
|
*/
|
||||||
|
#define __DBC_INTERNAL \
|
||||||
|
DBC *opd; /* Off-page duplicate cursor. */\
|
||||||
|
\
|
||||||
|
void *page; /* Referenced page. */ \
|
||||||
|
db_pgno_t root; /* Tree root. */ \
|
||||||
|
db_pgno_t pgno; /* Referenced page number. */ \
|
||||||
|
db_indx_t indx; /* Referenced key item index. */\
|
||||||
|
\
|
||||||
|
DB_LOCK lock; /* Cursor lock. */ \
|
||||||
|
db_lockmode_t lock_mode; /* Lock mode. */
|
||||||
|
|
||||||
|
struct __dbc_internal {
|
||||||
|
__DBC_INTERNAL
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Actions that __db_master_update can take. */
|
||||||
|
typedef enum { MU_REMOVE, MU_RENAME, MU_OPEN } mu_action;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Access-method-common macro for determining whether a cursor
|
||||||
|
* has been initialized.
|
||||||
|
*/
|
||||||
|
#define IS_INITIALIZED(dbc) ((dbc)->internal->pgno != PGNO_INVALID)
|
||||||
|
|
||||||
|
/* Free the callback-allocated buffer, if necessary, hanging off of a DBT. */
|
||||||
|
#define FREE_IF_NEEDED(env, dbt) \
|
||||||
|
if (F_ISSET((dbt), DB_DBT_APPMALLOC)) { \
|
||||||
|
__os_ufree((env), (dbt)->data); \
|
||||||
|
F_CLR((dbt), DB_DBT_APPMALLOC); \
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Use memory belonging to object "owner" to return the results of
|
||||||
|
* any no-DBT-flag get ops on cursor "dbc".
|
||||||
|
*/
|
||||||
|
#define SET_RET_MEM(dbc, owner) \
|
||||||
|
do { \
|
||||||
|
(dbc)->rskey = &(owner)->my_rskey; \
|
||||||
|
(dbc)->rkey = &(owner)->my_rkey; \
|
||||||
|
(dbc)->rdata = &(owner)->my_rdata; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
/* Use the return-data memory src is currently set to use in dest as well. */
|
||||||
|
#define COPY_RET_MEM(src, dest) \
|
||||||
|
do { \
|
||||||
|
(dest)->rskey = (src)->rskey; \
|
||||||
|
(dest)->rkey = (src)->rkey; \
|
||||||
|
(dest)->rdata = (src)->rdata; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
/* Reset the returned-memory pointers to their defaults. */
|
||||||
|
#define RESET_RET_MEM(dbc) \
|
||||||
|
do { \
|
||||||
|
(dbc)->rskey = &(dbc)->my_rskey; \
|
||||||
|
(dbc)->rkey = &(dbc)->my_rkey; \
|
||||||
|
(dbc)->rdata = &(dbc)->my_rdata; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Mpool.
|
||||||
|
*******************************************************/
|
||||||
|
/*
|
||||||
|
* File types for DB access methods. Negative numbers are reserved to DB.
|
||||||
|
*/
|
||||||
|
#define DB_FTYPE_SET -1 /* Call pgin/pgout functions. */
|
||||||
|
#define DB_FTYPE_NOTSET 0 /* Don't call... */
|
||||||
|
#define DB_LSN_OFF_NOTSET -1 /* Not yet set. */
|
||||||
|
#define DB_CLEARLEN_NOTSET UINT32_MAX /* Not yet set. */
|
||||||
|
|
||||||
|
/* Structure used as the DB pgin/pgout pgcookie. */
|
||||||
|
typedef struct __dbpginfo {
|
||||||
|
size_t db_pagesize; /* Underlying page size. */
|
||||||
|
u_int32_t flags; /* Some DB_AM flags needed. */
|
||||||
|
DBTYPE type; /* DB type */
|
||||||
|
} DB_PGINFO;
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Log.
|
||||||
|
*******************************************************/
|
||||||
|
/* Initialize an LSN to 'zero'. */
|
||||||
|
#define ZERO_LSN(LSN) do { \
|
||||||
|
(LSN).file = 0; \
|
||||||
|
(LSN).offset = 0; \
|
||||||
|
} while (0)
|
||||||
|
#define IS_ZERO_LSN(LSN) ((LSN).file == 0 && (LSN).offset == 0)
|
||||||
|
|
||||||
|
#define IS_INIT_LSN(LSN) ((LSN).file == 1 && (LSN).offset == 0)
|
||||||
|
#define INIT_LSN(LSN) do { \
|
||||||
|
(LSN).file = 1; \
|
||||||
|
(LSN).offset = 0; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define MAX_LSN(LSN) do { \
|
||||||
|
(LSN).file = UINT32_MAX; \
|
||||||
|
(LSN).offset = UINT32_MAX; \
|
||||||
|
} while (0)
|
||||||
|
#define IS_MAX_LSN(LSN) \
|
||||||
|
((LSN).file == UINT32_MAX && (LSN).offset == UINT32_MAX)
|
||||||
|
|
||||||
|
/* If logging is turned off, smash the lsn. */
|
||||||
|
#define LSN_NOT_LOGGED(LSN) do { \
|
||||||
|
(LSN).file = 0; \
|
||||||
|
(LSN).offset = 1; \
|
||||||
|
} while (0)
|
||||||
|
#define IS_NOT_LOGGED_LSN(LSN) \
|
||||||
|
((LSN).file == 0 && (LSN).offset == 1)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* LOG_COMPARE -- compare two LSNs.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define LOG_COMPARE(lsn0, lsn1) \
|
||||||
|
((lsn0)->file != (lsn1)->file ? \
|
||||||
|
((lsn0)->file < (lsn1)->file ? -1 : 1) : \
|
||||||
|
((lsn0)->offset != (lsn1)->offset ? \
|
||||||
|
((lsn0)->offset < (lsn1)->offset ? -1 : 1) : 0))
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Txn.
|
||||||
|
*******************************************************/
|
||||||
|
#define DB_NONBLOCK(C) ((C)->txn != NULL && F_ISSET((C)->txn, TXN_NOWAIT))
|
||||||
|
#define NOWAIT_FLAG(txn) \
|
||||||
|
((txn) != NULL && F_ISSET((txn), TXN_NOWAIT) ? DB_LOCK_NOWAIT : 0)
|
||||||
|
#define IS_REAL_TXN(txn) \
|
||||||
|
((txn) != NULL && !F_ISSET(txn, TXN_CDSGROUP))
|
||||||
|
#define IS_SUBTRANSACTION(txn) \
|
||||||
|
((txn) != NULL && (txn)->parent != NULL)
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Crypto.
|
||||||
|
*******************************************************/
|
||||||
|
#define DB_IV_BYTES 16 /* Bytes per IV */
|
||||||
|
#define DB_MAC_KEY 20 /* Bytes per MAC checksum */
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Secondaries over RPC.
|
||||||
|
*******************************************************/
|
||||||
|
#ifdef CONFIG_TEST
|
||||||
|
/*
|
||||||
|
* These are flags passed to DB->associate calls by the Tcl API if running
|
||||||
|
* over RPC. The RPC server will mask out these flags before making the real
|
||||||
|
* DB->associate call.
|
||||||
|
*
|
||||||
|
* These flags must coexist with the valid flags to DB->associate (currently
|
||||||
|
* DB_AUTO_COMMIT and DB_CREATE). DB_AUTO_COMMIT is in the group of
|
||||||
|
* high-order shared flags (0xff000000), and DB_CREATE is in the low-order
|
||||||
|
* group (0x00000fff), so we pick a range in between.
|
||||||
|
*/
|
||||||
|
#define DB_RPC2ND_MASK 0x00f00000 /* Reserved bits. */
|
||||||
|
|
||||||
|
#define DB_RPC2ND_REVERSEDATA 0x00100000 /* callback_n(0) _s_reversedata. */
|
||||||
|
#define DB_RPC2ND_NOOP 0x00200000 /* callback_n(1) _s_noop */
|
||||||
|
#define DB_RPC2ND_CONCATKEYDATA 0x00300000 /* callback_n(2) _s_concatkeydata */
|
||||||
|
#define DB_RPC2ND_CONCATDATAKEY 0x00400000 /* callback_n(3) _s_concatdatakey */
|
||||||
|
#define DB_RPC2ND_REVERSECONCAT 0x00500000 /* callback_n(4) _s_reverseconcat */
|
||||||
|
#define DB_RPC2ND_TRUNCDATA 0x00600000 /* callback_n(5) _s_truncdata */
|
||||||
|
#define DB_RPC2ND_CONSTANT 0x00700000 /* callback_n(6) _s_constant */
|
||||||
|
#define DB_RPC2ND_GETZIP 0x00800000 /* sj_getzip */
|
||||||
|
#define DB_RPC2ND_GETNAME 0x00900000 /* sj_getname */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Remaining general DB includes.
|
||||||
|
*******************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
#include "dbinc/globals.h"
|
||||||
|
#include "dbinc/clock.h"
|
||||||
|
#include "dbinc/debug.h"
|
||||||
|
#include "dbinc/region.h"
|
||||||
|
#include "dbinc_auto/env_ext.h"
|
||||||
|
#include "dbinc/mutex.h"
|
||||||
|
#ifdef HAVE_REPLICATION_THREADS
|
||||||
|
#include "dbinc/repmgr.h"
|
||||||
|
#endif
|
||||||
|
#include "dbinc/rep.h"
|
||||||
|
#include "dbinc/os.h"
|
||||||
|
#include "dbinc_auto/clib_ext.h"
|
||||||
|
#include "dbinc_auto/common_ext.h"
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Remaining Log.
|
||||||
|
* These need to be defined after the general includes
|
||||||
|
* because they need rep.h from above.
|
||||||
|
*******************************************************/
|
||||||
|
/*
|
||||||
|
* Test if the environment is currently logging changes. If we're in recovery
|
||||||
|
* or we're a replication client, we don't need to log changes because they're
|
||||||
|
* already in the log, even though we have a fully functional log system.
|
||||||
|
*/
|
||||||
|
#define DBENV_LOGGING(env) \
|
||||||
|
(LOGGING_ON(env) && !IS_REP_CLIENT(env) && (!IS_RECOVERING(env)))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Test if we need to log a change. By default, we don't log operations without
|
||||||
|
* associated transactions, unless DIAGNOSTIC, DEBUG_ROP or DEBUG_WOP are on.
|
||||||
|
* This is because we want to get log records for read/write operations, and, if
|
||||||
|
* we are trying to debug something, more information is always better.
|
||||||
|
*
|
||||||
|
* The DBC_RECOVER flag is set when we're in abort, as well as during recovery;
|
||||||
|
* thus DBC_LOGGING may be false for a particular dbc even when DBENV_LOGGING
|
||||||
|
* is true.
|
||||||
|
*
|
||||||
|
* We explicitly use LOGGING_ON/IS_REP_CLIENT here because we don't want to pull
|
||||||
|
* in the log headers, which IS_RECOVERING (and thus DBENV_LOGGING) rely on, and
|
||||||
|
* because DBC_RECOVER should be set anytime IS_RECOVERING would be true.
|
||||||
|
*
|
||||||
|
* If we're not in recovery (master - doing an abort or a client applying
|
||||||
|
* a txn), then a client's only path through here is on an internal
|
||||||
|
* operation, and a master's only path through here is a transactional
|
||||||
|
* operation. Detect if either is not the case.
|
||||||
|
*/
|
||||||
|
#if defined(DIAGNOSTIC) || defined(DEBUG_ROP) || defined(DEBUG_WOP)
|
||||||
|
#define DBC_LOGGING(dbc) __dbc_logging(dbc)
|
||||||
|
#else
|
||||||
|
#define DBC_LOGGING(dbc) \
|
||||||
|
((dbc)->txn != NULL && LOGGING_ON((dbc)->env) && \
|
||||||
|
!F_ISSET((dbc), DBC_RECOVER) && !IS_REP_CLIENT((dbc)->env))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* !_DB_INT_H_ */
|
||||||
188
build_brew/errno.h
Normal file
188
build_brew/errno.h
Normal file
@@ -0,0 +1,188 @@
|
|||||||
|
/*-
|
||||||
|
* Copyright (c) 1982, 1986, 1989, 1993
|
||||||
|
* The Regents of the University of California. All rights reserved.
|
||||||
|
* (c) UNIX System Laboratories, Inc.
|
||||||
|
* All or some portions of this file are derived from material licensed
|
||||||
|
* to the University of California by American Telephone and Telegraph
|
||||||
|
* Co. or Unix System Laboratories, Inc. and are reproduced herein with
|
||||||
|
* the permission of UNIX System Laboratories, Inc.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 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.
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @(#)errno.h 8.5 (Berkeley) 1/21/94
|
||||||
|
* FreeBSD: /repoman/r/ncvs/src/sys/sys/errno.h,v 1.28 2005/04/02 12:33:28 das Exp $
|
||||||
|
*
|
||||||
|
* $Id: errno.h 63573 2008-05-23 21:43:21Z trent.nelson $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _SYS_ERRNO_H_
|
||||||
|
#define _SYS_ERRNO_H_
|
||||||
|
|
||||||
|
#undef errno
|
||||||
|
#define errno DB_GLOBAL(db_errno)
|
||||||
|
|
||||||
|
#define EPERM 1 /* Operation not permitted */
|
||||||
|
#define ENOENT 2 /* No such file or directory */
|
||||||
|
#define ESRCH 3 /* No such process */
|
||||||
|
#define EINTR 4 /* Interrupted system call */
|
||||||
|
#define EIO 5 /* Input/output error */
|
||||||
|
#define ENXIO 6 /* Device not configured */
|
||||||
|
#define E2BIG 7 /* Argument list too long */
|
||||||
|
#define ENOEXEC 8 /* Exec format error */
|
||||||
|
#define EBADF 9 /* Bad file descriptor */
|
||||||
|
#define ECHILD 10 /* No child processes */
|
||||||
|
#define EDEADLK 11 /* Resource deadlock avoided */
|
||||||
|
/* 11 was EAGAIN */
|
||||||
|
#define ENOMEM 12 /* Cannot allocate memory */
|
||||||
|
#define EACCES 13 /* Permission denied */
|
||||||
|
#define EFAULT 14 /* Bad address */
|
||||||
|
#ifndef _POSIX_SOURCE
|
||||||
|
#define ENOTBLK 15 /* Block device required */
|
||||||
|
#endif
|
||||||
|
#define EBUSY 16 /* Device busy */
|
||||||
|
#define EEXIST 17 /* File exists */
|
||||||
|
#define EXDEV 18 /* Cross-device link */
|
||||||
|
#define ENODEV 19 /* Operation not supported by device */
|
||||||
|
#define ENOTDIR 20 /* Not a directory */
|
||||||
|
#define EISDIR 21 /* Is a directory */
|
||||||
|
#define EINVAL 22 /* Invalid argument */
|
||||||
|
#define ENFILE 23 /* Too many open files in system */
|
||||||
|
#define EMFILE 24 /* Too many open files */
|
||||||
|
#define ENOTTY 25 /* Inappropriate ioctl for device */
|
||||||
|
#ifndef _POSIX_SOURCE
|
||||||
|
#define ETXTBSY 26 /* Text file busy */
|
||||||
|
#endif
|
||||||
|
#define EFBIG 27 /* File too large */
|
||||||
|
#define ENOSPC 28 /* No space left on device */
|
||||||
|
#define ESPIPE 29 /* Illegal seek */
|
||||||
|
#define EROFS 30 /* Read-only filesystem */
|
||||||
|
#define EMLINK 31 /* Too many links */
|
||||||
|
#define EPIPE 32 /* Broken pipe */
|
||||||
|
|
||||||
|
/* math software */
|
||||||
|
#define EDOM 33 /* Numerical argument out of domain */
|
||||||
|
#define ERANGE 34 /* Result too large */
|
||||||
|
|
||||||
|
/* non-blocking and interrupt i/o */
|
||||||
|
#define EAGAIN 35 /* Resource temporarily unavailable */
|
||||||
|
#ifndef _POSIX_SOURCE
|
||||||
|
#define EWOULDBLOCK EAGAIN /* Operation would block */
|
||||||
|
#define EINPROGRESS 36 /* Operation now in progress */
|
||||||
|
|
||||||
|
#ifndef EALREADY /* BREW already has an EALREADY. */
|
||||||
|
#define EALREADY 37 /* Operation already in progress */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* ipc/network software -- argument errors */
|
||||||
|
#define ENOTSOCK 38 /* Socket operation on non-socket */
|
||||||
|
#define EDESTADDRREQ 39 /* Destination address required */
|
||||||
|
#define EMSGSIZE 40 /* Message too long */
|
||||||
|
#define EPROTOTYPE 41 /* Protocol wrong type for socket */
|
||||||
|
#define ENOPROTOOPT 42 /* Protocol not available */
|
||||||
|
#define EPROTONOSUPPORT 43 /* Protocol not supported */
|
||||||
|
#define ESOCKTNOSUPPORT 44 /* Socket type not supported */
|
||||||
|
#define EOPNOTSUPP 45 /* Operation not supported */
|
||||||
|
#define ENOTSUP EOPNOTSUPP /* Operation not supported */
|
||||||
|
#define EPFNOSUPPORT 46 /* Protocol family not supported */
|
||||||
|
#define EAFNOSUPPORT 47 /* Address family not supported by protocol family */
|
||||||
|
#define EADDRINUSE 48 /* Address already in use */
|
||||||
|
#define EADDRNOTAVAIL 49 /* Can't assign requested address */
|
||||||
|
|
||||||
|
/* ipc/network software -- operational errors */
|
||||||
|
#define ENETDOWN 50 /* Network is down */
|
||||||
|
#define ENETUNREACH 51 /* Network is unreachable */
|
||||||
|
#define ENETRESET 52 /* Network dropped connection on reset */
|
||||||
|
#define ECONNABORTED 53 /* Software caused connection abort */
|
||||||
|
#define ECONNRESET 54 /* Connection reset by peer */
|
||||||
|
#define ENOBUFS 55 /* No buffer space available */
|
||||||
|
#define EISCONN 56 /* Socket is already connected */
|
||||||
|
#define ENOTCONN 57 /* Socket is not connected */
|
||||||
|
#define ESHUTDOWN 58 /* Can't send after socket shutdown */
|
||||||
|
#define ETOOMANYREFS 59 /* Too many references: can't splice */
|
||||||
|
#define ETIMEDOUT 60 /* Operation timed out */
|
||||||
|
#define ECONNREFUSED 61 /* Connection refused */
|
||||||
|
|
||||||
|
#define ELOOP 62 /* Too many levels of symbolic links */
|
||||||
|
#endif /* _POSIX_SOURCE */
|
||||||
|
#define ENAMETOOLONG 63 /* File name too long */
|
||||||
|
|
||||||
|
/* should be rearranged */
|
||||||
|
#ifndef _POSIX_SOURCE
|
||||||
|
#define EHOSTDOWN 64 /* Host is down */
|
||||||
|
#define EHOSTUNREACH 65 /* No route to host */
|
||||||
|
#endif /* _POSIX_SOURCE */
|
||||||
|
#define ENOTEMPTY 66 /* Directory not empty */
|
||||||
|
|
||||||
|
/* quotas & mush */
|
||||||
|
#ifndef _POSIX_SOURCE
|
||||||
|
#define EPROCLIM 67 /* Too many processes */
|
||||||
|
#define EUSERS 68 /* Too many users */
|
||||||
|
#define EDQUOT 69 /* Disc quota exceeded */
|
||||||
|
|
||||||
|
/* Network File System */
|
||||||
|
#define ESTALE 70 /* Stale NFS file handle */
|
||||||
|
#define EREMOTE 71 /* Too many levels of remote in path */
|
||||||
|
#define EBADRPC 72 /* RPC struct is bad */
|
||||||
|
#define ERPCMISMATCH 73 /* RPC version wrong */
|
||||||
|
#define EPROGUNAVAIL 74 /* RPC prog. not avail */
|
||||||
|
#define EPROGMISMATCH 75 /* Program version wrong */
|
||||||
|
#define EPROCUNAVAIL 76 /* Bad procedure for program */
|
||||||
|
#endif /* _POSIX_SOURCE */
|
||||||
|
|
||||||
|
#define ENOLCK 77 /* No locks available */
|
||||||
|
#define ENOSYS 78 /* Function not implemented */
|
||||||
|
|
||||||
|
#ifndef _POSIX_SOURCE
|
||||||
|
#define EFTYPE 79 /* Inappropriate file type or format */
|
||||||
|
#define EAUTH 80 /* Authentication error */
|
||||||
|
#define ENEEDAUTH 81 /* Need authenticator */
|
||||||
|
#define EIDRM 82 /* Identifier removed */
|
||||||
|
#define ENOMSG 83 /* No message of desired type */
|
||||||
|
#define EOVERFLOW 84 /* Value too large to be stored in data type */
|
||||||
|
#define ECANCELED 85 /* Operation canceled */
|
||||||
|
#define EILSEQ 86 /* Illegal byte sequence */
|
||||||
|
#define ENOATTR 87 /* Attribute not found */
|
||||||
|
|
||||||
|
#define EDOOFUS 88 /* Programming error */
|
||||||
|
#endif /* _POSIX_SOURCE */
|
||||||
|
|
||||||
|
#define EBADMSG 89 /* Bad message */
|
||||||
|
#define EMULTIHOP 90 /* Multihop attempted */
|
||||||
|
#define ENOLINK 91 /* Link has been severed */
|
||||||
|
#define EPROTO 92 /* Protocol error */
|
||||||
|
|
||||||
|
#ifndef _POSIX_SOURCE
|
||||||
|
#define ELAST 92 /* Must be equal largest errno */
|
||||||
|
#endif /* _POSIX_SOURCE */
|
||||||
|
|
||||||
|
#ifdef _KERNEL
|
||||||
|
/* pseudo-errors returned inside kernel to modify return to process */
|
||||||
|
#define ERESTART (-1) /* restart syscall */
|
||||||
|
#define EJUSTRETURN (-2) /* don't modify regs, just return */
|
||||||
|
#define ENOIOCTL (-3) /* ioctl not handled by this layer */
|
||||||
|
#define EDIRIOCTL (-4) /* do direct ioctl in GEOM */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
183
build_s60/bdb_s60.mmp
Normal file
183
build_s60/bdb_s60.mmp
Normal file
@@ -0,0 +1,183 @@
|
|||||||
|
// bdb_s60.mmp
|
||||||
|
// DO NOT EDIT: automatically built by dist/s_s60_mmp
|
||||||
|
|
||||||
|
TARGET bdb_s60.lib
|
||||||
|
TARGETTYPE lib
|
||||||
|
UID 0x10004262 0xE8000016
|
||||||
|
VENDORID 0x70000002
|
||||||
|
|
||||||
|
SOURCE ..\btree\bt_compact.c
|
||||||
|
SOURCE ..\btree\bt_compare.c
|
||||||
|
SOURCE ..\btree\bt_conv.c
|
||||||
|
SOURCE ..\btree\bt_curadj.c
|
||||||
|
SOURCE ..\btree\bt_cursor.c
|
||||||
|
SOURCE ..\btree\bt_delete.c
|
||||||
|
SOURCE ..\btree\bt_method.c
|
||||||
|
SOURCE ..\btree\bt_open.c
|
||||||
|
SOURCE ..\btree\bt_put.c
|
||||||
|
SOURCE ..\btree\bt_rec.c
|
||||||
|
SOURCE ..\btree\bt_reclaim.c
|
||||||
|
SOURCE ..\btree\bt_recno.c
|
||||||
|
SOURCE ..\btree\bt_rsearch.c
|
||||||
|
SOURCE ..\btree\bt_search.c
|
||||||
|
SOURCE ..\btree\bt_split.c
|
||||||
|
SOURCE ..\btree\bt_stat.c
|
||||||
|
SOURCE ..\btree\btree_auto.c
|
||||||
|
SOURCE ..\clib\snprintf.c
|
||||||
|
SOURCE ..\clib\strcasecmp.c
|
||||||
|
SOURCE ..\clib\strsep.c
|
||||||
|
SOURCE ..\common\crypto_stub.c
|
||||||
|
SOURCE ..\common\db_byteorder.c
|
||||||
|
SOURCE ..\common\db_err.c
|
||||||
|
SOURCE ..\common\db_getlong.c
|
||||||
|
SOURCE ..\common\db_idspace.c
|
||||||
|
SOURCE ..\common\db_log2.c
|
||||||
|
SOURCE ..\common\db_shash.c
|
||||||
|
SOURCE ..\common\dbt.c
|
||||||
|
SOURCE ..\common\mkpath.c
|
||||||
|
SOURCE ..\common\zerofill.c
|
||||||
|
SOURCE ..\db\crdel_auto.c
|
||||||
|
SOURCE ..\db\crdel_rec.c
|
||||||
|
SOURCE ..\db\db.c
|
||||||
|
SOURCE ..\db\db_am.c
|
||||||
|
SOURCE ..\db\db_auto.c
|
||||||
|
SOURCE ..\db\db_cam.c
|
||||||
|
SOURCE ..\db\db_cds.c
|
||||||
|
SOURCE ..\db\db_conv.c
|
||||||
|
SOURCE ..\db\db_dispatch.c
|
||||||
|
SOURCE ..\db\db_dup.c
|
||||||
|
SOURCE ..\db\db_iface.c
|
||||||
|
SOURCE ..\db\db_join.c
|
||||||
|
SOURCE ..\db\db_meta.c
|
||||||
|
SOURCE ..\db\db_method.c
|
||||||
|
SOURCE ..\db\db_open.c
|
||||||
|
SOURCE ..\db\db_overflow.c
|
||||||
|
SOURCE ..\db\db_pr.c
|
||||||
|
SOURCE ..\db\db_rec.c
|
||||||
|
SOURCE ..\db\db_reclaim.c
|
||||||
|
SOURCE ..\db\db_remove.c
|
||||||
|
SOURCE ..\db\db_rename.c
|
||||||
|
SOURCE ..\db\db_ret.c
|
||||||
|
SOURCE ..\db\db_setid.c
|
||||||
|
SOURCE ..\db\db_setlsn.c
|
||||||
|
SOURCE ..\db\db_stati.c
|
||||||
|
SOURCE ..\db\db_truncate.c
|
||||||
|
SOURCE ..\db\db_upg.c
|
||||||
|
SOURCE ..\db\db_vrfy_stub.c
|
||||||
|
SOURCE ..\dbreg\dbreg.c
|
||||||
|
SOURCE ..\dbreg\dbreg_auto.c
|
||||||
|
SOURCE ..\dbreg\dbreg_rec.c
|
||||||
|
SOURCE ..\dbreg\dbreg_stat.c
|
||||||
|
SOURCE ..\dbreg\dbreg_util.c
|
||||||
|
SOURCE ..\env\env_alloc.c
|
||||||
|
SOURCE ..\env\env_config.c
|
||||||
|
SOURCE ..\env\env_failchk.c
|
||||||
|
SOURCE ..\env\env_file.c
|
||||||
|
SOURCE ..\env\env_globals.c
|
||||||
|
SOURCE ..\env\env_method.c
|
||||||
|
SOURCE ..\env\env_name.c
|
||||||
|
SOURCE ..\env\env_open.c
|
||||||
|
SOURCE ..\env\env_recover.c
|
||||||
|
SOURCE ..\env\env_region.c
|
||||||
|
SOURCE ..\env\env_register.c
|
||||||
|
SOURCE ..\env\env_sig.c
|
||||||
|
SOURCE ..\env\env_stat.c
|
||||||
|
SOURCE ..\fileops\fileops_auto.c
|
||||||
|
SOURCE ..\fileops\fop_basic.c
|
||||||
|
SOURCE ..\fileops\fop_rec.c
|
||||||
|
SOURCE ..\fileops\fop_util.c
|
||||||
|
SOURCE ..\hash\hash_func.c
|
||||||
|
SOURCE ..\hash\hash_stub.c
|
||||||
|
SOURCE ..\hmac\hmac.c
|
||||||
|
SOURCE ..\hmac\sha1.c
|
||||||
|
SOURCE ..\lock\lock.c
|
||||||
|
SOURCE ..\lock\lock_deadlock.c
|
||||||
|
SOURCE ..\lock\lock_failchk.c
|
||||||
|
SOURCE ..\lock\lock_id.c
|
||||||
|
SOURCE ..\lock\lock_list.c
|
||||||
|
SOURCE ..\lock\lock_method.c
|
||||||
|
SOURCE ..\lock\lock_region.c
|
||||||
|
SOURCE ..\lock\lock_stat.c
|
||||||
|
SOURCE ..\lock\lock_timer.c
|
||||||
|
SOURCE ..\lock\lock_util.c
|
||||||
|
SOURCE ..\log\log.c
|
||||||
|
SOURCE ..\log\log_archive.c
|
||||||
|
SOURCE ..\log\log_compare.c
|
||||||
|
SOURCE ..\log\log_debug.c
|
||||||
|
SOURCE ..\log\log_get.c
|
||||||
|
SOURCE ..\log\log_method.c
|
||||||
|
SOURCE ..\log\log_put.c
|
||||||
|
SOURCE ..\log\log_stat.c
|
||||||
|
SOURCE ..\mp\mp_alloc.c
|
||||||
|
SOURCE ..\mp\mp_bh.c
|
||||||
|
SOURCE ..\mp\mp_fget.c
|
||||||
|
SOURCE ..\mp\mp_fmethod.c
|
||||||
|
SOURCE ..\mp\mp_fopen.c
|
||||||
|
SOURCE ..\mp\mp_fput.c
|
||||||
|
SOURCE ..\mp\mp_fset.c
|
||||||
|
SOURCE ..\mp\mp_method.c
|
||||||
|
SOURCE ..\mp\mp_mvcc.c
|
||||||
|
SOURCE ..\mp\mp_region.c
|
||||||
|
SOURCE ..\mp\mp_register.c
|
||||||
|
SOURCE ..\mp\mp_resize.c
|
||||||
|
SOURCE ..\mp\mp_stat.c
|
||||||
|
SOURCE ..\mp\mp_sync.c
|
||||||
|
SOURCE ..\mp\mp_trickle.c
|
||||||
|
SOURCE ..\mutex\mut_alloc.c
|
||||||
|
SOURCE ..\mutex\mut_failchk.c
|
||||||
|
SOURCE ..\mutex\mut_method.c
|
||||||
|
SOURCE ..\mutex\mut_pthread.c
|
||||||
|
SOURCE ..\mutex\mut_region.c
|
||||||
|
SOURCE ..\mutex\mut_stat.c
|
||||||
|
SOURCE ..\os\os_abort.c
|
||||||
|
SOURCE ..\os\os_abs.c
|
||||||
|
SOURCE ..\os\os_alloc.c
|
||||||
|
SOURCE ..\os\os_clock.c
|
||||||
|
SOURCE ..\os\os_cpu.c
|
||||||
|
SOURCE ..\os\os_ctime.c
|
||||||
|
SOURCE ..\os\os_dir.c
|
||||||
|
SOURCE ..\os\os_errno.c
|
||||||
|
SOURCE ..\os\os_fid.c
|
||||||
|
SOURCE ..\os\os_flock.c
|
||||||
|
SOURCE ..\os\os_fsync.c
|
||||||
|
SOURCE ..\os\os_getenv.c
|
||||||
|
SOURCE ..\os\os_handle.c
|
||||||
|
SOURCE ..\os\os_map.c
|
||||||
|
SOURCE ..\os\os_mkdir.c
|
||||||
|
SOURCE ..\os\os_open.c
|
||||||
|
SOURCE ..\os\os_pid.c
|
||||||
|
SOURCE ..\os\os_rename.c
|
||||||
|
SOURCE ..\os\os_root.c
|
||||||
|
SOURCE ..\os\os_rpath.c
|
||||||
|
SOURCE ..\os\os_rw.c
|
||||||
|
SOURCE ..\os\os_seek.c
|
||||||
|
SOURCE ..\os\os_stack.c
|
||||||
|
SOURCE ..\os\os_stat.c
|
||||||
|
SOURCE ..\os\os_tmpdir.c
|
||||||
|
SOURCE ..\os\os_truncate.c
|
||||||
|
SOURCE ..\os\os_uid.c
|
||||||
|
SOURCE ..\os\os_unlink.c
|
||||||
|
SOURCE ..\os\os_yield.c
|
||||||
|
SOURCE ..\os_s60\os_config.c
|
||||||
|
SOURCE ..\qam\qam_stub.c
|
||||||
|
SOURCE ..\rep\rep_stub.c
|
||||||
|
SOURCE ..\repmgr\repmgr_stub.c
|
||||||
|
SOURCE ..\txn\txn.c
|
||||||
|
SOURCE ..\txn\txn_auto.c
|
||||||
|
SOURCE ..\txn\txn_chkpt.c
|
||||||
|
SOURCE ..\txn\txn_failchk.c
|
||||||
|
SOURCE ..\txn\txn_method.c
|
||||||
|
SOURCE ..\txn\txn_rec.c
|
||||||
|
SOURCE ..\txn\txn_recover.c
|
||||||
|
SOURCE ..\txn\txn_region.c
|
||||||
|
SOURCE ..\txn\txn_stat.c
|
||||||
|
SOURCE ..\txn\txn_util.c
|
||||||
|
SOURCE ..\xa\xa_stub.c
|
||||||
|
|
||||||
|
SYSTEMINCLUDE \epoc32\include\stdapis \epoc32\include
|
||||||
|
USERINCLUDE .
|
||||||
|
USERINCLUDE ..
|
||||||
|
|
||||||
|
LIBRARY libc.lib libpthread.lib euser.lib libcrt0.lib
|
||||||
|
|
||||||
|
nostrictdef
|
||||||
274
build_s60/clib_port.h
Normal file
274
build_s60/clib_port.h
Normal file
@@ -0,0 +1,274 @@
|
|||||||
|
/* DO NOT EDIT: automatically built from dist/clib_port.in. */
|
||||||
|
/*
|
||||||
|
* Minimum/maximum values for various types.
|
||||||
|
*/
|
||||||
|
#ifndef UINT16_MAX /* Maximum 16-bit unsigned. */
|
||||||
|
#define UINT16_MAX 65535
|
||||||
|
#endif
|
||||||
|
#ifndef UINT32_MAX /* Maximum 32-bit unsigned. */
|
||||||
|
#define UINT32_MAX 4294967295U
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef INT_MAX
|
||||||
|
#if SIZEOF_INT == 4
|
||||||
|
#define INT_MAX 2147483647
|
||||||
|
#endif
|
||||||
|
#if SIZEOF_INT == 8
|
||||||
|
#define INT_MAX 9223372036854775807
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef INT_MIN /* minimum (signed) int value */
|
||||||
|
#define INT_MIN (-INT_MAX-1)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef UINT_MAX /* maximum (signed) int value */
|
||||||
|
#if SIZEOF_INT == 4
|
||||||
|
#define UINT_MAX 4294967295U
|
||||||
|
#endif
|
||||||
|
#if SIZEOF_INT == 8
|
||||||
|
#define UINT_MAX 18446744073709551615U
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef LONG_MAX /* maximum (signed) long value */
|
||||||
|
#if SIZEOF_LONG == 4
|
||||||
|
#define LONG_MAX 2147483647
|
||||||
|
#endif
|
||||||
|
#if SIZEOF_LONG == 8
|
||||||
|
#define LONG_MAX 9223372036854775807L
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef LONG_MIN /* minimum (signed) long value */
|
||||||
|
#define LONG_MIN (-LONG_MAX-1)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef ULONG_MAX /* maximum (unsigned) long value */
|
||||||
|
#if SIZEOF_LONG == 4
|
||||||
|
#define ULONG_MAX 4294967295U
|
||||||
|
#endif
|
||||||
|
#if SIZEOF_LONG == 8
|
||||||
|
#define ULONG_MAX 18446744073709551615UL
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(HAVE_64BIT_TYPES)
|
||||||
|
/*
|
||||||
|
* Override the system's 64-bit min/max constants. AIX's 32-bit compiler can
|
||||||
|
* handle 64-bit values, but the system's constants don't include the LL/ULL
|
||||||
|
* suffix, and so can't be compiled using the 32-bit compiler.
|
||||||
|
*/
|
||||||
|
#undef INT64_MAX
|
||||||
|
#undef INT64_MIN
|
||||||
|
#undef UINT64_MAX
|
||||||
|
|
||||||
|
#ifdef DB_WIN32
|
||||||
|
#define INT64_MAX _I64_MAX
|
||||||
|
#define INT64_MIN _I64_MIN
|
||||||
|
#define UINT64_MAX _UI64_MAX
|
||||||
|
#else
|
||||||
|
#define INT64_MAX 9223372036854775807LL
|
||||||
|
#define INT64_MIN (-INT64_MAX-1)
|
||||||
|
#define UINT64_MAX 18446744073709551615ULL
|
||||||
|
#endif /* DB_WIN32 */
|
||||||
|
|
||||||
|
#endif /* HAVE_64BIT_TYPES */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Exit success/failure macros.
|
||||||
|
*/
|
||||||
|
#ifndef HAVE_EXIT_SUCCESS
|
||||||
|
#define EXIT_FAILURE 1
|
||||||
|
#define EXIT_SUCCESS 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* File modes.
|
||||||
|
*/
|
||||||
|
#ifdef DB_WIN32
|
||||||
|
#ifndef S_IREAD /* WinCE doesn't have S_IREAD. */
|
||||||
|
#define S_IREAD 0
|
||||||
|
#endif
|
||||||
|
#ifndef S_IWRITE /* WinCE doesn't have S_IWRITE. */
|
||||||
|
#define S_IWRITE 0
|
||||||
|
#endif
|
||||||
|
#ifndef S_IRUSR
|
||||||
|
#define S_IRUSR S_IREAD /* R for owner */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IWUSR
|
||||||
|
#define S_IWUSR S_IWRITE /* W for owner */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IXUSR
|
||||||
|
#define S_IXUSR 0 /* X for owner */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IRGRP
|
||||||
|
#define S_IRGRP 0 /* R for group */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IWGRP
|
||||||
|
#define S_IWGRP 0 /* W for group */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IXGRP
|
||||||
|
#define S_IXGRP 0 /* X for group */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IROTH
|
||||||
|
#define S_IROTH 0 /* R for other */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IWOTH
|
||||||
|
#define S_IWOTH 0 /* W for other */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IXOTH
|
||||||
|
#define S_IXOTH 0 /* X for other */
|
||||||
|
#endif
|
||||||
|
#else /* !DB_WIN32 */
|
||||||
|
#ifndef S_IRUSR
|
||||||
|
#define S_IRUSR 0000400 /* R for owner */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IWUSR
|
||||||
|
#define S_IWUSR 0000200 /* W for owner */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IXUSR
|
||||||
|
#define S_IXUSR 0000100 /* X for owner */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IRGRP
|
||||||
|
#define S_IRGRP 0000040 /* R for group */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IWGRP
|
||||||
|
#define S_IWGRP 0000020 /* W for group */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IXGRP
|
||||||
|
#define S_IXGRP 0000010 /* X for group */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IROTH
|
||||||
|
#define S_IROTH 0000004 /* R for other */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IWOTH
|
||||||
|
#define S_IWOTH 0000002 /* W for other */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IXOTH
|
||||||
|
#define S_IXOTH 0000001 /* X for other */
|
||||||
|
#endif
|
||||||
|
#endif /* !DB_WIN32 */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Don't step on the namespace. Other libraries may have their own
|
||||||
|
* implementations of these functions, we don't want to use their
|
||||||
|
* implementations or force them to use ours based on the load order.
|
||||||
|
*/
|
||||||
|
#ifndef HAVE_ATOI
|
||||||
|
#define atoi __db_Catoi
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_ATOL
|
||||||
|
#define atol __db_Catol
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_FCLOSE
|
||||||
|
#define fclose __db_Cfclose
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_FGETC
|
||||||
|
#define fgetc __db_Cfgetc
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_FGETS
|
||||||
|
#define fgets __db_Cfgets
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_FOPEN
|
||||||
|
#define fopen __db_Cfopen
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_FWRITE
|
||||||
|
#define fwrite __db_Cfwrite
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_GETADDRINFO
|
||||||
|
#define freeaddrinfo(a) __db_Cfreeaddrinfo(a)
|
||||||
|
#define getaddrinfo(a, b, c, d) __db_Cgetaddrinfo(a, b, c, d)
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_GETCWD
|
||||||
|
#define getcwd __db_Cgetcwd
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_GETOPT
|
||||||
|
#define getopt __db_Cgetopt
|
||||||
|
#define optarg __db_Coptarg
|
||||||
|
#define opterr __db_Copterr
|
||||||
|
#define optind __db_Coptind
|
||||||
|
#define optopt __db_Coptopt
|
||||||
|
#define optreset __db_Coptreset
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_ISALPHA
|
||||||
|
#define isalpha __db_Cisalpha
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_ISDIGIT
|
||||||
|
#define isdigit __db_Cisdigit
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_ISPRINT
|
||||||
|
#define isprint __db_Cisprint
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_ISSPACE
|
||||||
|
#define isspace __db_Cisspace
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_LOCALTIME
|
||||||
|
#define localtime __db_Clocaltime
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_MEMCMP
|
||||||
|
#define memcmp __db_Cmemcmp
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_MEMCPY
|
||||||
|
#define memcpy __db_Cmemcpy
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_MEMMOVE
|
||||||
|
#define memmove __db_Cmemmove
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_PRINTF
|
||||||
|
#define printf __db_Cprintf
|
||||||
|
#define fprintf __db_Cfprintf
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_QSORT
|
||||||
|
#define qsort __db_Cqsort
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_RAISE
|
||||||
|
#define raise __db_Craise
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_RAND
|
||||||
|
#define rand __db_Crand
|
||||||
|
#define srand __db_Csrand
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_SNPRINTF
|
||||||
|
#define snprintf __db_Csnprintf
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_STRCASECMP
|
||||||
|
#define strcasecmp __db_Cstrcasecmp
|
||||||
|
#define strncasecmp __db_Cstrncasecmp
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_STRCAT
|
||||||
|
#define strcat __db_Cstrcat
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_STRCHR
|
||||||
|
#define strchr __db_Cstrchr
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_STRDUP
|
||||||
|
#define strdup __db_Cstrdup
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_STRERROR
|
||||||
|
#define strerror __db_Cstrerror
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_STRNCAT
|
||||||
|
#define strncat __db_Cstrncat
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_STRNCMP
|
||||||
|
#define strncmp __db_Cstrncmp
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_STRRCHR
|
||||||
|
#define strrchr __db_Cstrrchr
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_STRSEP
|
||||||
|
#define strsep __db_Cstrsep
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_STRTOL
|
||||||
|
#define strtol __db_Cstrtol
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_STRTOUL
|
||||||
|
#define strtoul __db_Cstrtoul
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_TIME
|
||||||
|
#define time __db_Ctime
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_VSNPRINTF
|
||||||
|
#define vsnprintf __db_Cvsnprintf
|
||||||
|
#endif
|
||||||
2474
build_s60/db.h
Normal file
2474
build_s60/db.h
Normal file
File diff suppressed because it is too large
Load Diff
572
build_s60/db_config.h
Normal file
572
build_s60/db_config.h
Normal file
@@ -0,0 +1,572 @@
|
|||||||
|
/* DO NOT EDIT: automatically built by dist/s_s60. */
|
||||||
|
/* db_config.h. Generated from config.hin by configure. */
|
||||||
|
/* config.hin. Generated from configure.ac by autoheader. */
|
||||||
|
|
||||||
|
/* Define to 1 if you want to build a version for running the test suite. */
|
||||||
|
/* #undef CONFIG_TEST */
|
||||||
|
|
||||||
|
/* We use DB_WIN32 much as one would use _WIN32 -- to specify that we're using
|
||||||
|
an operating system environment that supports Win32 calls and semantics. We
|
||||||
|
don't use _WIN32 because Cygwin/GCC also defines _WIN32, even though
|
||||||
|
Cygwin/GCC closely emulates the Unix environment. */
|
||||||
|
/* #undef DB_WIN32 */
|
||||||
|
|
||||||
|
/* Define to 1 if you want a debugging version. */
|
||||||
|
/* #undef DEBUG */
|
||||||
|
|
||||||
|
/* Define to 1 if you want a version that logs read operations. */
|
||||||
|
/* #undef DEBUG_ROP */
|
||||||
|
|
||||||
|
/* Define to 1 if you want a version that logs write operations. */
|
||||||
|
/* #undef DEBUG_WOP */
|
||||||
|
|
||||||
|
/* Define to 1 if you want a version with run-time diagnostic checking. */
|
||||||
|
/* #undef DIAGNOSTIC */
|
||||||
|
|
||||||
|
/* Define to 1 if 64-bit types are available. */
|
||||||
|
/* #undef HAVE_64BIT_TYPES */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `abort' function. */
|
||||||
|
#define HAVE_ABORT 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `atoi' function. */
|
||||||
|
#define HAVE_ATOI 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `atol' function. */
|
||||||
|
#define HAVE_ATOL 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `backtrace' function. */
|
||||||
|
/* #undef HAVE_BACKTRACE */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `backtrace_symbols' function. */
|
||||||
|
/* #undef HAVE_BACKTRACE_SYMBOLS */
|
||||||
|
|
||||||
|
/* Define to 1 if building on BREW. */
|
||||||
|
/* #undef HAVE_BREW */
|
||||||
|
|
||||||
|
/* Define to 1 if building on BREW (SDK2). */
|
||||||
|
/* #undef HAVE_BREW_SDK2 */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `clock_gettime' function. */
|
||||||
|
/* #undef HAVE_CLOCK_GETTIME */
|
||||||
|
|
||||||
|
/* Define to 1 if clock_gettime supports CLOCK_MONOTONIC. */
|
||||||
|
/* #undef HAVE_CLOCK_MONOTONIC */
|
||||||
|
|
||||||
|
/* Define to 1 if Berkeley DB release includes strong cryptography. */
|
||||||
|
/* #undef HAVE_CRYPTO */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `ctime_r' function. */
|
||||||
|
#define HAVE_CTIME_R 1
|
||||||
|
|
||||||
|
/* Define to 1 if ctime_r takes a buffer length as a third argument. */
|
||||||
|
/* #undef HAVE_CTIME_R_3ARG */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `directio' function. */
|
||||||
|
/* #undef HAVE_DIRECTIO */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
|
||||||
|
*/
|
||||||
|
#define HAVE_DIRENT_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <dlfcn.h> header file. */
|
||||||
|
/* #undef HAVE_DLFCN_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <execinfo.h> header file. */
|
||||||
|
/* #undef HAVE_EXECINFO_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have EXIT_SUCCESS/EXIT_FAILURE #defines. */
|
||||||
|
#define HAVE_EXIT_SUCCESS 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fchmod' function. */
|
||||||
|
/* #undef HAVE_FCHMOD */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fclose' function. */
|
||||||
|
#define HAVE_FCLOSE 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fcntl' function. */
|
||||||
|
#define HAVE_FCNTL 1
|
||||||
|
|
||||||
|
/* Define to 1 if fcntl/F_SETFD denies child access to file descriptors. */
|
||||||
|
/* #undef HAVE_FCNTL_F_SETFD */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fdatasync' function. */
|
||||||
|
/* #undef HAVE_FDATASYNC */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fgetc' function. */
|
||||||
|
#define HAVE_FGETC 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fgets' function. */
|
||||||
|
#define HAVE_FGETS 1
|
||||||
|
|
||||||
|
/* Define to 1 if allocated filesystem blocks are not zeroed. */
|
||||||
|
#define HAVE_FILESYSTEM_NOTZERO 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fopen' function. */
|
||||||
|
#define HAVE_FOPEN 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `ftruncate' function. */
|
||||||
|
/* #undef HAVE_FTRUNCATE */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fwrite' function. */
|
||||||
|
#define HAVE_FWRITE 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getaddrinfo' function. */
|
||||||
|
/* #undef HAVE_GETADDRINFO */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getcwd' function. */
|
||||||
|
#define HAVE_GETCWD 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getenv' function. */
|
||||||
|
/* #undef HAVE_GETENV */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getgid' function. */
|
||||||
|
#define HAVE_GETGID 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getopt' function. */
|
||||||
|
#define HAVE_GETOPT 1
|
||||||
|
|
||||||
|
/* Define to 1 if getopt supports the optreset variable. */
|
||||||
|
/* #undef HAVE_GETOPT_OPTRESET */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getrusage' function. */
|
||||||
|
/* #undef HAVE_GETRUSAGE */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `gettimeofday' function. */
|
||||||
|
/* #undef HAVE_GETTIMEOFDAY */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getuid' function. */
|
||||||
|
/* #undef HAVE_GETUID */
|
||||||
|
|
||||||
|
/* Define to 1 if building Hash access method. */
|
||||||
|
/* #undef HAVE_HASH */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `hstrerror' function. */
|
||||||
|
/* #undef HAVE_HSTRERROR */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||||
|
#define HAVE_INTTYPES_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `isalpha' function. */
|
||||||
|
#define HAVE_ISALPHA 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `isdigit' function. */
|
||||||
|
#define HAVE_ISDIGIT 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `isprint' function. */
|
||||||
|
#define HAVE_ISPRINT 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `isspace' function. */
|
||||||
|
#define HAVE_ISSPACE 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `localtime' function. */
|
||||||
|
#define HAVE_LOCALTIME 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `memcmp' function. */
|
||||||
|
#define HAVE_MEMCMP 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `memcpy' function. */
|
||||||
|
#define HAVE_MEMCPY 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `memmove' function. */
|
||||||
|
#define HAVE_MEMMOVE 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <memory.h> header file. */
|
||||||
|
/* #undef HAVE_MEMORY_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `mlock' function. */
|
||||||
|
/* #undef HAVE_MLOCK */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `mmap' function. */
|
||||||
|
/* #undef HAVE_MMAP */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `mprotect' function. */
|
||||||
|
/* #undef HAVE_MPROTECT */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `munlock' function. */
|
||||||
|
/* #undef HAVE_MUNLOCK */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `munmap' function. */
|
||||||
|
#define HAVE_MUNMAP 1
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and 68K assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_68K_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the AIX _check_lock mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_AIX_CHECK_LOCK */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and Alpha assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_ALPHA_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and ARM assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_ARM_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the Apple/Darwin _spin_lock_try mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_DARWIN_SPIN_LOCK_TRY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the UNIX fcntl system call mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_FCNTL */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and PaRisc assembly language mutexes.
|
||||||
|
*/
|
||||||
|
/* #undef HAVE_MUTEX_HPPA_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the msem_XXX mutexes on HP-UX. */
|
||||||
|
/* #undef HAVE_MUTEX_HPPA_MSEM_INIT */
|
||||||
|
|
||||||
|
/* Define to 1 to use test-and-set mutexes with blocking mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_HYBRID */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and IA64 assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_IA64_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and MIPS assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_MIPS_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the msem_XXX mutexes on systems other than HP-UX. */
|
||||||
|
/* #undef HAVE_MUTEX_MSEM_INIT */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and PowerPC assembly language mutexes.
|
||||||
|
*/
|
||||||
|
/* #undef HAVE_MUTEX_PPC_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use POSIX 1003.1 pthread_XXX mutexes. */
|
||||||
|
#define HAVE_MUTEX_PTHREADS 1
|
||||||
|
|
||||||
|
/* Define to 1 to use Reliant UNIX initspin mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_RELIANTUNIX_INITSPIN */
|
||||||
|
|
||||||
|
/* Define to 1 to use the IBM C compiler and S/390 assembly language mutexes.
|
||||||
|
*/
|
||||||
|
/* #undef HAVE_MUTEX_S390_CC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and S/390 assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_S390_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the SCO compiler and x86 assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_SCO_X86_CC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the obsolete POSIX 1003.1 sema_XXX mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_SEMA_INIT */
|
||||||
|
|
||||||
|
/* Define to 1 to use the SGI XXX_lock mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_SGI_INIT_LOCK */
|
||||||
|
|
||||||
|
/* Define to 1 to use the Solaris _lock_XXX mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_SOLARIS_LOCK_TRY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the Solaris lwp threads mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_SOLARIS_LWP */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and Sparc assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_SPARC_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 if the Berkeley DB library should support mutexes. */
|
||||||
|
#define HAVE_MUTEX_SUPPORT 1
|
||||||
|
|
||||||
|
/* Define to 1 if mutexes hold system resources. */
|
||||||
|
#define HAVE_MUTEX_SYSTEM_RESOURCES 1
|
||||||
|
|
||||||
|
/* Define to 1 to configure mutexes intra-process only. */
|
||||||
|
#define HAVE_MUTEX_THREAD_ONLY 1
|
||||||
|
|
||||||
|
/* Define to 1 to use the CC compiler and Tru64 assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_TRU64_CC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the UNIX International mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_UI_THREADS */
|
||||||
|
|
||||||
|
/* Define to 1 to use the UTS compiler and assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_UTS_CC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use VMS mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_VMS */
|
||||||
|
|
||||||
|
/* Define to 1 to use VxWorks mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_VXWORKS */
|
||||||
|
|
||||||
|
/* Define to 1 to use the MSVC compiler and Windows mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_WIN32 */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and Windows mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_WIN32_GCC */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and 64-bit x86 assembly language
|
||||||
|
mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_X86_64_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and 32-bit x86 assembly language
|
||||||
|
mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_X86_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
|
||||||
|
/* #undef HAVE_NDIR_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the O_DIRECT flag. */
|
||||||
|
/* #undef HAVE_O_DIRECT */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `pread' function. */
|
||||||
|
/* #undef HAVE_PREAD */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `printf' function. */
|
||||||
|
#define HAVE_PRINTF 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `pstat_getdynamic' function. */
|
||||||
|
/* #undef HAVE_PSTAT_GETDYNAMIC */
|
||||||
|
|
||||||
|
/* Define to 1 to configure Berkeley DB for POSIX pthread API. */
|
||||||
|
/* #undef HAVE_PTHREAD_API */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `pthread_yield' function. */
|
||||||
|
/* #undef HAVE_PTHREAD_YIELD */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `pwrite' function. */
|
||||||
|
/* #undef HAVE_PWRITE */
|
||||||
|
|
||||||
|
/* Define to 1 if building on QNX. */
|
||||||
|
/* #undef HAVE_QNX */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `qsort' function. */
|
||||||
|
#define HAVE_QSORT 1
|
||||||
|
|
||||||
|
/* Define to 1 if building Queue access method. */
|
||||||
|
/* #undef HAVE_QUEUE */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `raise' function. */
|
||||||
|
#define HAVE_RAISE 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `rand' function. */
|
||||||
|
#define HAVE_RAND 1
|
||||||
|
|
||||||
|
/* Define to 1 if building replication support. */
|
||||||
|
/* #undef HAVE_REPLICATION */
|
||||||
|
|
||||||
|
/* Define to 1 if building the Berkeley DB replication framework. */
|
||||||
|
/* #undef HAVE_REPLICATION_THREADS */
|
||||||
|
|
||||||
|
/* Define to 1 if building RPC client/server. */
|
||||||
|
/* #undef HAVE_RPC */
|
||||||
|
|
||||||
|
/* Define to 1 if building on S60. */
|
||||||
|
#define HAVE_S60 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `sched_yield' function. */
|
||||||
|
#define HAVE_SCHED_YIELD 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `select' function. */
|
||||||
|
#define HAVE_SELECT 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `setgid' function. */
|
||||||
|
#define HAVE_SETGID 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `setuid' function. */
|
||||||
|
#define HAVE_SETUID 1
|
||||||
|
|
||||||
|
/* Define to 1 if shmctl/SHM_LOCK locks down shared memory segments. */
|
||||||
|
/* #undef HAVE_SHMCTL_SHM_LOCK */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `shmget' function. */
|
||||||
|
#define HAVE_SHMGET 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `sigaction' function. */
|
||||||
|
/* #undef HAVE_SIGACTION */
|
||||||
|
|
||||||
|
/* Define to 1 if thread identifier type db_threadid_t is integral. */
|
||||||
|
#define HAVE_SIMPLE_THREAD_TYPE 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `snprintf' function. */
|
||||||
|
#define HAVE_SNPRINTF 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `stat' function. */
|
||||||
|
#define HAVE_STAT 1
|
||||||
|
|
||||||
|
/* Define to 1 if building statistics support. */
|
||||||
|
#define HAVE_STATISTICS 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <stdint.h> header file. */
|
||||||
|
#define HAVE_STDINT_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||||
|
#define HAVE_STDLIB_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strcasecmp' function. */
|
||||||
|
#define HAVE_STRCASECMP 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strcat' function. */
|
||||||
|
#define HAVE_STRCAT 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strchr' function. */
|
||||||
|
#define HAVE_STRCHR 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strdup' function. */
|
||||||
|
#define HAVE_STRDUP 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strerror' function. */
|
||||||
|
#define HAVE_STRERROR 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strftime' function. */
|
||||||
|
#define HAVE_STRFTIME 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <strings.h> header file. */
|
||||||
|
#define HAVE_STRINGS_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <string.h> header file. */
|
||||||
|
#define HAVE_STRING_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strncat' function. */
|
||||||
|
#define HAVE_STRNCAT 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strncmp' function. */
|
||||||
|
#define HAVE_STRNCMP 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strrchr' function. */
|
||||||
|
#define HAVE_STRRCHR 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strsep' function. */
|
||||||
|
#define HAVE_STRSEP 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strtol' function. */
|
||||||
|
#define HAVE_STRTOL 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strtoul' function. */
|
||||||
|
#define HAVE_STRTOUL 1
|
||||||
|
|
||||||
|
/* Define to 1 if `st_blksize' is member of `struct stat'. */
|
||||||
|
/* #undef HAVE_STRUCT_STAT_ST_BLKSIZE */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `sysconf' function. */
|
||||||
|
#define HAVE_SYSCONF 1
|
||||||
|
|
||||||
|
/* Define to 1 if port includes files in the Berkeley DB source code. */
|
||||||
|
#define HAVE_SYSTEM_INCLUDE_FILES 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
|
||||||
|
*/
|
||||||
|
/* #undef HAVE_SYS_DIR_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
|
||||||
|
*/
|
||||||
|
/* #undef HAVE_SYS_NDIR_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/select.h> header file. */
|
||||||
|
#define HAVE_SYS_SELECT_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/socket.h> header file. */
|
||||||
|
/* #undef HAVE_SYS_SOCKET_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||||
|
#define HAVE_SYS_STAT_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/time.h> header file. */
|
||||||
|
#define HAVE_SYS_TIME_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||||
|
#define HAVE_SYS_TYPES_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `time' function. */
|
||||||
|
#define HAVE_TIME 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <unistd.h> header file. */
|
||||||
|
#define HAVE_UNISTD_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if unlink of file with open file descriptors will fail. */
|
||||||
|
/* #undef HAVE_UNLINK_WITH_OPEN_FAILURE */
|
||||||
|
|
||||||
|
/* Define to 1 if port includes historic database upgrade support. */
|
||||||
|
/* #undef HAVE_UPGRADE_SUPPORT */
|
||||||
|
|
||||||
|
/* Define to 1 if building access method verification support. */
|
||||||
|
/* #undef HAVE_VERIFY */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `vsnprintf' function. */
|
||||||
|
#define HAVE_VSNPRINTF 1
|
||||||
|
|
||||||
|
/* Define to 1 if building on VxWorks. */
|
||||||
|
/* #undef HAVE_VXWORKS */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `yield' function. */
|
||||||
|
/* #undef HAVE_YIELD */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `_fstati64' function. */
|
||||||
|
/* #undef HAVE__FSTATI64 */
|
||||||
|
|
||||||
|
/* Define to the address where bug reports for this package should be sent. */
|
||||||
|
#define PACKAGE_BUGREPORT "Oracle Technology Network Berkeley DB forum"
|
||||||
|
|
||||||
|
/* Define to the full name of this package. */
|
||||||
|
#define PACKAGE_NAME "Berkeley DB"
|
||||||
|
|
||||||
|
/* Define to the full name and version of this package. */
|
||||||
|
#define PACKAGE_STRING "Berkeley DB 4.7.25"
|
||||||
|
|
||||||
|
/* Define to the one symbol short name of this package. */
|
||||||
|
#define PACKAGE_TARNAME "db-4.7.25"
|
||||||
|
|
||||||
|
/* Define to the version of this package. */
|
||||||
|
#define PACKAGE_VERSION "4.7.25"
|
||||||
|
|
||||||
|
/* The size of `char', as computed by sizeof. */
|
||||||
|
#define SIZEOF_CHAR 1
|
||||||
|
|
||||||
|
/* The size of `char *', as computed by sizeof. */
|
||||||
|
#define SIZEOF_CHAR_P 4
|
||||||
|
|
||||||
|
/* The size of `int', as computed by sizeof. */
|
||||||
|
#define SIZEOF_INT 4
|
||||||
|
|
||||||
|
/* The size of `long', as computed by sizeof. */
|
||||||
|
#define SIZEOF_LONG 4
|
||||||
|
|
||||||
|
/* The size of `long long', as computed by sizeof. */
|
||||||
|
/* #undef SIZEOF_LONG_LONG */
|
||||||
|
|
||||||
|
/* The size of `short', as computed by sizeof. */
|
||||||
|
#define SIZEOF_SHORT 2
|
||||||
|
|
||||||
|
/* The size of `size_t', as computed by sizeof. */
|
||||||
|
#define SIZEOF_SIZE_T 4
|
||||||
|
|
||||||
|
/* The size of `unsigned char', as computed by sizeof. */
|
||||||
|
#define SIZEOF_UNSIGNED_CHAR 1
|
||||||
|
|
||||||
|
/* The size of `unsigned int', as computed by sizeof. */
|
||||||
|
#define SIZEOF_UNSIGNED_INT 4
|
||||||
|
|
||||||
|
/* The size of `unsigned long', as computed by sizeof. */
|
||||||
|
#define SIZEOF_UNSIGNED_LONG 4
|
||||||
|
|
||||||
|
/* The size of `unsigned long long', as computed by sizeof. */
|
||||||
|
/* #undef SIZEOF_UNSIGNED_LONG_LONG */
|
||||||
|
|
||||||
|
/* The size of `unsigned short', as computed by sizeof. */
|
||||||
|
#define SIZEOF_UNSIGNED_SHORT 2
|
||||||
|
|
||||||
|
/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */
|
||||||
|
/* #undef STAT_MACROS_BROKEN */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the ANSI C header files. */
|
||||||
|
#define STDC_HEADERS 1
|
||||||
|
|
||||||
|
/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
|
||||||
|
/* #undef TIME_WITH_SYS_TIME */
|
||||||
|
|
||||||
|
/* Define to 1 to mask harmless uninitialized memory read/writes. */
|
||||||
|
/* #undef UMRW */
|
||||||
|
|
||||||
|
/* Number of bits in a file offset, on hosts where this is settable. */
|
||||||
|
/* #undef _FILE_OFFSET_BITS */
|
||||||
|
|
||||||
|
/* Define for large files, on AIX-style hosts. */
|
||||||
|
/* #undef _LARGE_FILES */
|
||||||
|
|
||||||
|
/* Define to empty if `const' does not conform to ANSI C. */
|
||||||
|
/* #undef const */
|
||||||
|
|
||||||
|
/* Define to `__inline__' or `__inline' if that's what the C compiler
|
||||||
|
calls it, or to nothing if 'inline' is not supported under any name. */
|
||||||
|
#ifndef __cplusplus
|
||||||
|
/* #undef inline */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* type to use in place of socklen_t if not defined */
|
||||||
|
/* #undef socklen_t */
|
||||||
913
build_s60/db_int.h
Normal file
913
build_s60/db_int.h
Normal file
@@ -0,0 +1,913 @@
|
|||||||
|
/* DO NOT EDIT: automatically built by dist/s_s60. */
|
||||||
|
/*-
|
||||||
|
* See the file LICENSE for redistribution information.
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996,2008 Oracle. All rights reserved.
|
||||||
|
*
|
||||||
|
* $Id: db_int.h 63573 2008-05-23 21:43:21Z trent.nelson $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _DB_INT_H_
|
||||||
|
#define _DB_INT_H_
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Berkeley DB ANSI/POSIX include files.
|
||||||
|
*******************************************************/
|
||||||
|
#ifdef HAVE_SYSTEM_INCLUDE_FILES
|
||||||
|
#include <sys/types.h>
|
||||||
|
#ifdef DIAG_MVCC
|
||||||
|
#include <sys/mman.h>
|
||||||
|
#endif
|
||||||
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
#if defined(__INCLUDE_SELECT_H)
|
||||||
|
#ifdef HAVE_SYS_SELECT_H
|
||||||
|
#include <sys/select.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_VXWORKS
|
||||||
|
#include <selectLib.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if TIME_WITH_SYS_TIME
|
||||||
|
#include <sys/time.h>
|
||||||
|
#include <time.h>
|
||||||
|
#else
|
||||||
|
#if HAVE_SYS_TIME_H
|
||||||
|
#include <sys/time.h>
|
||||||
|
#else
|
||||||
|
#include <time.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_VXWORKS
|
||||||
|
#include <net/uio.h>
|
||||||
|
#else
|
||||||
|
#include <sys/uio.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__INCLUDE_NETWORKING)
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <netdb.h>
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(STDC_HEADERS) || defined(__cplusplus)
|
||||||
|
#include <stdarg.h>
|
||||||
|
#else
|
||||||
|
#include <varargs.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <limits.h>
|
||||||
|
#include <signal.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#if defined(__INCLUDE_DIRECTORY)
|
||||||
|
#if HAVE_DIRENT_H
|
||||||
|
# include <dirent.h>
|
||||||
|
# define NAMLEN(dirent) strlen((dirent)->d_name)
|
||||||
|
#else
|
||||||
|
# define dirent direct
|
||||||
|
# define NAMLEN(dirent) (dirent)->d_namlen
|
||||||
|
# if HAVE_SYS_NDIR_H
|
||||||
|
# include <sys/ndir.h>
|
||||||
|
# endif
|
||||||
|
# if HAVE_SYS_DIR_H
|
||||||
|
# include <sys/dir.h>
|
||||||
|
# endif
|
||||||
|
# if HAVE_NDIR_H
|
||||||
|
# include <ndir.h>
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
#endif /* __INCLUDE_DIRECTORY */
|
||||||
|
|
||||||
|
#endif /* !HAVE_SYSTEM_INCLUDE_FILES */
|
||||||
|
|
||||||
|
#ifdef DB_WIN32
|
||||||
|
#include "dbinc/win_db.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "db.h"
|
||||||
|
#include "clib_port.h"
|
||||||
|
|
||||||
|
#include "dbinc/queue.h"
|
||||||
|
#include "dbinc/shqueue.h"
|
||||||
|
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Forward structure declarations.
|
||||||
|
*******************************************************/
|
||||||
|
struct __db_reginfo_t; typedef struct __db_reginfo_t REGINFO;
|
||||||
|
struct __db_txnhead; typedef struct __db_txnhead DB_TXNHEAD;
|
||||||
|
struct __db_txnlist; typedef struct __db_txnlist DB_TXNLIST;
|
||||||
|
struct __vrfy_childinfo;typedef struct __vrfy_childinfo VRFY_CHILDINFO;
|
||||||
|
struct __vrfy_dbinfo; typedef struct __vrfy_dbinfo VRFY_DBINFO;
|
||||||
|
struct __vrfy_pageinfo; typedef struct __vrfy_pageinfo VRFY_PAGEINFO;
|
||||||
|
|
||||||
|
typedef SH_TAILQ_HEAD(__hash_head) DB_HASHTAB;
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* General purpose constants and macros.
|
||||||
|
*******************************************************/
|
||||||
|
#undef FALSE
|
||||||
|
#define FALSE 0
|
||||||
|
#undef TRUE
|
||||||
|
#define TRUE (!FALSE)
|
||||||
|
|
||||||
|
#define MEGABYTE 1048576
|
||||||
|
#define GIGABYTE 1073741824
|
||||||
|
|
||||||
|
#define NS_PER_MS 1000000 /* Nanoseconds in a millisecond */
|
||||||
|
#define NS_PER_US 1000 /* Nanoseconds in a microsecond */
|
||||||
|
#define NS_PER_SEC 1000000000 /* Nanoseconds in a second */
|
||||||
|
#define US_PER_MS 1000 /* Microseconds in a millisecond */
|
||||||
|
#define US_PER_SEC 1000000 /* Microseconds in a second */
|
||||||
|
#define MS_PER_SEC 1000 /* Milliseconds in a second */
|
||||||
|
|
||||||
|
#define RECNO_OOB 0 /* Illegal record number. */
|
||||||
|
|
||||||
|
/* Test for a power-of-two (tests true for zero, which doesn't matter here). */
|
||||||
|
#define POWER_OF_TWO(x) (((x) & ((x) - 1)) == 0)
|
||||||
|
|
||||||
|
/* Test for valid page sizes. */
|
||||||
|
#define DB_MIN_PGSIZE 0x000200 /* Minimum page size (512). */
|
||||||
|
#define DB_MAX_PGSIZE 0x010000 /* Maximum page size (65536). */
|
||||||
|
#define IS_VALID_PAGESIZE(x) \
|
||||||
|
(POWER_OF_TWO(x) && (x) >= DB_MIN_PGSIZE && ((x) <= DB_MAX_PGSIZE))
|
||||||
|
|
||||||
|
/* Minimum number of pages cached, by default. */
|
||||||
|
#define DB_MINPAGECACHE 16
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If we are unable to determine the underlying filesystem block size, use
|
||||||
|
* 8K on the grounds that most OS's use less than 8K for a VM page size.
|
||||||
|
*/
|
||||||
|
#define DB_DEF_IOSIZE (8 * 1024)
|
||||||
|
|
||||||
|
/* Align an integer to a specific boundary. */
|
||||||
|
#undef DB_ALIGN
|
||||||
|
#define DB_ALIGN(v, bound) \
|
||||||
|
(((v) + (bound) - 1) & ~(((uintmax_t)(bound)) - 1))
|
||||||
|
|
||||||
|
/* Increment a pointer to a specific boundary. */
|
||||||
|
#undef ALIGNP_INC
|
||||||
|
#define ALIGNP_INC(p, bound) \
|
||||||
|
(void *)(((uintptr_t)(p) + (bound) - 1) & ~(((uintptr_t)(bound)) - 1))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Print an address as a u_long (a u_long is the largest type we can print
|
||||||
|
* portably). Most 64-bit systems have made longs 64-bits, so this should
|
||||||
|
* work.
|
||||||
|
*/
|
||||||
|
#define P_TO_ULONG(p) ((u_long)(uintptr_t)(p))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Convert a pointer to a small integral value.
|
||||||
|
*
|
||||||
|
* The (u_int16_t)(uintptr_t) cast avoids warnings: the (uintptr_t) cast
|
||||||
|
* converts the value to an integral type, and the (u_int16_t) cast converts
|
||||||
|
* it to a small integral type so we don't get complaints when we assign the
|
||||||
|
* final result to an integral type smaller than uintptr_t.
|
||||||
|
*/
|
||||||
|
#define P_TO_UINT32(p) ((u_int32_t)(uintptr_t)(p))
|
||||||
|
#define P_TO_UINT16(p) ((u_int16_t)(uintptr_t)(p))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* There are several on-page structures that are declared to have a number of
|
||||||
|
* fields followed by a variable length array of items. The structure size
|
||||||
|
* without including the variable length array or the address of the first of
|
||||||
|
* those elements can be found using SSZ.
|
||||||
|
*
|
||||||
|
* This macro can also be used to find the offset of a structure element in a
|
||||||
|
* structure. This is used in various places to copy structure elements from
|
||||||
|
* unaligned memory references, e.g., pointers into a packed page.
|
||||||
|
*
|
||||||
|
* There are two versions because compilers object if you take the address of
|
||||||
|
* an array.
|
||||||
|
*/
|
||||||
|
#undef SSZ
|
||||||
|
#define SSZ(name, field) P_TO_UINT16(&(((name *)0)->field))
|
||||||
|
|
||||||
|
#undef SSZA
|
||||||
|
#define SSZA(name, field) P_TO_UINT16(&(((name *)0)->field[0]))
|
||||||
|
|
||||||
|
/* Structure used to print flag values. */
|
||||||
|
typedef struct __fn {
|
||||||
|
u_int32_t mask; /* Flag value. */
|
||||||
|
const char *name; /* Flag name. */
|
||||||
|
} FN;
|
||||||
|
|
||||||
|
/* Set, clear and test flags. */
|
||||||
|
#define FLD_CLR(fld, f) (fld) &= ~(f)
|
||||||
|
#define FLD_ISSET(fld, f) ((fld) & (f))
|
||||||
|
#define FLD_SET(fld, f) (fld) |= (f)
|
||||||
|
#define F_CLR(p, f) (p)->flags &= ~(f)
|
||||||
|
#define F_ISSET(p, f) ((p)->flags & (f))
|
||||||
|
#define F_SET(p, f) (p)->flags |= (f)
|
||||||
|
#define LF_CLR(f) ((flags) &= ~(f))
|
||||||
|
#define LF_ISSET(f) ((flags) & (f))
|
||||||
|
#define LF_SET(f) ((flags) |= (f))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Calculate a percentage. The values can overflow 32-bit integer arithmetic
|
||||||
|
* so we use floating point.
|
||||||
|
*
|
||||||
|
* When calculating a bytes-vs-page size percentage, we're getting the inverse
|
||||||
|
* of the percentage in all cases, that is, we want 100 minus the percentage we
|
||||||
|
* calculate.
|
||||||
|
*/
|
||||||
|
#define DB_PCT(v, total) \
|
||||||
|
((int)((total) == 0 ? 0 : ((double)(v) * 100) / (total)))
|
||||||
|
#define DB_PCT_PG(v, total, pgsize) \
|
||||||
|
((int)((total) == 0 ? 0 : \
|
||||||
|
100 - ((double)(v) * 100) / (((double)total) * (pgsize))))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Statistics update shared memory and so are expensive -- don't update the
|
||||||
|
* values unless we're going to display the results.
|
||||||
|
*/
|
||||||
|
#undef STAT
|
||||||
|
#ifdef HAVE_STATISTICS
|
||||||
|
#define STAT(x) x
|
||||||
|
#else
|
||||||
|
#define STAT(x)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Structure used for callback message aggregation.
|
||||||
|
*
|
||||||
|
* Display values in XXX_stat_print calls.
|
||||||
|
*/
|
||||||
|
typedef struct __db_msgbuf {
|
||||||
|
char *buf; /* Heap allocated buffer. */
|
||||||
|
char *cur; /* Current end of message. */
|
||||||
|
size_t len; /* Allocated length of buffer. */
|
||||||
|
} DB_MSGBUF;
|
||||||
|
#define DB_MSGBUF_INIT(a) do { \
|
||||||
|
(a)->buf = (a)->cur = NULL; \
|
||||||
|
(a)->len = 0; \
|
||||||
|
} while (0)
|
||||||
|
#define DB_MSGBUF_FLUSH(env, a) do { \
|
||||||
|
if ((a)->buf != NULL) { \
|
||||||
|
if ((a)->cur != (a)->buf) \
|
||||||
|
__db_msg(env, "%s", (a)->buf); \
|
||||||
|
__os_free(env, (a)->buf); \
|
||||||
|
DB_MSGBUF_INIT(a); \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
#define STAT_FMT(msg, fmt, type, v) do { \
|
||||||
|
DB_MSGBUF __mb; \
|
||||||
|
DB_MSGBUF_INIT(&__mb); \
|
||||||
|
__db_msgadd(env, &__mb, fmt, (type)(v)); \
|
||||||
|
__db_msgadd(env, &__mb, "\t%s", msg); \
|
||||||
|
DB_MSGBUF_FLUSH(env, &__mb); \
|
||||||
|
} while (0)
|
||||||
|
#define STAT_HEX(msg, v) \
|
||||||
|
__db_msg(env, "%#lx\t%s", (u_long)(v), msg)
|
||||||
|
#define STAT_ISSET(msg, p) \
|
||||||
|
__db_msg(env, "%sSet\t%s", (p) == NULL ? "!" : " ", msg)
|
||||||
|
#define STAT_LONG(msg, v) \
|
||||||
|
__db_msg(env, "%ld\t%s", (long)(v), msg)
|
||||||
|
#define STAT_LSN(msg, lsnp) \
|
||||||
|
__db_msg(env, "%lu/%lu\t%s", \
|
||||||
|
(u_long)(lsnp)->file, (u_long)(lsnp)->offset, msg)
|
||||||
|
#define STAT_POINTER(msg, v) \
|
||||||
|
__db_msg(env, "%#lx\t%s", P_TO_ULONG(v), msg)
|
||||||
|
#define STAT_STRING(msg, p) do { \
|
||||||
|
const char *__p = p; /* p may be a function call. */ \
|
||||||
|
__db_msg(env, "%s\t%s", __p == NULL ? "!Set" : __p, msg); \
|
||||||
|
} while (0)
|
||||||
|
#define STAT_ULONG(msg, v) \
|
||||||
|
__db_msg(env, "%lu\t%s", (u_long)(v), msg)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* There are quite a few places in Berkeley DB where we want to initialize
|
||||||
|
* a DBT from a string or other random pointer type, using a length typed
|
||||||
|
* to size_t in most cases. This macro avoids a lot of casting. The macro
|
||||||
|
* comes in two flavors because we often want to clear the DBT first.
|
||||||
|
*/
|
||||||
|
#define DB_SET_DBT(dbt, d, s) do { \
|
||||||
|
(dbt).data = (void *)(d); \
|
||||||
|
(dbt).size = (u_int32_t)(s); \
|
||||||
|
} while (0)
|
||||||
|
#define DB_INIT_DBT(dbt, d, s) do { \
|
||||||
|
memset(&(dbt), 0, sizeof(dbt)); \
|
||||||
|
DB_SET_DBT(dbt, d, s); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* API return values
|
||||||
|
*******************************************************/
|
||||||
|
/*
|
||||||
|
* Return values that are OK for each different call. Most calls have a
|
||||||
|
* standard 'return of 0 is only OK value', but some, like db->get have
|
||||||
|
* DB_NOTFOUND as a return value, but it really isn't an error.
|
||||||
|
*/
|
||||||
|
#define DB_RETOK_STD(ret) ((ret) == 0)
|
||||||
|
#define DB_RETOK_DBCDEL(ret) ((ret) == 0 || (ret) == DB_KEYEMPTY || \
|
||||||
|
(ret) == DB_NOTFOUND)
|
||||||
|
#define DB_RETOK_DBCGET(ret) ((ret) == 0 || (ret) == DB_KEYEMPTY || \
|
||||||
|
(ret) == DB_NOTFOUND)
|
||||||
|
#define DB_RETOK_DBCPUT(ret) ((ret) == 0 || (ret) == DB_KEYEXIST || \
|
||||||
|
(ret) == DB_NOTFOUND)
|
||||||
|
#define DB_RETOK_DBDEL(ret) DB_RETOK_DBCDEL(ret)
|
||||||
|
#define DB_RETOK_DBGET(ret) DB_RETOK_DBCGET(ret)
|
||||||
|
#define DB_RETOK_DBPUT(ret) ((ret) == 0 || (ret) == DB_KEYEXIST)
|
||||||
|
#define DB_RETOK_EXISTS(ret) DB_RETOK_DBCGET(ret)
|
||||||
|
#define DB_RETOK_LGGET(ret) ((ret) == 0 || (ret) == DB_NOTFOUND)
|
||||||
|
#define DB_RETOK_MPGET(ret) ((ret) == 0 || (ret) == DB_PAGE_NOTFOUND)
|
||||||
|
#define DB_RETOK_REPPMSG(ret) ((ret) == 0 || \
|
||||||
|
(ret) == DB_REP_IGNORE || \
|
||||||
|
(ret) == DB_REP_ISPERM || \
|
||||||
|
(ret) == DB_REP_NEWMASTER || \
|
||||||
|
(ret) == DB_REP_NEWSITE || \
|
||||||
|
(ret) == DB_REP_NOTPERM)
|
||||||
|
|
||||||
|
/* Find a reasonable operation-not-supported error. */
|
||||||
|
#ifdef EOPNOTSUPP
|
||||||
|
#define DB_OPNOTSUP EOPNOTSUPP
|
||||||
|
#else
|
||||||
|
#ifdef ENOTSUP
|
||||||
|
#define DB_OPNOTSUP ENOTSUP
|
||||||
|
#else
|
||||||
|
#define DB_OPNOTSUP EINVAL
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Files.
|
||||||
|
*******************************************************/
|
||||||
|
/*
|
||||||
|
* We use 1024 as the maximum path length. It's too hard to figure out what
|
||||||
|
* the real path length is, as it was traditionally stored in <sys/param.h>,
|
||||||
|
* and that file isn't always available.
|
||||||
|
*/
|
||||||
|
#define DB_MAXPATHLEN 1024
|
||||||
|
|
||||||
|
#define PATH_DOT "." /* Current working directory. */
|
||||||
|
/* Path separator character(s). */
|
||||||
|
#define PATH_SEPARATOR "\\/:"
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Environment.
|
||||||
|
*******************************************************/
|
||||||
|
/* Type passed to __db_appname(). */
|
||||||
|
typedef enum {
|
||||||
|
DB_APP_NONE=0, /* No type (region). */
|
||||||
|
DB_APP_DATA, /* Data file. */
|
||||||
|
DB_APP_LOG, /* Log file. */
|
||||||
|
DB_APP_TMP /* Temporary file. */
|
||||||
|
} APPNAME;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* A set of macros to check if various functionality has been configured.
|
||||||
|
*
|
||||||
|
* ALIVE_ON The is_alive function is configured.
|
||||||
|
* CDB_LOCKING CDB product locking.
|
||||||
|
* CRYPTO_ON Security has been configured.
|
||||||
|
* LOCKING_ON Locking has been configured.
|
||||||
|
* LOGGING_ON Logging has been configured.
|
||||||
|
* MUTEX_ON Mutexes have been configured.
|
||||||
|
* MPOOL_ON Memory pool has been configured.
|
||||||
|
* REP_ON Replication has been configured.
|
||||||
|
* RPC_ON RPC has been configured.
|
||||||
|
* TXN_ON Transactions have been configured.
|
||||||
|
*
|
||||||
|
* REP_ON is more complex than most: if the BDB library was compiled without
|
||||||
|
* replication support, ENV->rep_handle will be NULL; if the BDB library has
|
||||||
|
* replication support, but it was not configured, the region reference will
|
||||||
|
* be NULL.
|
||||||
|
*/
|
||||||
|
#define ALIVE_ON(env) ((env)->dbenv->is_alive != NULL)
|
||||||
|
#define CDB_LOCKING(env) F_ISSET(env, ENV_CDB)
|
||||||
|
#define CRYPTO_ON(env) ((env)->crypto_handle != NULL)
|
||||||
|
#define LOCKING_ON(env) ((env)->lk_handle != NULL)
|
||||||
|
#define LOGGING_ON(env) ((env)->lg_handle != NULL)
|
||||||
|
#define MPOOL_ON(env) ((env)->mp_handle != NULL)
|
||||||
|
#define MUTEX_ON(env) ((env)->mutex_handle != NULL)
|
||||||
|
#define REP_ON(env) \
|
||||||
|
((env)->rep_handle != NULL && (env)->rep_handle->region != NULL)
|
||||||
|
#define RPC_ON(dbenv) ((dbenv)->cl_handle != NULL)
|
||||||
|
#define TXN_ON(env) ((env)->tx_handle != NULL)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* STD_LOCKING Standard locking, that is, locking was configured and CDB
|
||||||
|
* was not. We do not do locking in off-page duplicate trees,
|
||||||
|
* so we check for that in the cursor first.
|
||||||
|
*/
|
||||||
|
#define STD_LOCKING(dbc) \
|
||||||
|
(!F_ISSET(dbc, DBC_OPD) && \
|
||||||
|
!CDB_LOCKING((dbc)->env) && LOCKING_ON((dbc)->env))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* IS_RECOVERING: The system is running recovery.
|
||||||
|
*/
|
||||||
|
#define IS_RECOVERING(env) \
|
||||||
|
(LOGGING_ON(env) && F_ISSET((env)->lg_handle, DBLOG_RECOVER))
|
||||||
|
|
||||||
|
/* Initialization methods are often illegal before/after open is called. */
|
||||||
|
#define ENV_ILLEGAL_AFTER_OPEN(env, name) \
|
||||||
|
if (F_ISSET((env), ENV_OPEN_CALLED)) \
|
||||||
|
return (__db_mi_open(env, name, 1));
|
||||||
|
#define ENV_ILLEGAL_BEFORE_OPEN(env, name) \
|
||||||
|
if (!F_ISSET((env), ENV_OPEN_CALLED)) \
|
||||||
|
return (__db_mi_open(env, name, 0));
|
||||||
|
|
||||||
|
/* We're not actually user hostile, honest. */
|
||||||
|
#define ENV_REQUIRES_CONFIG(env, handle, i, flags) \
|
||||||
|
if (handle == NULL) \
|
||||||
|
return (__env_not_config(env, i, flags));
|
||||||
|
#define ENV_REQUIRES_CONFIG_XX(env, handle, i, flags) \
|
||||||
|
if ((env)->handle->region == NULL) \
|
||||||
|
return (__env_not_config(env, i, flags));
|
||||||
|
#define ENV_NOT_CONFIGURED(env, handle, i, flags) \
|
||||||
|
if (F_ISSET((env), ENV_OPEN_CALLED)) \
|
||||||
|
ENV_REQUIRES_CONFIG(env, handle, i, flags)
|
||||||
|
|
||||||
|
#define ENV_ENTER(env, ip) do { \
|
||||||
|
int __ret; \
|
||||||
|
PANIC_CHECK(env); \
|
||||||
|
if ((env)->thr_hashtab == NULL) \
|
||||||
|
ip = NULL; \
|
||||||
|
else { \
|
||||||
|
if ((__ret = \
|
||||||
|
__env_set_state(env, &(ip), THREAD_ACTIVE)) != 0) \
|
||||||
|
return (__ret); \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define ENV_GET_THREAD_INFO(env, ip) ENV_ENTER(env, ip)
|
||||||
|
|
||||||
|
#ifdef DIAGNOSTIC
|
||||||
|
#define ENV_LEAVE(env, ip) do { \
|
||||||
|
if ((ip) != NULL) { \
|
||||||
|
DB_ASSERT(env, (ip)->dbth_state == THREAD_ACTIVE); \
|
||||||
|
(ip)->dbth_state = THREAD_OUT; \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
#else
|
||||||
|
#define ENV_LEAVE(env, ip) do { \
|
||||||
|
if ((ip) != NULL) \
|
||||||
|
(ip)->dbth_state = THREAD_OUT; \
|
||||||
|
} while (0)
|
||||||
|
#endif
|
||||||
|
#ifdef DIAGNOSTIC
|
||||||
|
#define CHECK_THREAD(env) do { \
|
||||||
|
if ((env)->thr_hashtab != NULL) \
|
||||||
|
(void)__env_set_state(env, NULL, THREAD_VERIFY); \
|
||||||
|
} while (0)
|
||||||
|
#ifdef HAVE_STATISTICS
|
||||||
|
#define CHECK_MTX_THREAD(env, mtx) do { \
|
||||||
|
if (mtx->alloc_id != MTX_MUTEX_REGION && \
|
||||||
|
mtx->alloc_id != MTX_ENV_REGION && \
|
||||||
|
mtx->alloc_id != MTX_APPLICATION) \
|
||||||
|
CHECK_THREAD(env); \
|
||||||
|
} while (0)
|
||||||
|
#else
|
||||||
|
#define CHECK_MTX_THREAD(env, mtx)
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#define CHECK_THREAD(env)
|
||||||
|
#define CHECK_MTX_THREAD(env, mtx)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
THREAD_SLOT_NOT_IN_USE=0,
|
||||||
|
THREAD_OUT,
|
||||||
|
THREAD_ACTIVE,
|
||||||
|
THREAD_BLOCKED,
|
||||||
|
THREAD_BLOCKED_DEAD
|
||||||
|
#ifdef DIAGNOSTIC
|
||||||
|
, THREAD_VERIFY
|
||||||
|
#endif
|
||||||
|
} DB_THREAD_STATE;
|
||||||
|
|
||||||
|
typedef struct __pin_list {
|
||||||
|
roff_t b_ref; /* offset to buffer. */
|
||||||
|
int region; /* region containing buffer. */
|
||||||
|
} PIN_LIST;
|
||||||
|
#define PINMAX 4
|
||||||
|
|
||||||
|
struct __db_thread_info {
|
||||||
|
pid_t dbth_pid;
|
||||||
|
db_threadid_t dbth_tid;
|
||||||
|
DB_THREAD_STATE dbth_state;
|
||||||
|
SH_TAILQ_ENTRY dbth_links;
|
||||||
|
/*
|
||||||
|
* The following fields track which buffers this thread of
|
||||||
|
* control has pinned in the mpool buffer cache.
|
||||||
|
*/
|
||||||
|
u_int16_t dbth_pincount; /* Number of pins for this thread. */
|
||||||
|
u_int16_t dbth_pinmax; /* Number of slots allocated. */
|
||||||
|
roff_t dbth_pinlist; /* List of pins. */
|
||||||
|
PIN_LIST dbth_pinarray[PINMAX]; /* Initial array of slots. */
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct __env_thread_info {
|
||||||
|
u_int32_t thr_count;
|
||||||
|
u_int32_t thr_max;
|
||||||
|
u_int32_t thr_nbucket;
|
||||||
|
roff_t thr_hashoff;
|
||||||
|
} THREAD_INFO;
|
||||||
|
|
||||||
|
#define DB_EVENT(env, e, einfo) do { \
|
||||||
|
DB_ENV *__dbenv = (env)->dbenv; \
|
||||||
|
if (__dbenv->db_event_func != NULL) \
|
||||||
|
__dbenv->db_event_func(__dbenv, e, einfo); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
typedef struct __flag_map {
|
||||||
|
u_int32_t inflag, outflag;
|
||||||
|
} FLAG_MAP;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Internal database environment structure.
|
||||||
|
*
|
||||||
|
* This is the private database environment handle. The public environment
|
||||||
|
* handle is the DB_ENV structure. The library owns this structure, the user
|
||||||
|
* owns the DB_ENV structure. The reason there are two structures is because
|
||||||
|
* the user's configuration outlives any particular DB_ENV->open call, and
|
||||||
|
* separate structures allows us to easily discard internal information without
|
||||||
|
* discarding the user's configuration.
|
||||||
|
*/
|
||||||
|
struct __env {
|
||||||
|
DB_ENV *dbenv; /* Linked DB_ENV structure */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The ENV structure can be used concurrently, so field access is
|
||||||
|
* protected.
|
||||||
|
*/
|
||||||
|
db_mutex_t mtx_env; /* ENV structure mutex */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Some fields are included in the ENV structure rather than in the
|
||||||
|
* DB_ENV structure because they are only set as arguments to the
|
||||||
|
* DB_ENV->open method. In other words, because of the historic API,
|
||||||
|
* not for any rational reason.
|
||||||
|
*
|
||||||
|
* Arguments to DB_ENV->open.
|
||||||
|
*/
|
||||||
|
char *db_home; /* Database home */
|
||||||
|
u_int32_t open_flags; /* Flags */
|
||||||
|
int db_mode; /* Default open permissions */
|
||||||
|
|
||||||
|
pid_t pid_cache; /* Cached process ID */
|
||||||
|
|
||||||
|
DB_FH *lockfhp; /* fcntl(2) locking file handle */
|
||||||
|
|
||||||
|
DB_LOCKER *env_lref; /* Locker in non-threaded handles */
|
||||||
|
|
||||||
|
DB_DISTAB recover_dtab; /* Dispatch table for recover funcs */
|
||||||
|
|
||||||
|
int dir_mode; /* Intermediate directory perms. */
|
||||||
|
|
||||||
|
/* Thread tracking */
|
||||||
|
u_int32_t thr_nbucket; /* Number of hash buckets */
|
||||||
|
DB_HASHTAB *thr_hashtab; /* Hash table of DB_THREAD_INFO */
|
||||||
|
|
||||||
|
/* Mutex allocation */
|
||||||
|
struct {
|
||||||
|
int alloc_id; /* Allocation ID argument */
|
||||||
|
u_int32_t flags; /* Flags argument */
|
||||||
|
} *mutex_iq; /* Initial mutexes queue */
|
||||||
|
u_int mutex_iq_next; /* Count of initial mutexes */
|
||||||
|
u_int mutex_iq_max; /* Maximum initial mutexes */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* List of open DB handles for this ENV, used for cursor
|
||||||
|
* adjustment. Must be protected for multi-threaded support.
|
||||||
|
*/
|
||||||
|
db_mutex_t mtx_dblist;
|
||||||
|
int db_ref; /* DB handle reference count */
|
||||||
|
TAILQ_HEAD(__dblist, __db) dblist;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* XA support.
|
||||||
|
*/
|
||||||
|
int xa_rmid; /* XA Resource Manager ID */
|
||||||
|
TAILQ_ENTRY(__env) links; /* XA environments */
|
||||||
|
TAILQ_HEAD(__xa_txn, __db_txn) xa_txn; /* XA active transactions */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* List of open file handles for this ENV. Must be protected
|
||||||
|
* for multi-threaded support.
|
||||||
|
*/
|
||||||
|
TAILQ_HEAD(__fdlist, __fh_t) fdlist;
|
||||||
|
|
||||||
|
db_mutex_t mtx_mt; /* Mersenne Twister mutex */
|
||||||
|
int mti; /* Mersenne Twister index */
|
||||||
|
u_long *mt; /* Mersenne Twister state vector */
|
||||||
|
|
||||||
|
DB_CIPHER *crypto_handle; /* Crypto handle */
|
||||||
|
DB_LOCKTAB *lk_handle; /* Lock handle */
|
||||||
|
DB_LOG *lg_handle; /* Log handle */
|
||||||
|
DB_MPOOL *mp_handle; /* Mpool handle */
|
||||||
|
DB_MUTEXMGR *mutex_handle; /* Mutex handle */
|
||||||
|
DB_REP *rep_handle; /* Replication handle */
|
||||||
|
DB_TXNMGR *tx_handle; /* Txn handle */
|
||||||
|
|
||||||
|
/* Application callback to copy data to/from a custom data source */
|
||||||
|
#define DB_USERCOPY_GETDATA 0x0001
|
||||||
|
#define DB_USERCOPY_SETDATA 0x0002
|
||||||
|
int (*dbt_usercopy)
|
||||||
|
__P((DBT *, u_int32_t, void *, u_int32_t, u_int32_t));
|
||||||
|
|
||||||
|
REGINFO *reginfo; /* REGINFO structure reference */
|
||||||
|
|
||||||
|
#define DB_TEST_ELECTINIT 1 /* after __rep_elect_init */
|
||||||
|
#define DB_TEST_ELECTVOTE1 2 /* after sending VOTE1 */
|
||||||
|
#define DB_TEST_POSTDESTROY 3 /* after destroy op */
|
||||||
|
#define DB_TEST_POSTLOG 4 /* after logging all pages */
|
||||||
|
#define DB_TEST_POSTLOGMETA 5 /* after logging meta in btree */
|
||||||
|
#define DB_TEST_POSTOPEN 6 /* after __os_open */
|
||||||
|
#define DB_TEST_POSTSYNC 7 /* after syncing the log */
|
||||||
|
#define DB_TEST_PREDESTROY 8 /* before destroy op */
|
||||||
|
#define DB_TEST_PREOPEN 9 /* before __os_open */
|
||||||
|
#define DB_TEST_SUBDB_LOCKS 10 /* subdb locking tests */
|
||||||
|
int test_abort; /* Abort value for testing */
|
||||||
|
int test_check; /* Checkpoint value for testing */
|
||||||
|
int test_copy; /* Copy value for testing */
|
||||||
|
|
||||||
|
#define ENV_CDB 0x00000001 /* DB_INIT_CDB */
|
||||||
|
#define ENV_DBLOCAL 0x00000002 /* Environment for a private DB */
|
||||||
|
#define ENV_LITTLEENDIAN 0x00000004 /* Little endian system. */
|
||||||
|
#define ENV_LOCKDOWN 0x00000008 /* DB_LOCKDOWN set */
|
||||||
|
#define ENV_NO_OUTPUT_SET 0x00000010 /* No output channel set */
|
||||||
|
#define ENV_OPEN_CALLED 0x00000020 /* DB_ENV->open called */
|
||||||
|
#define ENV_PRIVATE 0x00000040 /* DB_PRIVATE set */
|
||||||
|
#define ENV_RECOVER_FATAL 0x00000080 /* Doing fatal recovery in env */
|
||||||
|
#define ENV_REF_COUNTED 0x00000100 /* Region references this handle */
|
||||||
|
#define ENV_SYSTEM_MEM 0x00000200 /* DB_SYSTEM_MEM set */
|
||||||
|
#define ENV_THREAD 0x00000400 /* DB_THREAD set */
|
||||||
|
u_int32_t flags;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Database Access Methods.
|
||||||
|
*******************************************************/
|
||||||
|
/*
|
||||||
|
* DB_IS_THREADED --
|
||||||
|
* The database handle is free-threaded (was opened with DB_THREAD).
|
||||||
|
*/
|
||||||
|
#define DB_IS_THREADED(dbp) \
|
||||||
|
((dbp)->mutex != MUTEX_INVALID)
|
||||||
|
|
||||||
|
/* Initialization methods are often illegal before/after open is called. */
|
||||||
|
#define DB_ILLEGAL_AFTER_OPEN(dbp, name) \
|
||||||
|
if (F_ISSET((dbp), DB_AM_OPEN_CALLED)) \
|
||||||
|
return (__db_mi_open((dbp)->env, name, 1));
|
||||||
|
#define DB_ILLEGAL_BEFORE_OPEN(dbp, name) \
|
||||||
|
if (!F_ISSET((dbp), DB_AM_OPEN_CALLED)) \
|
||||||
|
return (__db_mi_open((dbp)->env, name, 0));
|
||||||
|
/* Some initialization methods are illegal if environment isn't local. */
|
||||||
|
#define DB_ILLEGAL_IN_ENV(dbp, name) \
|
||||||
|
if (!F_ISSET((dbp)->env, ENV_DBLOCAL)) \
|
||||||
|
return (__db_mi_env((dbp)->env, name));
|
||||||
|
#define DB_ILLEGAL_METHOD(dbp, flags) { \
|
||||||
|
int __ret; \
|
||||||
|
if ((__ret = __dbh_am_chk(dbp, flags)) != 0) \
|
||||||
|
return (__ret); \
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Common DBC->internal fields. Each access method adds additional fields
|
||||||
|
* to this list, but the initial fields are common.
|
||||||
|
*/
|
||||||
|
#define __DBC_INTERNAL \
|
||||||
|
DBC *opd; /* Off-page duplicate cursor. */\
|
||||||
|
\
|
||||||
|
void *page; /* Referenced page. */ \
|
||||||
|
db_pgno_t root; /* Tree root. */ \
|
||||||
|
db_pgno_t pgno; /* Referenced page number. */ \
|
||||||
|
db_indx_t indx; /* Referenced key item index. */\
|
||||||
|
\
|
||||||
|
DB_LOCK lock; /* Cursor lock. */ \
|
||||||
|
db_lockmode_t lock_mode; /* Lock mode. */
|
||||||
|
|
||||||
|
struct __dbc_internal {
|
||||||
|
__DBC_INTERNAL
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Actions that __db_master_update can take. */
|
||||||
|
typedef enum { MU_REMOVE, MU_RENAME, MU_OPEN } mu_action;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Access-method-common macro for determining whether a cursor
|
||||||
|
* has been initialized.
|
||||||
|
*/
|
||||||
|
#define IS_INITIALIZED(dbc) ((dbc)->internal->pgno != PGNO_INVALID)
|
||||||
|
|
||||||
|
/* Free the callback-allocated buffer, if necessary, hanging off of a DBT. */
|
||||||
|
#define FREE_IF_NEEDED(env, dbt) \
|
||||||
|
if (F_ISSET((dbt), DB_DBT_APPMALLOC)) { \
|
||||||
|
__os_ufree((env), (dbt)->data); \
|
||||||
|
F_CLR((dbt), DB_DBT_APPMALLOC); \
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Use memory belonging to object "owner" to return the results of
|
||||||
|
* any no-DBT-flag get ops on cursor "dbc".
|
||||||
|
*/
|
||||||
|
#define SET_RET_MEM(dbc, owner) \
|
||||||
|
do { \
|
||||||
|
(dbc)->rskey = &(owner)->my_rskey; \
|
||||||
|
(dbc)->rkey = &(owner)->my_rkey; \
|
||||||
|
(dbc)->rdata = &(owner)->my_rdata; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
/* Use the return-data memory src is currently set to use in dest as well. */
|
||||||
|
#define COPY_RET_MEM(src, dest) \
|
||||||
|
do { \
|
||||||
|
(dest)->rskey = (src)->rskey; \
|
||||||
|
(dest)->rkey = (src)->rkey; \
|
||||||
|
(dest)->rdata = (src)->rdata; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
/* Reset the returned-memory pointers to their defaults. */
|
||||||
|
#define RESET_RET_MEM(dbc) \
|
||||||
|
do { \
|
||||||
|
(dbc)->rskey = &(dbc)->my_rskey; \
|
||||||
|
(dbc)->rkey = &(dbc)->my_rkey; \
|
||||||
|
(dbc)->rdata = &(dbc)->my_rdata; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Mpool.
|
||||||
|
*******************************************************/
|
||||||
|
/*
|
||||||
|
* File types for DB access methods. Negative numbers are reserved to DB.
|
||||||
|
*/
|
||||||
|
#define DB_FTYPE_SET -1 /* Call pgin/pgout functions. */
|
||||||
|
#define DB_FTYPE_NOTSET 0 /* Don't call... */
|
||||||
|
#define DB_LSN_OFF_NOTSET -1 /* Not yet set. */
|
||||||
|
#define DB_CLEARLEN_NOTSET UINT32_MAX /* Not yet set. */
|
||||||
|
|
||||||
|
/* Structure used as the DB pgin/pgout pgcookie. */
|
||||||
|
typedef struct __dbpginfo {
|
||||||
|
size_t db_pagesize; /* Underlying page size. */
|
||||||
|
u_int32_t flags; /* Some DB_AM flags needed. */
|
||||||
|
DBTYPE type; /* DB type */
|
||||||
|
} DB_PGINFO;
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Log.
|
||||||
|
*******************************************************/
|
||||||
|
/* Initialize an LSN to 'zero'. */
|
||||||
|
#define ZERO_LSN(LSN) do { \
|
||||||
|
(LSN).file = 0; \
|
||||||
|
(LSN).offset = 0; \
|
||||||
|
} while (0)
|
||||||
|
#define IS_ZERO_LSN(LSN) ((LSN).file == 0 && (LSN).offset == 0)
|
||||||
|
|
||||||
|
#define IS_INIT_LSN(LSN) ((LSN).file == 1 && (LSN).offset == 0)
|
||||||
|
#define INIT_LSN(LSN) do { \
|
||||||
|
(LSN).file = 1; \
|
||||||
|
(LSN).offset = 0; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define MAX_LSN(LSN) do { \
|
||||||
|
(LSN).file = UINT32_MAX; \
|
||||||
|
(LSN).offset = UINT32_MAX; \
|
||||||
|
} while (0)
|
||||||
|
#define IS_MAX_LSN(LSN) \
|
||||||
|
((LSN).file == UINT32_MAX && (LSN).offset == UINT32_MAX)
|
||||||
|
|
||||||
|
/* If logging is turned off, smash the lsn. */
|
||||||
|
#define LSN_NOT_LOGGED(LSN) do { \
|
||||||
|
(LSN).file = 0; \
|
||||||
|
(LSN).offset = 1; \
|
||||||
|
} while (0)
|
||||||
|
#define IS_NOT_LOGGED_LSN(LSN) \
|
||||||
|
((LSN).file == 0 && (LSN).offset == 1)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* LOG_COMPARE -- compare two LSNs.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define LOG_COMPARE(lsn0, lsn1) \
|
||||||
|
((lsn0)->file != (lsn1)->file ? \
|
||||||
|
((lsn0)->file < (lsn1)->file ? -1 : 1) : \
|
||||||
|
((lsn0)->offset != (lsn1)->offset ? \
|
||||||
|
((lsn0)->offset < (lsn1)->offset ? -1 : 1) : 0))
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Txn.
|
||||||
|
*******************************************************/
|
||||||
|
#define DB_NONBLOCK(C) ((C)->txn != NULL && F_ISSET((C)->txn, TXN_NOWAIT))
|
||||||
|
#define NOWAIT_FLAG(txn) \
|
||||||
|
((txn) != NULL && F_ISSET((txn), TXN_NOWAIT) ? DB_LOCK_NOWAIT : 0)
|
||||||
|
#define IS_REAL_TXN(txn) \
|
||||||
|
((txn) != NULL && !F_ISSET(txn, TXN_CDSGROUP))
|
||||||
|
#define IS_SUBTRANSACTION(txn) \
|
||||||
|
((txn) != NULL && (txn)->parent != NULL)
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Crypto.
|
||||||
|
*******************************************************/
|
||||||
|
#define DB_IV_BYTES 16 /* Bytes per IV */
|
||||||
|
#define DB_MAC_KEY 20 /* Bytes per MAC checksum */
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Secondaries over RPC.
|
||||||
|
*******************************************************/
|
||||||
|
#ifdef CONFIG_TEST
|
||||||
|
/*
|
||||||
|
* These are flags passed to DB->associate calls by the Tcl API if running
|
||||||
|
* over RPC. The RPC server will mask out these flags before making the real
|
||||||
|
* DB->associate call.
|
||||||
|
*
|
||||||
|
* These flags must coexist with the valid flags to DB->associate (currently
|
||||||
|
* DB_AUTO_COMMIT and DB_CREATE). DB_AUTO_COMMIT is in the group of
|
||||||
|
* high-order shared flags (0xff000000), and DB_CREATE is in the low-order
|
||||||
|
* group (0x00000fff), so we pick a range in between.
|
||||||
|
*/
|
||||||
|
#define DB_RPC2ND_MASK 0x00f00000 /* Reserved bits. */
|
||||||
|
|
||||||
|
#define DB_RPC2ND_REVERSEDATA 0x00100000 /* callback_n(0) _s_reversedata. */
|
||||||
|
#define DB_RPC2ND_NOOP 0x00200000 /* callback_n(1) _s_noop */
|
||||||
|
#define DB_RPC2ND_CONCATKEYDATA 0x00300000 /* callback_n(2) _s_concatkeydata */
|
||||||
|
#define DB_RPC2ND_CONCATDATAKEY 0x00400000 /* callback_n(3) _s_concatdatakey */
|
||||||
|
#define DB_RPC2ND_REVERSECONCAT 0x00500000 /* callback_n(4) _s_reverseconcat */
|
||||||
|
#define DB_RPC2ND_TRUNCDATA 0x00600000 /* callback_n(5) _s_truncdata */
|
||||||
|
#define DB_RPC2ND_CONSTANT 0x00700000 /* callback_n(6) _s_constant */
|
||||||
|
#define DB_RPC2ND_GETZIP 0x00800000 /* sj_getzip */
|
||||||
|
#define DB_RPC2ND_GETNAME 0x00900000 /* sj_getname */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Remaining general DB includes.
|
||||||
|
*******************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
#include "dbinc/globals.h"
|
||||||
|
#include "dbinc/clock.h"
|
||||||
|
#include "dbinc/debug.h"
|
||||||
|
#include "dbinc/region.h"
|
||||||
|
#include "dbinc_auto/env_ext.h"
|
||||||
|
#include "dbinc/mutex.h"
|
||||||
|
#ifdef HAVE_REPLICATION_THREADS
|
||||||
|
#include "dbinc/repmgr.h"
|
||||||
|
#endif
|
||||||
|
#include "dbinc/rep.h"
|
||||||
|
#include "dbinc/os.h"
|
||||||
|
#include "dbinc_auto/clib_ext.h"
|
||||||
|
#include "dbinc_auto/common_ext.h"
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Remaining Log.
|
||||||
|
* These need to be defined after the general includes
|
||||||
|
* because they need rep.h from above.
|
||||||
|
*******************************************************/
|
||||||
|
/*
|
||||||
|
* Test if the environment is currently logging changes. If we're in recovery
|
||||||
|
* or we're a replication client, we don't need to log changes because they're
|
||||||
|
* already in the log, even though we have a fully functional log system.
|
||||||
|
*/
|
||||||
|
#define DBENV_LOGGING(env) \
|
||||||
|
(LOGGING_ON(env) && !IS_REP_CLIENT(env) && (!IS_RECOVERING(env)))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Test if we need to log a change. By default, we don't log operations without
|
||||||
|
* associated transactions, unless DIAGNOSTIC, DEBUG_ROP or DEBUG_WOP are on.
|
||||||
|
* This is because we want to get log records for read/write operations, and, if
|
||||||
|
* we are trying to debug something, more information is always better.
|
||||||
|
*
|
||||||
|
* The DBC_RECOVER flag is set when we're in abort, as well as during recovery;
|
||||||
|
* thus DBC_LOGGING may be false for a particular dbc even when DBENV_LOGGING
|
||||||
|
* is true.
|
||||||
|
*
|
||||||
|
* We explicitly use LOGGING_ON/IS_REP_CLIENT here because we don't want to pull
|
||||||
|
* in the log headers, which IS_RECOVERING (and thus DBENV_LOGGING) rely on, and
|
||||||
|
* because DBC_RECOVER should be set anytime IS_RECOVERING would be true.
|
||||||
|
*
|
||||||
|
* If we're not in recovery (master - doing an abort or a client applying
|
||||||
|
* a txn), then a client's only path through here is on an internal
|
||||||
|
* operation, and a master's only path through here is a transactional
|
||||||
|
* operation. Detect if either is not the case.
|
||||||
|
*/
|
||||||
|
#if defined(DIAGNOSTIC) || defined(DEBUG_ROP) || defined(DEBUG_WOP)
|
||||||
|
#define DBC_LOGGING(dbc) __dbc_logging(dbc)
|
||||||
|
#else
|
||||||
|
#define DBC_LOGGING(dbc) \
|
||||||
|
((dbc)->txn != NULL && LOGGING_ON((dbc)->env) && \
|
||||||
|
!F_ISSET((dbc), DBC_RECOVER) && !IS_REP_CLIENT((dbc)->env))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* !_DB_INT_H_ */
|
||||||
3
build_unix/.IGNORE_ME
Normal file
3
build_unix/.IGNORE_ME
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
Some combinations of the gzip and tar archive exploders found
|
||||||
|
on Linux systems ignore directories that don't have any files
|
||||||
|
(other than symbolic links) in them. So, here's a file.
|
||||||
4361
build_vxworks/BerkeleyDB20.wpj
Normal file
4361
build_vxworks/BerkeleyDB20.wpj
Normal file
File diff suppressed because it is too large
Load Diff
29
build_vxworks/BerkeleyDB20.wsp
Normal file
29
build_vxworks/BerkeleyDB20.wsp
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
Document file - DO NOT EDIT
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_TYPE
|
||||||
|
Workspace
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_VERSION
|
||||||
|
2.0
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> projectList
|
||||||
|
$(PRJ_DIR)/BerkeleyDB20.wpj \
|
||||||
|
$(PRJ_DIR)/db_archive/db_archive20.wpj \
|
||||||
|
$(PRJ_DIR)/db_checkpoint/db_checkpoint20.wpj \
|
||||||
|
$(PRJ_DIR)/db_deadlock/db_deadlock20.wpj \
|
||||||
|
$(PRJ_DIR)/db_dump/db_dump20.wpj \
|
||||||
|
$(PRJ_DIR)/db_load/db_load20.wpj \
|
||||||
|
$(PRJ_DIR)/db_printlog/db_printlog20.wpj \
|
||||||
|
$(PRJ_DIR)/db_recover/db_recover20.wpj \
|
||||||
|
$(PRJ_DIR)/db_stat/db_stat20.wpj \
|
||||||
|
$(PRJ_DIR)/db_upgrade/db_upgrade20.wpj \
|
||||||
|
$(PRJ_DIR)/db_verify/db_verify20.wpj \
|
||||||
|
$(PRJ_DIR)/dbdemo/dbdemo20.wpj
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> userComments
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
3639
build_vxworks/BerkeleyDB20small.wpj
Normal file
3639
build_vxworks/BerkeleyDB20small.wpj
Normal file
File diff suppressed because it is too large
Load Diff
29
build_vxworks/BerkeleyDB20small.wsp
Normal file
29
build_vxworks/BerkeleyDB20small.wsp
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
Document file - DO NOT EDIT
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_TYPE
|
||||||
|
Workspace
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_VERSION
|
||||||
|
2.0
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> projectList
|
||||||
|
$(PRJ_DIR)/BerkeleyDB20small.wpj \
|
||||||
|
$(PRJ_DIR)/db_archive/db_archive20.wpj \
|
||||||
|
$(PRJ_DIR)/db_checkpoint/db_checkpoint20.wpj \
|
||||||
|
$(PRJ_DIR)/db_deadlock/db_deadlock20.wpj \
|
||||||
|
$(PRJ_DIR)/db_dump/db_dump20.wpj \
|
||||||
|
$(PRJ_DIR)/db_load/db_load20.wpj \
|
||||||
|
$(PRJ_DIR)/db_printlog/db_printlog20.wpj \
|
||||||
|
$(PRJ_DIR)/db_recover/db_recover20.wpj \
|
||||||
|
$(PRJ_DIR)/db_stat/db_stat20.wpj \
|
||||||
|
$(PRJ_DIR)/db_upgrade/db_upgrade20.wpj \
|
||||||
|
$(PRJ_DIR)/db_verify/db_verify20.wpj \
|
||||||
|
$(PRJ_DIR)/dbdemo/dbdemo20.wpj
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> userComments
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
4420
build_vxworks/BerkeleyDB22.wpj
Normal file
4420
build_vxworks/BerkeleyDB22.wpj
Normal file
File diff suppressed because it is too large
Load Diff
29
build_vxworks/BerkeleyDB22.wsp
Normal file
29
build_vxworks/BerkeleyDB22.wsp
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
Document file - DO NOT EDIT
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_TYPE
|
||||||
|
Workspace
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_VERSION
|
||||||
|
2.2
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> projectList
|
||||||
|
$(PRJ_DIR)/BerkeleyDB22.wpj \
|
||||||
|
$(PRJ_DIR)/db_archive/db_archive22.wpj \
|
||||||
|
$(PRJ_DIR)/db_checkpoint/db_checkpoint22.wpj \
|
||||||
|
$(PRJ_DIR)/db_deadlock/db_deadlock22.wpj \
|
||||||
|
$(PRJ_DIR)/db_dump/db_dump22.wpj \
|
||||||
|
$(PRJ_DIR)/db_load/db_load22.wpj \
|
||||||
|
$(PRJ_DIR)/db_printlog/db_printlog22.wpj \
|
||||||
|
$(PRJ_DIR)/db_recover/db_recover22.wpj \
|
||||||
|
$(PRJ_DIR)/db_stat/db_stat22.wpj \
|
||||||
|
$(PRJ_DIR)/db_upgrade/db_upgrade22.wpj \
|
||||||
|
$(PRJ_DIR)/db_verify/db_verify22.wpj \
|
||||||
|
$(PRJ_DIR)/dbdemo/dbdemo22.wpj
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> userComments
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
3697
build_vxworks/BerkeleyDB22small.wpj
Normal file
3697
build_vxworks/BerkeleyDB22small.wpj
Normal file
File diff suppressed because it is too large
Load Diff
29
build_vxworks/BerkeleyDB22small.wsp
Normal file
29
build_vxworks/BerkeleyDB22small.wsp
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
Document file - DO NOT EDIT
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_TYPE
|
||||||
|
Workspace
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_VERSION
|
||||||
|
2.2
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> projectList
|
||||||
|
$(PRJ_DIR)/BerkeleyDB22small.wpj \
|
||||||
|
$(PRJ_DIR)/db_archive/db_archive22.wpj \
|
||||||
|
$(PRJ_DIR)/db_checkpoint/db_checkpoint22.wpj \
|
||||||
|
$(PRJ_DIR)/db_deadlock/db_deadlock22.wpj \
|
||||||
|
$(PRJ_DIR)/db_dump/db_dump22.wpj \
|
||||||
|
$(PRJ_DIR)/db_load/db_load22.wpj \
|
||||||
|
$(PRJ_DIR)/db_printlog/db_printlog22.wpj \
|
||||||
|
$(PRJ_DIR)/db_recover/db_recover22.wpj \
|
||||||
|
$(PRJ_DIR)/db_stat/db_stat22.wpj \
|
||||||
|
$(PRJ_DIR)/db_upgrade/db_upgrade22.wpj \
|
||||||
|
$(PRJ_DIR)/db_verify/db_verify22.wpj \
|
||||||
|
$(PRJ_DIR)/dbdemo/dbdemo22.wpj
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> userComments
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
276
build_vxworks/clib_port.h
Normal file
276
build_vxworks/clib_port.h
Normal file
@@ -0,0 +1,276 @@
|
|||||||
|
/* DO NOT EDIT: automatically built from dist/clib_port.in. */
|
||||||
|
/*
|
||||||
|
* Minimum/maximum values for various types.
|
||||||
|
*/
|
||||||
|
#ifndef UINT16_MAX /* Maximum 16-bit unsigned. */
|
||||||
|
#define UINT16_MAX 65535
|
||||||
|
#endif
|
||||||
|
#ifndef UINT32_MAX /* Maximum 32-bit unsigned. */
|
||||||
|
#define UINT32_MAX 4294967295U
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef INT_MAX
|
||||||
|
#if SIZEOF_INT == 4
|
||||||
|
#define INT_MAX 2147483647
|
||||||
|
#endif
|
||||||
|
#if SIZEOF_INT == 8
|
||||||
|
#define INT_MAX 9223372036854775807
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef INT_MIN /* minimum (signed) int value */
|
||||||
|
#define INT_MIN (-INT_MAX-1)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef UINT_MAX /* maximum (signed) int value */
|
||||||
|
#if SIZEOF_INT == 4
|
||||||
|
#define UINT_MAX 4294967295U
|
||||||
|
#endif
|
||||||
|
#if SIZEOF_INT == 8
|
||||||
|
#define UINT_MAX 18446744073709551615U
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef LONG_MAX /* maximum (signed) long value */
|
||||||
|
#if SIZEOF_LONG == 4
|
||||||
|
#define LONG_MAX 2147483647
|
||||||
|
#endif
|
||||||
|
#if SIZEOF_LONG == 8
|
||||||
|
#define LONG_MAX 9223372036854775807L
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef LONG_MIN /* minimum (signed) long value */
|
||||||
|
#define LONG_MIN (-LONG_MAX-1)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef ULONG_MAX /* maximum (unsigned) long value */
|
||||||
|
#if SIZEOF_LONG == 4
|
||||||
|
#define ULONG_MAX 4294967295U
|
||||||
|
#endif
|
||||||
|
#if SIZEOF_LONG == 8
|
||||||
|
#define ULONG_MAX 18446744073709551615UL
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(HAVE_64BIT_TYPES)
|
||||||
|
/*
|
||||||
|
* Override the system's 64-bit min/max constants. AIX's 32-bit compiler can
|
||||||
|
* handle 64-bit values, but the system's constants don't include the LL/ULL
|
||||||
|
* suffix, and so can't be compiled using the 32-bit compiler.
|
||||||
|
*/
|
||||||
|
#undef INT64_MAX
|
||||||
|
#undef INT64_MIN
|
||||||
|
#undef UINT64_MAX
|
||||||
|
|
||||||
|
#ifdef DB_WIN32
|
||||||
|
#define INT64_MAX _I64_MAX
|
||||||
|
#define INT64_MIN _I64_MIN
|
||||||
|
#define UINT64_MAX _UI64_MAX
|
||||||
|
#else
|
||||||
|
#define INT64_MAX 9223372036854775807LL
|
||||||
|
#define INT64_MIN (-INT64_MAX-1)
|
||||||
|
#define UINT64_MAX 18446744073709551615ULL
|
||||||
|
#endif /* DB_WIN32 */
|
||||||
|
|
||||||
|
#define INT64_FMT "%lld"
|
||||||
|
#define UINT64_FMT "%llu"
|
||||||
|
#endif /* HAVE_64BIT_TYPES */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Exit success/failure macros.
|
||||||
|
*/
|
||||||
|
#ifndef HAVE_EXIT_SUCCESS
|
||||||
|
#define EXIT_FAILURE 1
|
||||||
|
#define EXIT_SUCCESS 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* File modes.
|
||||||
|
*/
|
||||||
|
#ifdef DB_WIN32
|
||||||
|
#ifndef S_IREAD /* WinCE doesn't have S_IREAD. */
|
||||||
|
#define S_IREAD 0
|
||||||
|
#endif
|
||||||
|
#ifndef S_IWRITE /* WinCE doesn't have S_IWRITE. */
|
||||||
|
#define S_IWRITE 0
|
||||||
|
#endif
|
||||||
|
#ifndef S_IRUSR
|
||||||
|
#define S_IRUSR S_IREAD /* R for owner */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IWUSR
|
||||||
|
#define S_IWUSR S_IWRITE /* W for owner */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IXUSR
|
||||||
|
#define S_IXUSR 0 /* X for owner */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IRGRP
|
||||||
|
#define S_IRGRP 0 /* R for group */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IWGRP
|
||||||
|
#define S_IWGRP 0 /* W for group */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IXGRP
|
||||||
|
#define S_IXGRP 0 /* X for group */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IROTH
|
||||||
|
#define S_IROTH 0 /* R for other */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IWOTH
|
||||||
|
#define S_IWOTH 0 /* W for other */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IXOTH
|
||||||
|
#define S_IXOTH 0 /* X for other */
|
||||||
|
#endif
|
||||||
|
#else /* !DB_WIN32 */
|
||||||
|
#ifndef S_IRUSR
|
||||||
|
#define S_IRUSR 0000400 /* R for owner */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IWUSR
|
||||||
|
#define S_IWUSR 0000200 /* W for owner */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IXUSR
|
||||||
|
#define S_IXUSR 0000100 /* X for owner */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IRGRP
|
||||||
|
#define S_IRGRP 0000040 /* R for group */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IWGRP
|
||||||
|
#define S_IWGRP 0000020 /* W for group */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IXGRP
|
||||||
|
#define S_IXGRP 0000010 /* X for group */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IROTH
|
||||||
|
#define S_IROTH 0000004 /* R for other */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IWOTH
|
||||||
|
#define S_IWOTH 0000002 /* W for other */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IXOTH
|
||||||
|
#define S_IXOTH 0000001 /* X for other */
|
||||||
|
#endif
|
||||||
|
#endif /* !DB_WIN32 */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Don't step on the namespace. Other libraries may have their own
|
||||||
|
* implementations of these functions, we don't want to use their
|
||||||
|
* implementations or force them to use ours based on the load order.
|
||||||
|
*/
|
||||||
|
#ifndef HAVE_ATOI
|
||||||
|
#define atoi __db_Catoi
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_ATOL
|
||||||
|
#define atol __db_Catol
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_FCLOSE
|
||||||
|
#define fclose __db_Cfclose
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_FGETC
|
||||||
|
#define fgetc __db_Cfgetc
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_FGETS
|
||||||
|
#define fgets __db_Cfgets
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_FOPEN
|
||||||
|
#define fopen __db_Cfopen
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_FWRITE
|
||||||
|
#define fwrite __db_Cfwrite
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_GETADDRINFO
|
||||||
|
#define freeaddrinfo(a) __db_Cfreeaddrinfo(a)
|
||||||
|
#define getaddrinfo(a, b, c, d) __db_Cgetaddrinfo(a, b, c, d)
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_GETCWD
|
||||||
|
#define getcwd __db_Cgetcwd
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_GETOPT
|
||||||
|
#define getopt __db_Cgetopt
|
||||||
|
#define optarg __db_Coptarg
|
||||||
|
#define opterr __db_Copterr
|
||||||
|
#define optind __db_Coptind
|
||||||
|
#define optopt __db_Coptopt
|
||||||
|
#define optreset __db_Coptreset
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_ISALPHA
|
||||||
|
#define isalpha __db_Cisalpha
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_ISDIGIT
|
||||||
|
#define isdigit __db_Cisdigit
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_ISPRINT
|
||||||
|
#define isprint __db_Cisprint
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_ISSPACE
|
||||||
|
#define isspace __db_Cisspace
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_LOCALTIME
|
||||||
|
#define localtime __db_Clocaltime
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_MEMCMP
|
||||||
|
#define memcmp __db_Cmemcmp
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_MEMCPY
|
||||||
|
#define memcpy __db_Cmemcpy
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_MEMMOVE
|
||||||
|
#define memmove __db_Cmemmove
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_PRINTF
|
||||||
|
#define printf __db_Cprintf
|
||||||
|
#define fprintf __db_Cfprintf
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_QSORT
|
||||||
|
#define qsort __db_Cqsort
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_RAISE
|
||||||
|
#define raise __db_Craise
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_RAND
|
||||||
|
#define rand __db_Crand
|
||||||
|
#define srand __db_Csrand
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_SNPRINTF
|
||||||
|
#define snprintf __db_Csnprintf
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_STRCASECMP
|
||||||
|
#define strcasecmp __db_Cstrcasecmp
|
||||||
|
#define strncasecmp __db_Cstrncasecmp
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_STRCAT
|
||||||
|
#define strcat __db_Cstrcat
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_STRCHR
|
||||||
|
#define strchr __db_Cstrchr
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_STRDUP
|
||||||
|
#define strdup __db_Cstrdup
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_STRERROR
|
||||||
|
#define strerror __db_Cstrerror
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_STRNCAT
|
||||||
|
#define strncat __db_Cstrncat
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_STRNCMP
|
||||||
|
#define strncmp __db_Cstrncmp
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_STRRCHR
|
||||||
|
#define strrchr __db_Cstrrchr
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_STRSEP
|
||||||
|
#define strsep __db_Cstrsep
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_STRTOL
|
||||||
|
#define strtol __db_Cstrtol
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_STRTOUL
|
||||||
|
#define strtoul __db_Cstrtoul
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_TIME
|
||||||
|
#define time __db_Ctime
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_VSNPRINTF
|
||||||
|
#define vsnprintf __db_Cvsnprintf
|
||||||
|
#endif
|
||||||
2483
build_vxworks/db.h
Normal file
2483
build_vxworks/db.h
Normal file
File diff suppressed because it is too large
Load Diff
199
build_vxworks/db_archive/db_archive.c
Normal file
199
build_vxworks/db_archive/db_archive.c
Normal file
@@ -0,0 +1,199 @@
|
|||||||
|
/*-
|
||||||
|
* See the file LICENSE for redistribution information.
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996,2008 Oracle. All rights reserved.
|
||||||
|
*
|
||||||
|
* $Id: db_archive.c 63573 2008-05-23 21:43:21Z trent.nelson $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "db_config.h"
|
||||||
|
|
||||||
|
#include "db_int.h"
|
||||||
|
|
||||||
|
#ifndef lint
|
||||||
|
static const char copyright[] =
|
||||||
|
"Copyright (c) 1996,2008 Oracle. All rights reserved.\n";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int db_archive_main __P((int, char *[]));
|
||||||
|
int db_archive_usage __P((void));
|
||||||
|
int db_archive_version_check __P((void));
|
||||||
|
|
||||||
|
const char *progname;
|
||||||
|
|
||||||
|
int
|
||||||
|
db_archive(args)
|
||||||
|
char *args;
|
||||||
|
{
|
||||||
|
int argc;
|
||||||
|
char **argv;
|
||||||
|
|
||||||
|
__db_util_arg("db_archive", args, &argc, &argv);
|
||||||
|
return (db_archive_main(argc, argv) ? EXIT_FAILURE : EXIT_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#define ERROR_RETURN ERROR
|
||||||
|
|
||||||
|
int
|
||||||
|
db_archive_main(argc, argv)
|
||||||
|
int argc;
|
||||||
|
char *argv[];
|
||||||
|
{
|
||||||
|
extern char *optarg;
|
||||||
|
extern int optind, __db_getopt_reset;
|
||||||
|
DB_ENV *dbenv;
|
||||||
|
u_int32_t flags;
|
||||||
|
int ch, exitval, ret, verbose;
|
||||||
|
char **file, *home, **list, *passwd;
|
||||||
|
|
||||||
|
if ((progname = __db_rpath(argv[0])) == NULL)
|
||||||
|
progname = argv[0];
|
||||||
|
else
|
||||||
|
++progname;
|
||||||
|
|
||||||
|
if ((ret = db_archive_version_check()) != 0)
|
||||||
|
return (ret);
|
||||||
|
|
||||||
|
dbenv = NULL;
|
||||||
|
flags = 0;
|
||||||
|
exitval = verbose = 0;
|
||||||
|
home = passwd = NULL;
|
||||||
|
file = list = NULL;
|
||||||
|
__db_getopt_reset = 1;
|
||||||
|
while ((ch = getopt(argc, argv, "adh:lP:sVv")) != EOF)
|
||||||
|
switch (ch) {
|
||||||
|
case 'a':
|
||||||
|
LF_SET(DB_ARCH_ABS);
|
||||||
|
break;
|
||||||
|
case 'd':
|
||||||
|
LF_SET(DB_ARCH_REMOVE);
|
||||||
|
break;
|
||||||
|
case 'h':
|
||||||
|
home = optarg;
|
||||||
|
break;
|
||||||
|
case 'l':
|
||||||
|
LF_SET(DB_ARCH_LOG);
|
||||||
|
break;
|
||||||
|
case 'P':
|
||||||
|
passwd = strdup(optarg);
|
||||||
|
memset(optarg, 0, strlen(optarg));
|
||||||
|
if (passwd == NULL) {
|
||||||
|
fprintf(stderr, "%s: strdup: %s\n",
|
||||||
|
progname, strerror(errno));
|
||||||
|
return (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 's':
|
||||||
|
LF_SET(DB_ARCH_DATA);
|
||||||
|
break;
|
||||||
|
case 'V':
|
||||||
|
printf("%s\n", db_version(NULL, NULL, NULL));
|
||||||
|
return (EXIT_SUCCESS);
|
||||||
|
case 'v':
|
||||||
|
/*
|
||||||
|
* !!!
|
||||||
|
* The verbose flag no longer actually does anything,
|
||||||
|
* but it's left rather than adding it back at some
|
||||||
|
* future date.
|
||||||
|
*/
|
||||||
|
verbose = 1;
|
||||||
|
break;
|
||||||
|
case '?':
|
||||||
|
default:
|
||||||
|
return (db_archive_usage());
|
||||||
|
}
|
||||||
|
argc -= optind;
|
||||||
|
argv += optind;
|
||||||
|
|
||||||
|
if (argc != 0)
|
||||||
|
return (db_archive_usage());
|
||||||
|
|
||||||
|
/* Handle possible interruptions. */
|
||||||
|
__db_util_siginit();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Create an environment object and initialize it for error
|
||||||
|
* reporting.
|
||||||
|
*/
|
||||||
|
if ((ret = db_env_create(&dbenv, 0)) != 0) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: db_env_create: %s\n", progname, db_strerror(ret));
|
||||||
|
goto shutdown;
|
||||||
|
}
|
||||||
|
|
||||||
|
dbenv->set_errfile(dbenv, stderr);
|
||||||
|
dbenv->set_errpfx(dbenv, progname);
|
||||||
|
|
||||||
|
if (passwd != NULL && (ret = dbenv->set_encrypt(dbenv,
|
||||||
|
passwd, DB_ENCRYPT_AES)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "set_passwd");
|
||||||
|
goto shutdown;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* If attaching to a pre-existing environment fails, create a
|
||||||
|
* private one and try again.
|
||||||
|
*/
|
||||||
|
if ((ret = dbenv->open(dbenv, home, DB_USE_ENVIRON, 0)) != 0 &&
|
||||||
|
(ret == DB_VERSION_MISMATCH ||
|
||||||
|
(ret = dbenv->open(dbenv, home, DB_CREATE |
|
||||||
|
DB_INIT_LOG | DB_PRIVATE | DB_USE_ENVIRON, 0)) != 0)) {
|
||||||
|
dbenv->err(dbenv, ret, "DB_ENV->open");
|
||||||
|
goto shutdown;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Get the list of names. */
|
||||||
|
if ((ret = dbenv->log_archive(dbenv, &list, flags)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "DB_ENV->log_archive");
|
||||||
|
goto shutdown;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Print the list of names. */
|
||||||
|
if (list != NULL) {
|
||||||
|
for (file = list; *file != NULL; ++file)
|
||||||
|
printf("%s\n", *file);
|
||||||
|
free(list);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (0) {
|
||||||
|
shutdown: exitval = 1;
|
||||||
|
}
|
||||||
|
if (dbenv != NULL && (ret = dbenv->close(dbenv, 0)) != 0) {
|
||||||
|
exitval = 1;
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: dbenv->close: %s\n", progname, db_strerror(ret));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (passwd != NULL)
|
||||||
|
free(passwd);
|
||||||
|
|
||||||
|
/* Resend any caught signal. */
|
||||||
|
__db_util_sigresend();
|
||||||
|
|
||||||
|
return (exitval == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
db_archive_usage()
|
||||||
|
{
|
||||||
|
(void)fprintf(stderr,
|
||||||
|
"usage: %s [-adlsVv] [-h home] [-P password]\n", progname);
|
||||||
|
return (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
db_archive_version_check()
|
||||||
|
{
|
||||||
|
int v_major, v_minor, v_patch;
|
||||||
|
|
||||||
|
/* Make sure we're loaded with the right version of the DB library. */
|
||||||
|
(void)db_version(&v_major, &v_minor, &v_patch);
|
||||||
|
if (v_major != DB_VERSION_MAJOR || v_minor != DB_VERSION_MINOR) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: version %d.%d doesn't match library version %d.%d\n",
|
||||||
|
progname, DB_VERSION_MAJOR, DB_VERSION_MINOR,
|
||||||
|
v_major, v_minor);
|
||||||
|
return (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
158
build_vxworks/db_archive/db_archive20.wpj
Normal file
158
build_vxworks/db_archive/db_archive20.wpj
Normal file
@@ -0,0 +1,158 @@
|
|||||||
|
Document file - DO NOT EDIT
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_BUILDRULE
|
||||||
|
db_archive20.out
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_AR
|
||||||
|
ar386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_ARCHIVE
|
||||||
|
$(PRJ_DIR)/PENTIUMgnu/db_archive20.a
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_AS
|
||||||
|
cc386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_CC
|
||||||
|
cc386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_CFLAGS
|
||||||
|
-g \
|
||||||
|
-mpentium \
|
||||||
|
-ansi \
|
||||||
|
-nostdinc \
|
||||||
|
-DRW_MULTI_THREAD \
|
||||||
|
-D_REENTRANT \
|
||||||
|
-fvolatile \
|
||||||
|
-nostdlib \
|
||||||
|
-fno-builtin \
|
||||||
|
-fno-defer-pop \
|
||||||
|
-I$(PRJ_DIR)/.. \
|
||||||
|
-I$(PRJ_DIR)/../.. \
|
||||||
|
-I$(WIND_BASE)/target/h \
|
||||||
|
-DCPU=PENTIUM
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_CFLAGS_AS
|
||||||
|
-g \
|
||||||
|
-mpentium \
|
||||||
|
-ansi \
|
||||||
|
-nostdinc \
|
||||||
|
-fvolatile \
|
||||||
|
-nostdlib \
|
||||||
|
-fno-builtin \
|
||||||
|
-fno-defer-pop \
|
||||||
|
-P \
|
||||||
|
-x \
|
||||||
|
assembler-with-cpp \
|
||||||
|
-I$(WIND_BASE)/target/h \
|
||||||
|
-DCPU=PENTIUM
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_CPP
|
||||||
|
cc386 -E -P -xc
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_LD
|
||||||
|
ld386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_LDDEPS
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_LDFLAGS
|
||||||
|
-X -N
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_LD_PARTIAL_FLAGS
|
||||||
|
-X -r
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_NM
|
||||||
|
nm386 -g
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_OPTION_DEFINE_MACRO
|
||||||
|
-D
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_OPTION_INCLUDE_DIR
|
||||||
|
-I
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_POST_BUILD_RULE
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_PRJ_LIBS
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_SIZE
|
||||||
|
size386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_RO_DEPEND_PATH
|
||||||
|
{$(WIND_BASE)/target/h/} \
|
||||||
|
{$(WIND_BASE)/target/src/} \
|
||||||
|
{$(WIND_BASE)/target/config/}
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_TC
|
||||||
|
::tc_PENTIUMgnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_archive
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_db_archive20.out
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_objects
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD__CURRENT
|
||||||
|
PENTIUMgnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD__LIST
|
||||||
|
PENTIUMgnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_TYPE
|
||||||
|
::prj_vxApp
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_VERSION
|
||||||
|
2.0
|
||||||
|
<END>
|
||||||
|
<BEGIN> FILE_db_archive.c_dependDone
|
||||||
|
FALSE
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_archive.c_dependencies
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_archive.c_objects
|
||||||
|
db_archive.o
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_archive.c_tool
|
||||||
|
C/C++ compiler
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> PROJECT_FILES
|
||||||
|
$(PRJ_DIR)/db_archive.c
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> userComments
|
||||||
|
db_archive
|
||||||
|
<END>
|
||||||
192
build_vxworks/db_archive/db_archive22.wpj
Normal file
192
build_vxworks/db_archive/db_archive22.wpj
Normal file
@@ -0,0 +1,192 @@
|
|||||||
|
Document file - DO NOT EDIT
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_BUILDRULE
|
||||||
|
db_archive22.out
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_AR
|
||||||
|
arpentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_ARCHIVE
|
||||||
|
$(PRJ_DIR)/PENTIUM2gnu/db_archive22.a
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_AS
|
||||||
|
ccpentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CC
|
||||||
|
ccpentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CC_ARCH_SPEC
|
||||||
|
-mcpu=pentiumpro -march=pentiumpro
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CFLAGS
|
||||||
|
-g \
|
||||||
|
-mcpu=pentiumpro \
|
||||||
|
-march=pentiumpro \
|
||||||
|
-ansi \
|
||||||
|
-nostdlib \
|
||||||
|
-DRW_MULTI_THREAD \
|
||||||
|
-D_REENTRANT \
|
||||||
|
-fvolatile \
|
||||||
|
-fno-builtin \
|
||||||
|
-fno-defer-pop \
|
||||||
|
-I$(PRJ_DIR)/.. \
|
||||||
|
-I$(PRJ_DIR)/../.. \
|
||||||
|
-I$(WIND_BASE)/target/h \
|
||||||
|
-DCPU=PENTIUM2 \
|
||||||
|
-DTOOL_FAMILY=gnu \
|
||||||
|
-DTOOL=gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CFLAGS_AS
|
||||||
|
-g \
|
||||||
|
-mcpu=pentiumpro \
|
||||||
|
-march=pentiumpro \
|
||||||
|
-ansi \
|
||||||
|
-nostdlib \
|
||||||
|
-fno-builtin \
|
||||||
|
-fno-defer-pop \
|
||||||
|
-P \
|
||||||
|
-xassembler-with-cpp \
|
||||||
|
-I$(WIND_BASE)/target/h \
|
||||||
|
-DCPU=PENTIUM2 \
|
||||||
|
-DTOOL_FAMILY=gnu \
|
||||||
|
-DTOOL=gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CPP
|
||||||
|
ccpentium -E -P
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_HEX_FLAGS
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD
|
||||||
|
ldpentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_LDFLAGS
|
||||||
|
-X -N
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD_PARTIAL
|
||||||
|
ccpentium -r -nostdlib -Wl,-X
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD_PARTIAL_FLAGS
|
||||||
|
-X -r
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_NM
|
||||||
|
nmpentium -g
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_DEFINE_MACRO
|
||||||
|
-D
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_DEPEND
|
||||||
|
-M -w
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_GENERATE_DEPENDENCY_FILE
|
||||||
|
-MD
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_INCLUDE_DIR
|
||||||
|
-I
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_LANG_C
|
||||||
|
-xc
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_UNDEFINE_MACRO
|
||||||
|
-U
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_POST_BUILD_RULE
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_PRJ_LIBS
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_SIZE
|
||||||
|
sizepentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_TOOL_FAMILY
|
||||||
|
gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_RO_DEPEND_PATH
|
||||||
|
{$(WIND_BASE)/target/h/} \
|
||||||
|
{$(WIND_BASE)/target/src/} \
|
||||||
|
{$(WIND_BASE)/target/config/}
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_TC
|
||||||
|
::tc_PENTIUM2gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_archive
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_db_archive22.out
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_db_archive22.pl
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_objects
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD__CURRENT
|
||||||
|
PENTIUM2gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD__LIST
|
||||||
|
PENTIUM2gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_TYPE
|
||||||
|
::prj_vxApp
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_VERSION
|
||||||
|
2.2
|
||||||
|
<END>
|
||||||
|
<BEGIN> FILE_db_archive.c_dependDone
|
||||||
|
FALSE
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_archive.c_dependencies
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_archive.c_objects
|
||||||
|
db_archive.o
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_archive.c_tool
|
||||||
|
C/C++ compiler
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> PROJECT_FILES
|
||||||
|
$(PRJ_DIR)/db_archive.c
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> userComments
|
||||||
|
db_archive
|
||||||
|
<END>
|
||||||
245
build_vxworks/db_checkpoint/db_checkpoint.c
Normal file
245
build_vxworks/db_checkpoint/db_checkpoint.c
Normal file
@@ -0,0 +1,245 @@
|
|||||||
|
/*-
|
||||||
|
* See the file LICENSE for redistribution information.
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996,2008 Oracle. All rights reserved.
|
||||||
|
*
|
||||||
|
* $Id: db_checkpoint.c 63573 2008-05-23 21:43:21Z trent.nelson $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "db_config.h"
|
||||||
|
|
||||||
|
#include "db_int.h"
|
||||||
|
|
||||||
|
#ifndef lint
|
||||||
|
static const char copyright[] =
|
||||||
|
"Copyright (c) 1996,2008 Oracle. All rights reserved.\n";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int db_checkpoint_main __P((int, char *[]));
|
||||||
|
int db_checkpoint_usage __P((void));
|
||||||
|
int db_checkpoint_version_check __P((void));
|
||||||
|
|
||||||
|
const char *progname;
|
||||||
|
|
||||||
|
int
|
||||||
|
db_checkpoint(args)
|
||||||
|
char *args;
|
||||||
|
{
|
||||||
|
int argc;
|
||||||
|
char **argv;
|
||||||
|
|
||||||
|
__db_util_arg("db_checkpoint", args, &argc, &argv);
|
||||||
|
return (db_checkpoint_main(argc, argv) ? EXIT_FAILURE : EXIT_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#define ERROR_RETURN ERROR
|
||||||
|
|
||||||
|
int
|
||||||
|
db_checkpoint_main(argc, argv)
|
||||||
|
int argc;
|
||||||
|
char *argv[];
|
||||||
|
{
|
||||||
|
extern char *optarg;
|
||||||
|
extern int optind, __db_getopt_reset;
|
||||||
|
DB_ENV *dbenv;
|
||||||
|
time_t now;
|
||||||
|
long argval;
|
||||||
|
u_int32_t flags, kbytes, minutes, seconds;
|
||||||
|
int ch, exitval, once, ret, verbose;
|
||||||
|
char *home, *logfile, *passwd, time_buf[CTIME_BUFLEN];
|
||||||
|
|
||||||
|
if ((progname = __db_rpath(argv[0])) == NULL)
|
||||||
|
progname = argv[0];
|
||||||
|
else
|
||||||
|
++progname;
|
||||||
|
|
||||||
|
if ((ret = db_checkpoint_version_check()) != 0)
|
||||||
|
return (ret);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* !!!
|
||||||
|
* Don't allow a fully unsigned 32-bit number, some compilers get
|
||||||
|
* upset and require it to be specified in hexadecimal and so on.
|
||||||
|
*/
|
||||||
|
#define MAX_UINT32_T 2147483647
|
||||||
|
|
||||||
|
dbenv = NULL;
|
||||||
|
kbytes = minutes = 0;
|
||||||
|
exitval = once = verbose = 0;
|
||||||
|
flags = 0;
|
||||||
|
home = logfile = passwd = NULL;
|
||||||
|
__db_getopt_reset = 1;
|
||||||
|
while ((ch = getopt(argc, argv, "1h:k:L:P:p:Vv")) != EOF)
|
||||||
|
switch (ch) {
|
||||||
|
case '1':
|
||||||
|
once = 1;
|
||||||
|
flags = DB_FORCE;
|
||||||
|
break;
|
||||||
|
case 'h':
|
||||||
|
home = optarg;
|
||||||
|
break;
|
||||||
|
case 'k':
|
||||||
|
if (__db_getlong(NULL, progname,
|
||||||
|
optarg, 1, (long)MAX_UINT32_T, &argval))
|
||||||
|
return (EXIT_FAILURE);
|
||||||
|
kbytes = (u_int32_t)argval;
|
||||||
|
break;
|
||||||
|
case 'L':
|
||||||
|
logfile = optarg;
|
||||||
|
break;
|
||||||
|
case 'P':
|
||||||
|
passwd = strdup(optarg);
|
||||||
|
memset(optarg, 0, strlen(optarg));
|
||||||
|
if (passwd == NULL) {
|
||||||
|
fprintf(stderr, "%s: strdup: %s\n",
|
||||||
|
progname, strerror(errno));
|
||||||
|
return (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'p':
|
||||||
|
if (__db_getlong(NULL, progname,
|
||||||
|
optarg, 1, (long)MAX_UINT32_T, &argval))
|
||||||
|
return (EXIT_FAILURE);
|
||||||
|
minutes = (u_int32_t)argval;
|
||||||
|
break;
|
||||||
|
case 'V':
|
||||||
|
printf("%s\n", db_version(NULL, NULL, NULL));
|
||||||
|
return (EXIT_SUCCESS);
|
||||||
|
case 'v':
|
||||||
|
verbose = 1;
|
||||||
|
break;
|
||||||
|
case '?':
|
||||||
|
default:
|
||||||
|
return (db_checkpoint_usage());
|
||||||
|
}
|
||||||
|
argc -= optind;
|
||||||
|
argv += optind;
|
||||||
|
|
||||||
|
if (argc != 0)
|
||||||
|
return (db_checkpoint_usage());
|
||||||
|
|
||||||
|
if (once == 0 && kbytes == 0 && minutes == 0) {
|
||||||
|
(void)fprintf(stderr,
|
||||||
|
"%s: at least one of -1, -k and -p must be specified\n",
|
||||||
|
progname);
|
||||||
|
return (db_checkpoint_usage());
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Handle possible interruptions. */
|
||||||
|
__db_util_siginit();
|
||||||
|
|
||||||
|
/* Log our process ID. */
|
||||||
|
if (logfile != NULL && __db_util_logset(progname, logfile))
|
||||||
|
goto shutdown;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Create an environment object and initialize it for error
|
||||||
|
* reporting.
|
||||||
|
*/
|
||||||
|
if ((ret = db_env_create(&dbenv, 0)) != 0) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: db_env_create: %s\n", progname, db_strerror(ret));
|
||||||
|
goto shutdown;
|
||||||
|
}
|
||||||
|
|
||||||
|
dbenv->set_errfile(dbenv, stderr);
|
||||||
|
dbenv->set_errpfx(dbenv, progname);
|
||||||
|
|
||||||
|
if (passwd != NULL && (ret = dbenv->set_encrypt(dbenv,
|
||||||
|
passwd, DB_ENCRYPT_AES)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "set_passwd");
|
||||||
|
goto shutdown;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If attaching to a pre-existing environment fails, create a
|
||||||
|
* private one and try again.
|
||||||
|
*/
|
||||||
|
if ((ret = dbenv->open(dbenv, home, DB_USE_ENVIRON, 0)) != 0 &&
|
||||||
|
(!once || ret == DB_VERSION_MISMATCH ||
|
||||||
|
(ret = dbenv->open(dbenv, home,
|
||||||
|
DB_CREATE | DB_INIT_TXN | DB_PRIVATE | DB_USE_ENVIRON, 0)) != 0)) {
|
||||||
|
dbenv->err(dbenv, ret, "DB_ENV->open");
|
||||||
|
goto shutdown;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If we have only a time delay, then we'll sleep the right amount
|
||||||
|
* to wake up when a checkpoint is necessary. If we have a "kbytes"
|
||||||
|
* field set, then we'll check every 30 seconds.
|
||||||
|
*/
|
||||||
|
seconds = kbytes != 0 ? 30 : minutes * 60;
|
||||||
|
while (!__db_util_interrupted()) {
|
||||||
|
if (verbose) {
|
||||||
|
(void)time(&now);
|
||||||
|
dbenv->errx(dbenv,
|
||||||
|
"checkpoint begin: %s", __os_ctime(&now, time_buf));
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((ret = dbenv->txn_checkpoint(dbenv,
|
||||||
|
kbytes, minutes, flags)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "txn_checkpoint");
|
||||||
|
goto shutdown;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (verbose) {
|
||||||
|
(void)time(&now);
|
||||||
|
dbenv->errx(dbenv,
|
||||||
|
"checkpoint complete: %s", __os_ctime(&now, time_buf));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (once)
|
||||||
|
break;
|
||||||
|
|
||||||
|
__os_yield(dbenv->env, seconds, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (0) {
|
||||||
|
shutdown: exitval = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Clean up the logfile. */
|
||||||
|
if (logfile != NULL)
|
||||||
|
(void)remove(logfile);
|
||||||
|
|
||||||
|
/* Clean up the environment. */
|
||||||
|
if (dbenv != NULL && (ret = dbenv->close(dbenv, 0)) != 0) {
|
||||||
|
exitval = 1;
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: dbenv->close: %s\n", progname, db_strerror(ret));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (passwd != NULL)
|
||||||
|
free(passwd);
|
||||||
|
|
||||||
|
/* Resend any caught signal. */
|
||||||
|
__db_util_sigresend();
|
||||||
|
|
||||||
|
return (exitval == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
db_checkpoint_usage()
|
||||||
|
{
|
||||||
|
(void)fprintf(stderr, "usage: %s [-1Vv]\n\t%s\n", progname,
|
||||||
|
"[-h home] [-k kbytes] [-L file] [-P password] [-p min]");
|
||||||
|
return (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
db_checkpoint_version_check()
|
||||||
|
{
|
||||||
|
int v_major, v_minor, v_patch;
|
||||||
|
|
||||||
|
/* Make sure we're loaded with the right version of the DB library. */
|
||||||
|
(void)db_version(&v_major, &v_minor, &v_patch);
|
||||||
|
if (v_major != DB_VERSION_MAJOR || v_minor != DB_VERSION_MINOR) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: version %d.%d doesn't match library version %d.%d\n",
|
||||||
|
progname, DB_VERSION_MAJOR, DB_VERSION_MINOR,
|
||||||
|
v_major, v_minor);
|
||||||
|
return (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
158
build_vxworks/db_checkpoint/db_checkpoint20.wpj
Normal file
158
build_vxworks/db_checkpoint/db_checkpoint20.wpj
Normal file
@@ -0,0 +1,158 @@
|
|||||||
|
Document file - DO NOT EDIT
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_BUILDRULE
|
||||||
|
db_checkpoint20.out
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_AR
|
||||||
|
ar386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_ARCHIVE
|
||||||
|
$(PRJ_DIR)/PENTIUMgnu/db_checkpoint20.a
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_AS
|
||||||
|
cc386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_CC
|
||||||
|
cc386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_CFLAGS
|
||||||
|
-g \
|
||||||
|
-mpentium \
|
||||||
|
-ansi \
|
||||||
|
-nostdinc \
|
||||||
|
-DRW_MULTI_THREAD \
|
||||||
|
-D_REENTRANT \
|
||||||
|
-fvolatile \
|
||||||
|
-nostdlib \
|
||||||
|
-fno-builtin \
|
||||||
|
-fno-defer-pop \
|
||||||
|
-I$(PRJ_DIR)/.. \
|
||||||
|
-I$(PRJ_DIR)/../.. \
|
||||||
|
-I$(WIND_BASE)/target/h \
|
||||||
|
-DCPU=PENTIUM
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_CFLAGS_AS
|
||||||
|
-g \
|
||||||
|
-mpentium \
|
||||||
|
-ansi \
|
||||||
|
-nostdinc \
|
||||||
|
-fvolatile \
|
||||||
|
-nostdlib \
|
||||||
|
-fno-builtin \
|
||||||
|
-fno-defer-pop \
|
||||||
|
-P \
|
||||||
|
-x \
|
||||||
|
assembler-with-cpp \
|
||||||
|
-I$(WIND_BASE)/target/h \
|
||||||
|
-DCPU=PENTIUM
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_CPP
|
||||||
|
cc386 -E -P -xc
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_LD
|
||||||
|
ld386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_LDDEPS
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_LDFLAGS
|
||||||
|
-X -N
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_LD_PARTIAL_FLAGS
|
||||||
|
-X -r
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_NM
|
||||||
|
nm386 -g
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_OPTION_DEFINE_MACRO
|
||||||
|
-D
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_OPTION_INCLUDE_DIR
|
||||||
|
-I
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_POST_BUILD_RULE
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_PRJ_LIBS
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_SIZE
|
||||||
|
size386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_RO_DEPEND_PATH
|
||||||
|
{$(WIND_BASE)/target/h/} \
|
||||||
|
{$(WIND_BASE)/target/src/} \
|
||||||
|
{$(WIND_BASE)/target/config/}
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_TC
|
||||||
|
::tc_PENTIUMgnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_archive
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_db_checkpoint20.out
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_objects
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD__CURRENT
|
||||||
|
PENTIUMgnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD__LIST
|
||||||
|
PENTIUMgnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_TYPE
|
||||||
|
::prj_vxApp
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_VERSION
|
||||||
|
2.0
|
||||||
|
<END>
|
||||||
|
<BEGIN> FILE_db_checkpoint.c_dependDone
|
||||||
|
FALSE
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_checkpoint.c_dependencies
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_checkpoint.c_objects
|
||||||
|
db_checkpoint.o
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_checkpoint.c_tool
|
||||||
|
C/C++ compiler
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> PROJECT_FILES
|
||||||
|
$(PRJ_DIR)/db_checkpoint.c
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> userComments
|
||||||
|
db_checkpoint
|
||||||
|
<END>
|
||||||
192
build_vxworks/db_checkpoint/db_checkpoint22.wpj
Normal file
192
build_vxworks/db_checkpoint/db_checkpoint22.wpj
Normal file
@@ -0,0 +1,192 @@
|
|||||||
|
Document file - DO NOT EDIT
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_BUILDRULE
|
||||||
|
db_checkpoint22.out
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_AR
|
||||||
|
arpentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_ARCHIVE
|
||||||
|
$(PRJ_DIR)/PENTIUM2gnu/db_checkpoint22.a
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_AS
|
||||||
|
ccpentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CC
|
||||||
|
ccpentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CC_ARCH_SPEC
|
||||||
|
-mcpu=pentiumpro -march=pentiumpro
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CFLAGS
|
||||||
|
-g \
|
||||||
|
-mcpu=pentiumpro \
|
||||||
|
-march=pentiumpro \
|
||||||
|
-ansi \
|
||||||
|
-nostdlib \
|
||||||
|
-DRW_MULTI_THREAD \
|
||||||
|
-D_REENTRANT \
|
||||||
|
-fvolatile \
|
||||||
|
-fno-builtin \
|
||||||
|
-fno-defer-pop \
|
||||||
|
-I$(PRJ_DIR)/.. \
|
||||||
|
-I$(PRJ_DIR)/../.. \
|
||||||
|
-I$(WIND_BASE)/target/h \
|
||||||
|
-DCPU=PENTIUM2 \
|
||||||
|
-DTOOL_FAMILY=gnu \
|
||||||
|
-DTOOL=gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CFLAGS_AS
|
||||||
|
-g \
|
||||||
|
-mcpu=pentiumpro \
|
||||||
|
-march=pentiumpro \
|
||||||
|
-ansi \
|
||||||
|
-nostdlib \
|
||||||
|
-fno-builtin \
|
||||||
|
-fno-defer-pop \
|
||||||
|
-P \
|
||||||
|
-xassembler-with-cpp \
|
||||||
|
-I$(WIND_BASE)/target/h \
|
||||||
|
-DCPU=PENTIUM2 \
|
||||||
|
-DTOOL_FAMILY=gnu \
|
||||||
|
-DTOOL=gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CPP
|
||||||
|
ccpentium -E -P
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_HEX_FLAGS
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD
|
||||||
|
ldpentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_LDFLAGS
|
||||||
|
-X -N
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD_PARTIAL
|
||||||
|
ccpentium -r -nostdlib -Wl,-X
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD_PARTIAL_FLAGS
|
||||||
|
-X -r
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_NM
|
||||||
|
nmpentium -g
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_DEFINE_MACRO
|
||||||
|
-D
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_DEPEND
|
||||||
|
-M -w
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_GENERATE_DEPENDENCY_FILE
|
||||||
|
-MD
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_INCLUDE_DIR
|
||||||
|
-I
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_LANG_C
|
||||||
|
-xc
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_UNDEFINE_MACRO
|
||||||
|
-U
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_POST_BUILD_RULE
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_PRJ_LIBS
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_SIZE
|
||||||
|
sizepentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_TOOL_FAMILY
|
||||||
|
gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_RO_DEPEND_PATH
|
||||||
|
{$(WIND_BASE)/target/h/} \
|
||||||
|
{$(WIND_BASE)/target/src/} \
|
||||||
|
{$(WIND_BASE)/target/config/}
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_TC
|
||||||
|
::tc_PENTIUM2gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_archive
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_db_checkpoint22.out
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_db_checkpoint22.pl
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_objects
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD__CURRENT
|
||||||
|
PENTIUM2gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD__LIST
|
||||||
|
PENTIUM2gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_TYPE
|
||||||
|
::prj_vxApp
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_VERSION
|
||||||
|
2.2
|
||||||
|
<END>
|
||||||
|
<BEGIN> FILE_db_checkpoint.c_dependDone
|
||||||
|
FALSE
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_checkpoint.c_dependencies
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_checkpoint.c_objects
|
||||||
|
db_checkpoint.o
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_checkpoint.c_tool
|
||||||
|
C/C++ compiler
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> PROJECT_FILES
|
||||||
|
$(PRJ_DIR)/db_checkpoint.c
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> userComments
|
||||||
|
db_checkpoint
|
||||||
|
<END>
|
||||||
581
build_vxworks/db_config.h
Normal file
581
build_vxworks/db_config.h
Normal file
@@ -0,0 +1,581 @@
|
|||||||
|
/* DO NOT EDIT: automatically built by dist/s_vxworks. */
|
||||||
|
/* !!!
|
||||||
|
* The CONFIG_TEST option may be added using the Tornado project build.
|
||||||
|
* DO NOT modify it here.
|
||||||
|
*/
|
||||||
|
/* Define to 1 if you want to build a version for running the test suite. */
|
||||||
|
/* #undef CONFIG_TEST */
|
||||||
|
|
||||||
|
/* We use DB_WIN32 much as one would use _WIN32 -- to specify that we're using
|
||||||
|
an operating system environment that supports Win32 calls and semantics. We
|
||||||
|
don't use _WIN32 because Cygwin/GCC also defines _WIN32, even though
|
||||||
|
Cygwin/GCC closely emulates the Unix environment. */
|
||||||
|
/* #undef DB_WIN32 */
|
||||||
|
|
||||||
|
/* !!!
|
||||||
|
* The DEBUG option may be added using the Tornado project build.
|
||||||
|
* DO NOT modify it here.
|
||||||
|
*/
|
||||||
|
/* Define to 1 if you want a debugging version. */
|
||||||
|
/* #undef DEBUG */
|
||||||
|
|
||||||
|
/* Define to 1 if you want a version that logs read operations. */
|
||||||
|
/* #undef DEBUG_ROP */
|
||||||
|
|
||||||
|
/* Define to 1 if you want a version that logs write operations. */
|
||||||
|
/* #undef DEBUG_WOP */
|
||||||
|
|
||||||
|
/* !!!
|
||||||
|
* The DIAGNOSTIC option may be added using the Tornado project build.
|
||||||
|
* DO NOT modify it here.
|
||||||
|
*/
|
||||||
|
/* Define to 1 if you want a version with run-time diagnostic checking. */
|
||||||
|
/* #undef DIAGNOSTIC */
|
||||||
|
|
||||||
|
/* Define to 1 if 64-bit types are available. */
|
||||||
|
#define HAVE_64BIT_TYPES 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `abort' function. */
|
||||||
|
#define HAVE_ABORT 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `atoi' function. */
|
||||||
|
#define HAVE_ATOI 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `atol' function. */
|
||||||
|
#define HAVE_ATOL 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `backtrace' function. */
|
||||||
|
/* #undef HAVE_BACKTRACE */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `backtrace_symbols' function. */
|
||||||
|
/* #undef HAVE_BACKTRACE_SYMBOLS */
|
||||||
|
|
||||||
|
/* Define to 1 if building BREW. */
|
||||||
|
/* #undef HAVE_BREW */
|
||||||
|
|
||||||
|
/* Define to 1 if building on BREW (SDK2). */
|
||||||
|
/* #undef HAVE_BREW_SDK2 */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `clock_gettime' function. */
|
||||||
|
#define HAVE_CLOCK_GETTIME 1
|
||||||
|
|
||||||
|
/* Define to 1 if clock_gettime supports CLOCK_MONOTONIC. */
|
||||||
|
/* #undef HAVE_CLOCK_MONOTONIC */
|
||||||
|
|
||||||
|
/* Define to 1 if Berkeley DB release includes strong cryptography. */
|
||||||
|
#define HAVE_CRYPTO 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `ctime_r' function. */
|
||||||
|
#define HAVE_CTIME_R 1
|
||||||
|
|
||||||
|
/* Define to 1 if ctime_r takes a buffer length as a third argument. */
|
||||||
|
#define HAVE_CTIME_R_3ARG 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `directio' function. */
|
||||||
|
/* #undef HAVE_DIRECTIO */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
|
||||||
|
*/
|
||||||
|
#define HAVE_DIRENT_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <dlfcn.h> header file. */
|
||||||
|
/* #undef HAVE_DLFCN_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <execinfo.h> header file. */
|
||||||
|
/* #undef HAVE_EXECINFO_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have EXIT_SUCCESS/EXIT_FAILURE #defines. */
|
||||||
|
#define HAVE_EXIT_SUCCESS 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fchmod' function. */
|
||||||
|
/* #undef HAVE_FCHMOD */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fclose' function. */
|
||||||
|
#define HAVE_FCLOSE 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fcntl' function. */
|
||||||
|
/* #undef HAVE_FCNTL */
|
||||||
|
|
||||||
|
/* Define to 1 if fcntl/F_SETFD denies child access to file descriptors. */
|
||||||
|
/* #undef HAVE_FCNTL_F_SETFD */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fdatasync' function. */
|
||||||
|
/* #undef HAVE_FDATASYNC */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fgetc' function. */
|
||||||
|
#define HAVE_FGETC 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fgets' function. */
|
||||||
|
#define HAVE_FGETS 1
|
||||||
|
|
||||||
|
/* Define to 1 if allocated filesystem blocks are not zeroed. */
|
||||||
|
#define HAVE_FILESYSTEM_NOTZERO 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fopen' function. */
|
||||||
|
#define HAVE_FOPEN 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `ftruncate' function. */
|
||||||
|
#define HAVE_FTRUNCATE 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fwrite' function. */
|
||||||
|
#define HAVE_FWRITE 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getaddrinfo' function. */
|
||||||
|
/* #undef HAVE_GETADDRINFO */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getcwd' function. */
|
||||||
|
#define HAVE_GETCWD 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getenv' function. */
|
||||||
|
#define HAVE_GETENV 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getgid' function. */
|
||||||
|
#define HAVE_GETGID 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getopt' function. */
|
||||||
|
/* #undef HAVE_GETOPT */
|
||||||
|
|
||||||
|
/* Define to 1 if getopt supports the optreset variable. */
|
||||||
|
/* #undef HAVE_GETOPT_OPTRESET */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getrusage' function. */
|
||||||
|
/* #undef HAVE_GETRUSAGE */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `gettimeofday' function. */
|
||||||
|
/* #undef HAVE_GETTIMEOFDAY */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getuid' function. */
|
||||||
|
/* #undef HAVE_GETUID */
|
||||||
|
|
||||||
|
/* Define to 1 if building Hash access method. */
|
||||||
|
#define HAVE_HASH 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `hstrerror' function. */
|
||||||
|
/* #undef HAVE_HSTRERROR */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||||
|
/* #undef HAVE_INTTYPES_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `isalpha' function. */
|
||||||
|
#define HAVE_ISALPHA 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `isdigit' function. */
|
||||||
|
#define HAVE_ISDIGIT 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `isprint' function. */
|
||||||
|
#define HAVE_ISPRINT 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `isspace' function. */
|
||||||
|
#define HAVE_ISSPACE 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `localtime' function. */
|
||||||
|
#define HAVE_LOCALTIME 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `memcmp' function. */
|
||||||
|
#define HAVE_MEMCMP 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `memcpy' function. */
|
||||||
|
#define HAVE_MEMCPY 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `memmove' function. */
|
||||||
|
#define HAVE_MEMMOVE 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <memory.h> header file. */
|
||||||
|
#define HAVE_MEMORY_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `mlock' function. */
|
||||||
|
/* #undef HAVE_MLOCK */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `mmap' function. */
|
||||||
|
/* #undef HAVE_MMAP */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `mprotect' function. */
|
||||||
|
/* #undef HAVE_MPROTECT */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `munlock' function. */
|
||||||
|
/* #undef HAVE_MUNLOCK */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `munmap' function. */
|
||||||
|
/* #undef HAVE_MUNMAP */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and 68K assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_68K_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the AIX _check_lock mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_AIX_CHECK_LOCK */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and Alpha assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_ALPHA_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and ARM assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_ARM_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the Apple/Darwin _spin_lock_try mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_DARWIN_SPIN_LOCK_TRY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the UNIX fcntl system call mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_FCNTL */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and PaRisc assembly language mutexes.
|
||||||
|
*/
|
||||||
|
/* #undef HAVE_MUTEX_HPPA_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the msem_XXX mutexes on HP-UX. */
|
||||||
|
/* #undef HAVE_MUTEX_HPPA_MSEM_INIT */
|
||||||
|
|
||||||
|
/* Define to 1 to use test-and-set mutexes with blocking mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_HYBRID */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and IA64 assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_IA64_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and MIPS assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_MIPS_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the msem_XXX mutexes on systems other than HP-UX. */
|
||||||
|
/* #undef HAVE_MUTEX_MSEM_INIT */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and PowerPC assembly language mutexes.
|
||||||
|
*/
|
||||||
|
/* #undef HAVE_MUTEX_PPC_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use POSIX 1003.1 pthread_XXX mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_PTHREADS */
|
||||||
|
|
||||||
|
/* Define to 1 to use Reliant UNIX initspin mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_RELIANTUNIX_INITSPIN */
|
||||||
|
|
||||||
|
/* Define to 1 to use the IBM C compiler and S/390 assembly language mutexes.
|
||||||
|
*/
|
||||||
|
/* #undef HAVE_MUTEX_S390_CC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and S/390 assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_S390_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the SCO compiler and x86 assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_SCO_X86_CC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the obsolete POSIX 1003.1 sema_XXX mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_SEMA_INIT */
|
||||||
|
|
||||||
|
/* Define to 1 to use the SGI XXX_lock mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_SGI_INIT_LOCK */
|
||||||
|
|
||||||
|
/* Define to 1 to use the Solaris _lock_XXX mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_SOLARIS_LOCK_TRY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the Solaris lwp threads mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_SOLARIS_LWP */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and Sparc assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_SPARC_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 if the Berkeley DB library should support mutexes. */
|
||||||
|
#define HAVE_MUTEX_SUPPORT 1
|
||||||
|
|
||||||
|
/* Define to 1 if mutexes hold system resources. */
|
||||||
|
#define HAVE_MUTEX_SYSTEM_RESOURCES 1
|
||||||
|
|
||||||
|
/* Define to 1 to configure mutexes intra-process only. */
|
||||||
|
/* #undef HAVE_MUTEX_THREAD_ONLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the CC compiler and Tru64 assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_TRU64_CC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the UNIX International mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_UI_THREADS */
|
||||||
|
|
||||||
|
/* Define to 1 to use the UTS compiler and assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_UTS_CC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use VMS mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_VMS */
|
||||||
|
|
||||||
|
/* Define to 1 to use VxWorks mutexes. */
|
||||||
|
#define HAVE_MUTEX_VXWORKS 1
|
||||||
|
|
||||||
|
/* Define to 1 to use the MSVC compiler and Windows mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_WIN32 */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and Windows mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_WIN32_GCC */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and 64-bit x86 assembly language
|
||||||
|
mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_X86_64_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and 32-bit x86 assembly language
|
||||||
|
mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_X86_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
|
||||||
|
/* #undef HAVE_NDIR_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the O_DIRECT flag. */
|
||||||
|
/* #undef HAVE_O_DIRECT */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `pread' function. */
|
||||||
|
/* #undef HAVE_PREAD */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `printf' function. */
|
||||||
|
#define HAVE_PRINTF 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `pstat_getdynamic' function. */
|
||||||
|
/* #undef HAVE_PSTAT_GETDYNAMIC */
|
||||||
|
|
||||||
|
/* Define to 1 to configure Berkeley DB for POSIX pthread API. */
|
||||||
|
/* #undef HAVE_PTHREAD_API */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `pthread_yield' function. */
|
||||||
|
/* #undef HAVE_PTHREAD_YIELD */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `pwrite' function. */
|
||||||
|
/* #undef HAVE_PWRITE */
|
||||||
|
|
||||||
|
/* Define to 1 if building on QNX. */
|
||||||
|
/* #undef HAVE_QNX */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `qsort' function. */
|
||||||
|
#define HAVE_QSORT 1
|
||||||
|
|
||||||
|
/* Define to 1 if building Queue access method. */
|
||||||
|
#define HAVE_QUEUE 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `raise' function. */
|
||||||
|
#define HAVE_RAISE 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `rand' function. */
|
||||||
|
#define HAVE_RAND 1
|
||||||
|
|
||||||
|
/* Define to 1 if building replication support. */
|
||||||
|
#define HAVE_REPLICATION 1
|
||||||
|
|
||||||
|
/* Define to 1 if building the Berkeley DB replication framework. */
|
||||||
|
/* #undef HAVE_REPLICATION_THREADS */
|
||||||
|
|
||||||
|
/* Define to 1 if building RPC client/server. */
|
||||||
|
/* #undef HAVE_RPC */
|
||||||
|
|
||||||
|
/* Define to 1 if building on S60. */
|
||||||
|
/* #undef HAVE_S60 */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `sched_yield' function. */
|
||||||
|
#define HAVE_SCHED_YIELD 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `select' function. */
|
||||||
|
#define HAVE_SELECT 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `setgid' function. */
|
||||||
|
#define HAVE_SETGID 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `setuid' function. */
|
||||||
|
#define HAVE_SETUID 1
|
||||||
|
|
||||||
|
/* Define to 1 if shmctl/SHM_LOCK locks down shared memory segments. */
|
||||||
|
/* #undef HAVE_SHMCTL_SHM_LOCK */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `shmget' function. */
|
||||||
|
/* #undef HAVE_SHMGET */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `sigaction' function. */
|
||||||
|
/* #undef HAVE_SIGACTION */
|
||||||
|
|
||||||
|
/* Define to 1 if thread identifier type db_threadid_t is integral. */
|
||||||
|
#define HAVE_SIMPLE_THREAD_TYPE 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `snprintf' function. */
|
||||||
|
/* #undef HAVE_SNPRINTF */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `stat' function. */
|
||||||
|
#define HAVE_STAT 1
|
||||||
|
|
||||||
|
/* Define to 1 if building statistics support. */
|
||||||
|
#define HAVE_STATISTICS 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <stdint.h> header file. */
|
||||||
|
/* #undef HAVE_STDINT_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||||
|
#define HAVE_STDLIB_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strcasecmp' function. */
|
||||||
|
/* #undef HAVE_STRCASECMP */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strcat' function. */
|
||||||
|
#define HAVE_STRCAT 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strchr' function. */
|
||||||
|
#define HAVE_STRCHR 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strdup' function. */
|
||||||
|
/* #undef HAVE_STRDUP */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strerror' function. */
|
||||||
|
#define HAVE_STRERROR 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strftime' function. */
|
||||||
|
#define HAVE_STRFTIME 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <strings.h> header file. */
|
||||||
|
#define HAVE_STRINGS_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <string.h> header file. */
|
||||||
|
#define HAVE_STRING_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strncat' function. */
|
||||||
|
#define HAVE_STRNCAT 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strncmp' function. */
|
||||||
|
#define HAVE_STRNCMP 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strrchr' function. */
|
||||||
|
#define HAVE_STRRCHR 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strsep' function. */
|
||||||
|
/* #undef HAVE_STRSEP */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strtol' function. */
|
||||||
|
#define HAVE_STRTOL 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strtoul' function. */
|
||||||
|
#define HAVE_STRTOUL 1
|
||||||
|
|
||||||
|
/* Define to 1 if `st_blksize' is member of `struct stat'. */
|
||||||
|
#define HAVE_STRUCT_STAT_ST_BLKSIZE 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `sysconf' function. */
|
||||||
|
/* #undef HAVE_SYSCONF */
|
||||||
|
|
||||||
|
/* Define to 1 if port includes files in the Berkeley DB source code. */
|
||||||
|
#define HAVE_SYSTEM_INCLUDE_FILES 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
|
||||||
|
*/
|
||||||
|
/* #undef HAVE_SYS_DIR_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
|
||||||
|
*/
|
||||||
|
/* #undef HAVE_SYS_NDIR_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/select.h> header file. */
|
||||||
|
/* #undef HAVE_SYS_SELECT_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/socket.h> header file. */
|
||||||
|
/* #undef HAVE_SYS_SOCKET_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||||
|
/* #undef HAVE_SYS_STAT_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/time.h> header file. */
|
||||||
|
/* #undef HAVE_SYS_TIME_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||||
|
/* #undef HAVE_SYS_TYPES_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `time' function. */
|
||||||
|
#define HAVE_TIME 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <unistd.h> header file. */
|
||||||
|
#define HAVE_UNISTD_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if unlink of file with open file descriptors will fail. */
|
||||||
|
#define HAVE_UNLINK_WITH_OPEN_FAILURE 1
|
||||||
|
|
||||||
|
/* Define to 1 if port includes historic database upgrade support. */
|
||||||
|
#define HAVE_UPGRADE_SUPPORT 1
|
||||||
|
|
||||||
|
/* Define to 1 if building access method verification support. */
|
||||||
|
#define HAVE_VERIFY 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `vsnprintf' function. */
|
||||||
|
/* #undef HAVE_VSNPRINTF */
|
||||||
|
|
||||||
|
/* Define to 1 if building VxWorks. */
|
||||||
|
#define HAVE_VXWORKS 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `yield' function. */
|
||||||
|
/* #undef HAVE_YIELD */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `_fstati64' function. */
|
||||||
|
/* #undef HAVE__FSTATI64 */
|
||||||
|
|
||||||
|
/* Define to the address where bug reports for this package should be sent. */
|
||||||
|
#define PACKAGE_BUGREPORT "Oracle Technology Network Berkeley DB forum"
|
||||||
|
|
||||||
|
/* Define to the full name of this package. */
|
||||||
|
#define PACKAGE_NAME "Berkeley DB"
|
||||||
|
|
||||||
|
/* Define to the full name and version of this package. */
|
||||||
|
#define PACKAGE_STRING "Berkeley DB 4.7.25"
|
||||||
|
|
||||||
|
/* Define to the one symbol short name of this package. */
|
||||||
|
#define PACKAGE_TARNAME "db-4.7.25"
|
||||||
|
|
||||||
|
/* Define to the version of this package. */
|
||||||
|
#define PACKAGE_VERSION "4.7.25"
|
||||||
|
|
||||||
|
/* The size of a `char', as computed by sizeof. */
|
||||||
|
/* #undef SIZEOF_CHAR */
|
||||||
|
|
||||||
|
/* The size of a `char *', as computed by sizeof. */
|
||||||
|
/* #undef SIZEOF_CHAR_P */
|
||||||
|
|
||||||
|
/* The size of a `int', as computed by sizeof. */
|
||||||
|
/* #undef SIZEOF_INT */
|
||||||
|
|
||||||
|
/* The size of a `long', as computed by sizeof. */
|
||||||
|
/* #undef SIZEOF_LONG */
|
||||||
|
|
||||||
|
/* The size of a `long long', as computed by sizeof. */
|
||||||
|
/* #undef SIZEOF_LONG_LONG */
|
||||||
|
|
||||||
|
/* The size of a `short', as computed by sizeof. */
|
||||||
|
/* #undef SIZEOF_SHORT */
|
||||||
|
|
||||||
|
/* The size of a `size_t', as computed by sizeof. */
|
||||||
|
/* #undef SIZEOF_SIZE_T */
|
||||||
|
|
||||||
|
/* The size of a `unsigned char', as computed by sizeof. */
|
||||||
|
/* #undef SIZEOF_UNSIGNED_CHAR */
|
||||||
|
|
||||||
|
/* The size of a `unsigned int', as computed by sizeof. */
|
||||||
|
/* #undef SIZEOF_UNSIGNED_INT */
|
||||||
|
|
||||||
|
/* The size of a `unsigned long', as computed by sizeof. */
|
||||||
|
/* #undef SIZEOF_UNSIGNED_LONG */
|
||||||
|
|
||||||
|
/* The size of a `unsigned long long', as computed by sizeof. */
|
||||||
|
/* #undef SIZEOF_UNSIGNED_LONG_LONG */
|
||||||
|
|
||||||
|
/* The size of a `unsigned short', as computed by sizeof. */
|
||||||
|
/* #undef SIZEOF_UNSIGNED_SHORT */
|
||||||
|
|
||||||
|
/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */
|
||||||
|
/* #undef STAT_MACROS_BROKEN */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the ANSI C header files. */
|
||||||
|
#define STDC_HEADERS 1
|
||||||
|
|
||||||
|
/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
|
||||||
|
/* #undef TIME_WITH_SYS_TIME */
|
||||||
|
|
||||||
|
/* Define to 1 to mask harmless uninitialized memory read/writes. */
|
||||||
|
/* #undef UMRW */
|
||||||
|
|
||||||
|
/* Number of bits in a file offset, on hosts where this is settable. */
|
||||||
|
/* #undef _FILE_OFFSET_BITS */
|
||||||
|
|
||||||
|
/* Define for large files, on AIX-style hosts. */
|
||||||
|
/* #undef _LARGE_FILES */
|
||||||
|
|
||||||
|
/* Define to empty if `const' does not conform to ANSI C. */
|
||||||
|
/* #undef const */
|
||||||
|
|
||||||
|
/* Define to `__inline__' or `__inline' if that's what the C compiler
|
||||||
|
calls it, or to nothing if 'inline' is not supported under any name. */
|
||||||
|
#ifndef __cplusplus
|
||||||
|
#define inline
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* type to use in place of socklen_t if not defined */
|
||||||
|
/* #undef socklen_t */
|
||||||
581
build_vxworks/db_config_small.h
Normal file
581
build_vxworks/db_config_small.h
Normal file
@@ -0,0 +1,581 @@
|
|||||||
|
/* DO NOT EDIT: automatically built by dist/s_vxworks. */
|
||||||
|
/* !!!
|
||||||
|
* The CONFIG_TEST option may be added using the Tornado project build.
|
||||||
|
* DO NOT modify it here.
|
||||||
|
*/
|
||||||
|
/* Define to 1 if you want to build a version for running the test suite. */
|
||||||
|
/* #undef CONFIG_TEST */
|
||||||
|
|
||||||
|
/* We use DB_WIN32 much as one would use _WIN32 -- to specify that we're using
|
||||||
|
an operating system environment that supports Win32 calls and semantics. We
|
||||||
|
don't use _WIN32 because Cygwin/GCC also defines _WIN32, even though
|
||||||
|
Cygwin/GCC closely emulates the Unix environment. */
|
||||||
|
/* #undef DB_WIN32 */
|
||||||
|
|
||||||
|
/* !!!
|
||||||
|
* The DEBUG option may be added using the Tornado project build.
|
||||||
|
* DO NOT modify it here.
|
||||||
|
*/
|
||||||
|
/* Define to 1 if you want a debugging version. */
|
||||||
|
/* #undef DEBUG */
|
||||||
|
|
||||||
|
/* Define to 1 if you want a version that logs read operations. */
|
||||||
|
/* #undef DEBUG_ROP */
|
||||||
|
|
||||||
|
/* Define to 1 if you want a version that logs write operations. */
|
||||||
|
/* #undef DEBUG_WOP */
|
||||||
|
|
||||||
|
/* !!!
|
||||||
|
* The DIAGNOSTIC option may be added using the Tornado project build.
|
||||||
|
* DO NOT modify it here.
|
||||||
|
*/
|
||||||
|
/* Define to 1 if you want a version with run-time diagnostic checking. */
|
||||||
|
/* #undef DIAGNOSTIC */
|
||||||
|
|
||||||
|
/* Define to 1 if 64-bit types are available. */
|
||||||
|
#define HAVE_64BIT_TYPES 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `abort' function. */
|
||||||
|
#define HAVE_ABORT 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `atoi' function. */
|
||||||
|
#define HAVE_ATOI 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `atol' function. */
|
||||||
|
#define HAVE_ATOL 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `backtrace' function. */
|
||||||
|
/* #undef HAVE_BACKTRACE */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `backtrace_symbols' function. */
|
||||||
|
/* #undef HAVE_BACKTRACE_SYMBOLS */
|
||||||
|
|
||||||
|
/* Define to 1 if building BREW. */
|
||||||
|
/* #undef HAVE_BREW */
|
||||||
|
|
||||||
|
/* Define to 1 if building on BREW (SDK2). */
|
||||||
|
/* #undef HAVE_BREW_SDK2 */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `clock_gettime' function. */
|
||||||
|
#define HAVE_CLOCK_GETTIME 1
|
||||||
|
|
||||||
|
/* Define to 1 if clock_gettime supports CLOCK_MONOTONIC. */
|
||||||
|
/* #undef HAVE_CLOCK_MONOTONIC */
|
||||||
|
|
||||||
|
/* Define to 1 if Berkeley DB release includes strong cryptography. */
|
||||||
|
/* #undef HAVE_CRYPTO */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `ctime_r' function. */
|
||||||
|
#define HAVE_CTIME_R 1
|
||||||
|
|
||||||
|
/* Define to 1 if ctime_r takes a buffer length as a third argument. */
|
||||||
|
#define HAVE_CTIME_R_3ARG 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `directio' function. */
|
||||||
|
/* #undef HAVE_DIRECTIO */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
|
||||||
|
*/
|
||||||
|
#define HAVE_DIRENT_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <dlfcn.h> header file. */
|
||||||
|
/* #undef HAVE_DLFCN_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <execinfo.h> header file. */
|
||||||
|
/* #undef HAVE_EXECINFO_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have EXIT_SUCCESS/EXIT_FAILURE #defines. */
|
||||||
|
#define HAVE_EXIT_SUCCESS 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fchmod' function. */
|
||||||
|
/* #undef HAVE_FCHMOD */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fclose' function. */
|
||||||
|
#define HAVE_FCLOSE 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fcntl' function. */
|
||||||
|
/* #undef HAVE_FCNTL */
|
||||||
|
|
||||||
|
/* Define to 1 if fcntl/F_SETFD denies child access to file descriptors. */
|
||||||
|
/* #undef HAVE_FCNTL_F_SETFD */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fdatasync' function. */
|
||||||
|
/* #undef HAVE_FDATASYNC */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fgetc' function. */
|
||||||
|
#define HAVE_FGETC 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fgets' function. */
|
||||||
|
#define HAVE_FGETS 1
|
||||||
|
|
||||||
|
/* Define to 1 if allocated filesystem blocks are not zeroed. */
|
||||||
|
#define HAVE_FILESYSTEM_NOTZERO 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fopen' function. */
|
||||||
|
#define HAVE_FOPEN 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `ftruncate' function. */
|
||||||
|
#define HAVE_FTRUNCATE 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fwrite' function. */
|
||||||
|
#define HAVE_FWRITE 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getaddrinfo' function. */
|
||||||
|
/* #undef HAVE_GETADDRINFO */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getcwd' function. */
|
||||||
|
#define HAVE_GETCWD 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getenv' function. */
|
||||||
|
#define HAVE_GETENV 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getgid' function. */
|
||||||
|
#define HAVE_GETGID 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getopt' function. */
|
||||||
|
/* #undef HAVE_GETOPT */
|
||||||
|
|
||||||
|
/* Define to 1 if getopt supports the optreset variable. */
|
||||||
|
/* #undef HAVE_GETOPT_OPTRESET */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getrusage' function. */
|
||||||
|
/* #undef HAVE_GETRUSAGE */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `gettimeofday' function. */
|
||||||
|
/* #undef HAVE_GETTIMEOFDAY */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getuid' function. */
|
||||||
|
/* #undef HAVE_GETUID */
|
||||||
|
|
||||||
|
/* Define to 1 if building Hash access method. */
|
||||||
|
/* #undef HAVE_HASH */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `hstrerror' function. */
|
||||||
|
/* #undef HAVE_HSTRERROR */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||||
|
/* #undef HAVE_INTTYPES_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `isalpha' function. */
|
||||||
|
#define HAVE_ISALPHA 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `isdigit' function. */
|
||||||
|
#define HAVE_ISDIGIT 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `isprint' function. */
|
||||||
|
#define HAVE_ISPRINT 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `isspace' function. */
|
||||||
|
#define HAVE_ISSPACE 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `localtime' function. */
|
||||||
|
#define HAVE_LOCALTIME 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `memcmp' function. */
|
||||||
|
#define HAVE_MEMCMP 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `memcpy' function. */
|
||||||
|
#define HAVE_MEMCPY 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `memmove' function. */
|
||||||
|
#define HAVE_MEMMOVE 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <memory.h> header file. */
|
||||||
|
#define HAVE_MEMORY_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `mlock' function. */
|
||||||
|
/* #undef HAVE_MLOCK */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `mmap' function. */
|
||||||
|
/* #undef HAVE_MMAP */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `mprotect' function. */
|
||||||
|
/* #undef HAVE_MPROTECT */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `munlock' function. */
|
||||||
|
/* #undef HAVE_MUNLOCK */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `munmap' function. */
|
||||||
|
/* #undef HAVE_MUNMAP */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and 68K assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_68K_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the AIX _check_lock mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_AIX_CHECK_LOCK */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and Alpha assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_ALPHA_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and ARM assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_ARM_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the Apple/Darwin _spin_lock_try mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_DARWIN_SPIN_LOCK_TRY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the UNIX fcntl system call mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_FCNTL */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and PaRisc assembly language mutexes.
|
||||||
|
*/
|
||||||
|
/* #undef HAVE_MUTEX_HPPA_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the msem_XXX mutexes on HP-UX. */
|
||||||
|
/* #undef HAVE_MUTEX_HPPA_MSEM_INIT */
|
||||||
|
|
||||||
|
/* Define to 1 to use test-and-set mutexes with blocking mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_HYBRID */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and IA64 assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_IA64_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and MIPS assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_MIPS_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the msem_XXX mutexes on systems other than HP-UX. */
|
||||||
|
/* #undef HAVE_MUTEX_MSEM_INIT */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and PowerPC assembly language mutexes.
|
||||||
|
*/
|
||||||
|
/* #undef HAVE_MUTEX_PPC_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use POSIX 1003.1 pthread_XXX mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_PTHREADS */
|
||||||
|
|
||||||
|
/* Define to 1 to use Reliant UNIX initspin mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_RELIANTUNIX_INITSPIN */
|
||||||
|
|
||||||
|
/* Define to 1 to use the IBM C compiler and S/390 assembly language mutexes.
|
||||||
|
*/
|
||||||
|
/* #undef HAVE_MUTEX_S390_CC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and S/390 assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_S390_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the SCO compiler and x86 assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_SCO_X86_CC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the obsolete POSIX 1003.1 sema_XXX mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_SEMA_INIT */
|
||||||
|
|
||||||
|
/* Define to 1 to use the SGI XXX_lock mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_SGI_INIT_LOCK */
|
||||||
|
|
||||||
|
/* Define to 1 to use the Solaris _lock_XXX mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_SOLARIS_LOCK_TRY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the Solaris lwp threads mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_SOLARIS_LWP */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and Sparc assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_SPARC_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 if the Berkeley DB library should support mutexes. */
|
||||||
|
#define HAVE_MUTEX_SUPPORT 1
|
||||||
|
|
||||||
|
/* Define to 1 if mutexes hold system resources. */
|
||||||
|
#define HAVE_MUTEX_SYSTEM_RESOURCES 1
|
||||||
|
|
||||||
|
/* Define to 1 to configure mutexes intra-process only. */
|
||||||
|
/* #undef HAVE_MUTEX_THREAD_ONLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the CC compiler and Tru64 assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_TRU64_CC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the UNIX International mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_UI_THREADS */
|
||||||
|
|
||||||
|
/* Define to 1 to use the UTS compiler and assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_UTS_CC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use VMS mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_VMS */
|
||||||
|
|
||||||
|
/* Define to 1 to use VxWorks mutexes. */
|
||||||
|
#define HAVE_MUTEX_VXWORKS 1
|
||||||
|
|
||||||
|
/* Define to 1 to use the MSVC compiler and Windows mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_WIN32 */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and Windows mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_WIN32_GCC */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and 64-bit x86 assembly language
|
||||||
|
mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_X86_64_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and 32-bit x86 assembly language
|
||||||
|
mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_X86_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
|
||||||
|
/* #undef HAVE_NDIR_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the O_DIRECT flag. */
|
||||||
|
/* #undef HAVE_O_DIRECT */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `pread' function. */
|
||||||
|
/* #undef HAVE_PREAD */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `printf' function. */
|
||||||
|
#define HAVE_PRINTF 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `pstat_getdynamic' function. */
|
||||||
|
/* #undef HAVE_PSTAT_GETDYNAMIC */
|
||||||
|
|
||||||
|
/* Define to 1 to configure Berkeley DB for POSIX pthread API. */
|
||||||
|
/* #undef HAVE_PTHREAD_API */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `pthread_yield' function. */
|
||||||
|
/* #undef HAVE_PTHREAD_YIELD */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `pwrite' function. */
|
||||||
|
/* #undef HAVE_PWRITE */
|
||||||
|
|
||||||
|
/* Define to 1 if building on QNX. */
|
||||||
|
/* #undef HAVE_QNX */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `qsort' function. */
|
||||||
|
#define HAVE_QSORT 1
|
||||||
|
|
||||||
|
/* Define to 1 if building Queue access method. */
|
||||||
|
/* #undef HAVE_QUEUE */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `raise' function. */
|
||||||
|
#define HAVE_RAISE 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `rand' function. */
|
||||||
|
#define HAVE_RAND 1
|
||||||
|
|
||||||
|
/* Define to 1 if building replication support. */
|
||||||
|
/* #undef HAVE_REPLICATION */
|
||||||
|
|
||||||
|
/* Define to 1 if building the Berkeley DB replication framework. */
|
||||||
|
/* #undef HAVE_REPLICATION_THREADS */
|
||||||
|
|
||||||
|
/* Define to 1 if building RPC client/server. */
|
||||||
|
/* #undef HAVE_RPC */
|
||||||
|
|
||||||
|
/* Define to 1 if building on S60. */
|
||||||
|
/* #undef HAVE_S60 */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `sched_yield' function. */
|
||||||
|
#define HAVE_SCHED_YIELD 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `select' function. */
|
||||||
|
#define HAVE_SELECT 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `setgid' function. */
|
||||||
|
#define HAVE_SETGID 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `setuid' function. */
|
||||||
|
#define HAVE_SETUID 1
|
||||||
|
|
||||||
|
/* Define to 1 if shmctl/SHM_LOCK locks down shared memory segments. */
|
||||||
|
/* #undef HAVE_SHMCTL_SHM_LOCK */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `shmget' function. */
|
||||||
|
/* #undef HAVE_SHMGET */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `sigaction' function. */
|
||||||
|
/* #undef HAVE_SIGACTION */
|
||||||
|
|
||||||
|
/* Define to 1 if thread identifier type db_threadid_t is integral. */
|
||||||
|
#define HAVE_SIMPLE_THREAD_TYPE 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `snprintf' function. */
|
||||||
|
/* #undef HAVE_SNPRINTF */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `stat' function. */
|
||||||
|
#define HAVE_STAT 1
|
||||||
|
|
||||||
|
/* Define to 1 if building statistics support. */
|
||||||
|
/* #undef HAVE_STATISTICS */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <stdint.h> header file. */
|
||||||
|
/* #undef HAVE_STDINT_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||||
|
#define HAVE_STDLIB_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strcasecmp' function. */
|
||||||
|
/* #undef HAVE_STRCASECMP */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strcat' function. */
|
||||||
|
#define HAVE_STRCAT 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strchr' function. */
|
||||||
|
#define HAVE_STRCHR 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strdup' function. */
|
||||||
|
/* #undef HAVE_STRDUP */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strerror' function. */
|
||||||
|
#define HAVE_STRERROR 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strftime' function. */
|
||||||
|
#define HAVE_STRFTIME 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <strings.h> header file. */
|
||||||
|
#define HAVE_STRINGS_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <string.h> header file. */
|
||||||
|
#define HAVE_STRING_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strncat' function. */
|
||||||
|
#define HAVE_STRNCAT 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strncmp' function. */
|
||||||
|
#define HAVE_STRNCMP 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strrchr' function. */
|
||||||
|
#define HAVE_STRRCHR 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strsep' function. */
|
||||||
|
/* #undef HAVE_STRSEP */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strtol' function. */
|
||||||
|
#define HAVE_STRTOL 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strtoul' function. */
|
||||||
|
#define HAVE_STRTOUL 1
|
||||||
|
|
||||||
|
/* Define to 1 if `st_blksize' is member of `struct stat'. */
|
||||||
|
#define HAVE_STRUCT_STAT_ST_BLKSIZE 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `sysconf' function. */
|
||||||
|
/* #undef HAVE_SYSCONF */
|
||||||
|
|
||||||
|
/* Define to 1 if port includes files in the Berkeley DB source code. */
|
||||||
|
#define HAVE_SYSTEM_INCLUDE_FILES 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
|
||||||
|
*/
|
||||||
|
/* #undef HAVE_SYS_DIR_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
|
||||||
|
*/
|
||||||
|
/* #undef HAVE_SYS_NDIR_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/select.h> header file. */
|
||||||
|
/* #undef HAVE_SYS_SELECT_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/socket.h> header file. */
|
||||||
|
/* #undef HAVE_SYS_SOCKET_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||||
|
/* #undef HAVE_SYS_STAT_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/time.h> header file. */
|
||||||
|
/* #undef HAVE_SYS_TIME_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||||
|
/* #undef HAVE_SYS_TYPES_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `time' function. */
|
||||||
|
#define HAVE_TIME 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <unistd.h> header file. */
|
||||||
|
#define HAVE_UNISTD_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if unlink of file with open file descriptors will fail. */
|
||||||
|
#define HAVE_UNLINK_WITH_OPEN_FAILURE 1
|
||||||
|
|
||||||
|
/* Define to 1 if port includes historic database upgrade support. */
|
||||||
|
#define HAVE_UPGRADE_SUPPORT 1
|
||||||
|
|
||||||
|
/* Define to 1 if building access method verification support. */
|
||||||
|
/* #undef HAVE_VERIFY */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `vsnprintf' function. */
|
||||||
|
/* #undef HAVE_VSNPRINTF */
|
||||||
|
|
||||||
|
/* Define to 1 if building VxWorks. */
|
||||||
|
#define HAVE_VXWORKS 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `yield' function. */
|
||||||
|
/* #undef HAVE_YIELD */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `_fstati64' function. */
|
||||||
|
/* #undef HAVE__FSTATI64 */
|
||||||
|
|
||||||
|
/* Define to the address where bug reports for this package should be sent. */
|
||||||
|
#define PACKAGE_BUGREPORT "Oracle Technology Network Berkeley DB forum"
|
||||||
|
|
||||||
|
/* Define to the full name of this package. */
|
||||||
|
#define PACKAGE_NAME "Berkeley DB"
|
||||||
|
|
||||||
|
/* Define to the full name and version of this package. */
|
||||||
|
#define PACKAGE_STRING "Berkeley DB 4.7.25"
|
||||||
|
|
||||||
|
/* Define to the one symbol short name of this package. */
|
||||||
|
#define PACKAGE_TARNAME "db-4.7.25"
|
||||||
|
|
||||||
|
/* Define to the version of this package. */
|
||||||
|
#define PACKAGE_VERSION "4.7.25"
|
||||||
|
|
||||||
|
/* The size of a `char', as computed by sizeof. */
|
||||||
|
/* #undef SIZEOF_CHAR */
|
||||||
|
|
||||||
|
/* The size of a `char *', as computed by sizeof. */
|
||||||
|
/* #undef SIZEOF_CHAR_P */
|
||||||
|
|
||||||
|
/* The size of a `int', as computed by sizeof. */
|
||||||
|
/* #undef SIZEOF_INT */
|
||||||
|
|
||||||
|
/* The size of a `long', as computed by sizeof. */
|
||||||
|
/* #undef SIZEOF_LONG */
|
||||||
|
|
||||||
|
/* The size of a `long long', as computed by sizeof. */
|
||||||
|
/* #undef SIZEOF_LONG_LONG */
|
||||||
|
|
||||||
|
/* The size of a `short', as computed by sizeof. */
|
||||||
|
/* #undef SIZEOF_SHORT */
|
||||||
|
|
||||||
|
/* The size of a `size_t', as computed by sizeof. */
|
||||||
|
/* #undef SIZEOF_SIZE_T */
|
||||||
|
|
||||||
|
/* The size of a `unsigned char', as computed by sizeof. */
|
||||||
|
/* #undef SIZEOF_UNSIGNED_CHAR */
|
||||||
|
|
||||||
|
/* The size of a `unsigned int', as computed by sizeof. */
|
||||||
|
/* #undef SIZEOF_UNSIGNED_INT */
|
||||||
|
|
||||||
|
/* The size of a `unsigned long', as computed by sizeof. */
|
||||||
|
/* #undef SIZEOF_UNSIGNED_LONG */
|
||||||
|
|
||||||
|
/* The size of a `unsigned long long', as computed by sizeof. */
|
||||||
|
/* #undef SIZEOF_UNSIGNED_LONG_LONG */
|
||||||
|
|
||||||
|
/* The size of a `unsigned short', as computed by sizeof. */
|
||||||
|
/* #undef SIZEOF_UNSIGNED_SHORT */
|
||||||
|
|
||||||
|
/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */
|
||||||
|
/* #undef STAT_MACROS_BROKEN */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the ANSI C header files. */
|
||||||
|
#define STDC_HEADERS 1
|
||||||
|
|
||||||
|
/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
|
||||||
|
/* #undef TIME_WITH_SYS_TIME */
|
||||||
|
|
||||||
|
/* Define to 1 to mask harmless uninitialized memory read/writes. */
|
||||||
|
/* #undef UMRW */
|
||||||
|
|
||||||
|
/* Number of bits in a file offset, on hosts where this is settable. */
|
||||||
|
/* #undef _FILE_OFFSET_BITS */
|
||||||
|
|
||||||
|
/* Define for large files, on AIX-style hosts. */
|
||||||
|
/* #undef _LARGE_FILES */
|
||||||
|
|
||||||
|
/* Define to empty if `const' does not conform to ANSI C. */
|
||||||
|
/* #undef const */
|
||||||
|
|
||||||
|
/* Define to `__inline__' or `__inline' if that's what the C compiler
|
||||||
|
calls it, or to nothing if 'inline' is not supported under any name. */
|
||||||
|
#ifndef __cplusplus
|
||||||
|
#define inline
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* type to use in place of socklen_t if not defined */
|
||||||
|
/* #undef socklen_t */
|
||||||
1212
build_vxworks/db_cxx.h
Normal file
1212
build_vxworks/db_cxx.h
Normal file
File diff suppressed because it is too large
Load Diff
249
build_vxworks/db_deadlock/db_deadlock.c
Normal file
249
build_vxworks/db_deadlock/db_deadlock.c
Normal file
@@ -0,0 +1,249 @@
|
|||||||
|
/*-
|
||||||
|
* See the file LICENSE for redistribution information.
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996,2008 Oracle. All rights reserved.
|
||||||
|
*
|
||||||
|
* $Id: db_deadlock.c 63573 2008-05-23 21:43:21Z trent.nelson $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "db_config.h"
|
||||||
|
|
||||||
|
#include "db_int.h"
|
||||||
|
|
||||||
|
#ifndef lint
|
||||||
|
static const char copyright[] =
|
||||||
|
"Copyright (c) 1996,2008 Oracle. All rights reserved.\n";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int db_deadlock_main __P((int, char *[]));
|
||||||
|
int db_deadlock_usage __P((void));
|
||||||
|
int db_deadlock_version_check __P((void));
|
||||||
|
|
||||||
|
const char *progname;
|
||||||
|
|
||||||
|
int
|
||||||
|
db_deadlock(args)
|
||||||
|
char *args;
|
||||||
|
{
|
||||||
|
int argc;
|
||||||
|
char **argv;
|
||||||
|
|
||||||
|
__db_util_arg("db_deadlock", args, &argc, &argv);
|
||||||
|
return (db_deadlock_main(argc, argv) ? EXIT_FAILURE : EXIT_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#define ERROR_RETURN ERROR
|
||||||
|
|
||||||
|
int
|
||||||
|
db_deadlock_main(argc, argv)
|
||||||
|
int argc;
|
||||||
|
char *argv[];
|
||||||
|
{
|
||||||
|
extern char *optarg;
|
||||||
|
extern int optind, __db_getopt_reset;
|
||||||
|
DB_ENV *dbenv;
|
||||||
|
u_int32_t atype;
|
||||||
|
time_t now;
|
||||||
|
u_long secs, usecs;
|
||||||
|
int rejected, ch, exitval, ret, verbose;
|
||||||
|
char *home, *logfile, *passwd, *str, time_buf[CTIME_BUFLEN];
|
||||||
|
|
||||||
|
if ((progname = __db_rpath(argv[0])) == NULL)
|
||||||
|
progname = argv[0];
|
||||||
|
else
|
||||||
|
++progname;
|
||||||
|
|
||||||
|
if ((ret = db_deadlock_version_check()) != 0)
|
||||||
|
return (ret);
|
||||||
|
|
||||||
|
dbenv = NULL;
|
||||||
|
atype = DB_LOCK_DEFAULT;
|
||||||
|
home = logfile = passwd = NULL;
|
||||||
|
secs = usecs = 0;
|
||||||
|
exitval = verbose = 0;
|
||||||
|
__db_getopt_reset = 1;
|
||||||
|
while ((ch = getopt(argc, argv, "a:h:L:P:t:Vv")) != EOF)
|
||||||
|
switch (ch) {
|
||||||
|
case 'a':
|
||||||
|
switch (optarg[0]) {
|
||||||
|
case 'e':
|
||||||
|
atype = DB_LOCK_EXPIRE;
|
||||||
|
break;
|
||||||
|
case 'm':
|
||||||
|
atype = DB_LOCK_MAXLOCKS;
|
||||||
|
break;
|
||||||
|
case 'n':
|
||||||
|
atype = DB_LOCK_MINLOCKS;
|
||||||
|
break;
|
||||||
|
case 'o':
|
||||||
|
atype = DB_LOCK_OLDEST;
|
||||||
|
break;
|
||||||
|
case 'W':
|
||||||
|
atype = DB_LOCK_MAXWRITE;
|
||||||
|
break;
|
||||||
|
case 'w':
|
||||||
|
atype = DB_LOCK_MINWRITE;
|
||||||
|
break;
|
||||||
|
case 'y':
|
||||||
|
atype = DB_LOCK_YOUNGEST;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return (db_deadlock_usage());
|
||||||
|
/* NOTREACHED */
|
||||||
|
}
|
||||||
|
if (optarg[1] != '\0')
|
||||||
|
return (db_deadlock_usage());
|
||||||
|
break;
|
||||||
|
case 'h':
|
||||||
|
home = optarg;
|
||||||
|
break;
|
||||||
|
case 'L':
|
||||||
|
logfile = optarg;
|
||||||
|
break;
|
||||||
|
case 'P':
|
||||||
|
passwd = strdup(optarg);
|
||||||
|
memset(optarg, 0, strlen(optarg));
|
||||||
|
if (passwd == NULL) {
|
||||||
|
fprintf(stderr, "%s: strdup: %s\n",
|
||||||
|
progname, strerror(errno));
|
||||||
|
return (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 't':
|
||||||
|
if ((str = strchr(optarg, '.')) != NULL) {
|
||||||
|
*str++ = '\0';
|
||||||
|
if (*str != '\0' && __db_getulong(
|
||||||
|
NULL, progname, str, 0, LONG_MAX, &usecs))
|
||||||
|
return (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
if (*optarg != '\0' && __db_getulong(
|
||||||
|
NULL, progname, optarg, 0, LONG_MAX, &secs))
|
||||||
|
return (EXIT_FAILURE);
|
||||||
|
if (secs == 0 && usecs == 0)
|
||||||
|
return (db_deadlock_usage());
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 'V':
|
||||||
|
printf("%s\n", db_version(NULL, NULL, NULL));
|
||||||
|
return (EXIT_SUCCESS);
|
||||||
|
case 'v':
|
||||||
|
verbose = 1;
|
||||||
|
break;
|
||||||
|
case '?':
|
||||||
|
default:
|
||||||
|
return (db_deadlock_usage());
|
||||||
|
}
|
||||||
|
argc -= optind;
|
||||||
|
argv += optind;
|
||||||
|
|
||||||
|
if (argc != 0)
|
||||||
|
return (db_deadlock_usage());
|
||||||
|
|
||||||
|
/* Handle possible interruptions. */
|
||||||
|
__db_util_siginit();
|
||||||
|
|
||||||
|
/* Log our process ID. */
|
||||||
|
if (logfile != NULL && __db_util_logset(progname, logfile))
|
||||||
|
goto shutdown;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Create an environment object and initialize it for error
|
||||||
|
* reporting.
|
||||||
|
*/
|
||||||
|
if ((ret = db_env_create(&dbenv, 0)) != 0) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: db_env_create: %s\n", progname, db_strerror(ret));
|
||||||
|
goto shutdown;
|
||||||
|
}
|
||||||
|
|
||||||
|
dbenv->set_errfile(dbenv, stderr);
|
||||||
|
dbenv->set_errpfx(dbenv, progname);
|
||||||
|
|
||||||
|
if (passwd != NULL && (ret = dbenv->set_encrypt(dbenv,
|
||||||
|
passwd, DB_ENCRYPT_AES)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "set_passwd");
|
||||||
|
goto shutdown;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (verbose) {
|
||||||
|
(void)dbenv->set_verbose(dbenv, DB_VERB_DEADLOCK, 1);
|
||||||
|
(void)dbenv->set_verbose(dbenv, DB_VERB_WAITSFOR, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* An environment is required. */
|
||||||
|
if ((ret = dbenv->open(dbenv, home, DB_USE_ENVIRON, 0)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "open");
|
||||||
|
goto shutdown;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (!__db_util_interrupted()) {
|
||||||
|
if (verbose) {
|
||||||
|
(void)time(&now);
|
||||||
|
dbenv->errx(dbenv,
|
||||||
|
"running at %.24s", __os_ctime(&now, time_buf));
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((ret =
|
||||||
|
dbenv->lock_detect(dbenv, 0, atype, &rejected)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "DB_ENV->lock_detect");
|
||||||
|
goto shutdown;
|
||||||
|
}
|
||||||
|
if (verbose)
|
||||||
|
dbenv->errx(dbenv, "rejected %d locks", rejected);
|
||||||
|
|
||||||
|
/* Make a pass every "secs" secs and "usecs" usecs. */
|
||||||
|
if (secs == 0 && usecs == 0)
|
||||||
|
break;
|
||||||
|
__os_yield(dbenv->env, secs, usecs);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (0) {
|
||||||
|
shutdown: exitval = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Clean up the logfile. */
|
||||||
|
if (logfile != NULL)
|
||||||
|
(void)remove(logfile);
|
||||||
|
|
||||||
|
/* Clean up the environment. */
|
||||||
|
if (dbenv != NULL && (ret = dbenv->close(dbenv, 0)) != 0) {
|
||||||
|
exitval = 1;
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: dbenv->close: %s\n", progname, db_strerror(ret));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (passwd != NULL)
|
||||||
|
free(passwd);
|
||||||
|
|
||||||
|
/* Resend any caught signal. */
|
||||||
|
__db_util_sigresend();
|
||||||
|
|
||||||
|
return (exitval == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
db_deadlock_usage()
|
||||||
|
{
|
||||||
|
(void)fprintf(stderr,
|
||||||
|
"usage: %s [-Vv] [-a e | m | n | o | W | w | y]\n\t%s\n", progname,
|
||||||
|
"[-h home] [-L file] [-P password] [-t sec.usec]");
|
||||||
|
return (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
db_deadlock_version_check()
|
||||||
|
{
|
||||||
|
int v_major, v_minor, v_patch;
|
||||||
|
|
||||||
|
/* Make sure we're loaded with the right version of the DB library. */
|
||||||
|
(void)db_version(&v_major, &v_minor, &v_patch);
|
||||||
|
if (v_major != DB_VERSION_MAJOR || v_minor != DB_VERSION_MINOR) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: version %d.%d doesn't match library version %d.%d\n",
|
||||||
|
progname, DB_VERSION_MAJOR, DB_VERSION_MINOR,
|
||||||
|
v_major, v_minor);
|
||||||
|
return (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
158
build_vxworks/db_deadlock/db_deadlock20.wpj
Normal file
158
build_vxworks/db_deadlock/db_deadlock20.wpj
Normal file
@@ -0,0 +1,158 @@
|
|||||||
|
Document file - DO NOT EDIT
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_BUILDRULE
|
||||||
|
db_deadlock20.out
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_AR
|
||||||
|
ar386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_ARCHIVE
|
||||||
|
$(PRJ_DIR)/PENTIUMgnu/db_deadlock20.a
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_AS
|
||||||
|
cc386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_CC
|
||||||
|
cc386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_CFLAGS
|
||||||
|
-g \
|
||||||
|
-mpentium \
|
||||||
|
-ansi \
|
||||||
|
-nostdinc \
|
||||||
|
-DRW_MULTI_THREAD \
|
||||||
|
-D_REENTRANT \
|
||||||
|
-fvolatile \
|
||||||
|
-nostdlib \
|
||||||
|
-fno-builtin \
|
||||||
|
-fno-defer-pop \
|
||||||
|
-I$(PRJ_DIR)/.. \
|
||||||
|
-I$(PRJ_DIR)/../.. \
|
||||||
|
-I$(WIND_BASE)/target/h \
|
||||||
|
-DCPU=PENTIUM
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_CFLAGS_AS
|
||||||
|
-g \
|
||||||
|
-mpentium \
|
||||||
|
-ansi \
|
||||||
|
-nostdinc \
|
||||||
|
-fvolatile \
|
||||||
|
-nostdlib \
|
||||||
|
-fno-builtin \
|
||||||
|
-fno-defer-pop \
|
||||||
|
-P \
|
||||||
|
-x \
|
||||||
|
assembler-with-cpp \
|
||||||
|
-I$(WIND_BASE)/target/h \
|
||||||
|
-DCPU=PENTIUM
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_CPP
|
||||||
|
cc386 -E -P -xc
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_LD
|
||||||
|
ld386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_LDDEPS
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_LDFLAGS
|
||||||
|
-X -N
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_LD_PARTIAL_FLAGS
|
||||||
|
-X -r
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_NM
|
||||||
|
nm386 -g
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_OPTION_DEFINE_MACRO
|
||||||
|
-D
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_OPTION_INCLUDE_DIR
|
||||||
|
-I
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_POST_BUILD_RULE
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_PRJ_LIBS
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_SIZE
|
||||||
|
size386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_RO_DEPEND_PATH
|
||||||
|
{$(WIND_BASE)/target/h/} \
|
||||||
|
{$(WIND_BASE)/target/src/} \
|
||||||
|
{$(WIND_BASE)/target/config/}
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_TC
|
||||||
|
::tc_PENTIUMgnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_archive
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_db_deadlock20.out
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_objects
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD__CURRENT
|
||||||
|
PENTIUMgnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD__LIST
|
||||||
|
PENTIUMgnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_TYPE
|
||||||
|
::prj_vxApp
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_VERSION
|
||||||
|
2.0
|
||||||
|
<END>
|
||||||
|
<BEGIN> FILE_db_deadlock.c_dependDone
|
||||||
|
FALSE
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_deadlock.c_dependencies
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_deadlock.c_objects
|
||||||
|
db_deadlock.o
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_deadlock.c_tool
|
||||||
|
C/C++ compiler
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> PROJECT_FILES
|
||||||
|
$(PRJ_DIR)/db_deadlock.c
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> userComments
|
||||||
|
db_deadlock
|
||||||
|
<END>
|
||||||
192
build_vxworks/db_deadlock/db_deadlock22.wpj
Normal file
192
build_vxworks/db_deadlock/db_deadlock22.wpj
Normal file
@@ -0,0 +1,192 @@
|
|||||||
|
Document file - DO NOT EDIT
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_BUILDRULE
|
||||||
|
db_deadlock22.out
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_AR
|
||||||
|
arpentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_ARCHIVE
|
||||||
|
$(PRJ_DIR)/PENTIUM2gnu/db_deadlock22.a
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_AS
|
||||||
|
ccpentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CC
|
||||||
|
ccpentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CC_ARCH_SPEC
|
||||||
|
-mcpu=pentiumpro -march=pentiumpro
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CFLAGS
|
||||||
|
-g \
|
||||||
|
-mcpu=pentiumpro \
|
||||||
|
-march=pentiumpro \
|
||||||
|
-ansi \
|
||||||
|
-nostdlib \
|
||||||
|
-DRW_MULTI_THREAD \
|
||||||
|
-D_REENTRANT \
|
||||||
|
-fvolatile \
|
||||||
|
-fno-builtin \
|
||||||
|
-fno-defer-pop \
|
||||||
|
-I$(PRJ_DIR)/.. \
|
||||||
|
-I$(PRJ_DIR)/../.. \
|
||||||
|
-I$(WIND_BASE)/target/h \
|
||||||
|
-DCPU=PENTIUM2 \
|
||||||
|
-DTOOL_FAMILY=gnu \
|
||||||
|
-DTOOL=gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CFLAGS_AS
|
||||||
|
-g \
|
||||||
|
-mcpu=pentiumpro \
|
||||||
|
-march=pentiumpro \
|
||||||
|
-ansi \
|
||||||
|
-nostdlib \
|
||||||
|
-fno-builtin \
|
||||||
|
-fno-defer-pop \
|
||||||
|
-P \
|
||||||
|
-xassembler-with-cpp \
|
||||||
|
-I$(WIND_BASE)/target/h \
|
||||||
|
-DCPU=PENTIUM2 \
|
||||||
|
-DTOOL_FAMILY=gnu \
|
||||||
|
-DTOOL=gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CPP
|
||||||
|
ccpentium -E -P
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_HEX_FLAGS
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD
|
||||||
|
ldpentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_LDFLAGS
|
||||||
|
-X -N
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD_PARTIAL
|
||||||
|
ccpentium -r -nostdlib -Wl,-X
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD_PARTIAL_FLAGS
|
||||||
|
-X -r
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_NM
|
||||||
|
nmpentium -g
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_DEFINE_MACRO
|
||||||
|
-D
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_DEPEND
|
||||||
|
-M -w
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_GENERATE_DEPENDENCY_FILE
|
||||||
|
-MD
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_INCLUDE_DIR
|
||||||
|
-I
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_LANG_C
|
||||||
|
-xc
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_UNDEFINE_MACRO
|
||||||
|
-U
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_POST_BUILD_RULE
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_PRJ_LIBS
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_SIZE
|
||||||
|
sizepentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_TOOL_FAMILY
|
||||||
|
gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_RO_DEPEND_PATH
|
||||||
|
{$(WIND_BASE)/target/h/} \
|
||||||
|
{$(WIND_BASE)/target/src/} \
|
||||||
|
{$(WIND_BASE)/target/config/}
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_TC
|
||||||
|
::tc_PENTIUM2gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_archive
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_db_deadlock22.out
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_db_deadlock22.pl
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_objects
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD__CURRENT
|
||||||
|
PENTIUM2gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD__LIST
|
||||||
|
PENTIUM2gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_TYPE
|
||||||
|
::prj_vxApp
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_VERSION
|
||||||
|
2.2
|
||||||
|
<END>
|
||||||
|
<BEGIN> FILE_db_deadlock.c_dependDone
|
||||||
|
FALSE
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_deadlock.c_dependencies
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_deadlock.c_objects
|
||||||
|
db_deadlock.o
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_deadlock.c_tool
|
||||||
|
C/C++ compiler
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> PROJECT_FILES
|
||||||
|
$(PRJ_DIR)/db_deadlock.c
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> userComments
|
||||||
|
db_deadlock
|
||||||
|
<END>
|
||||||
481
build_vxworks/db_dump/db_dump.c
Normal file
481
build_vxworks/db_dump/db_dump.c
Normal file
@@ -0,0 +1,481 @@
|
|||||||
|
/*-
|
||||||
|
* See the file LICENSE for redistribution information.
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996,2008 Oracle. All rights reserved.
|
||||||
|
*
|
||||||
|
* $Id: db_dump.c 63573 2008-05-23 21:43:21Z trent.nelson $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "db_config.h"
|
||||||
|
|
||||||
|
#include "db_int.h"
|
||||||
|
#include "dbinc/db_page.h"
|
||||||
|
#include "dbinc/db_am.h"
|
||||||
|
|
||||||
|
#ifndef lint
|
||||||
|
static const char copyright[] =
|
||||||
|
"Copyright (c) 1996,2008 Oracle. All rights reserved.\n";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int db_dump_db_init __P((DB_ENV *, char *, int, u_int32_t, int *));
|
||||||
|
int db_dump_dump_sub __P((DB_ENV *, DB *, char *, int, int));
|
||||||
|
int db_dump_main __P((int, char *[]));
|
||||||
|
int db_dump_show_subs __P((DB *));
|
||||||
|
int db_dump_usage __P((void));
|
||||||
|
int db_dump_version_check __P((void));
|
||||||
|
|
||||||
|
const char *progname;
|
||||||
|
|
||||||
|
int
|
||||||
|
db_dump(args)
|
||||||
|
char *args;
|
||||||
|
{
|
||||||
|
int argc;
|
||||||
|
char **argv;
|
||||||
|
|
||||||
|
__db_util_arg("db_dump", args, &argc, &argv);
|
||||||
|
return (db_dump_main(argc, argv) ? EXIT_FAILURE : EXIT_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#define ERROR_RETURN ERROR
|
||||||
|
|
||||||
|
int
|
||||||
|
db_dump_main(argc, argv)
|
||||||
|
int argc;
|
||||||
|
char *argv[];
|
||||||
|
{
|
||||||
|
extern char *optarg;
|
||||||
|
extern int optind, __db_getopt_reset;
|
||||||
|
DB_ENV *dbenv;
|
||||||
|
DB *dbp;
|
||||||
|
u_int32_t cache;
|
||||||
|
int ch;
|
||||||
|
int exitval, keyflag, lflag, nflag, pflag, private;
|
||||||
|
int ret, Rflag, rflag, resize;
|
||||||
|
char *dopt, *home, *passwd, *subname;
|
||||||
|
|
||||||
|
if ((progname = __db_rpath(argv[0])) == NULL)
|
||||||
|
progname = argv[0];
|
||||||
|
else
|
||||||
|
++progname;
|
||||||
|
|
||||||
|
if ((ret = db_dump_version_check()) != 0)
|
||||||
|
return (ret);
|
||||||
|
|
||||||
|
dbenv = NULL;
|
||||||
|
dbp = NULL;
|
||||||
|
exitval = lflag = nflag = pflag = rflag = Rflag = 0;
|
||||||
|
keyflag = 0;
|
||||||
|
cache = MEGABYTE;
|
||||||
|
private = 0;
|
||||||
|
dopt = home = passwd = subname = NULL;
|
||||||
|
__db_getopt_reset = 1;
|
||||||
|
while ((ch = getopt(argc, argv, "d:f:h:klNpP:rRs:V")) != EOF)
|
||||||
|
switch (ch) {
|
||||||
|
case 'd':
|
||||||
|
dopt = optarg;
|
||||||
|
break;
|
||||||
|
case 'f':
|
||||||
|
if (freopen(optarg, "w", stdout) == NULL) {
|
||||||
|
fprintf(stderr, "%s: %s: reopen: %s\n",
|
||||||
|
progname, optarg, strerror(errno));
|
||||||
|
return (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'h':
|
||||||
|
home = optarg;
|
||||||
|
break;
|
||||||
|
case 'k':
|
||||||
|
keyflag = 1;
|
||||||
|
break;
|
||||||
|
case 'l':
|
||||||
|
lflag = 1;
|
||||||
|
break;
|
||||||
|
case 'N':
|
||||||
|
nflag = 1;
|
||||||
|
break;
|
||||||
|
case 'P':
|
||||||
|
passwd = strdup(optarg);
|
||||||
|
memset(optarg, 0, strlen(optarg));
|
||||||
|
if (passwd == NULL) {
|
||||||
|
fprintf(stderr, "%s: strdup: %s\n",
|
||||||
|
progname, strerror(errno));
|
||||||
|
return (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'p':
|
||||||
|
pflag = 1;
|
||||||
|
break;
|
||||||
|
case 's':
|
||||||
|
subname = optarg;
|
||||||
|
break;
|
||||||
|
case 'R':
|
||||||
|
Rflag = 1;
|
||||||
|
/* DB_AGGRESSIVE requires DB_SALVAGE */
|
||||||
|
/* FALLTHROUGH */
|
||||||
|
case 'r':
|
||||||
|
rflag = 1;
|
||||||
|
break;
|
||||||
|
case 'V':
|
||||||
|
printf("%s\n", db_version(NULL, NULL, NULL));
|
||||||
|
return (EXIT_SUCCESS);
|
||||||
|
case '?':
|
||||||
|
default:
|
||||||
|
return (db_dump_usage());
|
||||||
|
}
|
||||||
|
argc -= optind;
|
||||||
|
argv += optind;
|
||||||
|
|
||||||
|
if (argc != 1)
|
||||||
|
return (db_dump_usage());
|
||||||
|
|
||||||
|
if (dopt != NULL && pflag) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: the -d and -p options may not both be specified\n",
|
||||||
|
progname);
|
||||||
|
return (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
if (lflag && subname != NULL) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: the -l and -s options may not both be specified\n",
|
||||||
|
progname);
|
||||||
|
return (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (keyflag && rflag) {
|
||||||
|
fprintf(stderr, "%s: %s",
|
||||||
|
"the -k and -r or -R options may not both be specified\n",
|
||||||
|
progname);
|
||||||
|
return (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (subname != NULL && rflag) {
|
||||||
|
fprintf(stderr, "%s: %s",
|
||||||
|
"the -s and -r or R options may not both be specified\n",
|
||||||
|
progname);
|
||||||
|
return (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Handle possible interruptions. */
|
||||||
|
__db_util_siginit();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Create an environment object and initialize it for error
|
||||||
|
* reporting.
|
||||||
|
*/
|
||||||
|
retry: if ((ret = db_env_create(&dbenv, 0)) != 0) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: db_env_create: %s\n", progname, db_strerror(ret));
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
dbenv->set_errfile(dbenv, stderr);
|
||||||
|
dbenv->set_errpfx(dbenv, progname);
|
||||||
|
if (nflag) {
|
||||||
|
if ((ret = dbenv->set_flags(dbenv, DB_NOLOCKING, 1)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "set_flags: DB_NOLOCKING");
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
if ((ret = dbenv->set_flags(dbenv, DB_NOPANIC, 1)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "set_flags: DB_NOPANIC");
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (passwd != NULL && (ret = dbenv->set_encrypt(dbenv,
|
||||||
|
passwd, DB_ENCRYPT_AES)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "set_passwd");
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Initialize the environment. */
|
||||||
|
if (db_dump_db_init(dbenv, home, rflag, cache, &private) != 0)
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
/* Create the DB object and open the file. */
|
||||||
|
if ((ret = db_create(&dbp, dbenv, 0)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "db_create");
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If we're salvaging, don't do an open; it might not be safe.
|
||||||
|
* Dispatch now into the salvager.
|
||||||
|
*/
|
||||||
|
if (rflag) {
|
||||||
|
/* The verify method is a destructor. */
|
||||||
|
ret = dbp->verify(dbp, argv[0], NULL, stdout,
|
||||||
|
DB_SALVAGE |
|
||||||
|
(Rflag ? DB_AGGRESSIVE : 0) |
|
||||||
|
(pflag ? DB_PRINTABLE : 0));
|
||||||
|
dbp = NULL;
|
||||||
|
if (ret != 0)
|
||||||
|
goto err;
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((ret = dbp->open(dbp, NULL,
|
||||||
|
argv[0], subname, DB_UNKNOWN, DB_RDONLY, 0)) != 0) {
|
||||||
|
dbp->err(dbp, ret, "open: %s", argv[0]);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
if (private != 0) {
|
||||||
|
if ((ret = __db_util_cache(dbp, &cache, &resize)) != 0)
|
||||||
|
goto err;
|
||||||
|
if (resize) {
|
||||||
|
(void)dbp->close(dbp, 0);
|
||||||
|
dbp = NULL;
|
||||||
|
|
||||||
|
(void)dbenv->close(dbenv, 0);
|
||||||
|
dbenv = NULL;
|
||||||
|
goto retry;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dopt != NULL) {
|
||||||
|
if ((ret = __db_dumptree(dbp, NULL, dopt, NULL)) != 0) {
|
||||||
|
dbp->err(dbp, ret, "__db_dumptree: %s", argv[0]);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
} else if (lflag) {
|
||||||
|
if (dbp->get_multiple(dbp)) {
|
||||||
|
if (db_dump_show_subs(dbp))
|
||||||
|
goto err;
|
||||||
|
} else {
|
||||||
|
dbp->errx(dbp,
|
||||||
|
"%s: does not contain multiple databases", argv[0]);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (subname == NULL && dbp->get_multiple(dbp)) {
|
||||||
|
if (db_dump_dump_sub(dbenv, dbp, argv[0], pflag, keyflag))
|
||||||
|
goto err;
|
||||||
|
} else
|
||||||
|
if (dbp->dump(dbp, NULL,
|
||||||
|
__db_pr_callback, stdout, pflag, keyflag))
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (0) {
|
||||||
|
err: exitval = 1;
|
||||||
|
}
|
||||||
|
done: if (dbp != NULL && (ret = dbp->close(dbp, 0)) != 0) {
|
||||||
|
exitval = 1;
|
||||||
|
dbenv->err(dbenv, ret, "close");
|
||||||
|
}
|
||||||
|
if (dbenv != NULL && (ret = dbenv->close(dbenv, 0)) != 0) {
|
||||||
|
exitval = 1;
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: dbenv->close: %s\n", progname, db_strerror(ret));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (passwd != NULL)
|
||||||
|
free(passwd);
|
||||||
|
|
||||||
|
/* Resend any caught signal. */
|
||||||
|
__db_util_sigresend();
|
||||||
|
|
||||||
|
return (exitval == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* db_init --
|
||||||
|
* Initialize the environment.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
db_dump_db_init(dbenv, home, is_salvage, cache, is_privatep)
|
||||||
|
DB_ENV *dbenv;
|
||||||
|
char *home;
|
||||||
|
int is_salvage;
|
||||||
|
u_int32_t cache;
|
||||||
|
int *is_privatep;
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Try and use the underlying environment when opening a database.
|
||||||
|
* We wish to use the buffer pool so our information is as up-to-date
|
||||||
|
* as possible, even if the mpool cache hasn't been flushed.
|
||||||
|
*
|
||||||
|
* If we are not doing a salvage, we want to join the environment;
|
||||||
|
* if a locking system is present, this will let us use it and be
|
||||||
|
* safe to run concurrently with other threads of control. (We never
|
||||||
|
* need to use transactions explicitly, as we're read-only.) Note
|
||||||
|
* that in CDB, too, this will configure our environment
|
||||||
|
* appropriately, and our cursors will (correctly) do locking as CDB
|
||||||
|
* read cursors.
|
||||||
|
*
|
||||||
|
* If we are doing a salvage, the verification code will protest
|
||||||
|
* if we initialize transactions, logging, or locking; do an
|
||||||
|
* explicit DB_INIT_MPOOL to try to join any existing environment
|
||||||
|
* before we create our own.
|
||||||
|
*/
|
||||||
|
*is_privatep = 0;
|
||||||
|
if ((ret = dbenv->open(dbenv, home,
|
||||||
|
DB_USE_ENVIRON | (is_salvage ? DB_INIT_MPOOL : 0), 0)) == 0)
|
||||||
|
return (0);
|
||||||
|
if (ret == DB_VERSION_MISMATCH)
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* An environment is required because we may be trying to look at
|
||||||
|
* databases in directories other than the current one. We could
|
||||||
|
* avoid using an environment iff the -h option wasn't specified,
|
||||||
|
* but that seems like more work than it's worth.
|
||||||
|
*
|
||||||
|
* No environment exists (or, at least no environment that includes
|
||||||
|
* an mpool region exists). Create one, but make it private so that
|
||||||
|
* no files are actually created.
|
||||||
|
*/
|
||||||
|
*is_privatep = 1;
|
||||||
|
if ((ret = dbenv->set_cachesize(dbenv, 0, cache, 1)) == 0 &&
|
||||||
|
(ret = dbenv->open(dbenv, home,
|
||||||
|
DB_CREATE | DB_INIT_MPOOL | DB_PRIVATE | DB_USE_ENVIRON, 0)) == 0)
|
||||||
|
return (0);
|
||||||
|
|
||||||
|
/* An environment is required. */
|
||||||
|
err: dbenv->err(dbenv, ret, "DB_ENV->open");
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* dump_sub --
|
||||||
|
* Dump out the records for a DB containing subdatabases.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
db_dump_dump_sub(dbenv, parent_dbp, parent_name, pflag, keyflag)
|
||||||
|
DB_ENV *dbenv;
|
||||||
|
DB *parent_dbp;
|
||||||
|
char *parent_name;
|
||||||
|
int pflag, keyflag;
|
||||||
|
{
|
||||||
|
DB *dbp;
|
||||||
|
DBC *dbcp;
|
||||||
|
DBT key, data;
|
||||||
|
int ret;
|
||||||
|
char *subdb;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get a cursor and step through the database, dumping out each
|
||||||
|
* subdatabase.
|
||||||
|
*/
|
||||||
|
if ((ret = parent_dbp->cursor(parent_dbp, NULL, &dbcp, 0)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "DB->cursor");
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
memset(&key, 0, sizeof(key));
|
||||||
|
memset(&data, 0, sizeof(data));
|
||||||
|
while ((ret = dbcp->get(dbcp, &key, &data,
|
||||||
|
DB_IGNORE_LEASE | DB_NEXT)) == 0) {
|
||||||
|
/* Nul terminate the subdatabase name. */
|
||||||
|
if ((subdb = malloc(key.size + 1)) == NULL) {
|
||||||
|
dbenv->err(dbenv, ENOMEM, NULL);
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
memcpy(subdb, key.data, key.size);
|
||||||
|
subdb[key.size] = '\0';
|
||||||
|
|
||||||
|
/* Create the DB object and open the file. */
|
||||||
|
if ((ret = db_create(&dbp, dbenv, 0)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "db_create");
|
||||||
|
free(subdb);
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
if ((ret = dbp->open(dbp, NULL,
|
||||||
|
parent_name, subdb, DB_UNKNOWN, DB_RDONLY, 0)) != 0)
|
||||||
|
dbp->err(dbp, ret,
|
||||||
|
"DB->open: %s:%s", parent_name, subdb);
|
||||||
|
if (ret == 0 && dbp->dump(
|
||||||
|
dbp, subdb, __db_pr_callback, stdout, pflag, keyflag))
|
||||||
|
ret = 1;
|
||||||
|
(void)dbp->close(dbp, 0);
|
||||||
|
free(subdb);
|
||||||
|
if (ret != 0)
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
if (ret != DB_NOTFOUND) {
|
||||||
|
parent_dbp->err(parent_dbp, ret, "DBcursor->get");
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((ret = dbcp->close(dbcp)) != 0) {
|
||||||
|
parent_dbp->err(parent_dbp, ret, "DBcursor->close");
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* show_subs --
|
||||||
|
* Display the subdatabases for a database.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
db_dump_show_subs(dbp)
|
||||||
|
DB *dbp;
|
||||||
|
{
|
||||||
|
DBC *dbcp;
|
||||||
|
DBT key, data;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get a cursor and step through the database, printing out the key
|
||||||
|
* of each key/data pair.
|
||||||
|
*/
|
||||||
|
if ((ret = dbp->cursor(dbp, NULL, &dbcp, 0)) != 0) {
|
||||||
|
dbp->err(dbp, ret, "DB->cursor");
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
memset(&key, 0, sizeof(key));
|
||||||
|
memset(&data, 0, sizeof(data));
|
||||||
|
while ((ret = dbcp->get(dbcp, &key, &data,
|
||||||
|
DB_IGNORE_LEASE | DB_NEXT)) == 0) {
|
||||||
|
if ((ret = dbp->dbenv->prdbt(
|
||||||
|
&key, 1, NULL, stdout, __db_pr_callback, 0)) != 0) {
|
||||||
|
dbp->errx(dbp, NULL);
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (ret != DB_NOTFOUND) {
|
||||||
|
dbp->err(dbp, ret, "DBcursor->get");
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((ret = dbcp->close(dbcp)) != 0) {
|
||||||
|
dbp->err(dbp, ret, "DBcursor->close");
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* usage --
|
||||||
|
* Display the usage message.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
db_dump_usage()
|
||||||
|
{
|
||||||
|
(void)fprintf(stderr, "usage: %s [-klNprRV]\n\t%s\n",
|
||||||
|
progname,
|
||||||
|
"[-d ahr] [-f output] [-h home] [-P password] [-s database] db_file");
|
||||||
|
return (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
db_dump_version_check()
|
||||||
|
{
|
||||||
|
int v_major, v_minor, v_patch;
|
||||||
|
|
||||||
|
/* Make sure we're loaded with the right version of the DB library. */
|
||||||
|
(void)db_version(&v_major, &v_minor, &v_patch);
|
||||||
|
if (v_major != DB_VERSION_MAJOR || v_minor != DB_VERSION_MINOR) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: version %d.%d doesn't match library version %d.%d\n",
|
||||||
|
progname, DB_VERSION_MAJOR, DB_VERSION_MINOR,
|
||||||
|
v_major, v_minor);
|
||||||
|
return (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
158
build_vxworks/db_dump/db_dump20.wpj
Normal file
158
build_vxworks/db_dump/db_dump20.wpj
Normal file
@@ -0,0 +1,158 @@
|
|||||||
|
Document file - DO NOT EDIT
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_BUILDRULE
|
||||||
|
db_dump20.out
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_AR
|
||||||
|
ar386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_ARCHIVE
|
||||||
|
$(PRJ_DIR)/PENTIUMgnu/db_dump20.a
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_AS
|
||||||
|
cc386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_CC
|
||||||
|
cc386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_CFLAGS
|
||||||
|
-g \
|
||||||
|
-mpentium \
|
||||||
|
-ansi \
|
||||||
|
-nostdinc \
|
||||||
|
-DRW_MULTI_THREAD \
|
||||||
|
-D_REENTRANT \
|
||||||
|
-fvolatile \
|
||||||
|
-nostdlib \
|
||||||
|
-fno-builtin \
|
||||||
|
-fno-defer-pop \
|
||||||
|
-I$(PRJ_DIR)/.. \
|
||||||
|
-I$(PRJ_DIR)/../.. \
|
||||||
|
-I$(WIND_BASE)/target/h \
|
||||||
|
-DCPU=PENTIUM
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_CFLAGS_AS
|
||||||
|
-g \
|
||||||
|
-mpentium \
|
||||||
|
-ansi \
|
||||||
|
-nostdinc \
|
||||||
|
-fvolatile \
|
||||||
|
-nostdlib \
|
||||||
|
-fno-builtin \
|
||||||
|
-fno-defer-pop \
|
||||||
|
-P \
|
||||||
|
-x \
|
||||||
|
assembler-with-cpp \
|
||||||
|
-I$(WIND_BASE)/target/h \
|
||||||
|
-DCPU=PENTIUM
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_CPP
|
||||||
|
cc386 -E -P -xc
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_LD
|
||||||
|
ld386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_LDDEPS
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_LDFLAGS
|
||||||
|
-X -N
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_LD_PARTIAL_FLAGS
|
||||||
|
-X -r
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_NM
|
||||||
|
nm386 -g
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_OPTION_DEFINE_MACRO
|
||||||
|
-D
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_OPTION_INCLUDE_DIR
|
||||||
|
-I
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_POST_BUILD_RULE
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_PRJ_LIBS
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_SIZE
|
||||||
|
size386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_RO_DEPEND_PATH
|
||||||
|
{$(WIND_BASE)/target/h/} \
|
||||||
|
{$(WIND_BASE)/target/src/} \
|
||||||
|
{$(WIND_BASE)/target/config/}
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_TC
|
||||||
|
::tc_PENTIUMgnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_archive
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_db_dump20.out
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_objects
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD__CURRENT
|
||||||
|
PENTIUMgnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD__LIST
|
||||||
|
PENTIUMgnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_TYPE
|
||||||
|
::prj_vxApp
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_VERSION
|
||||||
|
2.0
|
||||||
|
<END>
|
||||||
|
<BEGIN> FILE_db_dump.c_dependDone
|
||||||
|
FALSE
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_dump.c_dependencies
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_dump.c_objects
|
||||||
|
db_dump.o
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_dump.c_tool
|
||||||
|
C/C++ compiler
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> PROJECT_FILES
|
||||||
|
$(PRJ_DIR)/db_dump.c
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> userComments
|
||||||
|
db_dump
|
||||||
|
<END>
|
||||||
192
build_vxworks/db_dump/db_dump22.wpj
Normal file
192
build_vxworks/db_dump/db_dump22.wpj
Normal file
@@ -0,0 +1,192 @@
|
|||||||
|
Document file - DO NOT EDIT
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_BUILDRULE
|
||||||
|
db_dump22.out
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_AR
|
||||||
|
arpentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_ARCHIVE
|
||||||
|
$(PRJ_DIR)/PENTIUM2gnu/db_dump22.a
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_AS
|
||||||
|
ccpentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CC
|
||||||
|
ccpentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CC_ARCH_SPEC
|
||||||
|
-mcpu=pentiumpro -march=pentiumpro
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CFLAGS
|
||||||
|
-g \
|
||||||
|
-mcpu=pentiumpro \
|
||||||
|
-march=pentiumpro \
|
||||||
|
-ansi \
|
||||||
|
-nostdlib \
|
||||||
|
-DRW_MULTI_THREAD \
|
||||||
|
-D_REENTRANT \
|
||||||
|
-fvolatile \
|
||||||
|
-fno-builtin \
|
||||||
|
-fno-defer-pop \
|
||||||
|
-I$(PRJ_DIR)/.. \
|
||||||
|
-I$(PRJ_DIR)/../.. \
|
||||||
|
-I$(WIND_BASE)/target/h \
|
||||||
|
-DCPU=PENTIUM2 \
|
||||||
|
-DTOOL_FAMILY=gnu \
|
||||||
|
-DTOOL=gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CFLAGS_AS
|
||||||
|
-g \
|
||||||
|
-mcpu=pentiumpro \
|
||||||
|
-march=pentiumpro \
|
||||||
|
-ansi \
|
||||||
|
-nostdlib \
|
||||||
|
-fno-builtin \
|
||||||
|
-fno-defer-pop \
|
||||||
|
-P \
|
||||||
|
-xassembler-with-cpp \
|
||||||
|
-I$(WIND_BASE)/target/h \
|
||||||
|
-DCPU=PENTIUM2 \
|
||||||
|
-DTOOL_FAMILY=gnu \
|
||||||
|
-DTOOL=gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CPP
|
||||||
|
ccpentium -E -P
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_HEX_FLAGS
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD
|
||||||
|
ldpentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_LDFLAGS
|
||||||
|
-X -N
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD_PARTIAL
|
||||||
|
ccpentium -r -nostdlib -Wl,-X
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD_PARTIAL_FLAGS
|
||||||
|
-X -r
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_NM
|
||||||
|
nmpentium -g
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_DEFINE_MACRO
|
||||||
|
-D
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_DEPEND
|
||||||
|
-M -w
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_GENERATE_DEPENDENCY_FILE
|
||||||
|
-MD
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_INCLUDE_DIR
|
||||||
|
-I
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_LANG_C
|
||||||
|
-xc
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_UNDEFINE_MACRO
|
||||||
|
-U
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_POST_BUILD_RULE
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_PRJ_LIBS
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_SIZE
|
||||||
|
sizepentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_TOOL_FAMILY
|
||||||
|
gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_RO_DEPEND_PATH
|
||||||
|
{$(WIND_BASE)/target/h/} \
|
||||||
|
{$(WIND_BASE)/target/src/} \
|
||||||
|
{$(WIND_BASE)/target/config/}
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_TC
|
||||||
|
::tc_PENTIUM2gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_archive
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_db_dump22.out
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_db_dump22.pl
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_objects
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD__CURRENT
|
||||||
|
PENTIUM2gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD__LIST
|
||||||
|
PENTIUM2gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_TYPE
|
||||||
|
::prj_vxApp
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_VERSION
|
||||||
|
2.2
|
||||||
|
<END>
|
||||||
|
<BEGIN> FILE_db_dump.c_dependDone
|
||||||
|
FALSE
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_dump.c_dependencies
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_dump.c_objects
|
||||||
|
db_dump.o
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_dump.c_tool
|
||||||
|
C/C++ compiler
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> PROJECT_FILES
|
||||||
|
$(PRJ_DIR)/db_dump.c
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> userComments
|
||||||
|
db_dump
|
||||||
|
<END>
|
||||||
879
build_vxworks/db_hotbackup/db_hotbackup.c
Normal file
879
build_vxworks/db_hotbackup/db_hotbackup.c
Normal file
@@ -0,0 +1,879 @@
|
|||||||
|
/*-
|
||||||
|
* See the file LICENSE for redistribution information.
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996,2008 Oracle. All rights reserved.
|
||||||
|
*
|
||||||
|
* $Id: db_hotbackup.c 63573 2008-05-23 21:43:21Z trent.nelson $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "db_config.h"
|
||||||
|
|
||||||
|
#include "db_int.h"
|
||||||
|
#include "dbinc/log.h"
|
||||||
|
#include "dbinc/db_page.h"
|
||||||
|
#include "dbinc/qam.h"
|
||||||
|
|
||||||
|
#ifndef lint
|
||||||
|
static const char copyright[] =
|
||||||
|
"Copyright (c) 1996,2008 Oracle. All rights reserved.\n";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
enum which_open { OPEN_ORIGINAL, OPEN_HOT_BACKUP };
|
||||||
|
|
||||||
|
int db_hotbackup_backup_dir_clean __P((DB_ENV *, char *, char *, int *, int, int));
|
||||||
|
int db_hotbackup_data_copy __P((DB_ENV *, char *, char *, char *, int));
|
||||||
|
int db_hotbackup_env_init __P((DB_ENV **,
|
||||||
|
char *, char **, char ***, char *, enum which_open));
|
||||||
|
int db_hotbackup_main __P((int, char *[]));
|
||||||
|
int db_hotbackup_read_data_dir __P((DB_ENV *, char *, char *, char *, int, int));
|
||||||
|
int db_hotbackup_read_log_dir __P((DB_ENV *, char *, char *, char *, int *, int, int));
|
||||||
|
int db_hotbackup_usage __P((void));
|
||||||
|
int db_hotbackup_version_check __P((void));
|
||||||
|
|
||||||
|
const char *progname;
|
||||||
|
|
||||||
|
int
|
||||||
|
db_hotbackup(args)
|
||||||
|
char *args;
|
||||||
|
{
|
||||||
|
int argc;
|
||||||
|
char **argv;
|
||||||
|
|
||||||
|
__db_util_arg("db_hotbackup", args, &argc, &argv);
|
||||||
|
return (db_hotbackup_main(argc, argv) ? EXIT_FAILURE : EXIT_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#define ERROR_RETURN ERROR
|
||||||
|
|
||||||
|
int
|
||||||
|
db_hotbackup_main(argc, argv)
|
||||||
|
int argc;
|
||||||
|
char *argv[];
|
||||||
|
{
|
||||||
|
extern char *optarg;
|
||||||
|
extern int optind, __db_getopt_reset;
|
||||||
|
time_t now;
|
||||||
|
DB_ENV *dbenv;
|
||||||
|
u_int data_cnt, data_next;
|
||||||
|
int ch, checkpoint, copy_min, db_config, exitval;
|
||||||
|
int remove_max, ret, update, verbose;
|
||||||
|
char *backup_dir, **data_dir, **dir, *home, *log_dir, *passwd;
|
||||||
|
char home_buf[DB_MAXPATHLEN], time_buf[CTIME_BUFLEN];
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Make sure all verbose message are output before any error messages
|
||||||
|
* in the case where the output is being logged into a file. This
|
||||||
|
* call has to be done before any operation is performed on the stream.
|
||||||
|
*
|
||||||
|
* Use unbuffered I/O because line-buffered I/O requires a buffer, and
|
||||||
|
* some operating systems have buffer alignment and size constraints we
|
||||||
|
* don't want to care about. There isn't enough output for the calls
|
||||||
|
* to matter.
|
||||||
|
*/
|
||||||
|
setbuf(stdout, NULL);
|
||||||
|
|
||||||
|
if ((progname = __db_rpath(argv[0])) == NULL)
|
||||||
|
progname = argv[0];
|
||||||
|
else
|
||||||
|
++progname;
|
||||||
|
|
||||||
|
if ((ret = db_hotbackup_version_check()) != 0)
|
||||||
|
return (ret);
|
||||||
|
|
||||||
|
checkpoint = db_config = data_cnt =
|
||||||
|
data_next = exitval = update = verbose = 0;
|
||||||
|
data_dir = NULL;
|
||||||
|
backup_dir = home = passwd = NULL;
|
||||||
|
log_dir = NULL;
|
||||||
|
copy_min = remove_max = 0;
|
||||||
|
__db_getopt_reset = 1;
|
||||||
|
while ((ch = getopt(argc, argv, "b:cDd:h:l:P:uVv")) != EOF)
|
||||||
|
switch (ch) {
|
||||||
|
case 'b':
|
||||||
|
backup_dir = optarg;
|
||||||
|
break;
|
||||||
|
case 'c':
|
||||||
|
checkpoint = 1;
|
||||||
|
break;
|
||||||
|
case 'D':
|
||||||
|
db_config = 1;
|
||||||
|
break;
|
||||||
|
case 'd':
|
||||||
|
/*
|
||||||
|
* User can specify a list of directories -- keep an
|
||||||
|
* array, leaving room for the trailing NULL.
|
||||||
|
*/
|
||||||
|
if (data_dir == NULL || data_next >= data_cnt - 2) {
|
||||||
|
data_cnt = data_cnt == 0 ? 20 : data_cnt * 2;
|
||||||
|
if ((data_dir = realloc(data_dir,
|
||||||
|
data_cnt * sizeof(*data_dir))) == NULL) {
|
||||||
|
fprintf(stderr, "%s: %s\n",
|
||||||
|
progname, strerror(errno));
|
||||||
|
return (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
data_dir[data_next++] = optarg;
|
||||||
|
break;
|
||||||
|
case 'h':
|
||||||
|
home = optarg;
|
||||||
|
break;
|
||||||
|
case 'l':
|
||||||
|
log_dir = optarg;
|
||||||
|
break;
|
||||||
|
case 'P':
|
||||||
|
passwd = strdup(optarg);
|
||||||
|
memset(optarg, 0, strlen(optarg));
|
||||||
|
if (passwd == NULL) {
|
||||||
|
fprintf(stderr, "%s: strdup: %s\n",
|
||||||
|
progname, strerror(errno));
|
||||||
|
return (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'u':
|
||||||
|
update = 1;
|
||||||
|
break;
|
||||||
|
case 'V':
|
||||||
|
printf("%s\n", db_version(NULL, NULL, NULL));
|
||||||
|
return (EXIT_SUCCESS);
|
||||||
|
case 'v':
|
||||||
|
verbose = 1;
|
||||||
|
break;
|
||||||
|
case '?':
|
||||||
|
default:
|
||||||
|
return (db_hotbackup_usage());
|
||||||
|
}
|
||||||
|
argc -= optind;
|
||||||
|
argv += optind;
|
||||||
|
|
||||||
|
if (argc != 0)
|
||||||
|
return (db_hotbackup_usage());
|
||||||
|
|
||||||
|
/* NULL-terminate any list of data directories. */
|
||||||
|
if (data_dir != NULL) {
|
||||||
|
data_dir[data_next] = NULL;
|
||||||
|
/*
|
||||||
|
* -d is relative to the current directory, to run a checkpoint
|
||||||
|
* we must have directories relative to the environment.
|
||||||
|
*/
|
||||||
|
if (checkpoint == 1) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: cannot specify -d and -c\n", progname);
|
||||||
|
return (db_hotbackup_usage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (db_config && (data_dir != NULL || log_dir != NULL)) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: cannot specify -D and -d or -l\n", progname);
|
||||||
|
return (db_hotbackup_usage());
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Handle possible interruptions. */
|
||||||
|
__db_util_siginit();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The home directory defaults to the environment variable DB_HOME.
|
||||||
|
* The log directory defaults to the home directory.
|
||||||
|
*
|
||||||
|
* We require a source database environment directory and a target
|
||||||
|
* backup directory.
|
||||||
|
*/
|
||||||
|
if (home == NULL) {
|
||||||
|
home = home_buf;
|
||||||
|
if ((ret = __os_getenv(
|
||||||
|
NULL, "DB_HOME", &home, sizeof(home_buf))) != 0) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s failed to get environment variable DB_HOME: %s\n",
|
||||||
|
progname, db_strerror(ret));
|
||||||
|
return (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* home set to NULL if __os_getenv failed to find DB_HOME.
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
if (home == NULL) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: no source database environment specified\n", progname);
|
||||||
|
return (db_hotbackup_usage());
|
||||||
|
}
|
||||||
|
if (backup_dir == NULL) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: no target backup directory specified\n", progname);
|
||||||
|
return (db_hotbackup_usage());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (verbose) {
|
||||||
|
(void)time(&now);
|
||||||
|
printf("%s: hot backup started at %s",
|
||||||
|
progname, __os_ctime(&now, time_buf));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Open the source environment. */
|
||||||
|
if (db_hotbackup_env_init(&dbenv, home,
|
||||||
|
(db_config || log_dir != NULL) ? &log_dir : NULL,
|
||||||
|
db_config ? &data_dir : NULL,
|
||||||
|
passwd, OPEN_ORIGINAL) != 0)
|
||||||
|
goto shutdown;
|
||||||
|
|
||||||
|
if (db_config && __os_abspath(log_dir)) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: DB_CONFIG must not contain an absolute path for the log directory",
|
||||||
|
progname);
|
||||||
|
goto shutdown;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If the -c option is specified, checkpoint the source home
|
||||||
|
* database environment, and remove any unnecessary log files.
|
||||||
|
*/
|
||||||
|
if (checkpoint) {
|
||||||
|
if (verbose)
|
||||||
|
printf("%s: %s: force checkpoint\n", progname, home);
|
||||||
|
if ((ret =
|
||||||
|
dbenv->txn_checkpoint(dbenv, 0, 0, DB_FORCE)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "DB_ENV->txn_checkpoint");
|
||||||
|
goto shutdown;
|
||||||
|
}
|
||||||
|
if (!update) {
|
||||||
|
if (verbose)
|
||||||
|
printf("%s: %s: remove unnecessary log files\n",
|
||||||
|
progname, home);
|
||||||
|
if ((ret = dbenv->log_archive(dbenv,
|
||||||
|
NULL, DB_ARCH_REMOVE)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "DB_ENV->log_archive");
|
||||||
|
goto shutdown;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If the target directory for the backup does not exist, create it
|
||||||
|
* with mode read-write-execute for the owner. Ignore errors here,
|
||||||
|
* it's simpler and more portable to just always try the create. If
|
||||||
|
* there's a problem, we'll fail with reasonable errors later.
|
||||||
|
*/
|
||||||
|
(void)__os_mkdir(NULL, backup_dir, DB_MODE_700);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If -u was specified, remove all log files; if -u was not specified,
|
||||||
|
* remove all files.
|
||||||
|
*
|
||||||
|
* Potentially there are two directories to clean, the log directory
|
||||||
|
* and the target directory. First, clean up the log directory if
|
||||||
|
* it's different from the target directory, then clean up the target
|
||||||
|
* directory.
|
||||||
|
*/
|
||||||
|
if (db_config && log_dir != NULL &&
|
||||||
|
db_hotbackup_backup_dir_clean(
|
||||||
|
dbenv, backup_dir, log_dir, &remove_max, update, verbose) != 0)
|
||||||
|
goto shutdown;
|
||||||
|
if (db_hotbackup_backup_dir_clean(dbenv,
|
||||||
|
backup_dir, NULL, &remove_max, update, verbose) != 0)
|
||||||
|
goto shutdown;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If the -u option was not specified, copy all database files found in
|
||||||
|
* the database environment home directory, or any directory specified
|
||||||
|
* using the -d option, into the target directory for the backup.
|
||||||
|
*/
|
||||||
|
if (!update) {
|
||||||
|
if (db_hotbackup_read_data_dir(dbenv, home,
|
||||||
|
backup_dir, home, verbose, db_config) != 0)
|
||||||
|
goto shutdown;
|
||||||
|
if (data_dir != NULL)
|
||||||
|
for (dir = data_dir; *dir != NULL; ++dir) {
|
||||||
|
/*
|
||||||
|
* Don't allow absolute path names taken from
|
||||||
|
* the DB_CONFIG file -- running recovery with
|
||||||
|
* them would corrupt the source files.
|
||||||
|
*/
|
||||||
|
if (db_config && __os_abspath(*dir)) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: data directory '%s' is absolute path, not permitted with -D option\n",
|
||||||
|
progname, *dir);
|
||||||
|
goto shutdown;
|
||||||
|
}
|
||||||
|
if (db_hotbackup_read_data_dir(dbenv, home,
|
||||||
|
backup_dir, *dir, verbose, db_config) != 0)
|
||||||
|
goto shutdown;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copy all log files found in the directory specified by the -l option
|
||||||
|
* (or in the database environment home directory, if no -l option was
|
||||||
|
* specified), into the target directory for the backup.
|
||||||
|
*
|
||||||
|
* The log directory defaults to the home directory.
|
||||||
|
*/
|
||||||
|
if (db_hotbackup_read_log_dir(dbenv, db_config ? home : NULL, backup_dir,
|
||||||
|
log_dir == NULL ? home : log_dir, ©_min, update, verbose) != 0)
|
||||||
|
goto shutdown;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If we're updating a snapshot, the lowest-numbered log file copied
|
||||||
|
* into the backup directory should be less than, or equal to, the
|
||||||
|
* highest-numbered log file removed from the backup directory during
|
||||||
|
* cleanup.
|
||||||
|
*/
|
||||||
|
if (update && remove_max < copy_min &&
|
||||||
|
!(remove_max == 0 && copy_min == 1)) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: the largest log file removed (%d) must be greater\n",
|
||||||
|
progname, remove_max);
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: than or equal the smallest log file copied (%d)\n",
|
||||||
|
progname, copy_min);
|
||||||
|
goto shutdown;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Close the source environment. */
|
||||||
|
if ((ret = dbenv->close(dbenv, 0)) != 0) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: dbenv->close: %s\n", progname, db_strerror(ret));
|
||||||
|
dbenv = NULL;
|
||||||
|
goto shutdown;
|
||||||
|
}
|
||||||
|
/* Perform catastrophic recovery on the hot backup. */
|
||||||
|
if (verbose)
|
||||||
|
printf("%s: %s: run catastrophic recovery\n",
|
||||||
|
progname, backup_dir);
|
||||||
|
if (db_hotbackup_env_init(
|
||||||
|
&dbenv, backup_dir, NULL, NULL, passwd, OPEN_HOT_BACKUP) != 0)
|
||||||
|
goto shutdown;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Remove any unnecessary log files from the hot backup.
|
||||||
|
*/
|
||||||
|
if (verbose)
|
||||||
|
printf("%s: %s: remove unnecessary log files\n",
|
||||||
|
progname, backup_dir);
|
||||||
|
if ((ret =
|
||||||
|
dbenv->log_archive(dbenv, NULL, DB_ARCH_REMOVE)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "DB_ENV->log_archive");
|
||||||
|
goto shutdown;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (0) {
|
||||||
|
shutdown: exitval = 1;
|
||||||
|
}
|
||||||
|
if (dbenv != NULL && (ret = dbenv->close(dbenv, 0)) != 0) {
|
||||||
|
exitval = 1;
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: dbenv->close: %s\n", progname, db_strerror(ret));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exitval == 0) {
|
||||||
|
if (verbose) {
|
||||||
|
(void)time(&now);
|
||||||
|
printf("%s: hot backup completed at %s",
|
||||||
|
progname, __os_ctime(&now, time_buf));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
fprintf(stderr, "%s: HOT BACKUP FAILED!\n", progname);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Resend any caught signal. */
|
||||||
|
__db_util_sigresend();
|
||||||
|
|
||||||
|
return (exitval == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* env_init --
|
||||||
|
* Open a database environment.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
db_hotbackup_env_init(dbenvp, home, log_dirp, data_dirp, passwd, which)
|
||||||
|
DB_ENV **dbenvp;
|
||||||
|
char *home, **log_dirp, ***data_dirp, *passwd;
|
||||||
|
enum which_open which;
|
||||||
|
{
|
||||||
|
DB_ENV *dbenv;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
*dbenvp = NULL;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Create an environment object and initialize it for error reporting.
|
||||||
|
*/
|
||||||
|
if ((ret = db_env_create(&dbenv, 0)) != 0) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: db_env_create: %s\n", progname, db_strerror(ret));
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
dbenv->set_errfile(dbenv, stderr);
|
||||||
|
setbuf(stderr, NULL);
|
||||||
|
dbenv->set_errpfx(dbenv, progname);
|
||||||
|
|
||||||
|
/* Any created intermediate directories are created private. */
|
||||||
|
if ((ret = dbenv->set_intermediate_dir_mode(dbenv, "rwx------")) != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "DB_ENV->set_intermediate_dir_mode");
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If a log directory has been specified, and it's not the same as the
|
||||||
|
* home directory, set it for the environment.
|
||||||
|
*/
|
||||||
|
if (log_dirp != NULL && *log_dirp != NULL &&
|
||||||
|
(ret = dbenv->set_lg_dir(dbenv, *log_dirp)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "DB_ENV->set_lg_dir: %s", *log_dirp);
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Optionally set the password. */
|
||||||
|
if (passwd != NULL &&
|
||||||
|
(ret = dbenv->set_encrypt(dbenv, passwd, DB_ENCRYPT_AES)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "DB_ENV->set_encrypt");
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (which) {
|
||||||
|
case OPEN_ORIGINAL:
|
||||||
|
/*
|
||||||
|
* Opening the database environment we're trying to back up.
|
||||||
|
* We try to attach to a pre-existing environment; if that
|
||||||
|
* fails, we create a private environment and try again.
|
||||||
|
*/
|
||||||
|
if ((ret = dbenv->open(dbenv, home, DB_USE_ENVIRON, 0)) != 0 &&
|
||||||
|
(ret == DB_VERSION_MISMATCH ||
|
||||||
|
(ret = dbenv->open(dbenv, home, DB_CREATE |
|
||||||
|
DB_INIT_LOG | DB_INIT_TXN | DB_PRIVATE | DB_USE_ENVIRON,
|
||||||
|
0)) != 0)) {
|
||||||
|
dbenv->err(dbenv, ret, "DB_ENV->open: %s", home);
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
if (log_dirp != NULL && *log_dirp == NULL)
|
||||||
|
(void)dbenv->get_lg_dir(dbenv, (const char **)log_dirp);
|
||||||
|
if (data_dirp != NULL && *data_dirp == NULL)
|
||||||
|
(void)dbenv->get_data_dirs(
|
||||||
|
dbenv, (const char ***)data_dirp);
|
||||||
|
break;
|
||||||
|
case OPEN_HOT_BACKUP:
|
||||||
|
/*
|
||||||
|
* Opening the backup copy of the database environment. We
|
||||||
|
* better be the only user, we're running recovery.
|
||||||
|
* Ensure that there at least minimal cache for worst
|
||||||
|
* case page size.
|
||||||
|
*/
|
||||||
|
if ((ret =
|
||||||
|
dbenv->set_cachesize(dbenv, 0, 64 * 1024 * 10, 0)) != 0) {
|
||||||
|
dbenv->err(dbenv,
|
||||||
|
ret, "DB_ENV->set_cachesize: %s", home);
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
if ((ret = dbenv->open(dbenv, home, DB_CREATE |
|
||||||
|
DB_INIT_LOG | DB_INIT_MPOOL | DB_INIT_TXN | DB_PRIVATE |
|
||||||
|
DB_RECOVER_FATAL | DB_USE_ENVIRON, 0)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "DB_ENV->open: %s", home);
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
*dbenvp = dbenv;
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* backup_dir_clean --
|
||||||
|
* Clean out the backup directory.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
db_hotbackup_backup_dir_clean(dbenv, backup_dir, log_dir, remove_maxp, update, verbose)
|
||||||
|
DB_ENV *dbenv;
|
||||||
|
char *backup_dir, *log_dir;
|
||||||
|
int *remove_maxp, update, verbose;
|
||||||
|
{
|
||||||
|
ENV *env;
|
||||||
|
int cnt, fcnt, ret, v;
|
||||||
|
char **names, *dir, buf[DB_MAXPATHLEN], path[DB_MAXPATHLEN];
|
||||||
|
|
||||||
|
env = dbenv->env;
|
||||||
|
|
||||||
|
/* We may be cleaning a log directory separate from the target. */
|
||||||
|
if (log_dir != NULL) {
|
||||||
|
if ((size_t)snprintf(buf, sizeof(buf), "%s%c%s",
|
||||||
|
backup_dir, PATH_SEPARATOR[0] ,log_dir) >= sizeof(buf)) {
|
||||||
|
dbenv->errx(dbenv, "%s%c%s: path too long",
|
||||||
|
backup_dir, PATH_SEPARATOR[0] ,log_dir);
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
dir = buf;
|
||||||
|
} else
|
||||||
|
dir = backup_dir;
|
||||||
|
|
||||||
|
/* Get a list of file names. */
|
||||||
|
if ((ret = __os_dirlist(env, dir, 0, &names, &fcnt)) != 0) {
|
||||||
|
if (log_dir != NULL && !update)
|
||||||
|
return (0);
|
||||||
|
dbenv->err(dbenv, ret, "%s: directory read", dir);
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
for (cnt = fcnt; --cnt >= 0;) {
|
||||||
|
/*
|
||||||
|
* Skip non-log files (if update was specified).
|
||||||
|
*/
|
||||||
|
if (strncmp(names[cnt], LFPREFIX, sizeof(LFPREFIX) - 1)) {
|
||||||
|
if (update)
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
/* Track the highest-numbered log file removed. */
|
||||||
|
v = atoi(names[cnt] + sizeof(LFPREFIX) - 1);
|
||||||
|
if (*remove_maxp < v)
|
||||||
|
*remove_maxp = v;
|
||||||
|
}
|
||||||
|
if ((size_t)snprintf(path, sizeof(path), "%s%c%s",
|
||||||
|
dir, PATH_SEPARATOR[0], names[cnt]) >= sizeof(path)) {
|
||||||
|
dbenv->errx(dbenv, "%s%c%s: path too long",
|
||||||
|
dir, PATH_SEPARATOR[0], names[cnt]);
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
if (verbose)
|
||||||
|
printf("%s: removing %s\n", progname, path);
|
||||||
|
if (__os_unlink(env, path, 0) != 0)
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
__os_dirfree(env, names, fcnt);
|
||||||
|
|
||||||
|
if (verbose && *remove_maxp != 0)
|
||||||
|
printf("%s: highest numbered log file removed: %d\n",
|
||||||
|
progname, *remove_maxp);
|
||||||
|
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* read_data_dir --
|
||||||
|
* Read a directory looking for databases to copy.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
db_hotbackup_read_data_dir(dbenv, home, backup_dir, dir, verbose, db_config)
|
||||||
|
DB_ENV *dbenv;
|
||||||
|
char *home, *backup_dir, *dir;
|
||||||
|
int verbose, db_config;
|
||||||
|
{
|
||||||
|
ENV *env;
|
||||||
|
int cnt, fcnt, ret;
|
||||||
|
char *bd, **names;
|
||||||
|
char buf[DB_MAXPATHLEN], bbuf[DB_MAXPATHLEN];
|
||||||
|
|
||||||
|
env = dbenv->env;
|
||||||
|
|
||||||
|
bd = backup_dir;
|
||||||
|
if (db_config && dir != home) {
|
||||||
|
/* Build a path name to the destination. */
|
||||||
|
if ((size_t)(cnt = snprintf(bbuf, sizeof(bbuf), "%s%c%s%c",
|
||||||
|
backup_dir, PATH_SEPARATOR[0],
|
||||||
|
dir, PATH_SEPARATOR[0])) >= sizeof(buf)) {
|
||||||
|
dbenv->errx(dbenv, "%s%c%s: path too long",
|
||||||
|
backup_dir, PATH_SEPARATOR[0], dir);
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
bd = bbuf;
|
||||||
|
|
||||||
|
/* Create the path. */
|
||||||
|
if ((ret = __db_mkpath(env, bd)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "%s: cannot create", bd);
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
/* step on the trailing '/' */
|
||||||
|
bd[cnt - 1] = '\0';
|
||||||
|
|
||||||
|
/* Build a path name to the source. */
|
||||||
|
if ((size_t)snprintf(buf, sizeof(buf),
|
||||||
|
"%s%c%s", home, PATH_SEPARATOR[0], dir) >= sizeof(buf)) {
|
||||||
|
dbenv->errx(dbenv, "%s%c%s: path too long",
|
||||||
|
home, PATH_SEPARATOR[0], dir);
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
dir = buf;
|
||||||
|
}
|
||||||
|
/* Get a list of file names. */
|
||||||
|
if ((ret = __os_dirlist(env, dir, 0, &names, &fcnt)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "%s: directory read", dir);
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
for (cnt = fcnt; --cnt >= 0;) {
|
||||||
|
/*
|
||||||
|
* Skip files in DB's name space (but not Queue
|
||||||
|
* extent files, we need them).
|
||||||
|
*/
|
||||||
|
if (!strncmp(names[cnt], LFPREFIX, sizeof(LFPREFIX) - 1))
|
||||||
|
continue;
|
||||||
|
if (!strncmp(names[cnt],
|
||||||
|
DB_REGION_PREFIX, sizeof(DB_REGION_PREFIX) - 1) &&
|
||||||
|
strncmp(names[cnt],
|
||||||
|
QUEUE_EXTENT_PREFIX, sizeof(QUEUE_EXTENT_PREFIX) - 1))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Skip DB_CONFIG.
|
||||||
|
*/
|
||||||
|
if (!db_config &&
|
||||||
|
!strncmp(names[cnt], "DB_CONFIG", sizeof("DB_CONFIG")))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/* Copy the file. */
|
||||||
|
if (db_hotbackup_data_copy(dbenv, names[cnt], dir, bd, verbose) != 0)
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
__os_dirfree(env, names, fcnt);
|
||||||
|
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* read_log_dir --
|
||||||
|
* * Read a directory looking for log files to copy. If home
|
||||||
|
* is passed then we are possibly using a log dir in the destination,
|
||||||
|
* following DB_CONFIG configuration.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
db_hotbackup_read_log_dir(dbenv, home, backup_dir, log_dir, copy_minp, update, verbose)
|
||||||
|
DB_ENV *dbenv;
|
||||||
|
char *home, *backup_dir, *log_dir;
|
||||||
|
int *copy_minp, update, verbose;
|
||||||
|
{
|
||||||
|
ENV *env;
|
||||||
|
u_int32_t aflag;
|
||||||
|
int cnt, ret, v;
|
||||||
|
char **begin, **names, *backupd, *logd;
|
||||||
|
char from[DB_MAXPATHLEN], to[DB_MAXPATHLEN];
|
||||||
|
|
||||||
|
env = dbenv->env;
|
||||||
|
|
||||||
|
if (home != NULL && log_dir != NULL) {
|
||||||
|
if ((size_t)snprintf(from, sizeof(from), "%s%c%s",
|
||||||
|
home, PATH_SEPARATOR[0], log_dir) >= sizeof(from)) {
|
||||||
|
dbenv->errx(dbenv, "%s%c%s: path too long",
|
||||||
|
home, PATH_SEPARATOR[0], log_dir);
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
logd = strdup(from);
|
||||||
|
if ((size_t)(cnt = snprintf(to, sizeof(to),
|
||||||
|
"%s%c%s%c", backup_dir, PATH_SEPARATOR[0],
|
||||||
|
log_dir, PATH_SEPARATOR[0])) >= sizeof(to)) {
|
||||||
|
dbenv->errx(dbenv, "%s%c%s: path too long",
|
||||||
|
backup_dir, PATH_SEPARATOR[0], log_dir);
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
backupd = strdup(to);
|
||||||
|
|
||||||
|
/* Create the backup log directory. */
|
||||||
|
if ((ret = __db_mkpath(env, backupd)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "%s: cannot create", backupd);
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
/* Step on the trailing '/'. */
|
||||||
|
backupd[cnt - 1] = '\0';
|
||||||
|
} else {
|
||||||
|
backupd = backup_dir;
|
||||||
|
logd = log_dir;
|
||||||
|
}
|
||||||
|
|
||||||
|
again: aflag = DB_ARCH_LOG;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If this is an update and we are deleting files, first process
|
||||||
|
* those files that can be removed, then repeat with the rest.
|
||||||
|
*/
|
||||||
|
if (update)
|
||||||
|
aflag = 0;
|
||||||
|
/* Get a list of file names to be copied. */
|
||||||
|
if ((ret = dbenv->log_archive(dbenv, &names, aflag)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "DB_ENV->log_archive");
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
if (names == NULL)
|
||||||
|
goto done;
|
||||||
|
begin = names;
|
||||||
|
for (; *names != NULL; names++) {
|
||||||
|
/* Track the lowest-numbered log file copied. */
|
||||||
|
v = atoi(*names + sizeof(LFPREFIX) - 1);
|
||||||
|
if (*copy_minp == 0 || *copy_minp > v)
|
||||||
|
*copy_minp = v;
|
||||||
|
|
||||||
|
if ((size_t)snprintf(from, sizeof(from), "%s%c%s",
|
||||||
|
logd, PATH_SEPARATOR[0], *names) >= sizeof(from)) {
|
||||||
|
dbenv->errx(dbenv, "%s%c%s: path too long",
|
||||||
|
logd, PATH_SEPARATOR[0], *names);
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If we're going to remove the file, attempt to rename the
|
||||||
|
* instead of copying and then removing. The likely failure
|
||||||
|
* is EXDEV (source and destination are on different volumes).
|
||||||
|
* Fall back to a copy, regardless of the error. We don't
|
||||||
|
* worry about partial contents, the copy truncates the file
|
||||||
|
* on open.
|
||||||
|
*/
|
||||||
|
if (update) {
|
||||||
|
if ((size_t)snprintf(to, sizeof(to), "%s%c%s",
|
||||||
|
backupd, PATH_SEPARATOR[0], *names) >= sizeof(to)) {
|
||||||
|
dbenv->errx(dbenv, "%s%c%s: path too long",
|
||||||
|
backupd, PATH_SEPARATOR[0], *names);
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
if (__os_rename(env, from, to, 1) == 0) {
|
||||||
|
if (verbose)
|
||||||
|
printf("%s: moving %s to %s\n",
|
||||||
|
progname, from, to);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Copy the file. */
|
||||||
|
if (db_hotbackup_data_copy(dbenv, *names, logd, backupd, verbose) != 0)
|
||||||
|
return (1);
|
||||||
|
|
||||||
|
if (update) {
|
||||||
|
if (verbose)
|
||||||
|
printf("%s: removing %s\n", progname, from);
|
||||||
|
if ((ret = __os_unlink(env, from, 0)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret,
|
||||||
|
"unlink of %s failed", from);
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
free(begin);
|
||||||
|
done: if (update) {
|
||||||
|
update = 0;
|
||||||
|
goto again;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (verbose && *copy_minp != 0)
|
||||||
|
printf("%s: lowest numbered log file copied: %d\n",
|
||||||
|
progname, *copy_minp);
|
||||||
|
if (logd != log_dir)
|
||||||
|
free(logd);
|
||||||
|
if (backupd != backup_dir)
|
||||||
|
free(backupd);
|
||||||
|
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* data_copy --
|
||||||
|
* Copy a file into the backup directory.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
db_hotbackup_data_copy(dbenv, file, from_dir, to_dir, verbose)
|
||||||
|
DB_ENV *dbenv;
|
||||||
|
char *file, *from_dir, *to_dir;
|
||||||
|
int verbose;
|
||||||
|
{
|
||||||
|
DB_FH *rfhp, *wfhp;
|
||||||
|
ENV *env;
|
||||||
|
size_t nr, nw;
|
||||||
|
int ret;
|
||||||
|
char *buf;
|
||||||
|
|
||||||
|
rfhp = wfhp = NULL;
|
||||||
|
env = dbenv->env;
|
||||||
|
ret = 0;
|
||||||
|
|
||||||
|
if (verbose)
|
||||||
|
printf("%s: copying %s%c%s to %s%c%s\n", progname, from_dir,
|
||||||
|
PATH_SEPARATOR[0], file, to_dir, PATH_SEPARATOR[0], file);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We MUST copy multiples of the page size, atomically, to ensure a
|
||||||
|
* database page is not updated by another thread of control during
|
||||||
|
* the copy.
|
||||||
|
*
|
||||||
|
* !!!
|
||||||
|
* The current maximum page size for Berkeley DB is 64KB; we will have
|
||||||
|
* to increase this value if the maximum page size is ever more than a
|
||||||
|
* megabyte
|
||||||
|
*/
|
||||||
|
if ((buf = malloc(MEGABYTE)) == NULL) {
|
||||||
|
dbenv->err(dbenv,
|
||||||
|
errno, "%lu buffer allocation", (u_long)MEGABYTE);
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Open the input file. */
|
||||||
|
if (snprintf(buf, MEGABYTE, "%s%c%s",
|
||||||
|
from_dir, PATH_SEPARATOR[0], file) >= MEGABYTE) {
|
||||||
|
dbenv->errx(dbenv,
|
||||||
|
"%s%c%s: path too long", from_dir, PATH_SEPARATOR[0], file);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
if ((ret = __os_open(env, buf, 0, DB_OSO_RDONLY, 0, &rfhp)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "%s", buf);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Open the output file. */
|
||||||
|
if (snprintf(buf, MEGABYTE, "%s%c%s",
|
||||||
|
to_dir, PATH_SEPARATOR[0], file) >= MEGABYTE) {
|
||||||
|
dbenv->errx(dbenv,
|
||||||
|
"%s%c%s: path too long", to_dir, PATH_SEPARATOR[0], file);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
if ((ret = __os_open(env, buf, 0,
|
||||||
|
DB_OSO_CREATE | DB_OSO_TRUNC, DB_MODE_600, &wfhp)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "%s", buf);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Copy the data. */
|
||||||
|
while ((ret = __os_read(env, rfhp, buf, MEGABYTE, &nr)) == 0 &&
|
||||||
|
nr > 0)
|
||||||
|
if ((ret = __os_write(env, wfhp, buf, nr, &nw)) != 0)
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (0) {
|
||||||
|
err: ret = 1;
|
||||||
|
}
|
||||||
|
if (buf != NULL)
|
||||||
|
free(buf);
|
||||||
|
|
||||||
|
if (rfhp != NULL && __os_closehandle(env, rfhp) != 0)
|
||||||
|
ret = 1;
|
||||||
|
|
||||||
|
/* We may be running on a remote filesystem; force the flush. */
|
||||||
|
if (wfhp != NULL) {
|
||||||
|
if (__os_fsync(env, wfhp) != 0)
|
||||||
|
ret = 1;
|
||||||
|
if (__os_closehandle(env, wfhp) != 0)
|
||||||
|
ret = 1;
|
||||||
|
}
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
db_hotbackup_usage()
|
||||||
|
{
|
||||||
|
(void)fprintf(stderr, "usage: %s [-cDuVv]\n\t%s\n", progname,
|
||||||
|
"[-d data_dir ...] [-h home] [-l log_dir] [-P password] -b backup_dir");
|
||||||
|
return (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
db_hotbackup_version_check()
|
||||||
|
{
|
||||||
|
int v_major, v_minor, v_patch;
|
||||||
|
|
||||||
|
/* Make sure we're loaded with the right version of the DB library. */
|
||||||
|
(void)db_version(&v_major, &v_minor, &v_patch);
|
||||||
|
if (v_major != DB_VERSION_MAJOR || v_minor != DB_VERSION_MINOR) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: version %d.%d doesn't match library version %d.%d\n",
|
||||||
|
progname, DB_VERSION_MAJOR, DB_VERSION_MINOR,
|
||||||
|
v_major, v_minor);
|
||||||
|
return (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
158
build_vxworks/db_hotbackup/db_hotbackup20.wpj
Normal file
158
build_vxworks/db_hotbackup/db_hotbackup20.wpj
Normal file
@@ -0,0 +1,158 @@
|
|||||||
|
Document file - DO NOT EDIT
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_BUILDRULE
|
||||||
|
db_hotbackup20.out
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_AR
|
||||||
|
ar386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_ARCHIVE
|
||||||
|
$(PRJ_DIR)/PENTIUMgnu/db_hotbackup20.a
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_AS
|
||||||
|
cc386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_CC
|
||||||
|
cc386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_CFLAGS
|
||||||
|
-g \
|
||||||
|
-mpentium \
|
||||||
|
-ansi \
|
||||||
|
-nostdinc \
|
||||||
|
-DRW_MULTI_THREAD \
|
||||||
|
-D_REENTRANT \
|
||||||
|
-fvolatile \
|
||||||
|
-nostdlib \
|
||||||
|
-fno-builtin \
|
||||||
|
-fno-defer-pop \
|
||||||
|
-I$(PRJ_DIR)/.. \
|
||||||
|
-I$(PRJ_DIR)/../.. \
|
||||||
|
-I$(WIND_BASE)/target/h \
|
||||||
|
-DCPU=PENTIUM
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_CFLAGS_AS
|
||||||
|
-g \
|
||||||
|
-mpentium \
|
||||||
|
-ansi \
|
||||||
|
-nostdinc \
|
||||||
|
-fvolatile \
|
||||||
|
-nostdlib \
|
||||||
|
-fno-builtin \
|
||||||
|
-fno-defer-pop \
|
||||||
|
-P \
|
||||||
|
-x \
|
||||||
|
assembler-with-cpp \
|
||||||
|
-I$(WIND_BASE)/target/h \
|
||||||
|
-DCPU=PENTIUM
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_CPP
|
||||||
|
cc386 -E -P -xc
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_LD
|
||||||
|
ld386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_LDDEPS
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_LDFLAGS
|
||||||
|
-X -N
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_LD_PARTIAL_FLAGS
|
||||||
|
-X -r
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_NM
|
||||||
|
nm386 -g
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_OPTION_DEFINE_MACRO
|
||||||
|
-D
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_OPTION_INCLUDE_DIR
|
||||||
|
-I
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_POST_BUILD_RULE
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_PRJ_LIBS
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_SIZE
|
||||||
|
size386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_RO_DEPEND_PATH
|
||||||
|
{$(WIND_BASE)/target/h/} \
|
||||||
|
{$(WIND_BASE)/target/src/} \
|
||||||
|
{$(WIND_BASE)/target/config/}
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_TC
|
||||||
|
::tc_PENTIUMgnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_archive
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_db_hotbackup20.out
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_objects
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD__CURRENT
|
||||||
|
PENTIUMgnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD__LIST
|
||||||
|
PENTIUMgnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_TYPE
|
||||||
|
::prj_vxApp
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_VERSION
|
||||||
|
2.0
|
||||||
|
<END>
|
||||||
|
<BEGIN> FILE_db_hotbackup.c_dependDone
|
||||||
|
FALSE
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_hotbackup.c_dependencies
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_hotbackup.c_objects
|
||||||
|
db_hotbackup.o
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_hotbackup.c_tool
|
||||||
|
C/C++ compiler
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> PROJECT_FILES
|
||||||
|
$(PRJ_DIR)/db_hotbackup.c
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> userComments
|
||||||
|
db_hotbackup
|
||||||
|
<END>
|
||||||
192
build_vxworks/db_hotbackup/db_hotbackup22.wpj
Normal file
192
build_vxworks/db_hotbackup/db_hotbackup22.wpj
Normal file
@@ -0,0 +1,192 @@
|
|||||||
|
Document file - DO NOT EDIT
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_BUILDRULE
|
||||||
|
db_hotbackup22.out
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_AR
|
||||||
|
arpentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_ARCHIVE
|
||||||
|
$(PRJ_DIR)/PENTIUM2gnu/db_hotbackup22.a
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_AS
|
||||||
|
ccpentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CC
|
||||||
|
ccpentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CC_ARCH_SPEC
|
||||||
|
-mcpu=pentiumpro -march=pentiumpro
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CFLAGS
|
||||||
|
-g \
|
||||||
|
-mcpu=pentiumpro \
|
||||||
|
-march=pentiumpro \
|
||||||
|
-ansi \
|
||||||
|
-nostdlib \
|
||||||
|
-DRW_MULTI_THREAD \
|
||||||
|
-D_REENTRANT \
|
||||||
|
-fvolatile \
|
||||||
|
-fno-builtin \
|
||||||
|
-fno-defer-pop \
|
||||||
|
-I$(PRJ_DIR)/.. \
|
||||||
|
-I$(PRJ_DIR)/../.. \
|
||||||
|
-I$(WIND_BASE)/target/h \
|
||||||
|
-DCPU=PENTIUM2 \
|
||||||
|
-DTOOL_FAMILY=gnu \
|
||||||
|
-DTOOL=gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CFLAGS_AS
|
||||||
|
-g \
|
||||||
|
-mcpu=pentiumpro \
|
||||||
|
-march=pentiumpro \
|
||||||
|
-ansi \
|
||||||
|
-nostdlib \
|
||||||
|
-fno-builtin \
|
||||||
|
-fno-defer-pop \
|
||||||
|
-P \
|
||||||
|
-xassembler-with-cpp \
|
||||||
|
-I$(WIND_BASE)/target/h \
|
||||||
|
-DCPU=PENTIUM2 \
|
||||||
|
-DTOOL_FAMILY=gnu \
|
||||||
|
-DTOOL=gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CPP
|
||||||
|
ccpentium -E -P
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_HEX_FLAGS
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD
|
||||||
|
ldpentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_LDFLAGS
|
||||||
|
-X -N
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD_PARTIAL
|
||||||
|
ccpentium -r -nostdlib -Wl,-X
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD_PARTIAL_FLAGS
|
||||||
|
-X -r
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_NM
|
||||||
|
nmpentium -g
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_DEFINE_MACRO
|
||||||
|
-D
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_DEPEND
|
||||||
|
-M -w
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_GENERATE_DEPENDENCY_FILE
|
||||||
|
-MD
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_INCLUDE_DIR
|
||||||
|
-I
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_LANG_C
|
||||||
|
-xc
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_UNDEFINE_MACRO
|
||||||
|
-U
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_POST_BUILD_RULE
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_PRJ_LIBS
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_SIZE
|
||||||
|
sizepentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_TOOL_FAMILY
|
||||||
|
gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_RO_DEPEND_PATH
|
||||||
|
{$(WIND_BASE)/target/h/} \
|
||||||
|
{$(WIND_BASE)/target/src/} \
|
||||||
|
{$(WIND_BASE)/target/config/}
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_TC
|
||||||
|
::tc_PENTIUM2gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_archive
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_db_hotbackup22.out
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_db_hotbackup22.pl
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_objects
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD__CURRENT
|
||||||
|
PENTIUM2gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD__LIST
|
||||||
|
PENTIUM2gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_TYPE
|
||||||
|
::prj_vxApp
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_VERSION
|
||||||
|
2.2
|
||||||
|
<END>
|
||||||
|
<BEGIN> FILE_db_hotbackup.c_dependDone
|
||||||
|
FALSE
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_hotbackup.c_dependencies
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_hotbackup.c_objects
|
||||||
|
db_hotbackup.o
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_hotbackup.c_tool
|
||||||
|
C/C++ compiler
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> PROJECT_FILES
|
||||||
|
$(PRJ_DIR)/db_hotbackup.c
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> userComments
|
||||||
|
db_hotbackup
|
||||||
|
<END>
|
||||||
916
build_vxworks/db_int.h
Normal file
916
build_vxworks/db_int.h
Normal file
@@ -0,0 +1,916 @@
|
|||||||
|
/* DO NOT EDIT: automatically built by dist/s_vxworks. */
|
||||||
|
/*-
|
||||||
|
* See the file LICENSE for redistribution information.
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996,2008 Oracle. All rights reserved.
|
||||||
|
*
|
||||||
|
* $Id: db_int.h 63573 2008-05-23 21:43:21Z trent.nelson $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _DB_INT_H_
|
||||||
|
#define _DB_INT_H_
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Berkeley DB ANSI/POSIX include files.
|
||||||
|
*******************************************************/
|
||||||
|
#include "vxWorks.h"
|
||||||
|
#ifdef HAVE_SYSTEM_INCLUDE_FILES
|
||||||
|
#include <sys/types.h>
|
||||||
|
#ifdef DIAG_MVCC
|
||||||
|
#include <sys/mman.h>
|
||||||
|
#endif
|
||||||
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
#if defined(__INCLUDE_SELECT_H)
|
||||||
|
#ifdef HAVE_SYS_SELECT_H
|
||||||
|
#include <sys/select.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_VXWORKS
|
||||||
|
#include <selectLib.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if TIME_WITH_SYS_TIME
|
||||||
|
#include <sys/time.h>
|
||||||
|
#include <time.h>
|
||||||
|
#else
|
||||||
|
#if HAVE_SYS_TIME_H
|
||||||
|
#include <sys/time.h>
|
||||||
|
#else
|
||||||
|
#include <time.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_VXWORKS
|
||||||
|
#include <net/uio.h>
|
||||||
|
#else
|
||||||
|
#include <sys/uio.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__INCLUDE_NETWORKING)
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <netdb.h>
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(STDC_HEADERS) || defined(__cplusplus)
|
||||||
|
#include <stdarg.h>
|
||||||
|
#else
|
||||||
|
#include <varargs.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <limits.h>
|
||||||
|
#include <signal.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#if defined(__INCLUDE_DIRECTORY)
|
||||||
|
#if HAVE_DIRENT_H
|
||||||
|
# include <dirent.h>
|
||||||
|
# define NAMLEN(dirent) strlen((dirent)->d_name)
|
||||||
|
#else
|
||||||
|
# define dirent direct
|
||||||
|
# define NAMLEN(dirent) (dirent)->d_namlen
|
||||||
|
# if HAVE_SYS_NDIR_H
|
||||||
|
# include <sys/ndir.h>
|
||||||
|
# endif
|
||||||
|
# if HAVE_SYS_DIR_H
|
||||||
|
# include <sys/dir.h>
|
||||||
|
# endif
|
||||||
|
# if HAVE_NDIR_H
|
||||||
|
# include <ndir.h>
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
#endif /* __INCLUDE_DIRECTORY */
|
||||||
|
|
||||||
|
#endif /* !HAVE_SYSTEM_INCLUDE_FILES */
|
||||||
|
#include "clib_port.h"
|
||||||
|
#include "db.h"
|
||||||
|
|
||||||
|
#ifdef DB_WIN32
|
||||||
|
#include "dbinc/win_db.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "db.h"
|
||||||
|
#include "clib_port.h"
|
||||||
|
|
||||||
|
#include "dbinc/queue.h"
|
||||||
|
#include "dbinc/shqueue.h"
|
||||||
|
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Forward structure declarations.
|
||||||
|
*******************************************************/
|
||||||
|
struct __db_reginfo_t; typedef struct __db_reginfo_t REGINFO;
|
||||||
|
struct __db_txnhead; typedef struct __db_txnhead DB_TXNHEAD;
|
||||||
|
struct __db_txnlist; typedef struct __db_txnlist DB_TXNLIST;
|
||||||
|
struct __vrfy_childinfo;typedef struct __vrfy_childinfo VRFY_CHILDINFO;
|
||||||
|
struct __vrfy_dbinfo; typedef struct __vrfy_dbinfo VRFY_DBINFO;
|
||||||
|
struct __vrfy_pageinfo; typedef struct __vrfy_pageinfo VRFY_PAGEINFO;
|
||||||
|
|
||||||
|
typedef SH_TAILQ_HEAD(__hash_head) DB_HASHTAB;
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* General purpose constants and macros.
|
||||||
|
*******************************************************/
|
||||||
|
#undef FALSE
|
||||||
|
#define FALSE 0
|
||||||
|
#undef TRUE
|
||||||
|
#define TRUE (!FALSE)
|
||||||
|
|
||||||
|
#define MEGABYTE 1048576
|
||||||
|
#define GIGABYTE 1073741824
|
||||||
|
|
||||||
|
#define NS_PER_MS 1000000 /* Nanoseconds in a millisecond */
|
||||||
|
#define NS_PER_US 1000 /* Nanoseconds in a microsecond */
|
||||||
|
#define NS_PER_SEC 1000000000 /* Nanoseconds in a second */
|
||||||
|
#define US_PER_MS 1000 /* Microseconds in a millisecond */
|
||||||
|
#define US_PER_SEC 1000000 /* Microseconds in a second */
|
||||||
|
#define MS_PER_SEC 1000 /* Milliseconds in a second */
|
||||||
|
|
||||||
|
#define RECNO_OOB 0 /* Illegal record number. */
|
||||||
|
|
||||||
|
/* Test for a power-of-two (tests true for zero, which doesn't matter here). */
|
||||||
|
#define POWER_OF_TWO(x) (((x) & ((x) - 1)) == 0)
|
||||||
|
|
||||||
|
/* Test for valid page sizes. */
|
||||||
|
#define DB_MIN_PGSIZE 0x000200 /* Minimum page size (512). */
|
||||||
|
#define DB_MAX_PGSIZE 0x010000 /* Maximum page size (65536). */
|
||||||
|
#define IS_VALID_PAGESIZE(x) \
|
||||||
|
(POWER_OF_TWO(x) && (x) >= DB_MIN_PGSIZE && ((x) <= DB_MAX_PGSIZE))
|
||||||
|
|
||||||
|
/* Minimum number of pages cached, by default. */
|
||||||
|
#define DB_MINPAGECACHE 16
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If we are unable to determine the underlying filesystem block size, use
|
||||||
|
* 8K on the grounds that most OS's use less than 8K for a VM page size.
|
||||||
|
*/
|
||||||
|
#define DB_DEF_IOSIZE (8 * 1024)
|
||||||
|
|
||||||
|
/* Align an integer to a specific boundary. */
|
||||||
|
#undef DB_ALIGN
|
||||||
|
#define DB_ALIGN(v, bound) \
|
||||||
|
(((v) + (bound) - 1) & ~(((uintmax_t)(bound)) - 1))
|
||||||
|
|
||||||
|
/* Increment a pointer to a specific boundary. */
|
||||||
|
#undef ALIGNP_INC
|
||||||
|
#define ALIGNP_INC(p, bound) \
|
||||||
|
(void *)(((uintptr_t)(p) + (bound) - 1) & ~(((uintptr_t)(bound)) - 1))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Print an address as a u_long (a u_long is the largest type we can print
|
||||||
|
* portably). Most 64-bit systems have made longs 64-bits, so this should
|
||||||
|
* work.
|
||||||
|
*/
|
||||||
|
#define P_TO_ULONG(p) ((u_long)(uintptr_t)(p))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Convert a pointer to a small integral value.
|
||||||
|
*
|
||||||
|
* The (u_int16_t)(uintptr_t) cast avoids warnings: the (uintptr_t) cast
|
||||||
|
* converts the value to an integral type, and the (u_int16_t) cast converts
|
||||||
|
* it to a small integral type so we don't get complaints when we assign the
|
||||||
|
* final result to an integral type smaller than uintptr_t.
|
||||||
|
*/
|
||||||
|
#define P_TO_UINT32(p) ((u_int32_t)(uintptr_t)(p))
|
||||||
|
#define P_TO_UINT16(p) ((u_int16_t)(uintptr_t)(p))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* There are several on-page structures that are declared to have a number of
|
||||||
|
* fields followed by a variable length array of items. The structure size
|
||||||
|
* without including the variable length array or the address of the first of
|
||||||
|
* those elements can be found using SSZ.
|
||||||
|
*
|
||||||
|
* This macro can also be used to find the offset of a structure element in a
|
||||||
|
* structure. This is used in various places to copy structure elements from
|
||||||
|
* unaligned memory references, e.g., pointers into a packed page.
|
||||||
|
*
|
||||||
|
* There are two versions because compilers object if you take the address of
|
||||||
|
* an array.
|
||||||
|
*/
|
||||||
|
#undef SSZ
|
||||||
|
#define SSZ(name, field) P_TO_UINT16(&(((name *)0)->field))
|
||||||
|
|
||||||
|
#undef SSZA
|
||||||
|
#define SSZA(name, field) P_TO_UINT16(&(((name *)0)->field[0]))
|
||||||
|
|
||||||
|
/* Structure used to print flag values. */
|
||||||
|
typedef struct __fn {
|
||||||
|
u_int32_t mask; /* Flag value. */
|
||||||
|
const char *name; /* Flag name. */
|
||||||
|
} FN;
|
||||||
|
|
||||||
|
/* Set, clear and test flags. */
|
||||||
|
#define FLD_CLR(fld, f) (fld) &= ~(f)
|
||||||
|
#define FLD_ISSET(fld, f) ((fld) & (f))
|
||||||
|
#define FLD_SET(fld, f) (fld) |= (f)
|
||||||
|
#define F_CLR(p, f) (p)->flags &= ~(f)
|
||||||
|
#define F_ISSET(p, f) ((p)->flags & (f))
|
||||||
|
#define F_SET(p, f) (p)->flags |= (f)
|
||||||
|
#define LF_CLR(f) ((flags) &= ~(f))
|
||||||
|
#define LF_ISSET(f) ((flags) & (f))
|
||||||
|
#define LF_SET(f) ((flags) |= (f))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Calculate a percentage. The values can overflow 32-bit integer arithmetic
|
||||||
|
* so we use floating point.
|
||||||
|
*
|
||||||
|
* When calculating a bytes-vs-page size percentage, we're getting the inverse
|
||||||
|
* of the percentage in all cases, that is, we want 100 minus the percentage we
|
||||||
|
* calculate.
|
||||||
|
*/
|
||||||
|
#define DB_PCT(v, total) \
|
||||||
|
((int)((total) == 0 ? 0 : ((double)(v) * 100) / (total)))
|
||||||
|
#define DB_PCT_PG(v, total, pgsize) \
|
||||||
|
((int)((total) == 0 ? 0 : \
|
||||||
|
100 - ((double)(v) * 100) / (((double)total) * (pgsize))))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Statistics update shared memory and so are expensive -- don't update the
|
||||||
|
* values unless we're going to display the results.
|
||||||
|
*/
|
||||||
|
#undef STAT
|
||||||
|
#ifdef HAVE_STATISTICS
|
||||||
|
#define STAT(x) x
|
||||||
|
#else
|
||||||
|
#define STAT(x)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Structure used for callback message aggregation.
|
||||||
|
*
|
||||||
|
* Display values in XXX_stat_print calls.
|
||||||
|
*/
|
||||||
|
typedef struct __db_msgbuf {
|
||||||
|
char *buf; /* Heap allocated buffer. */
|
||||||
|
char *cur; /* Current end of message. */
|
||||||
|
size_t len; /* Allocated length of buffer. */
|
||||||
|
} DB_MSGBUF;
|
||||||
|
#define DB_MSGBUF_INIT(a) do { \
|
||||||
|
(a)->buf = (a)->cur = NULL; \
|
||||||
|
(a)->len = 0; \
|
||||||
|
} while (0)
|
||||||
|
#define DB_MSGBUF_FLUSH(env, a) do { \
|
||||||
|
if ((a)->buf != NULL) { \
|
||||||
|
if ((a)->cur != (a)->buf) \
|
||||||
|
__db_msg(env, "%s", (a)->buf); \
|
||||||
|
__os_free(env, (a)->buf); \
|
||||||
|
DB_MSGBUF_INIT(a); \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
#define STAT_FMT(msg, fmt, type, v) do { \
|
||||||
|
DB_MSGBUF __mb; \
|
||||||
|
DB_MSGBUF_INIT(&__mb); \
|
||||||
|
__db_msgadd(env, &__mb, fmt, (type)(v)); \
|
||||||
|
__db_msgadd(env, &__mb, "\t%s", msg); \
|
||||||
|
DB_MSGBUF_FLUSH(env, &__mb); \
|
||||||
|
} while (0)
|
||||||
|
#define STAT_HEX(msg, v) \
|
||||||
|
__db_msg(env, "%#lx\t%s", (u_long)(v), msg)
|
||||||
|
#define STAT_ISSET(msg, p) \
|
||||||
|
__db_msg(env, "%sSet\t%s", (p) == NULL ? "!" : " ", msg)
|
||||||
|
#define STAT_LONG(msg, v) \
|
||||||
|
__db_msg(env, "%ld\t%s", (long)(v), msg)
|
||||||
|
#define STAT_LSN(msg, lsnp) \
|
||||||
|
__db_msg(env, "%lu/%lu\t%s", \
|
||||||
|
(u_long)(lsnp)->file, (u_long)(lsnp)->offset, msg)
|
||||||
|
#define STAT_POINTER(msg, v) \
|
||||||
|
__db_msg(env, "%#lx\t%s", P_TO_ULONG(v), msg)
|
||||||
|
#define STAT_STRING(msg, p) do { \
|
||||||
|
const char *__p = p; /* p may be a function call. */ \
|
||||||
|
__db_msg(env, "%s\t%s", __p == NULL ? "!Set" : __p, msg); \
|
||||||
|
} while (0)
|
||||||
|
#define STAT_ULONG(msg, v) \
|
||||||
|
__db_msg(env, "%lu\t%s", (u_long)(v), msg)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* There are quite a few places in Berkeley DB where we want to initialize
|
||||||
|
* a DBT from a string or other random pointer type, using a length typed
|
||||||
|
* to size_t in most cases. This macro avoids a lot of casting. The macro
|
||||||
|
* comes in two flavors because we often want to clear the DBT first.
|
||||||
|
*/
|
||||||
|
#define DB_SET_DBT(dbt, d, s) do { \
|
||||||
|
(dbt).data = (void *)(d); \
|
||||||
|
(dbt).size = (u_int32_t)(s); \
|
||||||
|
} while (0)
|
||||||
|
#define DB_INIT_DBT(dbt, d, s) do { \
|
||||||
|
memset(&(dbt), 0, sizeof(dbt)); \
|
||||||
|
DB_SET_DBT(dbt, d, s); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* API return values
|
||||||
|
*******************************************************/
|
||||||
|
/*
|
||||||
|
* Return values that are OK for each different call. Most calls have a
|
||||||
|
* standard 'return of 0 is only OK value', but some, like db->get have
|
||||||
|
* DB_NOTFOUND as a return value, but it really isn't an error.
|
||||||
|
*/
|
||||||
|
#define DB_RETOK_STD(ret) ((ret) == 0)
|
||||||
|
#define DB_RETOK_DBCDEL(ret) ((ret) == 0 || (ret) == DB_KEYEMPTY || \
|
||||||
|
(ret) == DB_NOTFOUND)
|
||||||
|
#define DB_RETOK_DBCGET(ret) ((ret) == 0 || (ret) == DB_KEYEMPTY || \
|
||||||
|
(ret) == DB_NOTFOUND)
|
||||||
|
#define DB_RETOK_DBCPUT(ret) ((ret) == 0 || (ret) == DB_KEYEXIST || \
|
||||||
|
(ret) == DB_NOTFOUND)
|
||||||
|
#define DB_RETOK_DBDEL(ret) DB_RETOK_DBCDEL(ret)
|
||||||
|
#define DB_RETOK_DBGET(ret) DB_RETOK_DBCGET(ret)
|
||||||
|
#define DB_RETOK_DBPUT(ret) ((ret) == 0 || (ret) == DB_KEYEXIST)
|
||||||
|
#define DB_RETOK_EXISTS(ret) DB_RETOK_DBCGET(ret)
|
||||||
|
#define DB_RETOK_LGGET(ret) ((ret) == 0 || (ret) == DB_NOTFOUND)
|
||||||
|
#define DB_RETOK_MPGET(ret) ((ret) == 0 || (ret) == DB_PAGE_NOTFOUND)
|
||||||
|
#define DB_RETOK_REPPMSG(ret) ((ret) == 0 || \
|
||||||
|
(ret) == DB_REP_IGNORE || \
|
||||||
|
(ret) == DB_REP_ISPERM || \
|
||||||
|
(ret) == DB_REP_NEWMASTER || \
|
||||||
|
(ret) == DB_REP_NEWSITE || \
|
||||||
|
(ret) == DB_REP_NOTPERM)
|
||||||
|
|
||||||
|
/* Find a reasonable operation-not-supported error. */
|
||||||
|
#ifdef EOPNOTSUPP
|
||||||
|
#define DB_OPNOTSUP EOPNOTSUPP
|
||||||
|
#else
|
||||||
|
#ifdef ENOTSUP
|
||||||
|
#define DB_OPNOTSUP ENOTSUP
|
||||||
|
#else
|
||||||
|
#define DB_OPNOTSUP EINVAL
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Files.
|
||||||
|
*******************************************************/
|
||||||
|
/*
|
||||||
|
* We use 1024 as the maximum path length. It's too hard to figure out what
|
||||||
|
* the real path length is, as it was traditionally stored in <sys/param.h>,
|
||||||
|
* and that file isn't always available.
|
||||||
|
*/
|
||||||
|
#define DB_MAXPATHLEN 1024
|
||||||
|
|
||||||
|
#define PATH_DOT "." /* Current working directory. */
|
||||||
|
/* Path separator character(s). */
|
||||||
|
#define PATH_SEPARATOR "/\\"
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Environment.
|
||||||
|
*******************************************************/
|
||||||
|
/* Type passed to __db_appname(). */
|
||||||
|
typedef enum {
|
||||||
|
DB_APP_NONE=0, /* No type (region). */
|
||||||
|
DB_APP_DATA, /* Data file. */
|
||||||
|
DB_APP_LOG, /* Log file. */
|
||||||
|
DB_APP_TMP /* Temporary file. */
|
||||||
|
} APPNAME;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* A set of macros to check if various functionality has been configured.
|
||||||
|
*
|
||||||
|
* ALIVE_ON The is_alive function is configured.
|
||||||
|
* CDB_LOCKING CDB product locking.
|
||||||
|
* CRYPTO_ON Security has been configured.
|
||||||
|
* LOCKING_ON Locking has been configured.
|
||||||
|
* LOGGING_ON Logging has been configured.
|
||||||
|
* MUTEX_ON Mutexes have been configured.
|
||||||
|
* MPOOL_ON Memory pool has been configured.
|
||||||
|
* REP_ON Replication has been configured.
|
||||||
|
* RPC_ON RPC has been configured.
|
||||||
|
* TXN_ON Transactions have been configured.
|
||||||
|
*
|
||||||
|
* REP_ON is more complex than most: if the BDB library was compiled without
|
||||||
|
* replication support, ENV->rep_handle will be NULL; if the BDB library has
|
||||||
|
* replication support, but it was not configured, the region reference will
|
||||||
|
* be NULL.
|
||||||
|
*/
|
||||||
|
#define ALIVE_ON(env) ((env)->dbenv->is_alive != NULL)
|
||||||
|
#define CDB_LOCKING(env) F_ISSET(env, ENV_CDB)
|
||||||
|
#define CRYPTO_ON(env) ((env)->crypto_handle != NULL)
|
||||||
|
#define LOCKING_ON(env) ((env)->lk_handle != NULL)
|
||||||
|
#define LOGGING_ON(env) ((env)->lg_handle != NULL)
|
||||||
|
#define MPOOL_ON(env) ((env)->mp_handle != NULL)
|
||||||
|
#define MUTEX_ON(env) ((env)->mutex_handle != NULL)
|
||||||
|
#define REP_ON(env) \
|
||||||
|
((env)->rep_handle != NULL && (env)->rep_handle->region != NULL)
|
||||||
|
#define RPC_ON(dbenv) ((dbenv)->cl_handle != NULL)
|
||||||
|
#define TXN_ON(env) ((env)->tx_handle != NULL)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* STD_LOCKING Standard locking, that is, locking was configured and CDB
|
||||||
|
* was not. We do not do locking in off-page duplicate trees,
|
||||||
|
* so we check for that in the cursor first.
|
||||||
|
*/
|
||||||
|
#define STD_LOCKING(dbc) \
|
||||||
|
(!F_ISSET(dbc, DBC_OPD) && \
|
||||||
|
!CDB_LOCKING((dbc)->env) && LOCKING_ON((dbc)->env))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* IS_RECOVERING: The system is running recovery.
|
||||||
|
*/
|
||||||
|
#define IS_RECOVERING(env) \
|
||||||
|
(LOGGING_ON(env) && F_ISSET((env)->lg_handle, DBLOG_RECOVER))
|
||||||
|
|
||||||
|
/* Initialization methods are often illegal before/after open is called. */
|
||||||
|
#define ENV_ILLEGAL_AFTER_OPEN(env, name) \
|
||||||
|
if (F_ISSET((env), ENV_OPEN_CALLED)) \
|
||||||
|
return (__db_mi_open(env, name, 1));
|
||||||
|
#define ENV_ILLEGAL_BEFORE_OPEN(env, name) \
|
||||||
|
if (!F_ISSET((env), ENV_OPEN_CALLED)) \
|
||||||
|
return (__db_mi_open(env, name, 0));
|
||||||
|
|
||||||
|
/* We're not actually user hostile, honest. */
|
||||||
|
#define ENV_REQUIRES_CONFIG(env, handle, i, flags) \
|
||||||
|
if (handle == NULL) \
|
||||||
|
return (__env_not_config(env, i, flags));
|
||||||
|
#define ENV_REQUIRES_CONFIG_XX(env, handle, i, flags) \
|
||||||
|
if ((env)->handle->region == NULL) \
|
||||||
|
return (__env_not_config(env, i, flags));
|
||||||
|
#define ENV_NOT_CONFIGURED(env, handle, i, flags) \
|
||||||
|
if (F_ISSET((env), ENV_OPEN_CALLED)) \
|
||||||
|
ENV_REQUIRES_CONFIG(env, handle, i, flags)
|
||||||
|
|
||||||
|
#define ENV_ENTER(env, ip) do { \
|
||||||
|
int __ret; \
|
||||||
|
PANIC_CHECK(env); \
|
||||||
|
if ((env)->thr_hashtab == NULL) \
|
||||||
|
ip = NULL; \
|
||||||
|
else { \
|
||||||
|
if ((__ret = \
|
||||||
|
__env_set_state(env, &(ip), THREAD_ACTIVE)) != 0) \
|
||||||
|
return (__ret); \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define ENV_GET_THREAD_INFO(env, ip) ENV_ENTER(env, ip)
|
||||||
|
|
||||||
|
#ifdef DIAGNOSTIC
|
||||||
|
#define ENV_LEAVE(env, ip) do { \
|
||||||
|
if ((ip) != NULL) { \
|
||||||
|
DB_ASSERT(env, (ip)->dbth_state == THREAD_ACTIVE); \
|
||||||
|
(ip)->dbth_state = THREAD_OUT; \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
#else
|
||||||
|
#define ENV_LEAVE(env, ip) do { \
|
||||||
|
if ((ip) != NULL) \
|
||||||
|
(ip)->dbth_state = THREAD_OUT; \
|
||||||
|
} while (0)
|
||||||
|
#endif
|
||||||
|
#ifdef DIAGNOSTIC
|
||||||
|
#define CHECK_THREAD(env) do { \
|
||||||
|
if ((env)->thr_hashtab != NULL) \
|
||||||
|
(void)__env_set_state(env, NULL, THREAD_VERIFY); \
|
||||||
|
} while (0)
|
||||||
|
#ifdef HAVE_STATISTICS
|
||||||
|
#define CHECK_MTX_THREAD(env, mtx) do { \
|
||||||
|
if (mtx->alloc_id != MTX_MUTEX_REGION && \
|
||||||
|
mtx->alloc_id != MTX_ENV_REGION && \
|
||||||
|
mtx->alloc_id != MTX_APPLICATION) \
|
||||||
|
CHECK_THREAD(env); \
|
||||||
|
} while (0)
|
||||||
|
#else
|
||||||
|
#define CHECK_MTX_THREAD(env, mtx)
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#define CHECK_THREAD(env)
|
||||||
|
#define CHECK_MTX_THREAD(env, mtx)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
THREAD_SLOT_NOT_IN_USE=0,
|
||||||
|
THREAD_OUT,
|
||||||
|
THREAD_ACTIVE,
|
||||||
|
THREAD_BLOCKED,
|
||||||
|
THREAD_BLOCKED_DEAD
|
||||||
|
#ifdef DIAGNOSTIC
|
||||||
|
, THREAD_VERIFY
|
||||||
|
#endif
|
||||||
|
} DB_THREAD_STATE;
|
||||||
|
|
||||||
|
typedef struct __pin_list {
|
||||||
|
roff_t b_ref; /* offset to buffer. */
|
||||||
|
int region; /* region containing buffer. */
|
||||||
|
} PIN_LIST;
|
||||||
|
#define PINMAX 4
|
||||||
|
|
||||||
|
struct __db_thread_info {
|
||||||
|
pid_t dbth_pid;
|
||||||
|
db_threadid_t dbth_tid;
|
||||||
|
DB_THREAD_STATE dbth_state;
|
||||||
|
SH_TAILQ_ENTRY dbth_links;
|
||||||
|
/*
|
||||||
|
* The following fields track which buffers this thread of
|
||||||
|
* control has pinned in the mpool buffer cache.
|
||||||
|
*/
|
||||||
|
u_int16_t dbth_pincount; /* Number of pins for this thread. */
|
||||||
|
u_int16_t dbth_pinmax; /* Number of slots allocated. */
|
||||||
|
roff_t dbth_pinlist; /* List of pins. */
|
||||||
|
PIN_LIST dbth_pinarray[PINMAX]; /* Initial array of slots. */
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct __env_thread_info {
|
||||||
|
u_int32_t thr_count;
|
||||||
|
u_int32_t thr_max;
|
||||||
|
u_int32_t thr_nbucket;
|
||||||
|
roff_t thr_hashoff;
|
||||||
|
} THREAD_INFO;
|
||||||
|
|
||||||
|
#define DB_EVENT(env, e, einfo) do { \
|
||||||
|
DB_ENV *__dbenv = (env)->dbenv; \
|
||||||
|
if (__dbenv->db_event_func != NULL) \
|
||||||
|
__dbenv->db_event_func(__dbenv, e, einfo); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
typedef struct __flag_map {
|
||||||
|
u_int32_t inflag, outflag;
|
||||||
|
} FLAG_MAP;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Internal database environment structure.
|
||||||
|
*
|
||||||
|
* This is the private database environment handle. The public environment
|
||||||
|
* handle is the DB_ENV structure. The library owns this structure, the user
|
||||||
|
* owns the DB_ENV structure. The reason there are two structures is because
|
||||||
|
* the user's configuration outlives any particular DB_ENV->open call, and
|
||||||
|
* separate structures allows us to easily discard internal information without
|
||||||
|
* discarding the user's configuration.
|
||||||
|
*/
|
||||||
|
struct __env {
|
||||||
|
DB_ENV *dbenv; /* Linked DB_ENV structure */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The ENV structure can be used concurrently, so field access is
|
||||||
|
* protected.
|
||||||
|
*/
|
||||||
|
db_mutex_t mtx_env; /* ENV structure mutex */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Some fields are included in the ENV structure rather than in the
|
||||||
|
* DB_ENV structure because they are only set as arguments to the
|
||||||
|
* DB_ENV->open method. In other words, because of the historic API,
|
||||||
|
* not for any rational reason.
|
||||||
|
*
|
||||||
|
* Arguments to DB_ENV->open.
|
||||||
|
*/
|
||||||
|
char *db_home; /* Database home */
|
||||||
|
u_int32_t open_flags; /* Flags */
|
||||||
|
int db_mode; /* Default open permissions */
|
||||||
|
|
||||||
|
pid_t pid_cache; /* Cached process ID */
|
||||||
|
|
||||||
|
DB_FH *lockfhp; /* fcntl(2) locking file handle */
|
||||||
|
|
||||||
|
DB_LOCKER *env_lref; /* Locker in non-threaded handles */
|
||||||
|
|
||||||
|
DB_DISTAB recover_dtab; /* Dispatch table for recover funcs */
|
||||||
|
|
||||||
|
int dir_mode; /* Intermediate directory perms. */
|
||||||
|
|
||||||
|
/* Thread tracking */
|
||||||
|
u_int32_t thr_nbucket; /* Number of hash buckets */
|
||||||
|
DB_HASHTAB *thr_hashtab; /* Hash table of DB_THREAD_INFO */
|
||||||
|
|
||||||
|
/* Mutex allocation */
|
||||||
|
struct {
|
||||||
|
int alloc_id; /* Allocation ID argument */
|
||||||
|
u_int32_t flags; /* Flags argument */
|
||||||
|
} *mutex_iq; /* Initial mutexes queue */
|
||||||
|
u_int mutex_iq_next; /* Count of initial mutexes */
|
||||||
|
u_int mutex_iq_max; /* Maximum initial mutexes */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* List of open DB handles for this ENV, used for cursor
|
||||||
|
* adjustment. Must be protected for multi-threaded support.
|
||||||
|
*/
|
||||||
|
db_mutex_t mtx_dblist;
|
||||||
|
int db_ref; /* DB handle reference count */
|
||||||
|
TAILQ_HEAD(__dblist, __db) dblist;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* XA support.
|
||||||
|
*/
|
||||||
|
int xa_rmid; /* XA Resource Manager ID */
|
||||||
|
TAILQ_ENTRY(__env) links; /* XA environments */
|
||||||
|
TAILQ_HEAD(__xa_txn, __db_txn) xa_txn; /* XA active transactions */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* List of open file handles for this ENV. Must be protected
|
||||||
|
* for multi-threaded support.
|
||||||
|
*/
|
||||||
|
TAILQ_HEAD(__fdlist, __fh_t) fdlist;
|
||||||
|
|
||||||
|
db_mutex_t mtx_mt; /* Mersenne Twister mutex */
|
||||||
|
int mti; /* Mersenne Twister index */
|
||||||
|
u_long *mt; /* Mersenne Twister state vector */
|
||||||
|
|
||||||
|
DB_CIPHER *crypto_handle; /* Crypto handle */
|
||||||
|
DB_LOCKTAB *lk_handle; /* Lock handle */
|
||||||
|
DB_LOG *lg_handle; /* Log handle */
|
||||||
|
DB_MPOOL *mp_handle; /* Mpool handle */
|
||||||
|
DB_MUTEXMGR *mutex_handle; /* Mutex handle */
|
||||||
|
DB_REP *rep_handle; /* Replication handle */
|
||||||
|
DB_TXNMGR *tx_handle; /* Txn handle */
|
||||||
|
|
||||||
|
/* Application callback to copy data to/from a custom data source */
|
||||||
|
#define DB_USERCOPY_GETDATA 0x0001
|
||||||
|
#define DB_USERCOPY_SETDATA 0x0002
|
||||||
|
int (*dbt_usercopy)
|
||||||
|
__P((DBT *, u_int32_t, void *, u_int32_t, u_int32_t));
|
||||||
|
|
||||||
|
REGINFO *reginfo; /* REGINFO structure reference */
|
||||||
|
|
||||||
|
#define DB_TEST_ELECTINIT 1 /* after __rep_elect_init */
|
||||||
|
#define DB_TEST_ELECTVOTE1 2 /* after sending VOTE1 */
|
||||||
|
#define DB_TEST_POSTDESTROY 3 /* after destroy op */
|
||||||
|
#define DB_TEST_POSTLOG 4 /* after logging all pages */
|
||||||
|
#define DB_TEST_POSTLOGMETA 5 /* after logging meta in btree */
|
||||||
|
#define DB_TEST_POSTOPEN 6 /* after __os_open */
|
||||||
|
#define DB_TEST_POSTSYNC 7 /* after syncing the log */
|
||||||
|
#define DB_TEST_PREDESTROY 8 /* before destroy op */
|
||||||
|
#define DB_TEST_PREOPEN 9 /* before __os_open */
|
||||||
|
#define DB_TEST_SUBDB_LOCKS 10 /* subdb locking tests */
|
||||||
|
int test_abort; /* Abort value for testing */
|
||||||
|
int test_check; /* Checkpoint value for testing */
|
||||||
|
int test_copy; /* Copy value for testing */
|
||||||
|
|
||||||
|
#define ENV_CDB 0x00000001 /* DB_INIT_CDB */
|
||||||
|
#define ENV_DBLOCAL 0x00000002 /* Environment for a private DB */
|
||||||
|
#define ENV_LITTLEENDIAN 0x00000004 /* Little endian system. */
|
||||||
|
#define ENV_LOCKDOWN 0x00000008 /* DB_LOCKDOWN set */
|
||||||
|
#define ENV_NO_OUTPUT_SET 0x00000010 /* No output channel set */
|
||||||
|
#define ENV_OPEN_CALLED 0x00000020 /* DB_ENV->open called */
|
||||||
|
#define ENV_PRIVATE 0x00000040 /* DB_PRIVATE set */
|
||||||
|
#define ENV_RECOVER_FATAL 0x00000080 /* Doing fatal recovery in env */
|
||||||
|
#define ENV_REF_COUNTED 0x00000100 /* Region references this handle */
|
||||||
|
#define ENV_SYSTEM_MEM 0x00000200 /* DB_SYSTEM_MEM set */
|
||||||
|
#define ENV_THREAD 0x00000400 /* DB_THREAD set */
|
||||||
|
u_int32_t flags;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Database Access Methods.
|
||||||
|
*******************************************************/
|
||||||
|
/*
|
||||||
|
* DB_IS_THREADED --
|
||||||
|
* The database handle is free-threaded (was opened with DB_THREAD).
|
||||||
|
*/
|
||||||
|
#define DB_IS_THREADED(dbp) \
|
||||||
|
((dbp)->mutex != MUTEX_INVALID)
|
||||||
|
|
||||||
|
/* Initialization methods are often illegal before/after open is called. */
|
||||||
|
#define DB_ILLEGAL_AFTER_OPEN(dbp, name) \
|
||||||
|
if (F_ISSET((dbp), DB_AM_OPEN_CALLED)) \
|
||||||
|
return (__db_mi_open((dbp)->env, name, 1));
|
||||||
|
#define DB_ILLEGAL_BEFORE_OPEN(dbp, name) \
|
||||||
|
if (!F_ISSET((dbp), DB_AM_OPEN_CALLED)) \
|
||||||
|
return (__db_mi_open((dbp)->env, name, 0));
|
||||||
|
/* Some initialization methods are illegal if environment isn't local. */
|
||||||
|
#define DB_ILLEGAL_IN_ENV(dbp, name) \
|
||||||
|
if (!F_ISSET((dbp)->env, ENV_DBLOCAL)) \
|
||||||
|
return (__db_mi_env((dbp)->env, name));
|
||||||
|
#define DB_ILLEGAL_METHOD(dbp, flags) { \
|
||||||
|
int __ret; \
|
||||||
|
if ((__ret = __dbh_am_chk(dbp, flags)) != 0) \
|
||||||
|
return (__ret); \
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Common DBC->internal fields. Each access method adds additional fields
|
||||||
|
* to this list, but the initial fields are common.
|
||||||
|
*/
|
||||||
|
#define __DBC_INTERNAL \
|
||||||
|
DBC *opd; /* Off-page duplicate cursor. */\
|
||||||
|
\
|
||||||
|
void *page; /* Referenced page. */ \
|
||||||
|
db_pgno_t root; /* Tree root. */ \
|
||||||
|
db_pgno_t pgno; /* Referenced page number. */ \
|
||||||
|
db_indx_t indx; /* Referenced key item index. */\
|
||||||
|
\
|
||||||
|
DB_LOCK lock; /* Cursor lock. */ \
|
||||||
|
db_lockmode_t lock_mode; /* Lock mode. */
|
||||||
|
|
||||||
|
struct __dbc_internal {
|
||||||
|
__DBC_INTERNAL
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Actions that __db_master_update can take. */
|
||||||
|
typedef enum { MU_REMOVE, MU_RENAME, MU_OPEN } mu_action;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Access-method-common macro for determining whether a cursor
|
||||||
|
* has been initialized.
|
||||||
|
*/
|
||||||
|
#define IS_INITIALIZED(dbc) ((dbc)->internal->pgno != PGNO_INVALID)
|
||||||
|
|
||||||
|
/* Free the callback-allocated buffer, if necessary, hanging off of a DBT. */
|
||||||
|
#define FREE_IF_NEEDED(env, dbt) \
|
||||||
|
if (F_ISSET((dbt), DB_DBT_APPMALLOC)) { \
|
||||||
|
__os_ufree((env), (dbt)->data); \
|
||||||
|
F_CLR((dbt), DB_DBT_APPMALLOC); \
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Use memory belonging to object "owner" to return the results of
|
||||||
|
* any no-DBT-flag get ops on cursor "dbc".
|
||||||
|
*/
|
||||||
|
#define SET_RET_MEM(dbc, owner) \
|
||||||
|
do { \
|
||||||
|
(dbc)->rskey = &(owner)->my_rskey; \
|
||||||
|
(dbc)->rkey = &(owner)->my_rkey; \
|
||||||
|
(dbc)->rdata = &(owner)->my_rdata; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
/* Use the return-data memory src is currently set to use in dest as well. */
|
||||||
|
#define COPY_RET_MEM(src, dest) \
|
||||||
|
do { \
|
||||||
|
(dest)->rskey = (src)->rskey; \
|
||||||
|
(dest)->rkey = (src)->rkey; \
|
||||||
|
(dest)->rdata = (src)->rdata; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
/* Reset the returned-memory pointers to their defaults. */
|
||||||
|
#define RESET_RET_MEM(dbc) \
|
||||||
|
do { \
|
||||||
|
(dbc)->rskey = &(dbc)->my_rskey; \
|
||||||
|
(dbc)->rkey = &(dbc)->my_rkey; \
|
||||||
|
(dbc)->rdata = &(dbc)->my_rdata; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Mpool.
|
||||||
|
*******************************************************/
|
||||||
|
/*
|
||||||
|
* File types for DB access methods. Negative numbers are reserved to DB.
|
||||||
|
*/
|
||||||
|
#define DB_FTYPE_SET -1 /* Call pgin/pgout functions. */
|
||||||
|
#define DB_FTYPE_NOTSET 0 /* Don't call... */
|
||||||
|
#define DB_LSN_OFF_NOTSET -1 /* Not yet set. */
|
||||||
|
#define DB_CLEARLEN_NOTSET UINT32_MAX /* Not yet set. */
|
||||||
|
|
||||||
|
/* Structure used as the DB pgin/pgout pgcookie. */
|
||||||
|
typedef struct __dbpginfo {
|
||||||
|
size_t db_pagesize; /* Underlying page size. */
|
||||||
|
u_int32_t flags; /* Some DB_AM flags needed. */
|
||||||
|
DBTYPE type; /* DB type */
|
||||||
|
} DB_PGINFO;
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Log.
|
||||||
|
*******************************************************/
|
||||||
|
/* Initialize an LSN to 'zero'. */
|
||||||
|
#define ZERO_LSN(LSN) do { \
|
||||||
|
(LSN).file = 0; \
|
||||||
|
(LSN).offset = 0; \
|
||||||
|
} while (0)
|
||||||
|
#define IS_ZERO_LSN(LSN) ((LSN).file == 0 && (LSN).offset == 0)
|
||||||
|
|
||||||
|
#define IS_INIT_LSN(LSN) ((LSN).file == 1 && (LSN).offset == 0)
|
||||||
|
#define INIT_LSN(LSN) do { \
|
||||||
|
(LSN).file = 1; \
|
||||||
|
(LSN).offset = 0; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define MAX_LSN(LSN) do { \
|
||||||
|
(LSN).file = UINT32_MAX; \
|
||||||
|
(LSN).offset = UINT32_MAX; \
|
||||||
|
} while (0)
|
||||||
|
#define IS_MAX_LSN(LSN) \
|
||||||
|
((LSN).file == UINT32_MAX && (LSN).offset == UINT32_MAX)
|
||||||
|
|
||||||
|
/* If logging is turned off, smash the lsn. */
|
||||||
|
#define LSN_NOT_LOGGED(LSN) do { \
|
||||||
|
(LSN).file = 0; \
|
||||||
|
(LSN).offset = 1; \
|
||||||
|
} while (0)
|
||||||
|
#define IS_NOT_LOGGED_LSN(LSN) \
|
||||||
|
((LSN).file == 0 && (LSN).offset == 1)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* LOG_COMPARE -- compare two LSNs.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define LOG_COMPARE(lsn0, lsn1) \
|
||||||
|
((lsn0)->file != (lsn1)->file ? \
|
||||||
|
((lsn0)->file < (lsn1)->file ? -1 : 1) : \
|
||||||
|
((lsn0)->offset != (lsn1)->offset ? \
|
||||||
|
((lsn0)->offset < (lsn1)->offset ? -1 : 1) : 0))
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Txn.
|
||||||
|
*******************************************************/
|
||||||
|
#define DB_NONBLOCK(C) ((C)->txn != NULL && F_ISSET((C)->txn, TXN_NOWAIT))
|
||||||
|
#define NOWAIT_FLAG(txn) \
|
||||||
|
((txn) != NULL && F_ISSET((txn), TXN_NOWAIT) ? DB_LOCK_NOWAIT : 0)
|
||||||
|
#define IS_REAL_TXN(txn) \
|
||||||
|
((txn) != NULL && !F_ISSET(txn, TXN_CDSGROUP))
|
||||||
|
#define IS_SUBTRANSACTION(txn) \
|
||||||
|
((txn) != NULL && (txn)->parent != NULL)
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Crypto.
|
||||||
|
*******************************************************/
|
||||||
|
#define DB_IV_BYTES 16 /* Bytes per IV */
|
||||||
|
#define DB_MAC_KEY 20 /* Bytes per MAC checksum */
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Secondaries over RPC.
|
||||||
|
*******************************************************/
|
||||||
|
#ifdef CONFIG_TEST
|
||||||
|
/*
|
||||||
|
* These are flags passed to DB->associate calls by the Tcl API if running
|
||||||
|
* over RPC. The RPC server will mask out these flags before making the real
|
||||||
|
* DB->associate call.
|
||||||
|
*
|
||||||
|
* These flags must coexist with the valid flags to DB->associate (currently
|
||||||
|
* DB_AUTO_COMMIT and DB_CREATE). DB_AUTO_COMMIT is in the group of
|
||||||
|
* high-order shared flags (0xff000000), and DB_CREATE is in the low-order
|
||||||
|
* group (0x00000fff), so we pick a range in between.
|
||||||
|
*/
|
||||||
|
#define DB_RPC2ND_MASK 0x00f00000 /* Reserved bits. */
|
||||||
|
|
||||||
|
#define DB_RPC2ND_REVERSEDATA 0x00100000 /* callback_n(0) _s_reversedata. */
|
||||||
|
#define DB_RPC2ND_NOOP 0x00200000 /* callback_n(1) _s_noop */
|
||||||
|
#define DB_RPC2ND_CONCATKEYDATA 0x00300000 /* callback_n(2) _s_concatkeydata */
|
||||||
|
#define DB_RPC2ND_CONCATDATAKEY 0x00400000 /* callback_n(3) _s_concatdatakey */
|
||||||
|
#define DB_RPC2ND_REVERSECONCAT 0x00500000 /* callback_n(4) _s_reverseconcat */
|
||||||
|
#define DB_RPC2ND_TRUNCDATA 0x00600000 /* callback_n(5) _s_truncdata */
|
||||||
|
#define DB_RPC2ND_CONSTANT 0x00700000 /* callback_n(6) _s_constant */
|
||||||
|
#define DB_RPC2ND_GETZIP 0x00800000 /* sj_getzip */
|
||||||
|
#define DB_RPC2ND_GETNAME 0x00900000 /* sj_getname */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Remaining general DB includes.
|
||||||
|
*******************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
#include "dbinc/globals.h"
|
||||||
|
#include "dbinc/clock.h"
|
||||||
|
#include "dbinc/debug.h"
|
||||||
|
#include "dbinc/region.h"
|
||||||
|
#include "dbinc_auto/env_ext.h"
|
||||||
|
#include "dbinc/mutex.h"
|
||||||
|
#ifdef HAVE_REPLICATION_THREADS
|
||||||
|
#include "dbinc/repmgr.h"
|
||||||
|
#endif
|
||||||
|
#include "dbinc/rep.h"
|
||||||
|
#include "dbinc/os.h"
|
||||||
|
#include "dbinc_auto/clib_ext.h"
|
||||||
|
#include "dbinc_auto/common_ext.h"
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Remaining Log.
|
||||||
|
* These need to be defined after the general includes
|
||||||
|
* because they need rep.h from above.
|
||||||
|
*******************************************************/
|
||||||
|
/*
|
||||||
|
* Test if the environment is currently logging changes. If we're in recovery
|
||||||
|
* or we're a replication client, we don't need to log changes because they're
|
||||||
|
* already in the log, even though we have a fully functional log system.
|
||||||
|
*/
|
||||||
|
#define DBENV_LOGGING(env) \
|
||||||
|
(LOGGING_ON(env) && !IS_REP_CLIENT(env) && (!IS_RECOVERING(env)))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Test if we need to log a change. By default, we don't log operations without
|
||||||
|
* associated transactions, unless DIAGNOSTIC, DEBUG_ROP or DEBUG_WOP are on.
|
||||||
|
* This is because we want to get log records for read/write operations, and, if
|
||||||
|
* we are trying to debug something, more information is always better.
|
||||||
|
*
|
||||||
|
* The DBC_RECOVER flag is set when we're in abort, as well as during recovery;
|
||||||
|
* thus DBC_LOGGING may be false for a particular dbc even when DBENV_LOGGING
|
||||||
|
* is true.
|
||||||
|
*
|
||||||
|
* We explicitly use LOGGING_ON/IS_REP_CLIENT here because we don't want to pull
|
||||||
|
* in the log headers, which IS_RECOVERING (and thus DBENV_LOGGING) rely on, and
|
||||||
|
* because DBC_RECOVER should be set anytime IS_RECOVERING would be true.
|
||||||
|
*
|
||||||
|
* If we're not in recovery (master - doing an abort or a client applying
|
||||||
|
* a txn), then a client's only path through here is on an internal
|
||||||
|
* operation, and a master's only path through here is a transactional
|
||||||
|
* operation. Detect if either is not the case.
|
||||||
|
*/
|
||||||
|
#if defined(DIAGNOSTIC) || defined(DEBUG_ROP) || defined(DEBUG_WOP)
|
||||||
|
#define DBC_LOGGING(dbc) __dbc_logging(dbc)
|
||||||
|
#else
|
||||||
|
#define DBC_LOGGING(dbc) \
|
||||||
|
((dbc)->txn != NULL && LOGGING_ON((dbc)->env) && \
|
||||||
|
!F_ISSET((dbc), DBC_RECOVER) && !IS_REP_CLIENT((dbc)->env))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* !_DB_INT_H_ */
|
||||||
1317
build_vxworks/db_load/db_load.c
Normal file
1317
build_vxworks/db_load/db_load.c
Normal file
File diff suppressed because it is too large
Load Diff
158
build_vxworks/db_load/db_load20.wpj
Normal file
158
build_vxworks/db_load/db_load20.wpj
Normal file
@@ -0,0 +1,158 @@
|
|||||||
|
Document file - DO NOT EDIT
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_BUILDRULE
|
||||||
|
db_load20.out
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_AR
|
||||||
|
ar386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_ARCHIVE
|
||||||
|
$(PRJ_DIR)/PENTIUMgnu/db_load20.a
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_AS
|
||||||
|
cc386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_CC
|
||||||
|
cc386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_CFLAGS
|
||||||
|
-g \
|
||||||
|
-mpentium \
|
||||||
|
-ansi \
|
||||||
|
-nostdinc \
|
||||||
|
-DRW_MULTI_THREAD \
|
||||||
|
-D_REENTRANT \
|
||||||
|
-fvolatile \
|
||||||
|
-nostdlib \
|
||||||
|
-fno-builtin \
|
||||||
|
-fno-defer-pop \
|
||||||
|
-I$(PRJ_DIR)/.. \
|
||||||
|
-I$(PRJ_DIR)/../.. \
|
||||||
|
-I$(WIND_BASE)/target/h \
|
||||||
|
-DCPU=PENTIUM
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_CFLAGS_AS
|
||||||
|
-g \
|
||||||
|
-mpentium \
|
||||||
|
-ansi \
|
||||||
|
-nostdinc \
|
||||||
|
-fvolatile \
|
||||||
|
-nostdlib \
|
||||||
|
-fno-builtin \
|
||||||
|
-fno-defer-pop \
|
||||||
|
-P \
|
||||||
|
-x \
|
||||||
|
assembler-with-cpp \
|
||||||
|
-I$(WIND_BASE)/target/h \
|
||||||
|
-DCPU=PENTIUM
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_CPP
|
||||||
|
cc386 -E -P -xc
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_LD
|
||||||
|
ld386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_LDDEPS
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_LDFLAGS
|
||||||
|
-X -N
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_LD_PARTIAL_FLAGS
|
||||||
|
-X -r
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_NM
|
||||||
|
nm386 -g
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_OPTION_DEFINE_MACRO
|
||||||
|
-D
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_OPTION_INCLUDE_DIR
|
||||||
|
-I
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_POST_BUILD_RULE
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_PRJ_LIBS
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_SIZE
|
||||||
|
size386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_RO_DEPEND_PATH
|
||||||
|
{$(WIND_BASE)/target/h/} \
|
||||||
|
{$(WIND_BASE)/target/src/} \
|
||||||
|
{$(WIND_BASE)/target/config/}
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_TC
|
||||||
|
::tc_PENTIUMgnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_archive
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_db_load20.out
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_objects
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD__CURRENT
|
||||||
|
PENTIUMgnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD__LIST
|
||||||
|
PENTIUMgnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_TYPE
|
||||||
|
::prj_vxApp
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_VERSION
|
||||||
|
2.0
|
||||||
|
<END>
|
||||||
|
<BEGIN> FILE_db_load.c_dependDone
|
||||||
|
FALSE
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_load.c_dependencies
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_load.c_objects
|
||||||
|
db_load.o
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_load.c_tool
|
||||||
|
C/C++ compiler
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> PROJECT_FILES
|
||||||
|
$(PRJ_DIR)/db_load.c
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> userComments
|
||||||
|
db_load
|
||||||
|
<END>
|
||||||
192
build_vxworks/db_load/db_load22.wpj
Normal file
192
build_vxworks/db_load/db_load22.wpj
Normal file
@@ -0,0 +1,192 @@
|
|||||||
|
Document file - DO NOT EDIT
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_BUILDRULE
|
||||||
|
db_load22.out
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_AR
|
||||||
|
arpentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_ARCHIVE
|
||||||
|
$(PRJ_DIR)/PENTIUM2gnu/db_load22.a
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_AS
|
||||||
|
ccpentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CC
|
||||||
|
ccpentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CC_ARCH_SPEC
|
||||||
|
-mcpu=pentiumpro -march=pentiumpro
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CFLAGS
|
||||||
|
-g \
|
||||||
|
-mcpu=pentiumpro \
|
||||||
|
-march=pentiumpro \
|
||||||
|
-ansi \
|
||||||
|
-nostdlib \
|
||||||
|
-DRW_MULTI_THREAD \
|
||||||
|
-D_REENTRANT \
|
||||||
|
-fvolatile \
|
||||||
|
-fno-builtin \
|
||||||
|
-fno-defer-pop \
|
||||||
|
-I$(PRJ_DIR)/.. \
|
||||||
|
-I$(PRJ_DIR)/../.. \
|
||||||
|
-I$(WIND_BASE)/target/h \
|
||||||
|
-DCPU=PENTIUM2 \
|
||||||
|
-DTOOL_FAMILY=gnu \
|
||||||
|
-DTOOL=gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CFLAGS_AS
|
||||||
|
-g \
|
||||||
|
-mcpu=pentiumpro \
|
||||||
|
-march=pentiumpro \
|
||||||
|
-ansi \
|
||||||
|
-nostdlib \
|
||||||
|
-fno-builtin \
|
||||||
|
-fno-defer-pop \
|
||||||
|
-P \
|
||||||
|
-xassembler-with-cpp \
|
||||||
|
-I$(WIND_BASE)/target/h \
|
||||||
|
-DCPU=PENTIUM2 \
|
||||||
|
-DTOOL_FAMILY=gnu \
|
||||||
|
-DTOOL=gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CPP
|
||||||
|
ccpentium -E -P
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_HEX_FLAGS
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD
|
||||||
|
ldpentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_LDFLAGS
|
||||||
|
-X -N
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD_PARTIAL
|
||||||
|
ccpentium -r -nostdlib -Wl,-X
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD_PARTIAL_FLAGS
|
||||||
|
-X -r
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_NM
|
||||||
|
nmpentium -g
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_DEFINE_MACRO
|
||||||
|
-D
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_DEPEND
|
||||||
|
-M -w
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_GENERATE_DEPENDENCY_FILE
|
||||||
|
-MD
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_INCLUDE_DIR
|
||||||
|
-I
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_LANG_C
|
||||||
|
-xc
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_UNDEFINE_MACRO
|
||||||
|
-U
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_POST_BUILD_RULE
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_PRJ_LIBS
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_SIZE
|
||||||
|
sizepentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_TOOL_FAMILY
|
||||||
|
gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_RO_DEPEND_PATH
|
||||||
|
{$(WIND_BASE)/target/h/} \
|
||||||
|
{$(WIND_BASE)/target/src/} \
|
||||||
|
{$(WIND_BASE)/target/config/}
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_TC
|
||||||
|
::tc_PENTIUM2gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_archive
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_db_load22.out
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_db_load22.pl
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_objects
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD__CURRENT
|
||||||
|
PENTIUM2gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD__LIST
|
||||||
|
PENTIUM2gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_TYPE
|
||||||
|
::prj_vxApp
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_VERSION
|
||||||
|
2.2
|
||||||
|
<END>
|
||||||
|
<BEGIN> FILE_db_load.c_dependDone
|
||||||
|
FALSE
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_load.c_dependencies
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_load.c_objects
|
||||||
|
db_load.o
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_load.c_tool
|
||||||
|
C/C++ compiler
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> PROJECT_FILES
|
||||||
|
$(PRJ_DIR)/db_load.c
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> userComments
|
||||||
|
db_load
|
||||||
|
<END>
|
||||||
594
build_vxworks/db_printlog/db_printlog.c
Normal file
594
build_vxworks/db_printlog/db_printlog.c
Normal file
@@ -0,0 +1,594 @@
|
|||||||
|
/*-
|
||||||
|
* See the file LICENSE for redistribution information.
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996,2008 Oracle. All rights reserved.
|
||||||
|
*
|
||||||
|
* $Id: db_printlog.c 63573 2008-05-23 21:43:21Z trent.nelson $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "db_config.h"
|
||||||
|
|
||||||
|
#include "db_int.h"
|
||||||
|
#include "dbinc/db_page.h"
|
||||||
|
#include "dbinc/btree.h"
|
||||||
|
#include "dbinc/fop.h"
|
||||||
|
#include "dbinc/hash.h"
|
||||||
|
#include "dbinc/log.h"
|
||||||
|
#include "dbinc/qam.h"
|
||||||
|
#include "dbinc/txn.h"
|
||||||
|
|
||||||
|
#ifndef lint
|
||||||
|
static const char copyright[] =
|
||||||
|
"Copyright (c) 1996,2008 Oracle. All rights reserved.\n";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int db_printlog_print_app_record __P((DB_ENV *, DBT *, DB_LSN *, db_recops));
|
||||||
|
int db_printlog_env_init_print __P((ENV *, u_int32_t, DB_DISTAB *));
|
||||||
|
int db_printlog_env_init_print_42 __P((ENV *, DB_DISTAB *));
|
||||||
|
int db_printlog_env_init_print_43 __P((ENV *, DB_DISTAB *));
|
||||||
|
int db_printlog_env_init_print_45 __P((ENV *, DB_DISTAB *));
|
||||||
|
int db_printlog_lsn_arg __P((char *, DB_LSN *));
|
||||||
|
int db_printlog_main __P((int, char *[]));
|
||||||
|
int db_printlog_open_rep_db __P((DB_ENV *, DB **, DBC **));
|
||||||
|
int db_printlog_usage __P((void));
|
||||||
|
int db_printlog_version_check __P((void));
|
||||||
|
|
||||||
|
const char *progname;
|
||||||
|
|
||||||
|
int
|
||||||
|
db_printlog(args)
|
||||||
|
char *args;
|
||||||
|
{
|
||||||
|
int argc;
|
||||||
|
char **argv;
|
||||||
|
|
||||||
|
__db_util_arg("db_printlog", args, &argc, &argv);
|
||||||
|
return (db_printlog_main(argc, argv) ? EXIT_FAILURE : EXIT_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#define ERROR_RETURN ERROR
|
||||||
|
|
||||||
|
int
|
||||||
|
db_printlog_main(argc, argv)
|
||||||
|
int argc;
|
||||||
|
char *argv[];
|
||||||
|
{
|
||||||
|
extern char *optarg;
|
||||||
|
extern int optind, __db_getopt_reset;
|
||||||
|
DB *dbp;
|
||||||
|
DBC *dbc;
|
||||||
|
DBT data, keydbt;
|
||||||
|
DB_DISTAB dtab;
|
||||||
|
DB_ENV *dbenv;
|
||||||
|
DB_LOGC *logc;
|
||||||
|
DB_LSN key, start, stop, verslsn;
|
||||||
|
ENV *env;
|
||||||
|
u_int32_t logcflag, newversion, version;
|
||||||
|
int ch, cmp, exitval, nflag, rflag, ret, repflag;
|
||||||
|
char *home, *passwd;
|
||||||
|
|
||||||
|
if ((progname = __db_rpath(argv[0])) == NULL)
|
||||||
|
progname = argv[0];
|
||||||
|
else
|
||||||
|
++progname;
|
||||||
|
|
||||||
|
if ((ret = db_printlog_version_check()) != 0)
|
||||||
|
return (ret);
|
||||||
|
|
||||||
|
dbp = NULL;
|
||||||
|
dbc = NULL;
|
||||||
|
dbenv = NULL;
|
||||||
|
logc = NULL;
|
||||||
|
ZERO_LSN(start);
|
||||||
|
ZERO_LSN(stop);
|
||||||
|
exitval = nflag = rflag = repflag = 0;
|
||||||
|
home = passwd = NULL;
|
||||||
|
|
||||||
|
memset(&dtab, 0, sizeof(dtab));
|
||||||
|
|
||||||
|
__db_getopt_reset = 1;
|
||||||
|
while ((ch = getopt(argc, argv, "b:e:h:NP:rRV")) != EOF)
|
||||||
|
switch (ch) {
|
||||||
|
case 'b':
|
||||||
|
/* Don't use getsubopt(3), not all systems have it. */
|
||||||
|
if (db_printlog_lsn_arg(optarg, &start))
|
||||||
|
return (db_printlog_usage());
|
||||||
|
break;
|
||||||
|
case 'e':
|
||||||
|
/* Don't use getsubopt(3), not all systems have it. */
|
||||||
|
if (db_printlog_lsn_arg(optarg, &stop))
|
||||||
|
return (db_printlog_usage());
|
||||||
|
break;
|
||||||
|
case 'h':
|
||||||
|
home = optarg;
|
||||||
|
break;
|
||||||
|
case 'N':
|
||||||
|
nflag = 1;
|
||||||
|
break;
|
||||||
|
case 'P':
|
||||||
|
passwd = strdup(optarg);
|
||||||
|
memset(optarg, 0, strlen(optarg));
|
||||||
|
if (passwd == NULL) {
|
||||||
|
fprintf(stderr, "%s: strdup: %s\n",
|
||||||
|
progname, strerror(errno));
|
||||||
|
return (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'r':
|
||||||
|
rflag = 1;
|
||||||
|
break;
|
||||||
|
case 'R': /* Undocumented */
|
||||||
|
repflag = 1;
|
||||||
|
break;
|
||||||
|
case 'V':
|
||||||
|
printf("%s\n", db_version(NULL, NULL, NULL));
|
||||||
|
return (EXIT_SUCCESS);
|
||||||
|
case '?':
|
||||||
|
default:
|
||||||
|
return (db_printlog_usage());
|
||||||
|
}
|
||||||
|
argc -= optind;
|
||||||
|
argv += optind;
|
||||||
|
|
||||||
|
if (argc > 0)
|
||||||
|
return (db_printlog_usage());
|
||||||
|
|
||||||
|
/* Handle possible interruptions. */
|
||||||
|
__db_util_siginit();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Create an environment object and initialize it for error
|
||||||
|
* reporting.
|
||||||
|
*/
|
||||||
|
if ((ret = db_env_create(&dbenv, 0)) != 0) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: db_env_create: %s\n", progname, db_strerror(ret));
|
||||||
|
goto shutdown;
|
||||||
|
}
|
||||||
|
|
||||||
|
dbenv->set_errfile(dbenv, stderr);
|
||||||
|
dbenv->set_errpfx(dbenv, progname);
|
||||||
|
|
||||||
|
if (nflag) {
|
||||||
|
if ((ret = dbenv->set_flags(dbenv, DB_NOLOCKING, 1)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "set_flags: DB_NOLOCKING");
|
||||||
|
goto shutdown;
|
||||||
|
}
|
||||||
|
if ((ret = dbenv->set_flags(dbenv, DB_NOPANIC, 1)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "set_flags: DB_NOPANIC");
|
||||||
|
goto shutdown;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (passwd != NULL && (ret = dbenv->set_encrypt(dbenv,
|
||||||
|
passwd, DB_ENCRYPT_AES)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "set_passwd");
|
||||||
|
goto shutdown;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set up an app-specific dispatch function so that we can gracefully
|
||||||
|
* handle app-specific log records.
|
||||||
|
*/
|
||||||
|
if ((ret = dbenv->set_app_dispatch(
|
||||||
|
dbenv, db_printlog_print_app_record)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "app_dispatch");
|
||||||
|
goto shutdown;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* An environment is required, but as all we're doing is reading log
|
||||||
|
* files, we create one if it doesn't already exist. If we create
|
||||||
|
* it, create it private so it automatically goes away when we're done.
|
||||||
|
* If we are reading the replication database, do not open the env
|
||||||
|
* with logging, because we don't want to log the opens.
|
||||||
|
*/
|
||||||
|
if (repflag) {
|
||||||
|
if ((ret = dbenv->open(dbenv, home,
|
||||||
|
DB_INIT_MPOOL | DB_USE_ENVIRON, 0)) != 0 &&
|
||||||
|
(ret == DB_VERSION_MISMATCH ||
|
||||||
|
(ret = dbenv->open(dbenv, home,
|
||||||
|
DB_CREATE | DB_INIT_MPOOL | DB_PRIVATE | DB_USE_ENVIRON, 0))
|
||||||
|
!= 0)) {
|
||||||
|
dbenv->err(dbenv, ret, "DB_ENV->open");
|
||||||
|
goto shutdown;
|
||||||
|
}
|
||||||
|
} else if ((ret = dbenv->open(dbenv, home, DB_USE_ENVIRON, 0)) != 0 &&
|
||||||
|
(ret == DB_VERSION_MISMATCH ||
|
||||||
|
(ret = dbenv->open(dbenv, home,
|
||||||
|
DB_CREATE | DB_INIT_LOG | DB_PRIVATE | DB_USE_ENVIRON, 0)) != 0)) {
|
||||||
|
dbenv->err(dbenv, ret, "DB_ENV->open");
|
||||||
|
goto shutdown;
|
||||||
|
}
|
||||||
|
env = dbenv->env;
|
||||||
|
|
||||||
|
/* Allocate a log cursor. */
|
||||||
|
if (repflag) {
|
||||||
|
if ((ret = db_printlog_open_rep_db(dbenv, &dbp, &dbc)) != 0)
|
||||||
|
goto shutdown;
|
||||||
|
} else if ((ret = dbenv->log_cursor(dbenv, &logc, 0)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "DB_ENV->log_cursor");
|
||||||
|
goto shutdown;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IS_ZERO_LSN(start)) {
|
||||||
|
memset(&keydbt, 0, sizeof(keydbt));
|
||||||
|
logcflag = rflag ? DB_PREV : DB_NEXT;
|
||||||
|
} else {
|
||||||
|
key = start;
|
||||||
|
logcflag = DB_SET;
|
||||||
|
}
|
||||||
|
memset(&data, 0, sizeof(data));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If we're using the repflag, we're immediately initializing
|
||||||
|
* the print table. Use the current version. If we're printing
|
||||||
|
* the log then initialize version to 0 so that we get the
|
||||||
|
* correct version right away.
|
||||||
|
*/
|
||||||
|
if (repflag)
|
||||||
|
version = DB_LOGVERSION;
|
||||||
|
else
|
||||||
|
version = 0;
|
||||||
|
ZERO_LSN(verslsn);
|
||||||
|
|
||||||
|
/* Initialize print callbacks if repflag. */
|
||||||
|
if (repflag &&
|
||||||
|
(ret = db_printlog_env_init_print(env, version, &dtab)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "callback: initialization");
|
||||||
|
goto shutdown;
|
||||||
|
}
|
||||||
|
for (; !__db_util_interrupted(); logcflag = rflag ? DB_PREV : DB_NEXT) {
|
||||||
|
if (repflag) {
|
||||||
|
ret = dbc->get(dbc, &keydbt, &data, logcflag);
|
||||||
|
if (ret == 0)
|
||||||
|
key = ((__rep_control_args *)keydbt.data)->lsn;
|
||||||
|
} else
|
||||||
|
ret = logc->get(logc, &key, &data, logcflag);
|
||||||
|
if (ret != 0) {
|
||||||
|
if (ret == DB_NOTFOUND)
|
||||||
|
break;
|
||||||
|
dbenv->err(dbenv,
|
||||||
|
ret, repflag ? "DBC->get" : "DB_LOGC->get");
|
||||||
|
goto shutdown;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We may have reached the end of the range we're displaying.
|
||||||
|
*/
|
||||||
|
if (!IS_ZERO_LSN(stop)) {
|
||||||
|
cmp = LOG_COMPARE(&key, &stop);
|
||||||
|
if ((rflag && cmp < 0) || (!rflag && cmp > 0))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (!repflag && key.file != verslsn.file) {
|
||||||
|
/*
|
||||||
|
* If our log file changed, we need to see if the
|
||||||
|
* version of the log file changed as well.
|
||||||
|
* If it changed, reset the print table.
|
||||||
|
*/
|
||||||
|
if ((ret = logc->version(logc, &newversion, 0)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "DB_LOGC->version");
|
||||||
|
goto shutdown;
|
||||||
|
}
|
||||||
|
if (version != newversion) {
|
||||||
|
version = newversion;
|
||||||
|
if ((ret = db_printlog_env_init_print(env, version,
|
||||||
|
&dtab)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret,
|
||||||
|
"callback: initialization");
|
||||||
|
goto shutdown;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = __db_dispatch(dbenv->env,
|
||||||
|
&dtab, &data, &key, DB_TXN_PRINT, NULL);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* XXX
|
||||||
|
* Just in case the underlying routines don't flush.
|
||||||
|
*/
|
||||||
|
(void)fflush(stdout);
|
||||||
|
|
||||||
|
if (ret != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "tx: dispatch");
|
||||||
|
goto shutdown;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (0) {
|
||||||
|
shutdown: exitval = 1;
|
||||||
|
}
|
||||||
|
if (logc != NULL && (ret = logc->close(logc, 0)) != 0)
|
||||||
|
exitval = 1;
|
||||||
|
|
||||||
|
if (dbc != NULL && (ret = dbc->close(dbc)) != 0)
|
||||||
|
exitval = 1;
|
||||||
|
|
||||||
|
if (dbp != NULL && (ret = dbp->close(dbp, 0)) != 0)
|
||||||
|
exitval = 1;
|
||||||
|
|
||||||
|
if (dbenv != NULL && (ret = dbenv->close(dbenv, 0)) != 0) {
|
||||||
|
exitval = 1;
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: dbenv->close: %s\n", progname, db_strerror(ret));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (passwd != NULL)
|
||||||
|
free(passwd);
|
||||||
|
|
||||||
|
/* Resend any caught signal. */
|
||||||
|
__db_util_sigresend();
|
||||||
|
|
||||||
|
return (exitval == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* env_init_print --
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
db_printlog_env_init_print(env, version, dtabp)
|
||||||
|
ENV *env;
|
||||||
|
u_int32_t version;
|
||||||
|
DB_DISTAB *dtabp;
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We need to prime the print table with the current print
|
||||||
|
* functions. Then we overwrite only specific entries based on
|
||||||
|
* each previous version we support.
|
||||||
|
*/
|
||||||
|
if ((ret = db_printlog_env_init_print_45(env, dtabp)) != 0)
|
||||||
|
return (ret);
|
||||||
|
|
||||||
|
switch (version) {
|
||||||
|
/*
|
||||||
|
* There are no log record/recovery differences between
|
||||||
|
* 4.4 and 4.5. The log version changed due to checksum.
|
||||||
|
* There are no log recovery differences between
|
||||||
|
* 4.5 and 4.6. The name of the rep_gen in txn_checkpoint
|
||||||
|
* changed (to spare, since we don't use it anymore).
|
||||||
|
*/
|
||||||
|
case DB_LOGVERSION_47:
|
||||||
|
case DB_LOGVERSION_46:
|
||||||
|
case DB_LOGVERSION_45:
|
||||||
|
case DB_LOGVERSION_44:
|
||||||
|
ret = 0;
|
||||||
|
break;
|
||||||
|
case DB_LOGVERSION_43:
|
||||||
|
ret = db_printlog_env_init_print_43(env, dtabp);
|
||||||
|
break;
|
||||||
|
case DB_LOGVERSION_42:
|
||||||
|
ret = db_printlog_env_init_print_42(env, dtabp);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
env->dbenv->errx(env->dbenv,
|
||||||
|
"Unknown version %lu", (u_long)version);
|
||||||
|
ret = EINVAL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
db_printlog_env_init_print_42(env, dtabp)
|
||||||
|
ENV *env;
|
||||||
|
DB_DISTAB *dtabp;
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if ((ret = __db_add_recovery_int(env, dtabp,
|
||||||
|
__db_relink_42_print, DB___db_relink_42)) != 0)
|
||||||
|
goto err;
|
||||||
|
if ((ret = __db_add_recovery_int(env, dtabp,
|
||||||
|
__db_pg_alloc_42_print, DB___db_pg_alloc_42)) != 0)
|
||||||
|
goto err;
|
||||||
|
if ((ret = __db_add_recovery_int(env, dtabp,
|
||||||
|
__db_pg_free_42_print, DB___db_pg_free_42)) != 0)
|
||||||
|
goto err;
|
||||||
|
if ((ret = __db_add_recovery_int(env, dtabp,
|
||||||
|
__db_pg_freedata_42_print, DB___db_pg_freedata_42)) != 0)
|
||||||
|
goto err;
|
||||||
|
#if HAVE_HASH
|
||||||
|
if ((ret = __db_add_recovery_int(env, dtabp,
|
||||||
|
__ham_metagroup_42_print, DB___ham_metagroup_42)) != 0)
|
||||||
|
goto err;
|
||||||
|
if ((ret = __db_add_recovery_int(env, dtabp,
|
||||||
|
__ham_groupalloc_42_print, DB___ham_groupalloc_42)) != 0)
|
||||||
|
goto err;
|
||||||
|
#endif
|
||||||
|
if ((ret = __db_add_recovery_int(env, dtabp,
|
||||||
|
__txn_ckp_42_print, DB___txn_ckp_42)) != 0)
|
||||||
|
goto err;
|
||||||
|
if ((ret = __db_add_recovery_int(env, dtabp,
|
||||||
|
__txn_regop_42_print, DB___txn_regop_42)) != 0)
|
||||||
|
goto err;
|
||||||
|
err:
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
db_printlog_env_init_print_43(env, dtabp)
|
||||||
|
ENV *env;
|
||||||
|
DB_DISTAB *dtabp;
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if ((ret = __db_add_recovery_int(env, dtabp,
|
||||||
|
__bam_relink_43_print, DB___bam_relink_43)) != 0)
|
||||||
|
goto err;
|
||||||
|
/*
|
||||||
|
* We want to use the 4.2-based txn_regop record.
|
||||||
|
*/
|
||||||
|
if ((ret = __db_add_recovery_int(env, dtabp,
|
||||||
|
__txn_regop_42_print, DB___txn_regop_42)) != 0)
|
||||||
|
goto err;
|
||||||
|
err:
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* env_init_print_45 --
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
db_printlog_env_init_print_45(env, dtabp)
|
||||||
|
ENV *env;
|
||||||
|
DB_DISTAB *dtabp;
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if ((ret = __bam_init_print(env, dtabp)) != 0)
|
||||||
|
goto err;
|
||||||
|
if ((ret = __crdel_init_print(env, dtabp)) != 0)
|
||||||
|
goto err;
|
||||||
|
if ((ret = __db_init_print(env, dtabp)) != 0)
|
||||||
|
goto err;
|
||||||
|
if ((ret = __dbreg_init_print(env, dtabp)) != 0)
|
||||||
|
goto err;
|
||||||
|
if ((ret = __fop_init_print(env, dtabp)) != 0)
|
||||||
|
goto err;
|
||||||
|
#ifdef HAVE_HASH
|
||||||
|
if ((ret = __ham_init_print(env, dtabp)) != 0)
|
||||||
|
goto err;
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_QUEUE
|
||||||
|
if ((ret = __qam_init_print(env, dtabp)) != 0)
|
||||||
|
goto err;
|
||||||
|
#endif
|
||||||
|
if ((ret = __txn_init_print(env, dtabp)) != 0)
|
||||||
|
goto err;
|
||||||
|
err:
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
db_printlog_usage()
|
||||||
|
{
|
||||||
|
fprintf(stderr, "usage: %s %s\n", progname,
|
||||||
|
"[-NrV] [-b file/offset] [-e file/offset] [-h home] [-P password]");
|
||||||
|
return (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
db_printlog_version_check()
|
||||||
|
{
|
||||||
|
int v_major, v_minor, v_patch;
|
||||||
|
|
||||||
|
/* Make sure we're loaded with the right version of the DB library. */
|
||||||
|
(void)db_version(&v_major, &v_minor, &v_patch);
|
||||||
|
if (v_major != DB_VERSION_MAJOR || v_minor != DB_VERSION_MINOR) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: version %d.%d doesn't match library version %d.%d\n",
|
||||||
|
progname, DB_VERSION_MAJOR, DB_VERSION_MINOR,
|
||||||
|
v_major, v_minor);
|
||||||
|
return (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Print an unknown, application-specific log record as best we can. */
|
||||||
|
int
|
||||||
|
db_printlog_print_app_record(dbenv, dbt, lsnp, op)
|
||||||
|
DB_ENV *dbenv;
|
||||||
|
DBT *dbt;
|
||||||
|
DB_LSN *lsnp;
|
||||||
|
db_recops op;
|
||||||
|
{
|
||||||
|
u_int32_t i, rectype;
|
||||||
|
int ch;
|
||||||
|
|
||||||
|
DB_ASSERT(dbenv->env, op == DB_TXN_PRINT);
|
||||||
|
|
||||||
|
COMPQUIET(dbenv, NULL);
|
||||||
|
COMPQUIET(op, DB_TXN_PRINT);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Fetch the rectype, which always must be at the beginning of the
|
||||||
|
* record (if dispatching is to work at all).
|
||||||
|
*/
|
||||||
|
memcpy(&rectype, dbt->data, sizeof(rectype));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Applications may wish to customize the output here based on the
|
||||||
|
* rectype. We just print the entire log record in the generic
|
||||||
|
* mixed-hex-and-printable format we use for binary data.
|
||||||
|
*/
|
||||||
|
printf("[%lu][%lu]application specific record: rec: %lu\n",
|
||||||
|
(u_long)lsnp->file, (u_long)lsnp->offset, (u_long)rectype);
|
||||||
|
printf("\tdata: ");
|
||||||
|
for (i = 0; i < dbt->size; i++) {
|
||||||
|
ch = ((u_int8_t *)dbt->data)[i];
|
||||||
|
printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
|
||||||
|
}
|
||||||
|
printf("\n\n");
|
||||||
|
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
db_printlog_open_rep_db(dbenv, dbpp, dbcp)
|
||||||
|
DB_ENV *dbenv;
|
||||||
|
DB **dbpp;
|
||||||
|
DBC **dbcp;
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
DB *dbp;
|
||||||
|
*dbpp = NULL;
|
||||||
|
*dbcp = NULL;
|
||||||
|
|
||||||
|
if ((ret = db_create(dbpp, dbenv, 0)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "db_create");
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
dbp = *dbpp;
|
||||||
|
if ((ret =
|
||||||
|
dbp->open(dbp, NULL, REPDBNAME, NULL, DB_BTREE, 0, 0)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "DB->open");
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((ret = dbp->cursor(dbp, NULL, dbcp, 0)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "DB->cursor");
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (0);
|
||||||
|
|
||||||
|
err: if (*dbpp != NULL)
|
||||||
|
(void)(*dbpp)->close(*dbpp, 0);
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* lsn_arg --
|
||||||
|
* Parse a LSN argument.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
db_printlog_lsn_arg(arg, lsnp)
|
||||||
|
char *arg;
|
||||||
|
DB_LSN *lsnp;
|
||||||
|
{
|
||||||
|
u_long uval;
|
||||||
|
char *p;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Expected format is: lsn.file/lsn.offset.
|
||||||
|
*/
|
||||||
|
if ((p = strchr(arg, '/')) == NULL)
|
||||||
|
return (1);
|
||||||
|
*p = '\0';
|
||||||
|
|
||||||
|
if (__db_getulong(NULL, progname, arg, 0, UINT32_MAX, &uval))
|
||||||
|
return (1);
|
||||||
|
lsnp->file = uval;
|
||||||
|
if (__db_getulong(NULL, progname, p + 1, 0, UINT32_MAX, &uval))
|
||||||
|
return (1);
|
||||||
|
lsnp->offset = uval;
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
286
build_vxworks/db_printlog/db_printlog20.wpj
Normal file
286
build_vxworks/db_printlog/db_printlog20.wpj
Normal file
@@ -0,0 +1,286 @@
|
|||||||
|
Document file - DO NOT EDIT
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_BUILDRULE
|
||||||
|
db_printlog20.out
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_AR
|
||||||
|
ar386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_ARCHIVE
|
||||||
|
$(PRJ_DIR)/PENTIUMgnu/db_printlog20.a
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_AS
|
||||||
|
cc386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_CC
|
||||||
|
cc386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_CFLAGS
|
||||||
|
-g \
|
||||||
|
-mpentium \
|
||||||
|
-ansi \
|
||||||
|
-nostdinc \
|
||||||
|
-DRW_MULTI_THREAD \
|
||||||
|
-D_REENTRANT \
|
||||||
|
-fvolatile \
|
||||||
|
-nostdlib \
|
||||||
|
-fno-builtin \
|
||||||
|
-fno-defer-pop \
|
||||||
|
-I$(PRJ_DIR)/.. \
|
||||||
|
-I$(PRJ_DIR)/../.. \
|
||||||
|
-I$(WIND_BASE)/target/h \
|
||||||
|
-DCPU=PENTIUM
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_CFLAGS_AS
|
||||||
|
-g \
|
||||||
|
-mpentium \
|
||||||
|
-ansi \
|
||||||
|
-nostdinc \
|
||||||
|
-fvolatile \
|
||||||
|
-nostdlib \
|
||||||
|
-fno-builtin \
|
||||||
|
-fno-defer-pop \
|
||||||
|
-P \
|
||||||
|
-x \
|
||||||
|
assembler-with-cpp \
|
||||||
|
-I$(WIND_BASE)/target/h \
|
||||||
|
-DCPU=PENTIUM
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_CPP
|
||||||
|
cc386 -E -P -xc
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_LD
|
||||||
|
ld386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_LDDEPS
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_LDFLAGS
|
||||||
|
-X -N
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_LD_PARTIAL_FLAGS
|
||||||
|
-X -r
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_NM
|
||||||
|
nm386 -g
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_OPTION_DEFINE_MACRO
|
||||||
|
-D
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_OPTION_INCLUDE_DIR
|
||||||
|
-I
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_POST_BUILD_RULE
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_PRJ_LIBS
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_SIZE
|
||||||
|
size386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_RO_DEPEND_PATH
|
||||||
|
{$(WIND_BASE)/target/h/} \
|
||||||
|
{$(WIND_BASE)/target/src/} \
|
||||||
|
{$(WIND_BASE)/target/config/}
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_TC
|
||||||
|
::tc_PENTIUMgnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_archive
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_db_printlog20.out
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_objects
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD__CURRENT
|
||||||
|
PENTIUMgnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD__LIST
|
||||||
|
PENTIUMgnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_TYPE
|
||||||
|
::prj_vxApp
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_VERSION
|
||||||
|
2.0
|
||||||
|
<END>
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../btree/btree_autop.c_dependDone
|
||||||
|
FALSE
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../btree/btree_autop.c_dependencies
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../btree/btree_autop.c_objects
|
||||||
|
btree_autop.o
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../btree/btree_autop.c_tool
|
||||||
|
C/C++ compiler
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../db/crdel_autop.c_dependDone
|
||||||
|
FALSE
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../db/crdel_autop.c_dependencies
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../db/crdel_autop.c_objects
|
||||||
|
crdel_autop.o
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../db/crdel_autop.c_tool
|
||||||
|
C/C++ compiler
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../db/db_autop.c_dependDone
|
||||||
|
FALSE
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../db/db_autop.c_dependencies
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../db/db_autop.c_objects
|
||||||
|
db_autop.o
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../db/db_autop.c_tool
|
||||||
|
C/C++ compiler
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_printlog.c_dependDone
|
||||||
|
FALSE
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_printlog.c_dependencies
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_printlog.c_objects
|
||||||
|
db_printlog.o
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_printlog.c_tool
|
||||||
|
C/C++ compiler
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../dbreg/dbreg_autop.c_dependDone
|
||||||
|
FALSE
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../dbreg/dbreg_autop.c_dependencies
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../dbreg/dbreg_autop.c_objects
|
||||||
|
dbreg_autop.o
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../dbreg/dbreg_autop.c_tool
|
||||||
|
C/C++ compiler
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../fileops/fileops_autop.c_dependDone
|
||||||
|
FALSE
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../fileops/fileops_autop.c_dependencies
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../fileops/fileops_autop.c_objects
|
||||||
|
fileops_autop.o
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../fileops/fileops_autop.c_tool
|
||||||
|
C/C++ compiler
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../hash/hash_autop.c_dependDone
|
||||||
|
FALSE
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../hash/hash_autop.c_dependencies
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../hash/hash_autop.c_objects
|
||||||
|
hash_autop.o
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../hash/hash_autop.c_tool
|
||||||
|
C/C++ compiler
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../qam/qam_autop.c_dependDone
|
||||||
|
FALSE
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../qam/qam_autop.c_dependencies
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../qam/qam_autop.c_objects
|
||||||
|
qam_autop.o
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../qam/qam_autop.c_tool
|
||||||
|
C/C++ compiler
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../txn/txn_autop.c_dependDone
|
||||||
|
FALSE
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../txn/txn_autop.c_dependencies
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../txn/txn_autop.c_objects
|
||||||
|
txn_autop.o
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../txn/txn_autop.c_tool
|
||||||
|
C/C++ compiler
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> PROJECT_FILES
|
||||||
|
$(PRJ_DIR)/../../btree/btree_autop.c \
|
||||||
|
$(PRJ_DIR)/../../db/crdel_autop.c \
|
||||||
|
$(PRJ_DIR)/../../db/db_autop.c \
|
||||||
|
$(PRJ_DIR)/db_printlog.c \
|
||||||
|
$(PRJ_DIR)/../../dbreg/dbreg_autop.c \
|
||||||
|
$(PRJ_DIR)/../../fileops/fileops_autop.c \
|
||||||
|
$(PRJ_DIR)/../../hash/hash_autop.c \
|
||||||
|
$(PRJ_DIR)/../../qam/qam_autop.c \
|
||||||
|
$(PRJ_DIR)/../../txn/txn_autop.c
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> userComments
|
||||||
|
db_printlog
|
||||||
|
<END>
|
||||||
320
build_vxworks/db_printlog/db_printlog22.wpj
Normal file
320
build_vxworks/db_printlog/db_printlog22.wpj
Normal file
@@ -0,0 +1,320 @@
|
|||||||
|
Document file - DO NOT EDIT
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_BUILDRULE
|
||||||
|
db_printlog22.out
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_AR
|
||||||
|
arpentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_ARCHIVE
|
||||||
|
$(PRJ_DIR)/PENTIUM2gnu/db_printlog22.a
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_AS
|
||||||
|
ccpentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CC
|
||||||
|
ccpentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CC_ARCH_SPEC
|
||||||
|
-mcpu=pentiumpro -march=pentiumpro
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CFLAGS
|
||||||
|
-g \
|
||||||
|
-mcpu=pentiumpro \
|
||||||
|
-march=pentiumpro \
|
||||||
|
-ansi \
|
||||||
|
-nostdlib \
|
||||||
|
-DRW_MULTI_THREAD \
|
||||||
|
-D_REENTRANT \
|
||||||
|
-fvolatile \
|
||||||
|
-fno-builtin \
|
||||||
|
-fno-defer-pop \
|
||||||
|
-I$(PRJ_DIR)/.. \
|
||||||
|
-I$(PRJ_DIR)/../.. \
|
||||||
|
-I$(WIND_BASE)/target/h \
|
||||||
|
-DCPU=PENTIUM2 \
|
||||||
|
-DTOOL_FAMILY=gnu \
|
||||||
|
-DTOOL=gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CFLAGS_AS
|
||||||
|
-g \
|
||||||
|
-mcpu=pentiumpro \
|
||||||
|
-march=pentiumpro \
|
||||||
|
-ansi \
|
||||||
|
-nostdlib \
|
||||||
|
-fno-builtin \
|
||||||
|
-fno-defer-pop \
|
||||||
|
-P \
|
||||||
|
-xassembler-with-cpp \
|
||||||
|
-I$(WIND_BASE)/target/h \
|
||||||
|
-DCPU=PENTIUM2 \
|
||||||
|
-DTOOL_FAMILY=gnu \
|
||||||
|
-DTOOL=gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CPP
|
||||||
|
ccpentium -E -P
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_HEX_FLAGS
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD
|
||||||
|
ldpentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_LDFLAGS
|
||||||
|
-X -N
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD_PARTIAL
|
||||||
|
ccpentium -r -nostdlib -Wl,-X
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD_PARTIAL_FLAGS
|
||||||
|
-X -r
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_NM
|
||||||
|
nmpentium -g
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_DEFINE_MACRO
|
||||||
|
-D
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_DEPEND
|
||||||
|
-M -w
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_GENERATE_DEPENDENCY_FILE
|
||||||
|
-MD
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_INCLUDE_DIR
|
||||||
|
-I
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_LANG_C
|
||||||
|
-xc
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_UNDEFINE_MACRO
|
||||||
|
-U
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_POST_BUILD_RULE
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_PRJ_LIBS
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_SIZE
|
||||||
|
sizepentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_TOOL_FAMILY
|
||||||
|
gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_RO_DEPEND_PATH
|
||||||
|
{$(WIND_BASE)/target/h/} \
|
||||||
|
{$(WIND_BASE)/target/src/} \
|
||||||
|
{$(WIND_BASE)/target/config/}
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_TC
|
||||||
|
::tc_PENTIUM2gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_archive
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_db_printlog22.out
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_db_printlog22.pl
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_objects
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD__CURRENT
|
||||||
|
PENTIUM2gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD__LIST
|
||||||
|
PENTIUM2gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_TYPE
|
||||||
|
::prj_vxApp
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_VERSION
|
||||||
|
2.2
|
||||||
|
<END>
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../btree/btree_autop.c_dependDone
|
||||||
|
FALSE
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../btree/btree_autop.c_dependencies
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../btree/btree_autop.c_objects
|
||||||
|
btree_autop.o
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../btree/btree_autop.c_tool
|
||||||
|
C/C++ compiler
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../db/crdel_autop.c_dependDone
|
||||||
|
FALSE
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../db/crdel_autop.c_dependencies
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../db/crdel_autop.c_objects
|
||||||
|
crdel_autop.o
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../db/crdel_autop.c_tool
|
||||||
|
C/C++ compiler
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../db/db_autop.c_dependDone
|
||||||
|
FALSE
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../db/db_autop.c_dependencies
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../db/db_autop.c_objects
|
||||||
|
db_autop.o
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../db/db_autop.c_tool
|
||||||
|
C/C++ compiler
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_printlog.c_dependDone
|
||||||
|
FALSE
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_printlog.c_dependencies
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_printlog.c_objects
|
||||||
|
db_printlog.o
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_printlog.c_tool
|
||||||
|
C/C++ compiler
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../dbreg/dbreg_autop.c_dependDone
|
||||||
|
FALSE
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../dbreg/dbreg_autop.c_dependencies
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../dbreg/dbreg_autop.c_objects
|
||||||
|
dbreg_autop.o
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../dbreg/dbreg_autop.c_tool
|
||||||
|
C/C++ compiler
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../fileops/fileops_autop.c_dependDone
|
||||||
|
FALSE
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../fileops/fileops_autop.c_dependencies
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../fileops/fileops_autop.c_objects
|
||||||
|
fileops_autop.o
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../fileops/fileops_autop.c_tool
|
||||||
|
C/C++ compiler
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../hash/hash_autop.c_dependDone
|
||||||
|
FALSE
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../hash/hash_autop.c_dependencies
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../hash/hash_autop.c_objects
|
||||||
|
hash_autop.o
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../hash/hash_autop.c_tool
|
||||||
|
C/C++ compiler
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../qam/qam_autop.c_dependDone
|
||||||
|
FALSE
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../qam/qam_autop.c_dependencies
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../qam/qam_autop.c_objects
|
||||||
|
qam_autop.o
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../qam/qam_autop.c_tool
|
||||||
|
C/C++ compiler
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../txn/txn_autop.c_dependDone
|
||||||
|
FALSE
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../txn/txn_autop.c_dependencies
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../txn/txn_autop.c_objects
|
||||||
|
txn_autop.o
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_$(PRJ_DIR)/../../txn/txn_autop.c_tool
|
||||||
|
C/C++ compiler
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> PROJECT_FILES
|
||||||
|
$(PRJ_DIR)/../../btree/btree_autop.c \
|
||||||
|
$(PRJ_DIR)/../../db/crdel_autop.c \
|
||||||
|
$(PRJ_DIR)/../../db/db_autop.c \
|
||||||
|
$(PRJ_DIR)/db_printlog.c \
|
||||||
|
$(PRJ_DIR)/../../dbreg/dbreg_autop.c \
|
||||||
|
$(PRJ_DIR)/../../fileops/fileops_autop.c \
|
||||||
|
$(PRJ_DIR)/../../hash/hash_autop.c \
|
||||||
|
$(PRJ_DIR)/../../qam/qam_autop.c \
|
||||||
|
$(PRJ_DIR)/../../txn/txn_autop.c
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> userComments
|
||||||
|
db_printlog
|
||||||
|
<END>
|
||||||
328
build_vxworks/db_recover/db_recover.c
Normal file
328
build_vxworks/db_recover/db_recover.c
Normal file
@@ -0,0 +1,328 @@
|
|||||||
|
/*-
|
||||||
|
* See the file LICENSE for redistribution information.
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996,2008 Oracle. All rights reserved.
|
||||||
|
*
|
||||||
|
* $Id: db_recover.c 63573 2008-05-23 21:43:21Z trent.nelson $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "db_config.h"
|
||||||
|
|
||||||
|
#include "db_int.h"
|
||||||
|
|
||||||
|
#ifndef lint
|
||||||
|
static const char copyright[] =
|
||||||
|
"Copyright (c) 1996,2008 Oracle. All rights reserved.\n";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void db_recover_feedback __P((DB_ENV *, int, int));
|
||||||
|
int db_recover_main __P((int, char *[]));
|
||||||
|
int db_recover_read_timestamp __P((char *, time_t *));
|
||||||
|
int db_recover_usage __P((void));
|
||||||
|
int db_recover_version_check __P((void));
|
||||||
|
|
||||||
|
const char *progname;
|
||||||
|
int newline_needed;
|
||||||
|
|
||||||
|
int
|
||||||
|
db_recover(args)
|
||||||
|
char *args;
|
||||||
|
{
|
||||||
|
int argc;
|
||||||
|
char **argv;
|
||||||
|
|
||||||
|
__db_util_arg("db_recover", args, &argc, &argv);
|
||||||
|
return (db_recover_main(argc, argv) ? EXIT_FAILURE : EXIT_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#define ERROR_RETURN ERROR
|
||||||
|
|
||||||
|
int
|
||||||
|
db_recover_main(argc, argv)
|
||||||
|
int argc;
|
||||||
|
char *argv[];
|
||||||
|
{
|
||||||
|
extern char *optarg;
|
||||||
|
extern int optind, __db_getopt_reset;
|
||||||
|
DB_ENV *dbenv;
|
||||||
|
time_t timestamp;
|
||||||
|
u_int32_t flags;
|
||||||
|
int ch, exitval, fatal_recover, ret, retain_env, set_feedback, verbose;
|
||||||
|
char *home, *passwd;
|
||||||
|
|
||||||
|
if ((progname = __db_rpath(argv[0])) == NULL)
|
||||||
|
progname = argv[0];
|
||||||
|
else
|
||||||
|
++progname;
|
||||||
|
|
||||||
|
if ((ret = db_recover_version_check()) != 0)
|
||||||
|
return (ret);
|
||||||
|
|
||||||
|
home = passwd = NULL;
|
||||||
|
timestamp = 0;
|
||||||
|
exitval = fatal_recover = retain_env = set_feedback = verbose = 0;
|
||||||
|
__db_getopt_reset = 1;
|
||||||
|
while ((ch = getopt(argc, argv, "cefh:P:t:Vv")) != EOF)
|
||||||
|
switch (ch) {
|
||||||
|
case 'c':
|
||||||
|
fatal_recover = 1;
|
||||||
|
break;
|
||||||
|
case 'e':
|
||||||
|
retain_env = 1;
|
||||||
|
break;
|
||||||
|
case 'f':
|
||||||
|
set_feedback = 1;
|
||||||
|
break;
|
||||||
|
case 'h':
|
||||||
|
home = optarg;
|
||||||
|
break;
|
||||||
|
case 'P':
|
||||||
|
passwd = strdup(optarg);
|
||||||
|
memset(optarg, 0, strlen(optarg));
|
||||||
|
if (passwd == NULL) {
|
||||||
|
fprintf(stderr, "%s: strdup: %s\n",
|
||||||
|
progname, strerror(errno));
|
||||||
|
return (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 't':
|
||||||
|
if ((ret = db_recover_read_timestamp(optarg, ×tamp)) != 0)
|
||||||
|
return (ret);
|
||||||
|
break;
|
||||||
|
case 'V':
|
||||||
|
printf("%s\n", db_version(NULL, NULL, NULL));
|
||||||
|
return (EXIT_SUCCESS);
|
||||||
|
case 'v':
|
||||||
|
verbose = 1;
|
||||||
|
break;
|
||||||
|
case '?':
|
||||||
|
default:
|
||||||
|
return (db_recover_usage());
|
||||||
|
}
|
||||||
|
argc -= optind;
|
||||||
|
argv += optind;
|
||||||
|
|
||||||
|
if (argc != 0)
|
||||||
|
return (db_recover_usage());
|
||||||
|
|
||||||
|
/* Handle possible interruptions. */
|
||||||
|
__db_util_siginit();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Create an environment object and initialize it for error
|
||||||
|
* reporting.
|
||||||
|
*/
|
||||||
|
if ((ret = db_env_create(&dbenv, 0)) != 0) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: db_env_create: %s\n", progname, db_strerror(ret));
|
||||||
|
return (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
dbenv->set_errfile(dbenv, stderr);
|
||||||
|
dbenv->set_errpfx(dbenv, progname);
|
||||||
|
if (set_feedback)
|
||||||
|
(void)dbenv->set_feedback(dbenv, db_recover_feedback);
|
||||||
|
if (verbose)
|
||||||
|
(void)dbenv->set_verbose(dbenv, DB_VERB_RECOVERY, 1);
|
||||||
|
if (timestamp &&
|
||||||
|
(ret = dbenv->set_tx_timestamp(dbenv, ×tamp)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "DB_ENV->set_timestamp");
|
||||||
|
goto shutdown;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (passwd != NULL && (ret = dbenv->set_encrypt(dbenv,
|
||||||
|
passwd, DB_ENCRYPT_AES)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "set_passwd");
|
||||||
|
goto shutdown;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Initialize the environment -- we don't actually do anything
|
||||||
|
* else, that all that's needed to run recovery.
|
||||||
|
*
|
||||||
|
* Note that unless the caller specified the -e option, we use a
|
||||||
|
* private environment, as we're about to create a region, and we
|
||||||
|
* don't want to to leave it around. If we leave the region around,
|
||||||
|
* the application that should create it will simply join it instead,
|
||||||
|
* and will then be running with incorrectly sized (and probably
|
||||||
|
* terribly small) caches. Applications that use -e should almost
|
||||||
|
* certainly use DB_CONFIG files in the directory.
|
||||||
|
*/
|
||||||
|
flags = 0;
|
||||||
|
LF_SET(DB_CREATE | DB_INIT_LOG |
|
||||||
|
DB_INIT_MPOOL | DB_INIT_TXN | DB_USE_ENVIRON);
|
||||||
|
LF_SET(fatal_recover ? DB_RECOVER_FATAL : DB_RECOVER);
|
||||||
|
LF_SET(retain_env ? DB_INIT_LOCK : DB_PRIVATE);
|
||||||
|
if ((ret = dbenv->open(dbenv, home, flags, 0)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "DB_ENV->open");
|
||||||
|
goto shutdown;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (0) {
|
||||||
|
shutdown: exitval = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Flush to the next line of the output device. */
|
||||||
|
if (newline_needed)
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
/* Clean up the environment. */
|
||||||
|
if ((ret = dbenv->close(dbenv, 0)) != 0) {
|
||||||
|
exitval = 1;
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: dbenv->close: %s\n", progname, db_strerror(ret));
|
||||||
|
}
|
||||||
|
if (passwd != NULL)
|
||||||
|
free(passwd);
|
||||||
|
|
||||||
|
/* Resend any caught signal. */
|
||||||
|
__db_util_sigresend();
|
||||||
|
|
||||||
|
return (exitval == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* db_recover_feedback --
|
||||||
|
* Provide feedback on recovery progress.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
db_recover_feedback(dbenv, opcode, percent)
|
||||||
|
DB_ENV *dbenv;
|
||||||
|
int opcode;
|
||||||
|
int percent;
|
||||||
|
{
|
||||||
|
COMPQUIET(dbenv, NULL);
|
||||||
|
|
||||||
|
if (opcode == DB_RECOVER) {
|
||||||
|
printf("\rrecovery %d%% complete", percent);
|
||||||
|
(void)fflush(stdout);
|
||||||
|
newline_needed = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#define ATOI2(ar) ((ar)[0] - '0') * 10 + ((ar)[1] - '0'); (ar) += 2;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* read_timestamp --
|
||||||
|
* Convert a time argument to Epoch seconds.
|
||||||
|
*
|
||||||
|
* Copyright (c) 1993
|
||||||
|
* The Regents of the University of California. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 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. 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.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
db_recover_read_timestamp(arg, timep)
|
||||||
|
char *arg;
|
||||||
|
time_t *timep;
|
||||||
|
{
|
||||||
|
struct tm *t;
|
||||||
|
time_t now;
|
||||||
|
int yearset;
|
||||||
|
char *p;
|
||||||
|
/* Start with the current time. */
|
||||||
|
(void)time(&now);
|
||||||
|
if ((t = localtime(&now)) == NULL) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: localtime: %s\n", progname, strerror(errno));
|
||||||
|
return (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
/* [[CC]YY]MMDDhhmm[.SS] */
|
||||||
|
if ((p = strchr(arg, '.')) == NULL)
|
||||||
|
t->tm_sec = 0; /* Seconds defaults to 0. */
|
||||||
|
else {
|
||||||
|
if (strlen(p + 1) != 2)
|
||||||
|
goto terr;
|
||||||
|
*p++ = '\0';
|
||||||
|
t->tm_sec = ATOI2(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
yearset = 0;
|
||||||
|
switch (strlen(arg)) {
|
||||||
|
case 12: /* CCYYMMDDhhmm */
|
||||||
|
t->tm_year = ATOI2(arg);
|
||||||
|
t->tm_year *= 100;
|
||||||
|
yearset = 1;
|
||||||
|
/* FALLTHROUGH */
|
||||||
|
case 10: /* YYMMDDhhmm */
|
||||||
|
if (yearset) {
|
||||||
|
yearset = ATOI2(arg);
|
||||||
|
t->tm_year += yearset;
|
||||||
|
} else {
|
||||||
|
yearset = ATOI2(arg);
|
||||||
|
if (yearset < 69)
|
||||||
|
t->tm_year = yearset + 2000;
|
||||||
|
else
|
||||||
|
t->tm_year = yearset + 1900;
|
||||||
|
}
|
||||||
|
t->tm_year -= 1900; /* Convert to UNIX time. */
|
||||||
|
/* FALLTHROUGH */
|
||||||
|
case 8: /* MMDDhhmm */
|
||||||
|
t->tm_mon = ATOI2(arg);
|
||||||
|
--t->tm_mon; /* Convert from 01-12 to 00-11 */
|
||||||
|
t->tm_mday = ATOI2(arg);
|
||||||
|
t->tm_hour = ATOI2(arg);
|
||||||
|
t->tm_min = ATOI2(arg);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
goto terr;
|
||||||
|
}
|
||||||
|
|
||||||
|
t->tm_isdst = -1; /* Figure out DST. */
|
||||||
|
|
||||||
|
*timep = mktime(t);
|
||||||
|
if (*timep == -1) {
|
||||||
|
terr: fprintf(stderr,
|
||||||
|
"%s: out of range or illegal time specification: [[CC]YY]MMDDhhmm[.SS]",
|
||||||
|
progname);
|
||||||
|
return (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
db_recover_usage()
|
||||||
|
{
|
||||||
|
(void)fprintf(stderr, "usage: %s %s\n", progname,
|
||||||
|
"[-cefVv] [-h home] [-P password] [-t [[CC]YY]MMDDhhmm[.SS]]");
|
||||||
|
return (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
db_recover_version_check()
|
||||||
|
{
|
||||||
|
int v_major, v_minor, v_patch;
|
||||||
|
|
||||||
|
/* Make sure we're loaded with the right version of the DB library. */
|
||||||
|
(void)db_version(&v_major, &v_minor, &v_patch);
|
||||||
|
if (v_major != DB_VERSION_MAJOR || v_minor != DB_VERSION_MINOR) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: version %d.%d doesn't match library version %d.%d\n",
|
||||||
|
progname, DB_VERSION_MAJOR, DB_VERSION_MINOR,
|
||||||
|
v_major, v_minor);
|
||||||
|
return (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
158
build_vxworks/db_recover/db_recover20.wpj
Normal file
158
build_vxworks/db_recover/db_recover20.wpj
Normal file
@@ -0,0 +1,158 @@
|
|||||||
|
Document file - DO NOT EDIT
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_BUILDRULE
|
||||||
|
db_recover20.out
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_AR
|
||||||
|
ar386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_ARCHIVE
|
||||||
|
$(PRJ_DIR)/PENTIUMgnu/db_recover20.a
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_AS
|
||||||
|
cc386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_CC
|
||||||
|
cc386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_CFLAGS
|
||||||
|
-g \
|
||||||
|
-mpentium \
|
||||||
|
-ansi \
|
||||||
|
-nostdinc \
|
||||||
|
-DRW_MULTI_THREAD \
|
||||||
|
-D_REENTRANT \
|
||||||
|
-fvolatile \
|
||||||
|
-nostdlib \
|
||||||
|
-fno-builtin \
|
||||||
|
-fno-defer-pop \
|
||||||
|
-I$(PRJ_DIR)/.. \
|
||||||
|
-I$(PRJ_DIR)/../.. \
|
||||||
|
-I$(WIND_BASE)/target/h \
|
||||||
|
-DCPU=PENTIUM
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_CFLAGS_AS
|
||||||
|
-g \
|
||||||
|
-mpentium \
|
||||||
|
-ansi \
|
||||||
|
-nostdinc \
|
||||||
|
-fvolatile \
|
||||||
|
-nostdlib \
|
||||||
|
-fno-builtin \
|
||||||
|
-fno-defer-pop \
|
||||||
|
-P \
|
||||||
|
-x \
|
||||||
|
assembler-with-cpp \
|
||||||
|
-I$(WIND_BASE)/target/h \
|
||||||
|
-DCPU=PENTIUM
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_CPP
|
||||||
|
cc386 -E -P -xc
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_LD
|
||||||
|
ld386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_LDDEPS
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_LDFLAGS
|
||||||
|
-X -N
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_LD_PARTIAL_FLAGS
|
||||||
|
-X -r
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_NM
|
||||||
|
nm386 -g
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_OPTION_DEFINE_MACRO
|
||||||
|
-D
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_OPTION_INCLUDE_DIR
|
||||||
|
-I
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_POST_BUILD_RULE
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_PRJ_LIBS
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_SIZE
|
||||||
|
size386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_RO_DEPEND_PATH
|
||||||
|
{$(WIND_BASE)/target/h/} \
|
||||||
|
{$(WIND_BASE)/target/src/} \
|
||||||
|
{$(WIND_BASE)/target/config/}
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_TC
|
||||||
|
::tc_PENTIUMgnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_archive
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_db_recover20.out
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_objects
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD__CURRENT
|
||||||
|
PENTIUMgnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD__LIST
|
||||||
|
PENTIUMgnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_TYPE
|
||||||
|
::prj_vxApp
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_VERSION
|
||||||
|
2.0
|
||||||
|
<END>
|
||||||
|
<BEGIN> FILE_db_recover.c_dependDone
|
||||||
|
FALSE
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_recover.c_dependencies
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_recover.c_objects
|
||||||
|
db_recover.o
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_recover.c_tool
|
||||||
|
C/C++ compiler
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> PROJECT_FILES
|
||||||
|
$(PRJ_DIR)/db_recover.c
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> userComments
|
||||||
|
db_recover
|
||||||
|
<END>
|
||||||
192
build_vxworks/db_recover/db_recover22.wpj
Normal file
192
build_vxworks/db_recover/db_recover22.wpj
Normal file
@@ -0,0 +1,192 @@
|
|||||||
|
Document file - DO NOT EDIT
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_BUILDRULE
|
||||||
|
db_recover22.out
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_AR
|
||||||
|
arpentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_ARCHIVE
|
||||||
|
$(PRJ_DIR)/PENTIUM2gnu/db_recover22.a
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_AS
|
||||||
|
ccpentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CC
|
||||||
|
ccpentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CC_ARCH_SPEC
|
||||||
|
-mcpu=pentiumpro -march=pentiumpro
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CFLAGS
|
||||||
|
-g \
|
||||||
|
-mcpu=pentiumpro \
|
||||||
|
-march=pentiumpro \
|
||||||
|
-ansi \
|
||||||
|
-nostdlib \
|
||||||
|
-DRW_MULTI_THREAD \
|
||||||
|
-D_REENTRANT \
|
||||||
|
-fvolatile \
|
||||||
|
-fno-builtin \
|
||||||
|
-fno-defer-pop \
|
||||||
|
-I$(PRJ_DIR)/.. \
|
||||||
|
-I$(PRJ_DIR)/../.. \
|
||||||
|
-I$(WIND_BASE)/target/h \
|
||||||
|
-DCPU=PENTIUM2 \
|
||||||
|
-DTOOL_FAMILY=gnu \
|
||||||
|
-DTOOL=gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CFLAGS_AS
|
||||||
|
-g \
|
||||||
|
-mcpu=pentiumpro \
|
||||||
|
-march=pentiumpro \
|
||||||
|
-ansi \
|
||||||
|
-nostdlib \
|
||||||
|
-fno-builtin \
|
||||||
|
-fno-defer-pop \
|
||||||
|
-P \
|
||||||
|
-xassembler-with-cpp \
|
||||||
|
-I$(WIND_BASE)/target/h \
|
||||||
|
-DCPU=PENTIUM2 \
|
||||||
|
-DTOOL_FAMILY=gnu \
|
||||||
|
-DTOOL=gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CPP
|
||||||
|
ccpentium -E -P
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_HEX_FLAGS
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD
|
||||||
|
ldpentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_LDFLAGS
|
||||||
|
-X -N
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD_PARTIAL
|
||||||
|
ccpentium -r -nostdlib -Wl,-X
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD_PARTIAL_FLAGS
|
||||||
|
-X -r
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_NM
|
||||||
|
nmpentium -g
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_DEFINE_MACRO
|
||||||
|
-D
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_DEPEND
|
||||||
|
-M -w
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_GENERATE_DEPENDENCY_FILE
|
||||||
|
-MD
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_INCLUDE_DIR
|
||||||
|
-I
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_LANG_C
|
||||||
|
-xc
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_UNDEFINE_MACRO
|
||||||
|
-U
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_POST_BUILD_RULE
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_PRJ_LIBS
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_SIZE
|
||||||
|
sizepentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_TOOL_FAMILY
|
||||||
|
gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_RO_DEPEND_PATH
|
||||||
|
{$(WIND_BASE)/target/h/} \
|
||||||
|
{$(WIND_BASE)/target/src/} \
|
||||||
|
{$(WIND_BASE)/target/config/}
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_TC
|
||||||
|
::tc_PENTIUM2gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_archive
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_db_recover22.out
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_db_recover22.pl
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_objects
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD__CURRENT
|
||||||
|
PENTIUM2gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD__LIST
|
||||||
|
PENTIUM2gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_TYPE
|
||||||
|
::prj_vxApp
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_VERSION
|
||||||
|
2.2
|
||||||
|
<END>
|
||||||
|
<BEGIN> FILE_db_recover.c_dependDone
|
||||||
|
FALSE
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_recover.c_dependencies
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_recover.c_objects
|
||||||
|
db_recover.o
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_recover.c_tool
|
||||||
|
C/C++ compiler
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> PROJECT_FILES
|
||||||
|
$(PRJ_DIR)/db_recover.c
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> userComments
|
||||||
|
db_recover
|
||||||
|
<END>
|
||||||
474
build_vxworks/db_stat/db_stat.c
Normal file
474
build_vxworks/db_stat/db_stat.c
Normal file
@@ -0,0 +1,474 @@
|
|||||||
|
/*-
|
||||||
|
* See the file LICENSE for redistribution information.
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996,2008 Oracle. All rights reserved.
|
||||||
|
*
|
||||||
|
* $Id: db_stat.c 63573 2008-05-23 21:43:21Z trent.nelson $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "db_config.h"
|
||||||
|
|
||||||
|
#include "db_int.h"
|
||||||
|
|
||||||
|
#ifndef lint
|
||||||
|
static const char copyright[] =
|
||||||
|
"Copyright (c) 1996,2008 Oracle. All rights reserved.\n";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef enum { T_NOTSET, T_DB,
|
||||||
|
T_ENV, T_LOCK, T_LOG, T_MPOOL, T_MUTEX, T_REP, T_TXN } test_t;
|
||||||
|
|
||||||
|
int db_stat_db_init __P((DB_ENV *, char *, test_t, u_int32_t, int *));
|
||||||
|
int db_stat_main __P((int, char *[]));
|
||||||
|
int db_stat_usage __P((void));
|
||||||
|
int db_stat_version_check __P((void));
|
||||||
|
|
||||||
|
const char *progname;
|
||||||
|
|
||||||
|
int
|
||||||
|
db_stat(args)
|
||||||
|
char *args;
|
||||||
|
{
|
||||||
|
int argc;
|
||||||
|
char **argv;
|
||||||
|
|
||||||
|
__db_util_arg("db_stat", args, &argc, &argv);
|
||||||
|
return (db_stat_main(argc, argv) ? EXIT_FAILURE : EXIT_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#define ERROR_RETURN ERROR
|
||||||
|
|
||||||
|
int
|
||||||
|
db_stat_main(argc, argv)
|
||||||
|
int argc;
|
||||||
|
char *argv[];
|
||||||
|
{
|
||||||
|
extern char *optarg;
|
||||||
|
extern int optind, __db_getopt_reset;
|
||||||
|
DB_ENV *dbenv;
|
||||||
|
DB *dbp;
|
||||||
|
test_t ttype;
|
||||||
|
u_int32_t cache, flags;
|
||||||
|
int ch, exitval;
|
||||||
|
int nflag, private, resize, ret;
|
||||||
|
char *db, *home, *p, *passwd, *subdb;
|
||||||
|
|
||||||
|
if ((progname = __db_rpath(argv[0])) == NULL)
|
||||||
|
progname = argv[0];
|
||||||
|
else
|
||||||
|
++progname;
|
||||||
|
|
||||||
|
if ((ret = db_stat_version_check()) != 0)
|
||||||
|
return (ret);
|
||||||
|
|
||||||
|
dbenv = NULL;
|
||||||
|
dbp = NULL;
|
||||||
|
ttype = T_NOTSET;
|
||||||
|
cache = MEGABYTE;
|
||||||
|
exitval = flags = nflag = private = 0;
|
||||||
|
db = home = passwd = subdb = NULL;
|
||||||
|
|
||||||
|
__db_getopt_reset = 1;
|
||||||
|
while ((ch = getopt(argc,
|
||||||
|
argv, "C:cd:Eefgh:L:lM:mNP:R:rs:tVxX:Z")) != EOF)
|
||||||
|
switch (ch) {
|
||||||
|
case 'C': case 'c':
|
||||||
|
if (ttype != T_NOTSET && ttype != T_LOCK)
|
||||||
|
goto argcombo;
|
||||||
|
ttype = T_LOCK;
|
||||||
|
if (ch != 'c')
|
||||||
|
for (p = optarg; *p; ++p)
|
||||||
|
switch (*p) {
|
||||||
|
case 'A':
|
||||||
|
LF_SET(DB_STAT_ALL);
|
||||||
|
break;
|
||||||
|
case 'c':
|
||||||
|
LF_SET(DB_STAT_LOCK_CONF);
|
||||||
|
break;
|
||||||
|
case 'l':
|
||||||
|
LF_SET(DB_STAT_LOCK_LOCKERS);
|
||||||
|
break;
|
||||||
|
case 'm': /* Backward compatible. */
|
||||||
|
break;
|
||||||
|
case 'o':
|
||||||
|
LF_SET(DB_STAT_LOCK_OBJECTS);
|
||||||
|
break;
|
||||||
|
case 'p':
|
||||||
|
LF_SET(DB_STAT_LOCK_PARAMS);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return (db_stat_usage());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'd':
|
||||||
|
if (ttype != T_NOTSET && ttype != T_DB)
|
||||||
|
goto argcombo;
|
||||||
|
ttype = T_DB;
|
||||||
|
db = optarg;
|
||||||
|
break;
|
||||||
|
case 'E': case 'e':
|
||||||
|
if (ttype != T_NOTSET && ttype != T_ENV)
|
||||||
|
goto argcombo;
|
||||||
|
ttype = T_ENV;
|
||||||
|
LF_SET(DB_STAT_SUBSYSTEM);
|
||||||
|
if (ch == 'E')
|
||||||
|
LF_SET(DB_STAT_ALL);
|
||||||
|
break;
|
||||||
|
case 'f':
|
||||||
|
if (ttype != T_NOTSET && ttype != T_DB)
|
||||||
|
goto argcombo;
|
||||||
|
ttype = T_DB;
|
||||||
|
LF_SET(DB_FAST_STAT);
|
||||||
|
break;
|
||||||
|
case 'h':
|
||||||
|
home = optarg;
|
||||||
|
break;
|
||||||
|
case 'L': case 'l':
|
||||||
|
if (ttype != T_NOTSET && ttype != T_LOG)
|
||||||
|
goto argcombo;
|
||||||
|
ttype = T_LOG;
|
||||||
|
if (ch != 'l')
|
||||||
|
for (p = optarg; *p; ++p)
|
||||||
|
switch (*p) {
|
||||||
|
case 'A':
|
||||||
|
LF_SET(DB_STAT_ALL);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return (db_stat_usage());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'M': case 'm':
|
||||||
|
if (ttype != T_NOTSET && ttype != T_MPOOL)
|
||||||
|
goto argcombo;
|
||||||
|
ttype = T_MPOOL;
|
||||||
|
if (ch != 'm')
|
||||||
|
for (p = optarg; *p; ++p)
|
||||||
|
switch (*p) {
|
||||||
|
case 'A':
|
||||||
|
LF_SET(DB_STAT_ALL);
|
||||||
|
break;
|
||||||
|
case 'h':
|
||||||
|
LF_SET(DB_STAT_MEMP_HASH);
|
||||||
|
break;
|
||||||
|
case 'm': /* Backward compatible. */
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return (db_stat_usage());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'N':
|
||||||
|
nflag = 1;
|
||||||
|
break;
|
||||||
|
case 'P':
|
||||||
|
passwd = strdup(optarg);
|
||||||
|
memset(optarg, 0, strlen(optarg));
|
||||||
|
if (passwd == NULL) {
|
||||||
|
fprintf(stderr, "%s: strdup: %s\n",
|
||||||
|
progname, strerror(errno));
|
||||||
|
return (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'R': case 'r':
|
||||||
|
if (ttype != T_NOTSET && ttype != T_REP)
|
||||||
|
goto argcombo;
|
||||||
|
ttype = T_REP;
|
||||||
|
if (ch != 'r')
|
||||||
|
for (p = optarg; *p; ++p)
|
||||||
|
switch (*p) {
|
||||||
|
case 'A':
|
||||||
|
LF_SET(DB_STAT_ALL);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return (db_stat_usage());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 's':
|
||||||
|
if (ttype != T_NOTSET && ttype != T_DB)
|
||||||
|
goto argcombo;
|
||||||
|
ttype = T_DB;
|
||||||
|
subdb = optarg;
|
||||||
|
break;
|
||||||
|
case 't':
|
||||||
|
if (ttype != T_NOTSET) {
|
||||||
|
argcombo: fprintf(stderr,
|
||||||
|
"%s: illegal option combination\n",
|
||||||
|
progname);
|
||||||
|
return (db_stat_usage());
|
||||||
|
}
|
||||||
|
ttype = T_TXN;
|
||||||
|
break;
|
||||||
|
case 'V':
|
||||||
|
printf("%s\n", db_version(NULL, NULL, NULL));
|
||||||
|
return (EXIT_SUCCESS);
|
||||||
|
case 'X': case 'x':
|
||||||
|
if (ttype != T_NOTSET && ttype != T_MUTEX)
|
||||||
|
goto argcombo;
|
||||||
|
ttype = T_MUTEX;
|
||||||
|
if (ch != 'x')
|
||||||
|
for (p = optarg; *p; ++p)
|
||||||
|
switch (*p) {
|
||||||
|
case 'A':
|
||||||
|
LF_SET(DB_STAT_ALL);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return (db_stat_usage());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'Z':
|
||||||
|
LF_SET(DB_STAT_CLEAR);
|
||||||
|
break;
|
||||||
|
case '?':
|
||||||
|
default:
|
||||||
|
return (db_stat_usage());
|
||||||
|
}
|
||||||
|
argc -= optind;
|
||||||
|
argv += optind;
|
||||||
|
|
||||||
|
switch (ttype) {
|
||||||
|
case T_DB:
|
||||||
|
if (db == NULL)
|
||||||
|
return (db_stat_usage());
|
||||||
|
break;
|
||||||
|
case T_ENV:
|
||||||
|
case T_LOCK:
|
||||||
|
case T_LOG:
|
||||||
|
case T_MPOOL:
|
||||||
|
case T_MUTEX:
|
||||||
|
case T_REP:
|
||||||
|
case T_TXN:
|
||||||
|
break;
|
||||||
|
case T_NOTSET:
|
||||||
|
return (db_stat_usage());
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Handle possible interruptions. */
|
||||||
|
__db_util_siginit();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Create an environment object and initialize it for error
|
||||||
|
* reporting.
|
||||||
|
*/
|
||||||
|
retry: if ((ret = db_env_create(&dbenv, 0)) != 0) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: db_env_create: %s\n", progname, db_strerror(ret));
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
dbenv->set_errfile(dbenv, stderr);
|
||||||
|
dbenv->set_errpfx(dbenv, progname);
|
||||||
|
|
||||||
|
if (nflag) {
|
||||||
|
if ((ret = dbenv->set_flags(dbenv, DB_NOLOCKING, 1)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "set_flags: DB_NOLOCKING");
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
if ((ret = dbenv->set_flags(dbenv, DB_NOPANIC, 1)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "set_flags: DB_NOPANIC");
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (passwd != NULL &&
|
||||||
|
(ret = dbenv->set_encrypt(dbenv, passwd, DB_ENCRYPT_AES)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "set_passwd");
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Initialize the environment. */
|
||||||
|
if (db_stat_db_init(dbenv, home, ttype, cache, &private) != 0)
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
switch (ttype) {
|
||||||
|
case T_DB:
|
||||||
|
/* Create the DB object and open the file. */
|
||||||
|
if ((ret = db_create(&dbp, dbenv, 0)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "db_create");
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We open the database for writing so we can update the cached
|
||||||
|
* statistics, but it's OK to fail, we can open read-only and
|
||||||
|
* proceed.
|
||||||
|
*
|
||||||
|
* Turn off error messages for now -- we can't open lots of
|
||||||
|
* databases read-write (for example, master databases and
|
||||||
|
* hash databases for which we don't know the hash function).
|
||||||
|
*/
|
||||||
|
dbenv->set_errfile(dbenv, NULL);
|
||||||
|
ret = dbp->open(dbp, NULL, db, subdb, DB_UNKNOWN, 0, 0);
|
||||||
|
dbenv->set_errfile(dbenv, stderr);
|
||||||
|
if (ret != 0 && (ret = dbp->open(
|
||||||
|
dbp, NULL, db, subdb, DB_UNKNOWN, DB_RDONLY, 0)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "DB->open: %s", db);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Check if cache is too small for this DB's pagesize. */
|
||||||
|
if (private) {
|
||||||
|
if ((ret = __db_util_cache(dbp, &cache, &resize)) != 0)
|
||||||
|
goto err;
|
||||||
|
if (resize) {
|
||||||
|
(void)dbp->close(dbp, DB_NOSYNC);
|
||||||
|
dbp = NULL;
|
||||||
|
|
||||||
|
(void)dbenv->close(dbenv, 0);
|
||||||
|
dbenv = NULL;
|
||||||
|
goto retry;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dbp->stat_print(dbp, flags))
|
||||||
|
goto err;
|
||||||
|
break;
|
||||||
|
case T_ENV:
|
||||||
|
if (dbenv->stat_print(dbenv, flags))
|
||||||
|
goto err;
|
||||||
|
break;
|
||||||
|
case T_LOCK:
|
||||||
|
if (dbenv->lock_stat_print(dbenv, flags))
|
||||||
|
goto err;
|
||||||
|
break;
|
||||||
|
case T_LOG:
|
||||||
|
if (dbenv->log_stat_print(dbenv, flags))
|
||||||
|
goto err;
|
||||||
|
break;
|
||||||
|
case T_MPOOL:
|
||||||
|
if (dbenv->memp_stat_print(dbenv, flags))
|
||||||
|
goto err;
|
||||||
|
break;
|
||||||
|
case T_MUTEX:
|
||||||
|
if (dbenv->mutex_stat_print(dbenv, flags))
|
||||||
|
goto err;
|
||||||
|
break;
|
||||||
|
case T_REP:
|
||||||
|
#ifdef HAVE_REPLICATION_THREADS
|
||||||
|
if (dbenv->repmgr_stat_print(dbenv, flags))
|
||||||
|
goto err;
|
||||||
|
#endif
|
||||||
|
if (dbenv->rep_stat_print(dbenv, flags))
|
||||||
|
goto err;
|
||||||
|
break;
|
||||||
|
case T_TXN:
|
||||||
|
if (dbenv->txn_stat_print(dbenv, flags))
|
||||||
|
goto err;
|
||||||
|
break;
|
||||||
|
case T_NOTSET:
|
||||||
|
dbenv->errx(dbenv, "Unknown statistics flag");
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (0) {
|
||||||
|
err: exitval = 1;
|
||||||
|
}
|
||||||
|
if (dbp != NULL && (ret = dbp->close(dbp, DB_NOSYNC)) != 0) {
|
||||||
|
exitval = 1;
|
||||||
|
dbenv->err(dbenv, ret, "close");
|
||||||
|
}
|
||||||
|
if (dbenv != NULL && (ret = dbenv->close(dbenv, 0)) != 0) {
|
||||||
|
exitval = 1;
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: dbenv->close: %s\n", progname, db_strerror(ret));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (passwd != NULL)
|
||||||
|
free(passwd);
|
||||||
|
|
||||||
|
/* Resend any caught signal. */
|
||||||
|
__db_util_sigresend();
|
||||||
|
|
||||||
|
return (exitval == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* db_init --
|
||||||
|
* Initialize the environment.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
db_stat_db_init(dbenv, home, ttype, cache, is_private)
|
||||||
|
DB_ENV *dbenv;
|
||||||
|
char *home;
|
||||||
|
test_t ttype;
|
||||||
|
u_int32_t cache;
|
||||||
|
int *is_private;
|
||||||
|
{
|
||||||
|
u_int32_t oflags;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If our environment open fails, and we're trying to look at a
|
||||||
|
* shared region, it's a hard failure.
|
||||||
|
*
|
||||||
|
* We will probably just drop core if the environment we join does
|
||||||
|
* not include a memory pool. This is probably acceptable; trying
|
||||||
|
* to use an existing environment that does not contain a memory
|
||||||
|
* pool to look at a database can be safely construed as operator
|
||||||
|
* error, I think.
|
||||||
|
*/
|
||||||
|
*is_private = 0;
|
||||||
|
if ((ret = dbenv->open(dbenv, home, DB_USE_ENVIRON, 0)) == 0)
|
||||||
|
return (0);
|
||||||
|
if (ret == DB_VERSION_MISMATCH)
|
||||||
|
goto err;
|
||||||
|
if (ttype != T_DB && ttype != T_LOG) {
|
||||||
|
dbenv->err(dbenv, ret, "DB_ENV->open%s%s",
|
||||||
|
home == NULL ? "" : ": ", home == NULL ? "" : home);
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We're looking at a database or set of log files and no environment
|
||||||
|
* exists. Create one, but make it private so no files are actually
|
||||||
|
* created. Declare a reasonably large cache so that we don't fail
|
||||||
|
* when reporting statistics on large databases.
|
||||||
|
*
|
||||||
|
* An environment is required to look at databases because we may be
|
||||||
|
* trying to look at databases in directories other than the current
|
||||||
|
* one.
|
||||||
|
*/
|
||||||
|
if ((ret = dbenv->set_cachesize(dbenv, 0, cache, 1)) != 0) {
|
||||||
|
dbenv->err(dbenv, ret, "set_cachesize");
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
*is_private = 1;
|
||||||
|
oflags = DB_CREATE | DB_PRIVATE | DB_USE_ENVIRON;
|
||||||
|
if (ttype == T_DB)
|
||||||
|
oflags |= DB_INIT_MPOOL;
|
||||||
|
if (ttype == T_LOG)
|
||||||
|
oflags |= DB_INIT_LOG;
|
||||||
|
if ((ret = dbenv->open(dbenv, home, oflags, 0)) == 0)
|
||||||
|
return (0);
|
||||||
|
|
||||||
|
/* An environment is required. */
|
||||||
|
err: dbenv->err(dbenv, ret, "DB_ENV->open");
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
db_stat_usage()
|
||||||
|
{
|
||||||
|
fprintf(stderr, "usage: %s %s\n", progname,
|
||||||
|
"-d file [-fN] [-h home] [-P password] [-s database]");
|
||||||
|
fprintf(stderr, "usage: %s %s\n\t%s\n", progname,
|
||||||
|
"[-cEelmNrtVxZ] [-C Aclop]",
|
||||||
|
"[-h home] [-L A] [-M A] [-P password] [-R A] [-X A]");
|
||||||
|
return (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
db_stat_version_check()
|
||||||
|
{
|
||||||
|
int v_major, v_minor, v_patch;
|
||||||
|
|
||||||
|
/* Make sure we're loaded with the right version of the DB library. */
|
||||||
|
(void)db_version(&v_major, &v_minor, &v_patch);
|
||||||
|
if (v_major != DB_VERSION_MAJOR || v_minor != DB_VERSION_MINOR) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: version %d.%d doesn't match library version %d.%d\n",
|
||||||
|
progname, DB_VERSION_MAJOR, DB_VERSION_MINOR,
|
||||||
|
v_major, v_minor);
|
||||||
|
return (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
158
build_vxworks/db_stat/db_stat20.wpj
Normal file
158
build_vxworks/db_stat/db_stat20.wpj
Normal file
@@ -0,0 +1,158 @@
|
|||||||
|
Document file - DO NOT EDIT
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_BUILDRULE
|
||||||
|
db_stat20.out
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_AR
|
||||||
|
ar386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_ARCHIVE
|
||||||
|
$(PRJ_DIR)/PENTIUMgnu/db_stat20.a
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_AS
|
||||||
|
cc386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_CC
|
||||||
|
cc386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_CFLAGS
|
||||||
|
-g \
|
||||||
|
-mpentium \
|
||||||
|
-ansi \
|
||||||
|
-nostdinc \
|
||||||
|
-DRW_MULTI_THREAD \
|
||||||
|
-D_REENTRANT \
|
||||||
|
-fvolatile \
|
||||||
|
-nostdlib \
|
||||||
|
-fno-builtin \
|
||||||
|
-fno-defer-pop \
|
||||||
|
-I$(PRJ_DIR)/.. \
|
||||||
|
-I$(PRJ_DIR)/../.. \
|
||||||
|
-I$(WIND_BASE)/target/h \
|
||||||
|
-DCPU=PENTIUM
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_CFLAGS_AS
|
||||||
|
-g \
|
||||||
|
-mpentium \
|
||||||
|
-ansi \
|
||||||
|
-nostdinc \
|
||||||
|
-fvolatile \
|
||||||
|
-nostdlib \
|
||||||
|
-fno-builtin \
|
||||||
|
-fno-defer-pop \
|
||||||
|
-P \
|
||||||
|
-x \
|
||||||
|
assembler-with-cpp \
|
||||||
|
-I$(WIND_BASE)/target/h \
|
||||||
|
-DCPU=PENTIUM
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_CPP
|
||||||
|
cc386 -E -P -xc
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_LD
|
||||||
|
ld386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_LDDEPS
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_LDFLAGS
|
||||||
|
-X -N
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_LD_PARTIAL_FLAGS
|
||||||
|
-X -r
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_NM
|
||||||
|
nm386 -g
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_OPTION_DEFINE_MACRO
|
||||||
|
-D
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_OPTION_INCLUDE_DIR
|
||||||
|
-I
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_POST_BUILD_RULE
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_PRJ_LIBS
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_SIZE
|
||||||
|
size386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_RO_DEPEND_PATH
|
||||||
|
{$(WIND_BASE)/target/h/} \
|
||||||
|
{$(WIND_BASE)/target/src/} \
|
||||||
|
{$(WIND_BASE)/target/config/}
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_TC
|
||||||
|
::tc_PENTIUMgnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_archive
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_db_stat20.out
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_objects
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD__CURRENT
|
||||||
|
PENTIUMgnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD__LIST
|
||||||
|
PENTIUMgnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_TYPE
|
||||||
|
::prj_vxApp
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_VERSION
|
||||||
|
2.0
|
||||||
|
<END>
|
||||||
|
<BEGIN> FILE_db_stat.c_dependDone
|
||||||
|
FALSE
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_stat.c_dependencies
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_stat.c_objects
|
||||||
|
db_stat.o
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_stat.c_tool
|
||||||
|
C/C++ compiler
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> PROJECT_FILES
|
||||||
|
$(PRJ_DIR)/db_stat.c
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> userComments
|
||||||
|
db_stat
|
||||||
|
<END>
|
||||||
192
build_vxworks/db_stat/db_stat22.wpj
Normal file
192
build_vxworks/db_stat/db_stat22.wpj
Normal file
@@ -0,0 +1,192 @@
|
|||||||
|
Document file - DO NOT EDIT
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_BUILDRULE
|
||||||
|
db_stat22.out
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_AR
|
||||||
|
arpentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_ARCHIVE
|
||||||
|
$(PRJ_DIR)/PENTIUM2gnu/db_stat22.a
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_AS
|
||||||
|
ccpentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CC
|
||||||
|
ccpentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CC_ARCH_SPEC
|
||||||
|
-mcpu=pentiumpro -march=pentiumpro
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CFLAGS
|
||||||
|
-g \
|
||||||
|
-mcpu=pentiumpro \
|
||||||
|
-march=pentiumpro \
|
||||||
|
-ansi \
|
||||||
|
-nostdlib \
|
||||||
|
-DRW_MULTI_THREAD \
|
||||||
|
-D_REENTRANT \
|
||||||
|
-fvolatile \
|
||||||
|
-fno-builtin \
|
||||||
|
-fno-defer-pop \
|
||||||
|
-I$(PRJ_DIR)/.. \
|
||||||
|
-I$(PRJ_DIR)/../.. \
|
||||||
|
-I$(WIND_BASE)/target/h \
|
||||||
|
-DCPU=PENTIUM2 \
|
||||||
|
-DTOOL_FAMILY=gnu \
|
||||||
|
-DTOOL=gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CFLAGS_AS
|
||||||
|
-g \
|
||||||
|
-mcpu=pentiumpro \
|
||||||
|
-march=pentiumpro \
|
||||||
|
-ansi \
|
||||||
|
-nostdlib \
|
||||||
|
-fno-builtin \
|
||||||
|
-fno-defer-pop \
|
||||||
|
-P \
|
||||||
|
-xassembler-with-cpp \
|
||||||
|
-I$(WIND_BASE)/target/h \
|
||||||
|
-DCPU=PENTIUM2 \
|
||||||
|
-DTOOL_FAMILY=gnu \
|
||||||
|
-DTOOL=gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CPP
|
||||||
|
ccpentium -E -P
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_HEX_FLAGS
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD
|
||||||
|
ldpentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_LDFLAGS
|
||||||
|
-X -N
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD_PARTIAL
|
||||||
|
ccpentium -r -nostdlib -Wl,-X
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD_PARTIAL_FLAGS
|
||||||
|
-X -r
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_NM
|
||||||
|
nmpentium -g
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_DEFINE_MACRO
|
||||||
|
-D
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_DEPEND
|
||||||
|
-M -w
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_GENERATE_DEPENDENCY_FILE
|
||||||
|
-MD
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_INCLUDE_DIR
|
||||||
|
-I
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_LANG_C
|
||||||
|
-xc
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_UNDEFINE_MACRO
|
||||||
|
-U
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_POST_BUILD_RULE
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_PRJ_LIBS
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_SIZE
|
||||||
|
sizepentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_TOOL_FAMILY
|
||||||
|
gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_RO_DEPEND_PATH
|
||||||
|
{$(WIND_BASE)/target/h/} \
|
||||||
|
{$(WIND_BASE)/target/src/} \
|
||||||
|
{$(WIND_BASE)/target/config/}
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_TC
|
||||||
|
::tc_PENTIUM2gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_archive
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_db_stat22.out
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_db_stat22.pl
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_objects
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD__CURRENT
|
||||||
|
PENTIUM2gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD__LIST
|
||||||
|
PENTIUM2gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_TYPE
|
||||||
|
::prj_vxApp
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_VERSION
|
||||||
|
2.2
|
||||||
|
<END>
|
||||||
|
<BEGIN> FILE_db_stat.c_dependDone
|
||||||
|
FALSE
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_stat.c_dependencies
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_stat.c_objects
|
||||||
|
db_stat.o
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_db_stat.c_tool
|
||||||
|
C/C++ compiler
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> PROJECT_FILES
|
||||||
|
$(PRJ_DIR)/db_stat.c
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> userComments
|
||||||
|
db_stat
|
||||||
|
<END>
|
||||||
39
build_vxworks/dbdemo/README
Normal file
39
build_vxworks/dbdemo/README
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
This README describes the steps needed to run a demo example of BerkeleyDB.
|
||||||
|
|
||||||
|
1. Read the pages in the Reference Guide that describe building
|
||||||
|
BerkeleyDB on VxWorks:
|
||||||
|
|
||||||
|
$(WIND_BASE)/target/src/BerkeleyDB/docs/ref/build_vxworks/intro.html
|
||||||
|
$(WIND_BASE)/target/src/BerkeleyDB/docs/ref/build_vxworks/notes.html
|
||||||
|
$(WIND_BASE)/target/src/BerkeleyDB/docs/ref/build_vxworks/faq.html
|
||||||
|
|
||||||
|
2. Launch Tornado 2.0 and open up the BerkeleyDB project.
|
||||||
|
|
||||||
|
3. Add the demo project to that workspace:
|
||||||
|
|
||||||
|
$(WIND_BASE)/target/src/BerkeleyDB/build_vxworks/demo/dbdemo.wpj
|
||||||
|
|
||||||
|
4. Build BerkeleyDB as described in the Reference Guide.
|
||||||
|
|
||||||
|
5. Build the dbdemo project.
|
||||||
|
|
||||||
|
6. Download BerkeleyDB onto the target.
|
||||||
|
|
||||||
|
7. Download the dbdemo project onto the target.
|
||||||
|
|
||||||
|
8. Open a windsh to the target and run the demo:
|
||||||
|
|
||||||
|
-> dbdemo "<pathname>/<dbname>"
|
||||||
|
|
||||||
|
Where pathname is a pathname string pointing to a directory that the
|
||||||
|
demo can create a database in. That directory should already exist.
|
||||||
|
The dbname is the name for the database. For example:
|
||||||
|
|
||||||
|
-> dbdemo "/tmp/demo.db"
|
||||||
|
|
||||||
|
9. The demo program will ask for input. You can type in any string.
|
||||||
|
The program will add an entry to the database with that string as
|
||||||
|
the key and the reverse of that string as the data item for that key.
|
||||||
|
It will continue asking for input until you hit ^D or enter "quit".
|
||||||
|
Upon doing so, the demo program will display all the keys you have
|
||||||
|
entered as input and their data items.
|
||||||
177
build_vxworks/dbdemo/dbdemo.c
Normal file
177
build_vxworks/dbdemo/dbdemo.c
Normal file
@@ -0,0 +1,177 @@
|
|||||||
|
/*-
|
||||||
|
* See the file LICENSE for redistribution information.
|
||||||
|
*
|
||||||
|
* Copyright (c) 1997,2008 Oracle. All rights reserved.
|
||||||
|
*
|
||||||
|
* $Id: dbdemo.c 63573 2008-05-23 21:43:21Z trent.nelson $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
extern int getopt(int, char * const *, const char *);
|
||||||
|
#else
|
||||||
|
#include <unistd.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <db_config.h>
|
||||||
|
#include <db_int.h>
|
||||||
|
|
||||||
|
#define DATABASE "access.db"
|
||||||
|
int dbdemo_main __P((int, char *[]));
|
||||||
|
int dbdemo_usage __P((void));
|
||||||
|
|
||||||
|
int
|
||||||
|
dbdemo(args)
|
||||||
|
char *args;
|
||||||
|
{
|
||||||
|
int argc;
|
||||||
|
char **argv;
|
||||||
|
|
||||||
|
__db_util_arg("dbdemo", args, &argc, &argv);
|
||||||
|
return (dbdemo_main(argc, argv) ? EXIT_FAILURE : EXIT_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#define ERROR_RETURN ERROR
|
||||||
|
|
||||||
|
int
|
||||||
|
dbdemo_main(argc, argv)
|
||||||
|
int argc;
|
||||||
|
char *argv[];
|
||||||
|
{
|
||||||
|
extern int optind, __db_getopt_reset;
|
||||||
|
DB *dbp;
|
||||||
|
DBC *dbcp;
|
||||||
|
DBT key, data;
|
||||||
|
size_t len;
|
||||||
|
int ch, ret, rflag;
|
||||||
|
char *database, *p, *t, buf[1024], rbuf[1024];
|
||||||
|
const char *progname = "dbdemo"; /* Program name. */
|
||||||
|
|
||||||
|
rflag = 0;
|
||||||
|
__db_getopt_reset = 1;
|
||||||
|
while ((ch = getopt(argc, argv, "r")) != EOF)
|
||||||
|
switch (ch) {
|
||||||
|
case 'r':
|
||||||
|
rflag = 1;
|
||||||
|
break;
|
||||||
|
case '?':
|
||||||
|
default:
|
||||||
|
return (dbdemo_usage());
|
||||||
|
}
|
||||||
|
argc -= optind;
|
||||||
|
argv += optind;
|
||||||
|
|
||||||
|
/* Accept optional database name. */
|
||||||
|
database = *argv == NULL ? DATABASE : argv[0];
|
||||||
|
|
||||||
|
/* Optionally discard the database. */
|
||||||
|
if (rflag)
|
||||||
|
(void)remove(database);
|
||||||
|
|
||||||
|
/* Create and initialize database object, open the database. */
|
||||||
|
if ((ret = db_create(&dbp, NULL, 0)) != 0) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: db_create: %s\n", progname, db_strerror(ret));
|
||||||
|
return (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
dbp->set_errfile(dbp, stderr);
|
||||||
|
dbp->set_errpfx(dbp, progname);
|
||||||
|
if ((ret = dbp->set_pagesize(dbp, 1024)) != 0) {
|
||||||
|
dbp->err(dbp, ret, "set_pagesize");
|
||||||
|
goto err1;
|
||||||
|
}
|
||||||
|
if ((ret = dbp->set_cachesize(dbp, 0, 32 * 1024, 0)) != 0) {
|
||||||
|
dbp->err(dbp, ret, "set_cachesize");
|
||||||
|
goto err1;
|
||||||
|
}
|
||||||
|
if ((ret = dbp->open(dbp,
|
||||||
|
NULL, database, NULL, DB_BTREE, DB_CREATE, 0664)) != 0) {
|
||||||
|
dbp->err(dbp, ret, "%s: open", database);
|
||||||
|
goto err1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Insert records into the database, where the key is the user
|
||||||
|
* input and the data is the user input in reverse order.
|
||||||
|
*/
|
||||||
|
memset(&key, 0, sizeof(DBT));
|
||||||
|
memset(&data, 0, sizeof(DBT));
|
||||||
|
for (;;) {
|
||||||
|
printf("input> ");
|
||||||
|
fflush(stdout);
|
||||||
|
if (fgets(buf, sizeof(buf), stdin) == NULL)
|
||||||
|
break;
|
||||||
|
if (strcmp(buf, "exit\n") == 0 || strcmp(buf, "quit\n") == 0)
|
||||||
|
break;
|
||||||
|
if ((len = strlen(buf)) <= 1)
|
||||||
|
continue;
|
||||||
|
for (t = rbuf, p = buf + (len - 2); p >= buf;)
|
||||||
|
*t++ = *p--;
|
||||||
|
*t++ = '\0';
|
||||||
|
|
||||||
|
key.data = buf;
|
||||||
|
data.data = rbuf;
|
||||||
|
data.size = key.size = (u_int32_t)len - 1;
|
||||||
|
|
||||||
|
switch (ret =
|
||||||
|
dbp->put(dbp, NULL, &key, &data, DB_NOOVERWRITE)) {
|
||||||
|
case 0:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
dbp->err(dbp, ret, "DB->put");
|
||||||
|
if (ret != DB_KEYEXIST)
|
||||||
|
goto err1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
/* Acquire a cursor for the database. */
|
||||||
|
if ((ret = dbp->cursor(dbp, NULL, &dbcp, 0)) != 0) {
|
||||||
|
dbp->err(dbp, ret, "DB->cursor");
|
||||||
|
goto err1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Initialize the key/data pair so the flags aren't set. */
|
||||||
|
memset(&key, 0, sizeof(key));
|
||||||
|
memset(&data, 0, sizeof(data));
|
||||||
|
|
||||||
|
/* Walk through the database and print out the key/data pairs. */
|
||||||
|
while ((ret = dbcp->get(dbcp, &key, &data, DB_NEXT)) == 0)
|
||||||
|
printf("%.*s : %.*s\n",
|
||||||
|
(int)key.size, (char *)key.data,
|
||||||
|
(int)data.size, (char *)data.data);
|
||||||
|
if (ret != DB_NOTFOUND) {
|
||||||
|
dbp->err(dbp, ret, "DBcursor->get");
|
||||||
|
goto err2;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Close everything down. */
|
||||||
|
if ((ret = dbcp->close(dbcp)) != 0) {
|
||||||
|
dbp->err(dbp, ret, "DBcursor->close");
|
||||||
|
goto err1;
|
||||||
|
}
|
||||||
|
if ((ret = dbp->close(dbp, 0)) != 0) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: DB->close: %s\n", progname, db_strerror(ret));
|
||||||
|
return (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
return (EXIT_SUCCESS);
|
||||||
|
|
||||||
|
err2: (void)dbcp->close(dbcp);
|
||||||
|
err1: (void)dbp->close(dbp, 0);
|
||||||
|
return (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
dbdemo_usage()
|
||||||
|
{
|
||||||
|
(void)fprintf(stderr, "usage: ex_access [-r] [database]\n");
|
||||||
|
return (EXIT_FAILURE);
|
||||||
|
}
|
||||||
158
build_vxworks/dbdemo/dbdemo20.wpj
Normal file
158
build_vxworks/dbdemo/dbdemo20.wpj
Normal file
@@ -0,0 +1,158 @@
|
|||||||
|
Document file - DO NOT EDIT
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_BUILDRULE
|
||||||
|
dbdemo20.out
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_AR
|
||||||
|
ar386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_ARCHIVE
|
||||||
|
$(PRJ_DIR)/PENTIUMgnu/dbdemo20.a
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_AS
|
||||||
|
cc386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_CC
|
||||||
|
cc386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_CFLAGS
|
||||||
|
-g \
|
||||||
|
-mpentium \
|
||||||
|
-ansi \
|
||||||
|
-nostdinc \
|
||||||
|
-DRW_MULTI_THREAD \
|
||||||
|
-D_REENTRANT \
|
||||||
|
-fvolatile \
|
||||||
|
-nostdlib \
|
||||||
|
-fno-builtin \
|
||||||
|
-fno-defer-pop \
|
||||||
|
-I$(PRJ_DIR)/.. \
|
||||||
|
-I$(PRJ_DIR)/../.. \
|
||||||
|
-I$(WIND_BASE)/target/h \
|
||||||
|
-DCPU=PENTIUM
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_CFLAGS_AS
|
||||||
|
-g \
|
||||||
|
-mpentium \
|
||||||
|
-ansi \
|
||||||
|
-nostdinc \
|
||||||
|
-fvolatile \
|
||||||
|
-nostdlib \
|
||||||
|
-fno-builtin \
|
||||||
|
-fno-defer-pop \
|
||||||
|
-P \
|
||||||
|
-x \
|
||||||
|
assembler-with-cpp \
|
||||||
|
-I$(WIND_BASE)/target/h \
|
||||||
|
-DCPU=PENTIUM
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_CPP
|
||||||
|
cc386 -E -P -xc
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_LD
|
||||||
|
ld386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_LDDEPS
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_LDFLAGS
|
||||||
|
-X -N
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_LD_PARTIAL_FLAGS
|
||||||
|
-X -r
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_NM
|
||||||
|
nm386 -g
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_OPTION_DEFINE_MACRO
|
||||||
|
-D
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_OPTION_INCLUDE_DIR
|
||||||
|
-I
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_POST_BUILD_RULE
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_PRJ_LIBS
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_MACRO_SIZE
|
||||||
|
size386
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_RO_DEPEND_PATH
|
||||||
|
{$(WIND_BASE)/target/h/} \
|
||||||
|
{$(WIND_BASE)/target/src/} \
|
||||||
|
{$(WIND_BASE)/target/config/}
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUMgnu_TC
|
||||||
|
::tc_PENTIUMgnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_archive
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_dbdemo20.out
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_objects
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD__CURRENT
|
||||||
|
PENTIUMgnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD__LIST
|
||||||
|
PENTIUMgnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_TYPE
|
||||||
|
::prj_vxApp
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_VERSION
|
||||||
|
2.0
|
||||||
|
<END>
|
||||||
|
<BEGIN> FILE_dbdemo.c_dependDone
|
||||||
|
FALSE
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_dbdemo.c_dependencies
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_dbdemo.c_objects
|
||||||
|
dbdemo.o
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_dbdemo.c_tool
|
||||||
|
C/C++ compiler
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> PROJECT_FILES
|
||||||
|
$(PRJ_DIR)/dbdemo.c
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> userComments
|
||||||
|
dbdemo
|
||||||
|
<END>
|
||||||
192
build_vxworks/dbdemo/dbdemo22.wpj
Normal file
192
build_vxworks/dbdemo/dbdemo22.wpj
Normal file
@@ -0,0 +1,192 @@
|
|||||||
|
Document file - DO NOT EDIT
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_BUILDRULE
|
||||||
|
dbdemo22.out
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_AR
|
||||||
|
arpentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_ARCHIVE
|
||||||
|
$(PRJ_DIR)/PENTIUM2gnu/dbdemo22.a
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_AS
|
||||||
|
ccpentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CC
|
||||||
|
ccpentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CC_ARCH_SPEC
|
||||||
|
-mcpu=pentiumpro -march=pentiumpro
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CFLAGS
|
||||||
|
-g \
|
||||||
|
-mcpu=pentiumpro \
|
||||||
|
-march=pentiumpro \
|
||||||
|
-ansi \
|
||||||
|
-nostdlib \
|
||||||
|
-DRW_MULTI_THREAD \
|
||||||
|
-D_REENTRANT \
|
||||||
|
-fvolatile \
|
||||||
|
-fno-builtin \
|
||||||
|
-fno-defer-pop \
|
||||||
|
-I$(PRJ_DIR)/.. \
|
||||||
|
-I$(PRJ_DIR)/../.. \
|
||||||
|
-I$(WIND_BASE)/target/h \
|
||||||
|
-DCPU=PENTIUM2 \
|
||||||
|
-DTOOL_FAMILY=gnu \
|
||||||
|
-DTOOL=gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CFLAGS_AS
|
||||||
|
-g \
|
||||||
|
-mcpu=pentiumpro \
|
||||||
|
-march=pentiumpro \
|
||||||
|
-ansi \
|
||||||
|
-nostdlib \
|
||||||
|
-fno-builtin \
|
||||||
|
-fno-defer-pop \
|
||||||
|
-P \
|
||||||
|
-xassembler-with-cpp \
|
||||||
|
-I$(WIND_BASE)/target/h \
|
||||||
|
-DCPU=PENTIUM2 \
|
||||||
|
-DTOOL_FAMILY=gnu \
|
||||||
|
-DTOOL=gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_CPP
|
||||||
|
ccpentium -E -P
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_HEX_FLAGS
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD
|
||||||
|
ldpentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_LDFLAGS
|
||||||
|
-X -N
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD_PARTIAL
|
||||||
|
ccpentium -r -nostdlib -Wl,-X
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD_PARTIAL_FLAGS
|
||||||
|
-X -r
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_NM
|
||||||
|
nmpentium -g
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_DEFINE_MACRO
|
||||||
|
-D
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_DEPEND
|
||||||
|
-M -w
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_GENERATE_DEPENDENCY_FILE
|
||||||
|
-MD
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_INCLUDE_DIR
|
||||||
|
-I
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_LANG_C
|
||||||
|
-xc
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_UNDEFINE_MACRO
|
||||||
|
-U
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_POST_BUILD_RULE
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_PRJ_LIBS
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_SIZE
|
||||||
|
sizepentium
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_MACRO_TOOL_FAMILY
|
||||||
|
gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_RO_DEPEND_PATH
|
||||||
|
{$(WIND_BASE)/target/h/} \
|
||||||
|
{$(WIND_BASE)/target/src/} \
|
||||||
|
{$(WIND_BASE)/target/config/}
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_PENTIUM2gnu_TC
|
||||||
|
::tc_PENTIUM2gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_archive
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_dbdemo22.out
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_dbdemo22.pl
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD_RULE_objects
|
||||||
|
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD__CURRENT
|
||||||
|
PENTIUM2gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> BUILD__LIST
|
||||||
|
PENTIUM2gnu
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_TYPE
|
||||||
|
::prj_vxApp
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> CORE_INFO_VERSION
|
||||||
|
2.2
|
||||||
|
<END>
|
||||||
|
<BEGIN> FILE_dbdemo.c_dependDone
|
||||||
|
FALSE
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_dbdemo.c_dependencies
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_dbdemo.c_objects
|
||||||
|
dbdemo.o
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> FILE_dbdemo.c_tool
|
||||||
|
C/C++ compiler
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> PROJECT_FILES
|
||||||
|
$(PRJ_DIR)/dbdemo.c
|
||||||
|
<END>
|
||||||
|
|
||||||
|
<BEGIN> userComments
|
||||||
|
dbdemo
|
||||||
|
<END>
|
||||||
61
build_wince/Berkeley_DB.sln
Normal file
61
build_wince/Berkeley_DB.sln
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 9.00
|
||||||
|
# Visual Studio 2005
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "db_small", "db_small.vcproj", "{6A2849DA-8F7C-4B50-BDAE-AE7752EF8213}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "db_static", "db_static.vcproj", "{4AB4958F-8DD0-49B5-8C02-014B5637C59A}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wce_tpcb", "wce_tpcb.vcproj", "{F2CE670A-ABAE-414A-9A17-8079AB58613F}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
{4AB4958F-8DD0-49B5-8C02-014B5637C59A} = {4AB4958F-8DD0-49B5-8C02-014B5637C59A}
|
||||||
|
EndProjectSection
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Pocket PC 2003 (ARMV4) = Debug|Pocket PC 2003 (ARMV4)
|
||||||
|
Debug|Smartphone 2003 (ARMV4) = Debug|Smartphone 2003 (ARMV4)
|
||||||
|
Release|Pocket PC 2003 (ARMV4) = Release|Pocket PC 2003 (ARMV4)
|
||||||
|
Release|Smartphone 2003 (ARMV4) = Release|Smartphone 2003 (ARMV4)
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{6A2849DA-8F7C-4B50-BDAE-AE7752EF8213}.Debug|Pocket PC 2003 (ARMV4).ActiveCfg = Debug|Pocket PC 2003 (ARMV4)
|
||||||
|
{6A2849DA-8F7C-4B50-BDAE-AE7752EF8213}.Debug|Pocket PC 2003 (ARMV4).Build.0 = Debug|Pocket PC 2003 (ARMV4)
|
||||||
|
{6A2849DA-8F7C-4B50-BDAE-AE7752EF8213}.Debug|Pocket PC 2003 (ARMV4).Deploy.0 = Debug|Pocket PC 2003 (ARMV4)
|
||||||
|
{6A2849DA-8F7C-4B50-BDAE-AE7752EF8213}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4)
|
||||||
|
{6A2849DA-8F7C-4B50-BDAE-AE7752EF8213}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4)
|
||||||
|
{6A2849DA-8F7C-4B50-BDAE-AE7752EF8213}.Debug|Smartphone 2003 (ARMV4).Deploy.0 = Debug|Smartphone 2003 (ARMV4)
|
||||||
|
{6A2849DA-8F7C-4B50-BDAE-AE7752EF8213}.Release|Pocket PC 2003 (ARMV4).ActiveCfg = Release|Pocket PC 2003 (ARMV4)
|
||||||
|
{6A2849DA-8F7C-4B50-BDAE-AE7752EF8213}.Release|Pocket PC 2003 (ARMV4).Build.0 = Release|Pocket PC 2003 (ARMV4)
|
||||||
|
{6A2849DA-8F7C-4B50-BDAE-AE7752EF8213}.Release|Pocket PC 2003 (ARMV4).Deploy.0 = Release|Pocket PC 2003 (ARMV4)
|
||||||
|
{6A2849DA-8F7C-4B50-BDAE-AE7752EF8213}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4)
|
||||||
|
{6A2849DA-8F7C-4B50-BDAE-AE7752EF8213}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4)
|
||||||
|
{6A2849DA-8F7C-4B50-BDAE-AE7752EF8213}.Release|Smartphone 2003 (ARMV4).Deploy.0 = Release|Smartphone 2003 (ARMV4)
|
||||||
|
{4AB4958F-8DD0-49B5-8C02-014B5637C59A}.Debug|Pocket PC 2003 (ARMV4).ActiveCfg = Debug|Pocket PC 2003 (ARMV4)
|
||||||
|
{4AB4958F-8DD0-49B5-8C02-014B5637C59A}.Debug|Pocket PC 2003 (ARMV4).Build.0 = Debug|Pocket PC 2003 (ARMV4)
|
||||||
|
{4AB4958F-8DD0-49B5-8C02-014B5637C59A}.Debug|Pocket PC 2003 (ARMV4).Deploy.0 = Debug|Pocket PC 2003 (ARMV4)
|
||||||
|
{4AB4958F-8DD0-49B5-8C02-014B5637C59A}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4)
|
||||||
|
{4AB4958F-8DD0-49B5-8C02-014B5637C59A}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4)
|
||||||
|
{4AB4958F-8DD0-49B5-8C02-014B5637C59A}.Debug|Smartphone 2003 (ARMV4).Deploy.0 = Debug|Smartphone 2003 (ARMV4)
|
||||||
|
{4AB4958F-8DD0-49B5-8C02-014B5637C59A}.Release|Pocket PC 2003 (ARMV4).ActiveCfg = Release|Pocket PC 2003 (ARMV4)
|
||||||
|
{4AB4958F-8DD0-49B5-8C02-014B5637C59A}.Release|Pocket PC 2003 (ARMV4).Build.0 = Release|Pocket PC 2003 (ARMV4)
|
||||||
|
{4AB4958F-8DD0-49B5-8C02-014B5637C59A}.Release|Pocket PC 2003 (ARMV4).Deploy.0 = Release|Pocket PC 2003 (ARMV4)
|
||||||
|
{4AB4958F-8DD0-49B5-8C02-014B5637C59A}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4)
|
||||||
|
{4AB4958F-8DD0-49B5-8C02-014B5637C59A}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4)
|
||||||
|
{4AB4958F-8DD0-49B5-8C02-014B5637C59A}.Release|Smartphone 2003 (ARMV4).Deploy.0 = Release|Smartphone 2003 (ARMV4)
|
||||||
|
{F2CE670A-ABAE-414A-9A17-8079AB58613F}.Debug|Pocket PC 2003 (ARMV4).ActiveCfg = Debug|Pocket PC 2003 (ARMV4)
|
||||||
|
{F2CE670A-ABAE-414A-9A17-8079AB58613F}.Debug|Pocket PC 2003 (ARMV4).Build.0 = Debug|Pocket PC 2003 (ARMV4)
|
||||||
|
{F2CE670A-ABAE-414A-9A17-8079AB58613F}.Debug|Pocket PC 2003 (ARMV4).Deploy.0 = Debug|Pocket PC 2003 (ARMV4)
|
||||||
|
{F2CE670A-ABAE-414A-9A17-8079AB58613F}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Smartphone 2003 (ARMV4)
|
||||||
|
{F2CE670A-ABAE-414A-9A17-8079AB58613F}.Debug|Smartphone 2003 (ARMV4).Build.0 = Debug|Smartphone 2003 (ARMV4)
|
||||||
|
{F2CE670A-ABAE-414A-9A17-8079AB58613F}.Debug|Smartphone 2003 (ARMV4).Deploy.0 = Debug|Smartphone 2003 (ARMV4)
|
||||||
|
{F2CE670A-ABAE-414A-9A17-8079AB58613F}.Release|Pocket PC 2003 (ARMV4).ActiveCfg = Release|Pocket PC 2003 (ARMV4)
|
||||||
|
{F2CE670A-ABAE-414A-9A17-8079AB58613F}.Release|Pocket PC 2003 (ARMV4).Build.0 = Release|Pocket PC 2003 (ARMV4)
|
||||||
|
{F2CE670A-ABAE-414A-9A17-8079AB58613F}.Release|Pocket PC 2003 (ARMV4).Deploy.0 = Release|Pocket PC 2003 (ARMV4)
|
||||||
|
{F2CE670A-ABAE-414A-9A17-8079AB58613F}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Smartphone 2003 (ARMV4)
|
||||||
|
{F2CE670A-ABAE-414A-9A17-8079AB58613F}.Release|Smartphone 2003 (ARMV4).Build.0 = Release|Smartphone 2003 (ARMV4)
|
||||||
|
{F2CE670A-ABAE-414A-9A17-8079AB58613F}.Release|Smartphone 2003 (ARMV4).Deploy.0 = Release|Smartphone 2003 (ARMV4)
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
||||||
56
build_wince/Berkeley_DB.vcw
Normal file
56
build_wince/Berkeley_DB.vcw
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
Microsoft eMbedded Visual Tools Workspace File, Format Version 4.00
|
||||||
|
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
Project: "db_small"=.\db_small.vcp - Package Owner=<4>
|
||||||
|
|
||||||
|
Package=<5>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
Package=<4>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
Project: "db_static"=.\db_static.vcp - Package Owner=<4>
|
||||||
|
|
||||||
|
Package=<5>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
Package=<4>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
Project: "wce_tpcb"=.\wce_tpcb.vcp - Package Owner=<4>
|
||||||
|
|
||||||
|
Package=<5>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
Package=<4>
|
||||||
|
{{{
|
||||||
|
Begin Project Dependency
|
||||||
|
Project_Dep_Name db_static
|
||||||
|
End Project Dependency
|
||||||
|
}}}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
Global:
|
||||||
|
|
||||||
|
Package=<5>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
Package=<3>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
181
build_wince/app_vcp.src
Normal file
181
build_wince/app_vcp.src
Normal file
@@ -0,0 +1,181 @@
|
|||||||
|
# Microsoft eMbedded Visual Tools Project File - Name="@project_name@" - Package Owner=<4>
|
||||||
|
# Microsoft eMbedded Visual Tools Generated Build File, Format Version 6.02
|
||||||
|
# ** DO NOT EDIT **
|
||||||
|
|
||||||
|
# TARGTYPE "Win32 (WCE ARMV4) Application" 0xa301
|
||||||
|
# TARGTYPE "Win32 (WCE emulator) Application" 0xa601
|
||||||
|
|
||||||
|
CFG=@project_name@ - Win32 (WCE emulator) Debug
|
||||||
|
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||||
|
!MESSAGE use the Export Makefile command and run
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE NMAKE /f "@project_name@.vcn".
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE You can specify a configuration when running NMAKE
|
||||||
|
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE NMAKE /f "@project_name@.vcn" CFG="@project_name@ - Win32 (WCE emulator) Debug"
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE Possible choices for configuration are:
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE "@project_name@ - Win32 (WCE emulator) Release" (based on "Win32 (WCE emulator) Application")
|
||||||
|
!MESSAGE "@project_name@ - Win32 (WCE emulator) Debug" (based on "Win32 (WCE emulator) Application")
|
||||||
|
!MESSAGE "@project_name@ - Win32 (WCE ARMV4) Release" (based on "Win32 (WCE ARMV4) Application")
|
||||||
|
!MESSAGE "@project_name@ - Win32 (WCE ARMV4) Debug" (based on "Win32 (WCE ARMV4) Application")
|
||||||
|
!MESSAGE
|
||||||
|
|
||||||
|
# Begin Project
|
||||||
|
# PROP AllowPerConfigDependencies 0
|
||||||
|
# PROP Scc_ProjName ""
|
||||||
|
# PROP Scc_LocalPath ""
|
||||||
|
# PROP ATL_Project 2
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "@project_name@ - Win32 (WCE emulator) Release"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 0
|
||||||
|
# PROP BASE Output_Dir "@lib_rel_dest@_EMU"
|
||||||
|
# PROP BASE Intermediate_Dir "@lib_rel_dest@_EMU/@project_name@"
|
||||||
|
# PROP BASE CPU_ID "{32E52003-403E-442D-BE48-DE10F8C6131D}"
|
||||||
|
# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 0
|
||||||
|
# PROP Use_Debug_Libraries 0
|
||||||
|
# PROP Output_Dir "@lib_rel_dest@_EMU"
|
||||||
|
# PROP Intermediate_Dir "@lib_rel_dest@_EMU/@project_name@"
|
||||||
|
# PROP CPU_ID "{32E52003-403E-442D-BE48-DE10F8C6131D}"
|
||||||
|
# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
RSC=rc.exe
|
||||||
|
# ADD BASE RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "UNICODE" /d "_UNICODE" /d "NDEBUG" /d "$(CePlatform)" /d "_X86_" /d "x86" /d "_i386_" /r
|
||||||
|
# ADD RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "UNICODE" /d "_UNICODE" /d "NDEBUG" /d "$(CePlatform)" /d "_X86_" /d "x86" /d "_i386_" /r
|
||||||
|
CPP=cl.exe
|
||||||
|
# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "_i386_" /D UNDER_CE=$(CEVersion) /D "i_386_" /D "UNICODE" /D "_UNICODE" /D "_X86_" /D "x86" /D "NDEBUG" /Gs8192 @extra_cppflags@ /GF /O2 /c
|
||||||
|
# ADD CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "_i386_" /D UNDER_CE=$(CEVersion) /I "." /I ".." /D "_i386_" /D "UNICODE" /D "_UNICODE" /D "_X86_" /D "x86" /D "NDEBUG" /D "__NO_SYSTEM_INCLUDES" /Gs8192 @extra_cppflags@ /GF /O2 /c
|
||||||
|
MTL=midl.exe
|
||||||
|
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
|
||||||
|
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo
|
||||||
|
LINK32=link.exe
|
||||||
|
# ADD BASE LINK32 libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@s.lib commctrl.lib coredll.lib $(CEx86Corelibc) /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /nodefaultlib:"OLDNAMES.lib" /nodefaultlib:$(CENoDefaultLib) /subsystem:$(CESubsystem) /MACHINE:IX86 /libpath:"@lib_rel_dest@_EMU"
|
||||||
|
# ADD LINK32 libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@s.lib commctrl.lib coredll.lib $(CEx86Corelibc) /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /nodefaultlib:"OLDNAMES.lib" /nodefaultlib:$(CENoDefaultLib) /subsystem:$(CESubsystem) /MACHINE:IX86 /libpath:"@lib_rel_dest@_EMU"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "@project_name@ - Win32 (WCE emulator) Debug"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 1
|
||||||
|
# PROP BASE Output_Dir "@lib_debug_dest@_EMU"
|
||||||
|
# PROP BASE Intermediate_Dir "@lib_debug_dest@_EMU\@project_name@"
|
||||||
|
# PROP BASE CPU_ID "{32E52003-403E-442D-BE48-DE10F8C6131D}"
|
||||||
|
# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 0
|
||||||
|
# PROP Use_Debug_Libraries 1
|
||||||
|
# PROP Output_Dir "@lib_debug_dest@_EMU"
|
||||||
|
# PROP Intermediate_Dir "@lib_debug_dest@_EMU\@project_name@"
|
||||||
|
# PROP CPU_ID "{32E52003-403E-442D-BE48-DE10F8C6131D}"
|
||||||
|
# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
|
||||||
|
# PROP Ignore_Export_Lib 0
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
RSC=rc.exe
|
||||||
|
# ADD BASE RSC /l 0x409 /d "$(CePlatform)" /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "UNICODE" /d "_UNICODE" /d "DEBUG" /d "_X86_" /d "x86" /d "_i386_" /r
|
||||||
|
# ADD RSC /l 0x409 /d "$(CePlatform)" /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "UNICODE" /d "_UNICODE" /d "DEBUG" /d "_X86_" /d "x86" /d "_i386_" /r
|
||||||
|
CPP=cl.exe
|
||||||
|
# ADD BASE CPP /nologo /W3 /Zi /Od /D "DEBUG" /D "_i386_" /D UNDER_CE=$(CEVersion) /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "i_386_" /D "UNICODE" /D "_UNICODE" /D "_X86_" /D "x86" /Gs8192 @extra_cppflags@ /GF /c
|
||||||
|
# ADD CPP /nologo /W3 /Zi /Od /I "." /I ".." /D "DEBUG" /D "_i386_" /D UNDER_CE=$(CEVersion) /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "i_386_" /D "UNICODE" /D "_UNICODE" /D "_X86_" /D "x86" /D "__NO_SYSTEM_INCLUDES" /Gs8192 @extra_cppflags@ /GF /c
|
||||||
|
# SUBTRACT CPP
|
||||||
|
MTL=midl.exe
|
||||||
|
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
|
||||||
|
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo
|
||||||
|
LINK32=link.exe
|
||||||
|
# ADD BASE LINK32 libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@sd.lib commctrl.lib coredll.lib $(CEx86Corelibc) /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /debug /nodefaultlib:"OLDNAMES.lib" /nodefaultlib:$(CENoDefaultLib) /subsystem:$(CESubsystem) /MACHINE:IX86 /libpath:"@lib_debug_dest@_EMU"
|
||||||
|
# ADD LINK32 libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@sd.lib commctrl.lib coredll.lib $(CEx86Corelibc) /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /debug /nodefaultlib:"OLDNAMES.lib" /nodefaultlib:$(CENoDefaultLib) /out:"Debug_EMU/@project_name@.exe" /subsystem:$(CESubsystem) /MACHINE:IX86 /libpath:"@lib_debug_dest@_EMU"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "@project_name@ - Win32 (WCE ARMV4) Release"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 0
|
||||||
|
# PROP BASE Output_Dir "@lib_rel_dest@_ARMV4"
|
||||||
|
# PROP BASE Intermediate_Dir "Release_ARMV4/@project_name@"
|
||||||
|
# PROP BASE CPU_ID "{ECBEA43D-CD7B-4852-AD55-D4227B5D624B}"
|
||||||
|
# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 0
|
||||||
|
# PROP Use_Debug_Libraries 0
|
||||||
|
# PROP Output_Dir "@lib_rel_dest@_ARMV4"
|
||||||
|
# PROP Intermediate_Dir "Release_ARMV4/@project_name@"
|
||||||
|
# PROP CPU_ID "{ECBEA43D-CD7B-4852-AD55-D4227B5D624B}"
|
||||||
|
# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
RSC=rc.exe
|
||||||
|
# ADD BASE RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "NDEBUG" /d "UNICODE" /d "_UNICODE" /d "$(CePlatform)" /d "ARM" /d "_ARM_" /d "ARMV4" /r
|
||||||
|
# ADD RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "NDEBUG" /d "UNICODE" /d "_UNICODE" /d "$(CePlatform)" /d "ARM" /d "_ARM_" /d "ARMV4" /r
|
||||||
|
CPP=clarm.exe
|
||||||
|
# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "ARM" /D "_ARM_" /D "ARMV4" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /O2 /M$(CECrtMT) @extra_cppflags@ /c
|
||||||
|
# ADD CPP /nologo /W3 /I "." /I ".." /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "ARM" /D "_ARM_" /D "ARMV4" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /O2 /M$(CECrtMT) @extra_cppflags@ /c
|
||||||
|
# SUBTRACT CPP
|
||||||
|
MTL=midl.exe
|
||||||
|
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
|
||||||
|
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo
|
||||||
|
LINK32=link.exe
|
||||||
|
# ADD BASE LINK32 libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@s.lib commctrl.lib coredll.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /align:"4096" /MACHINE:ARM /libpath:"@lib_rel_dest@_ARMV4"
|
||||||
|
# ADD LINK32 libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@s.lib commctrl.lib coredll.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /align:"4096" /MACHINE:ARM /libpath:"@lib_rel_dest@_ARMV4"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "@project_name@ - Win32 (WCE ARMV4) Debug"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 1
|
||||||
|
# PROP BASE Output_Dir "@lib_debug_dest@_ARMV4"
|
||||||
|
# PROP BASE Intermediate_Dir "Debug_ARMV4/@project_name@"
|
||||||
|
# PROP BASE CPU_ID "{ECBEA43D-CD7B-4852-AD55-D4227B5D624B}"
|
||||||
|
# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 0
|
||||||
|
# PROP Use_Debug_Libraries 1
|
||||||
|
# PROP Output_Dir "@lib_debug_dest@_ARMV4"
|
||||||
|
# PROP Intermediate_Dir "Debug_ARMV4/@project_name@"
|
||||||
|
# PROP CPU_ID "{ECBEA43D-CD7B-4852-AD55-D4227B5D624B}"
|
||||||
|
# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
RSC=rc.exe
|
||||||
|
# ADD BASE RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "DEBUG" /d "UNICODE" /d "_UNICODE" /d "$(CePlatform)" /d "ARM" /d "_ARM_" /d "ARMV4" /r
|
||||||
|
# ADD RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "DEBUG" /d "UNICODE" /d "_UNICODE" /d "$(CePlatform)" /d "ARM" /d "_ARM_" /d "ARMV4" /r
|
||||||
|
CPP=clarm.exe
|
||||||
|
# ADD BASE CPP /nologo /W3 /Zi /Od /D "DEBUG" /D "ARM" /D "_ARM_" /D "ARMV4" /D UNDER_CE=$(CEVersion) /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "UNICODE" /D "_UNICODE" /M$(CECrtMTDebug) @extra_cppflags@ /c
|
||||||
|
# ADD CPP /nologo /W3 /Zi /Od /I "." /I ".." /D "DEBUG" /D "ARM" /D "_ARM_" /D "ARMV4" /D UNDER_CE=$(CEVersion) /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "UNICODE" /D "_UNICODE" /M$(CECrtMTDebug) @extra_cppflags@ /c
|
||||||
|
# SUBTRACT CPP
|
||||||
|
MTL=midl.exe
|
||||||
|
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
|
||||||
|
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo
|
||||||
|
LINK32=link.exe
|
||||||
|
# ADD BASE LINK32 libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@sd.lib commctrl.lib coredll.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /debug /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /align:"4096" /MACHINE:ARM /libpath:"@lib_debug_dest@_ARMV4"
|
||||||
|
# ADD LINK32 libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@sd.lib commctrl.lib coredll.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /debug /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /align:"4096" /MACHINE:ARM /libpath:"@lib_debug_dest@_ARMV4"
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
# Begin Target
|
||||||
|
|
||||||
|
# Name "@project_name@ - Win32 (WCE emulator) Release"
|
||||||
|
# Name "@project_name@ - Win32 (WCE emulator) Debug"
|
||||||
|
# Name "@project_name@ - Win32 (WCE ARMV4) Release"
|
||||||
|
# Name "@project_name@ - Win32 (WCE ARMV4) Debug"
|
||||||
|
|
||||||
|
# Begin Group "Files"
|
||||||
|
|
||||||
|
@SOURCE_FILES@
|
||||||
|
|
||||||
|
# End Group
|
||||||
|
|
||||||
|
# End Target
|
||||||
|
# End Project
|
||||||
433
build_wince/app_vcproj.src
Normal file
433
build_wince/app_vcproj.src
Normal file
@@ -0,0 +1,433 @@
|
|||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<VisualStudioProject
|
||||||
|
ProjectType="Visual C++"
|
||||||
|
Version="8.00"
|
||||||
|
Name="@project_name@"
|
||||||
|
ProjectGUID="{@PROJ_GUID@}"
|
||||||
|
>
|
||||||
|
<Platforms>
|
||||||
|
<Platform
|
||||||
|
Name="Smartphone 2003 (ARMV4)"
|
||||||
|
/>
|
||||||
|
<Platform
|
||||||
|
Name="Pocket PC 2003 (ARMV4)"
|
||||||
|
/>
|
||||||
|
</Platforms>
|
||||||
|
<ToolFiles>
|
||||||
|
</ToolFiles>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|Smartphone 2003 (ARMV4)"
|
||||||
|
OutputDirectory="$(ConfigurationName)_Smartphone2003_ARMV4\@project_name@"
|
||||||
|
IntermediateDirectory="$(ConfigurationName)_Smartphone2003_ARMV4\@project_name@"
|
||||||
|
ConfigurationType="1"
|
||||||
|
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
|
||||||
|
UseOfMFC="0"
|
||||||
|
ATLMinimizesCRunTimeLibraryUsage="false"
|
||||||
|
CharacterSet="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
PreprocessorDefinitions="_DEBUG"
|
||||||
|
MkTypLibCompatible="true"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
TargetEnvironment="1"
|
||||||
|
TypeLibraryName="$(ConfigurationName)_Smartphone2003_ARMV4/@project_name@.tlb"
|
||||||
|
HeaderFileName=""
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
ExecutionBucket="7"
|
||||||
|
Optimization="0"
|
||||||
|
AdditionalIncludeDirectories=".,.."
|
||||||
|
PreprocessorDefinitions="DEBUG;ARM;_ARM_;ARMV4;UNDER_CE=$(CEVER);_WIN32_WCE=$(CEVER);$(CePlatform);UNICODE;__NO_SYSTEM_INCLUDES;@extra_cppflags@"
|
||||||
|
RuntimeLibrary="1"
|
||||||
|
PrecompiledHeaderFile="$(ConfigurationName)_Smartphone2003_ARMV4/@project_name@.pch"
|
||||||
|
AssemblerListingLocation="$(ConfigurationName)_Smartphone2003_ARMV4/"
|
||||||
|
ObjectFile="$(ConfigurationName)_Smartphone2003_ARMV4\@project_name@/"
|
||||||
|
ProgramDataBaseFileName="$(ConfigurationName)_Smartphone2003_ARMV4/"
|
||||||
|
WarningLevel="3"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
AdditionalOptions="/r "
|
||||||
|
PreprocessorDefinitions="UNDER_CE=$(CEVER),_WIN32_WCE=$(CEVER),DEBUG,UNICODE,_UNICODE,$(CePlatform),ARM,_ARM_,ARMV4"
|
||||||
|
Culture="1033"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
AdditionalOptions="/ALIGN:4096 /subsystem:$(CESubsystem) /MACHINE:ARM "
|
||||||
|
AdditionalDependencies="libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@sd.lib commctrl.lib coredll.lib secchk.lib ccrtrtti.lib"
|
||||||
|
OutputFile="$(ConfigurationName)_Smartphone2003_ARMV4/@project_name@.exe"
|
||||||
|
LinkIncremental="2"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
AdditionalLibraryDirectories="$(ConfigurationName)_Smartphone2003_ARMV4"
|
||||||
|
IgnoreDefaultLibraryNames="$(CENoDefaultLib)"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
ProgramDatabaseFile="$(ConfigurationName)_Smartphone2003_ARMV4/@project_name@.pdb"
|
||||||
|
StackReserveSize="65536"
|
||||||
|
StackCommitSize="4096"
|
||||||
|
EntryPointSymbol="WinMainCRTStartup"
|
||||||
|
BaseAddress="0x00010000"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
OutputFile="$(ConfigurationName)_Smartphone2003_ARMV4/@project_name@.bsc"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCodeSignTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
<DeploymentTool
|
||||||
|
ForceDirty="-1"
|
||||||
|
RemoteDirectory=""
|
||||||
|
RegisterOutput="0"
|
||||||
|
AdditionalFiles=""
|
||||||
|
/>
|
||||||
|
<DebuggerTool
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|Pocket PC 2003 (ARMV4)"
|
||||||
|
OutputDirectory="$(ConfigurationName)_PocketPC2003_ARMV4\@project_name@"
|
||||||
|
IntermediateDirectory="$(ConfigurationName)_PocketPC2003_ARMV4\@project_name@"
|
||||||
|
ConfigurationType="1"
|
||||||
|
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
|
||||||
|
UseOfMFC="0"
|
||||||
|
ATLMinimizesCRunTimeLibraryUsage="false"
|
||||||
|
CharacterSet="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
PreprocessorDefinitions="_DEBUG"
|
||||||
|
MkTypLibCompatible="true"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
TargetEnvironment="1"
|
||||||
|
TypeLibraryName="$(ConfigurationName)_PocketPC2003_ARMV4/@project_name@.tlb"
|
||||||
|
HeaderFileName=""
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
ExecutionBucket="7"
|
||||||
|
Optimization="0"
|
||||||
|
AdditionalIncludeDirectories=".,.."
|
||||||
|
PreprocessorDefinitions="DEBUG;ARM;_ARM_;ARMV4;UNDER_CE=$(CEVER);_WIN32_WCE=$(CEVER);$(CePlatform);UNICODE;__NO_SYSTEM_INCLUDES;@extra_cppflags@"
|
||||||
|
RuntimeLibrary="1"
|
||||||
|
PrecompiledHeaderFile="$(ConfigurationName)_PocketPC2003_ARMV4/@project_name@.pch"
|
||||||
|
AssemblerListingLocation="$(ConfigurationName)_PocketPC2003_ARMV4/"
|
||||||
|
ObjectFile="$(ConfigurationName)_PocketPC2003_ARMV4\@project_name@/"
|
||||||
|
ProgramDataBaseFileName="$(ConfigurationName)_PocketPC2003_ARMV4/"
|
||||||
|
WarningLevel="3"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
AdditionalOptions="/r "
|
||||||
|
PreprocessorDefinitions="UNDER_CE=$(CEVER),_WIN32_WCE=$(CEVER),DEBUG,UNICODE,_UNICODE,$(CePlatform),ARM,_ARM_,ARMV4"
|
||||||
|
Culture="1033"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
AdditionalOptions="/ALIGN:4096 /subsystem:$(CESubsystem) /MACHINE:ARM "
|
||||||
|
AdditionalDependencies="libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@sd.lib commctrl.lib coredll.lib secchk.lib ccrtrtti.lib"
|
||||||
|
OutputFile="$(ConfigurationName)_PocketPC2003_ARMV4/@project_name@.exe"
|
||||||
|
LinkIncremental="2"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
AdditionalLibraryDirectories="$(ConfigurationName)_PocketPC2003_ARMV4"
|
||||||
|
IgnoreDefaultLibraryNames="$(CENoDefaultLib)"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
ProgramDatabaseFile="$(ConfigurationName)_PocketPC2003_ARMV4/@project_name@.pdb"
|
||||||
|
StackReserveSize="65536"
|
||||||
|
StackCommitSize="4096"
|
||||||
|
EntryPointSymbol="WinMainCRTStartup"
|
||||||
|
BaseAddress="0x00010000"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
OutputFile="$(ConfigurationName)_PocketPC2003_ARMV4/@project_name@.bsc"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCodeSignTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
<DeploymentTool
|
||||||
|
ForceDirty="-1"
|
||||||
|
RemoteDirectory=""
|
||||||
|
RegisterOutput="0"
|
||||||
|
AdditionalFiles=""
|
||||||
|
/>
|
||||||
|
<DebuggerTool
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|Smartphone 2003 (ARMV4)"
|
||||||
|
OutputDirectory="$(ConfigurationName)_Smartphone2003_ARMV4\@project_name@"
|
||||||
|
IntermediateDirectory="$(ConfigurationName)_Smartphone2003_ARMV4\@project_name@"
|
||||||
|
ConfigurationType="1"
|
||||||
|
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
|
||||||
|
UseOfMFC="0"
|
||||||
|
ATLMinimizesCRunTimeLibraryUsage="false"
|
||||||
|
CharacterSet="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
PreprocessorDefinitions="NDEBUG"
|
||||||
|
MkTypLibCompatible="true"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
TargetEnvironment="1"
|
||||||
|
TypeLibraryName="$(ConfigurationName)_Smartphone2003_ARMV4/@project_name@.tlb"
|
||||||
|
HeaderFileName=""
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
ExecutionBucket="7"
|
||||||
|
Optimization="2"
|
||||||
|
InlineFunctionExpansion="1"
|
||||||
|
AdditionalIncludeDirectories=".,.."
|
||||||
|
PreprocessorDefinitions="_WIN32_WCE=$(CEVER);$(CePlatform);ARM;_ARM_;ARMV4;UNDER_CE=$(CEVER);UNICODE;NDEBUG;__NO_SYSTEM_INCLUDES;@extra_cppflags@"
|
||||||
|
StringPooling="true"
|
||||||
|
RuntimeLibrary="0"
|
||||||
|
EnableFunctionLevelLinking="true"
|
||||||
|
PrecompiledHeaderFile="$(ConfigurationName)_Smartphone2003_ARMV4/@project_name@.pch"
|
||||||
|
AssemblerListingLocation="$(ConfigurationName)_Smartphone2003_ARMV4/"
|
||||||
|
ObjectFile="$(ConfigurationName)_Smartphone2003_ARMV4\@project_name@/"
|
||||||
|
ProgramDataBaseFileName="$(ConfigurationName)_Smartphone2003_ARMV4/"
|
||||||
|
WarningLevel="3"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
AdditionalOptions="/r "
|
||||||
|
PreprocessorDefinitions="UNDER_CE=$(CEVER),_WIN32_WCE=$(CEVER),NDEBUG,UNICODE,_UNICODE,$(CePlatform),ARM,_ARM_,ARMV4"
|
||||||
|
Culture="1033"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
AdditionalOptions="/ALIGN:4096 /subsystem:$(CESubsystem) /MACHINE:ARM "
|
||||||
|
AdditionalDependencies="libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@s.lib commctrl.lib coredll.lib secchk.lib ccrtrtti.lib"
|
||||||
|
OutputFile="$(ConfigurationName)_Smartphone2003_ARMV4/@project_name@.exe"
|
||||||
|
LinkIncremental="1"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
AdditionalLibraryDirectories="$(ConfigurationName)_Smartphone2003_ARMV4"
|
||||||
|
IgnoreDefaultLibraryNames="$(CENoDefaultLib)"
|
||||||
|
ProgramDatabaseFile="$(ConfigurationName)_Smartphone2003_ARMV4/@project_name@.pdb"
|
||||||
|
StackReserveSize="65536"
|
||||||
|
StackCommitSize="4096"
|
||||||
|
EntryPointSymbol="WinMainCRTStartup"
|
||||||
|
BaseAddress="0x00010000"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
OutputFile="$(ConfigurationName)_Smartphone2003_ARMV4/@project_name@.bsc"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCodeSignTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
<DeploymentTool
|
||||||
|
ForceDirty="-1"
|
||||||
|
RemoteDirectory=""
|
||||||
|
RegisterOutput="0"
|
||||||
|
AdditionalFiles=""
|
||||||
|
/>
|
||||||
|
<DebuggerTool
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|Pocket PC 2003 (ARMV4)"
|
||||||
|
OutputDirectory="$(ConfigurationName)_PocketPC2003_ARMV4\@project_name@"
|
||||||
|
IntermediateDirectory="$(ConfigurationName)_PocketPC2003_ARMV4\@project_name@"
|
||||||
|
ConfigurationType="1"
|
||||||
|
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
|
||||||
|
UseOfMFC="0"
|
||||||
|
ATLMinimizesCRunTimeLibraryUsage="false"
|
||||||
|
CharacterSet="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
PreprocessorDefinitions="NDEBUG"
|
||||||
|
MkTypLibCompatible="true"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
TargetEnvironment="1"
|
||||||
|
TypeLibraryName="$(ConfigurationName)_PocketPC2003_ARMV4/@project_name@.tlb"
|
||||||
|
HeaderFileName=""
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
ExecutionBucket="7"
|
||||||
|
Optimization="2"
|
||||||
|
InlineFunctionExpansion="1"
|
||||||
|
AdditionalIncludeDirectories=".,.."
|
||||||
|
PreprocessorDefinitions="_WIN32_WCE=$(CEVER);$(CePlatform);ARM;_ARM_;ARMV4;UNDER_CE=$(CEVER);UNICODE;NDEBUG;__NO_SYSTEM_INCLUDES;@extra_cppflags@"
|
||||||
|
StringPooling="true"
|
||||||
|
RuntimeLibrary="0"
|
||||||
|
EnableFunctionLevelLinking="true"
|
||||||
|
PrecompiledHeaderFile="$(ConfigurationName)_PocketPC2003_ARMV4/@project_name@.pch"
|
||||||
|
AssemblerListingLocation="$(ConfigurationName)_PocketPC2003_ARMV4/"
|
||||||
|
ObjectFile="$(ConfigurationName)_PocketPC2003_ARMV4\@project_name@/"
|
||||||
|
ProgramDataBaseFileName="$(ConfigurationName)_PocketPC2003_ARMV4/"
|
||||||
|
WarningLevel="3"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
AdditionalOptions="/r "
|
||||||
|
PreprocessorDefinitions="UNDER_CE=$(CEVER),_WIN32_WCE=$(CEVER),NDEBUG,UNICODE,_UNICODE,$(CePlatform),ARM,_ARM_,ARMV4"
|
||||||
|
Culture="1033"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
AdditionalOptions="/ALIGN:4096 /subsystem:$(CESubsystem) /MACHINE:ARM "
|
||||||
|
AdditionalDependencies="libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@s.lib commctrl.lib coredll.lib secchk.lib ccrtrtti.lib"
|
||||||
|
OutputFile="$(ConfigurationName)_PocketPC2003_ARMV4/@project_name@.exe"
|
||||||
|
LinkIncremental="1"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
AdditionalLibraryDirectories="$(ConfigurationName)_PocketPC2003_ARMV4"
|
||||||
|
IgnoreDefaultLibraryNames="$(CENoDefaultLib)"
|
||||||
|
ProgramDatabaseFile="$(ConfigurationName)_PocketPC2003_ARMV4/@project_name@.pdb"
|
||||||
|
StackReserveSize="65536"
|
||||||
|
StackCommitSize="4096"
|
||||||
|
EntryPointSymbol="WinMainCRTStartup"
|
||||||
|
BaseAddress="0x00010000"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
OutputFile="$(ConfigurationName)_PocketPC2003_ARMV4/@project_name@.bsc"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCodeSignTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
<DeploymentTool
|
||||||
|
ForceDirty="-1"
|
||||||
|
RemoteDirectory=""
|
||||||
|
RegisterOutput="0"
|
||||||
|
AdditionalFiles=""
|
||||||
|
/>
|
||||||
|
<DebuggerTool
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
</References>
|
||||||
|
<Files>
|
||||||
|
<Filter
|
||||||
|
Name="Files"
|
||||||
|
>
|
||||||
|
@SOURCE_FILES@
|
||||||
|
</Filter>
|
||||||
|
</Files>
|
||||||
|
<Globals>
|
||||||
|
</Globals>
|
||||||
|
</VisualStudioProject>
|
||||||
276
build_wince/clib_port.h
Normal file
276
build_wince/clib_port.h
Normal file
@@ -0,0 +1,276 @@
|
|||||||
|
/* DO NOT EDIT: automatically built from dist/clib_port.in. */
|
||||||
|
/*
|
||||||
|
* Minimum/maximum values for various types.
|
||||||
|
*/
|
||||||
|
#ifndef UINT16_MAX /* Maximum 16-bit unsigned. */
|
||||||
|
#define UINT16_MAX 65535
|
||||||
|
#endif
|
||||||
|
#ifndef UINT32_MAX /* Maximum 32-bit unsigned. */
|
||||||
|
#define UINT32_MAX 4294967295U
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef INT_MAX
|
||||||
|
#if SIZEOF_INT == 4
|
||||||
|
#define INT_MAX 2147483647
|
||||||
|
#endif
|
||||||
|
#if SIZEOF_INT == 8
|
||||||
|
#define INT_MAX 9223372036854775807
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef INT_MIN /* minimum (signed) int value */
|
||||||
|
#define INT_MIN (-INT_MAX-1)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef UINT_MAX /* maximum (signed) int value */
|
||||||
|
#if SIZEOF_INT == 4
|
||||||
|
#define UINT_MAX 4294967295U
|
||||||
|
#endif
|
||||||
|
#if SIZEOF_INT == 8
|
||||||
|
#define UINT_MAX 18446744073709551615U
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef LONG_MAX /* maximum (signed) long value */
|
||||||
|
#if SIZEOF_LONG == 4
|
||||||
|
#define LONG_MAX 2147483647
|
||||||
|
#endif
|
||||||
|
#if SIZEOF_LONG == 8
|
||||||
|
#define LONG_MAX 9223372036854775807L
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef LONG_MIN /* minimum (signed) long value */
|
||||||
|
#define LONG_MIN (-LONG_MAX-1)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef ULONG_MAX /* maximum (unsigned) long value */
|
||||||
|
#if SIZEOF_LONG == 4
|
||||||
|
#define ULONG_MAX 4294967295U
|
||||||
|
#endif
|
||||||
|
#if SIZEOF_LONG == 8
|
||||||
|
#define ULONG_MAX 18446744073709551615UL
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(HAVE_64BIT_TYPES)
|
||||||
|
/*
|
||||||
|
* Override the system's 64-bit min/max constants. AIX's 32-bit compiler can
|
||||||
|
* handle 64-bit values, but the system's constants don't include the LL/ULL
|
||||||
|
* suffix, and so can't be compiled using the 32-bit compiler.
|
||||||
|
*/
|
||||||
|
#undef INT64_MAX
|
||||||
|
#undef INT64_MIN
|
||||||
|
#undef UINT64_MAX
|
||||||
|
|
||||||
|
#ifdef DB_WIN32
|
||||||
|
#define INT64_MAX _I64_MAX
|
||||||
|
#define INT64_MIN _I64_MIN
|
||||||
|
#define UINT64_MAX _UI64_MAX
|
||||||
|
#else
|
||||||
|
#define INT64_MAX 9223372036854775807LL
|
||||||
|
#define INT64_MIN (-INT64_MAX-1)
|
||||||
|
#define UINT64_MAX 18446744073709551615ULL
|
||||||
|
#endif /* DB_WIN32 */
|
||||||
|
|
||||||
|
#define INT64_FMT "%I64d"
|
||||||
|
#define UINT64_FMT "%I64u"
|
||||||
|
#endif /* HAVE_64BIT_TYPES */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Exit success/failure macros.
|
||||||
|
*/
|
||||||
|
#ifndef HAVE_EXIT_SUCCESS
|
||||||
|
#define EXIT_FAILURE 1
|
||||||
|
#define EXIT_SUCCESS 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* File modes.
|
||||||
|
*/
|
||||||
|
#ifdef DB_WIN32
|
||||||
|
#ifndef S_IREAD /* WinCE doesn't have S_IREAD. */
|
||||||
|
#define S_IREAD 0
|
||||||
|
#endif
|
||||||
|
#ifndef S_IWRITE /* WinCE doesn't have S_IWRITE. */
|
||||||
|
#define S_IWRITE 0
|
||||||
|
#endif
|
||||||
|
#ifndef S_IRUSR
|
||||||
|
#define S_IRUSR S_IREAD /* R for owner */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IWUSR
|
||||||
|
#define S_IWUSR S_IWRITE /* W for owner */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IXUSR
|
||||||
|
#define S_IXUSR 0 /* X for owner */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IRGRP
|
||||||
|
#define S_IRGRP 0 /* R for group */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IWGRP
|
||||||
|
#define S_IWGRP 0 /* W for group */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IXGRP
|
||||||
|
#define S_IXGRP 0 /* X for group */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IROTH
|
||||||
|
#define S_IROTH 0 /* R for other */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IWOTH
|
||||||
|
#define S_IWOTH 0 /* W for other */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IXOTH
|
||||||
|
#define S_IXOTH 0 /* X for other */
|
||||||
|
#endif
|
||||||
|
#else /* !DB_WIN32 */
|
||||||
|
#ifndef S_IRUSR
|
||||||
|
#define S_IRUSR 0000400 /* R for owner */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IWUSR
|
||||||
|
#define S_IWUSR 0000200 /* W for owner */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IXUSR
|
||||||
|
#define S_IXUSR 0000100 /* X for owner */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IRGRP
|
||||||
|
#define S_IRGRP 0000040 /* R for group */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IWGRP
|
||||||
|
#define S_IWGRP 0000020 /* W for group */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IXGRP
|
||||||
|
#define S_IXGRP 0000010 /* X for group */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IROTH
|
||||||
|
#define S_IROTH 0000004 /* R for other */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IWOTH
|
||||||
|
#define S_IWOTH 0000002 /* W for other */
|
||||||
|
#endif
|
||||||
|
#ifndef S_IXOTH
|
||||||
|
#define S_IXOTH 0000001 /* X for other */
|
||||||
|
#endif
|
||||||
|
#endif /* !DB_WIN32 */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Don't step on the namespace. Other libraries may have their own
|
||||||
|
* implementations of these functions, we don't want to use their
|
||||||
|
* implementations or force them to use ours based on the load order.
|
||||||
|
*/
|
||||||
|
#ifndef HAVE_ATOI
|
||||||
|
#define atoi __db_Catoi
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_ATOL
|
||||||
|
#define atol __db_Catol
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_FCLOSE
|
||||||
|
#define fclose __db_Cfclose
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_FGETC
|
||||||
|
#define fgetc __db_Cfgetc
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_FGETS
|
||||||
|
#define fgets __db_Cfgets
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_FOPEN
|
||||||
|
#define fopen __db_Cfopen
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_FWRITE
|
||||||
|
#define fwrite __db_Cfwrite
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_GETADDRINFO
|
||||||
|
#define freeaddrinfo(a) __db_Cfreeaddrinfo(a)
|
||||||
|
#define getaddrinfo(a, b, c, d) __db_Cgetaddrinfo(a, b, c, d)
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_GETCWD
|
||||||
|
#define getcwd __db_Cgetcwd
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_GETOPT
|
||||||
|
#define getopt __db_Cgetopt
|
||||||
|
#define optarg __db_Coptarg
|
||||||
|
#define opterr __db_Copterr
|
||||||
|
#define optind __db_Coptind
|
||||||
|
#define optopt __db_Coptopt
|
||||||
|
#define optreset __db_Coptreset
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_ISALPHA
|
||||||
|
#define isalpha __db_Cisalpha
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_ISDIGIT
|
||||||
|
#define isdigit __db_Cisdigit
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_ISPRINT
|
||||||
|
#define isprint __db_Cisprint
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_ISSPACE
|
||||||
|
#define isspace __db_Cisspace
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_LOCALTIME
|
||||||
|
#define localtime __db_Clocaltime
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_MEMCMP
|
||||||
|
#define memcmp __db_Cmemcmp
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_MEMCPY
|
||||||
|
#define memcpy __db_Cmemcpy
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_MEMMOVE
|
||||||
|
#define memmove __db_Cmemmove
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_PRINTF
|
||||||
|
#define printf __db_Cprintf
|
||||||
|
#define fprintf __db_Cfprintf
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_QSORT
|
||||||
|
#define qsort __db_Cqsort
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_RAISE
|
||||||
|
#define raise __db_Craise
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_RAND
|
||||||
|
#define rand __db_Crand
|
||||||
|
#define srand __db_Csrand
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_SNPRINTF
|
||||||
|
#define snprintf __db_Csnprintf
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_STRCASECMP
|
||||||
|
#define strcasecmp __db_Cstrcasecmp
|
||||||
|
#define strncasecmp __db_Cstrncasecmp
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_STRCAT
|
||||||
|
#define strcat __db_Cstrcat
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_STRCHR
|
||||||
|
#define strchr __db_Cstrchr
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_STRDUP
|
||||||
|
#define strdup __db_Cstrdup
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_STRERROR
|
||||||
|
#define strerror __db_Cstrerror
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_STRNCAT
|
||||||
|
#define strncat __db_Cstrncat
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_STRNCMP
|
||||||
|
#define strncmp __db_Cstrncmp
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_STRRCHR
|
||||||
|
#define strrchr __db_Cstrrchr
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_STRSEP
|
||||||
|
#define strsep __db_Cstrsep
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_STRTOL
|
||||||
|
#define strtol __db_Cstrtol
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_STRTOUL
|
||||||
|
#define strtoul __db_Cstrtoul
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_TIME
|
||||||
|
#define time __db_Ctime
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_VSNPRINTF
|
||||||
|
#define vsnprintf __db_Cvsnprintf
|
||||||
|
#endif
|
||||||
2526
build_wince/db.h
Normal file
2526
build_wince/db.h
Normal file
File diff suppressed because it is too large
Load Diff
585
build_wince/db_config.h
Normal file
585
build_wince/db_config.h
Normal file
@@ -0,0 +1,585 @@
|
|||||||
|
/* DO NOT EDIT: automatically built by dist/s_windows. */
|
||||||
|
/* Define to 1 if you want to build a version for running the test suite. */
|
||||||
|
/* #undef CONFIG_TEST */
|
||||||
|
|
||||||
|
/* We use DB_WIN32 much as one would use _WIN32 -- to specify that we're using
|
||||||
|
an operating system environment that supports Win32 calls and semantics. We
|
||||||
|
don't use _WIN32 because Cygwin/GCC also defines _WIN32, even though
|
||||||
|
Cygwin/GCC closely emulates the Unix environment. */
|
||||||
|
#define DB_WIN32 1
|
||||||
|
|
||||||
|
/* Define to 1 if you want a debugging version. */
|
||||||
|
#if defined(_DEBUG)
|
||||||
|
#if !defined(DEBUG)
|
||||||
|
#define DEBUG 1
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Define to 1 if you want a version that logs read operations. */
|
||||||
|
/* #undef DEBUG_ROP */
|
||||||
|
|
||||||
|
/* Define to 1 if you want a version that logs write operations. */
|
||||||
|
/* #undef DEBUG_WOP */
|
||||||
|
|
||||||
|
/* Define to 1 if you want a version with run-time diagnostic checking. */
|
||||||
|
/* #undef DIAGNOSTIC */
|
||||||
|
|
||||||
|
/* Define to 1 if 64-bit types are available. */
|
||||||
|
#define HAVE_64BIT_TYPES 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `abort' function. */
|
||||||
|
/* #undef HAVE_ABORT */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `atoi' function. */
|
||||||
|
#define HAVE_ATOI 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `atol' function. */
|
||||||
|
#define HAVE_ATOL 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `backtrace' function. */
|
||||||
|
/* #undef HAVE_BACKTRACE */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `backtrace_symbols' function. */
|
||||||
|
/* #undef HAVE_BACKTRACE_SYMBOLS */
|
||||||
|
|
||||||
|
/* Define to 1 if building BREW. */
|
||||||
|
/* #undef HAVE_BREW */
|
||||||
|
|
||||||
|
/* Define to 1 if building on BREW (SDK2). */
|
||||||
|
/* #undef HAVE_BREW_SDK2 */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `clock_gettime' function. */
|
||||||
|
/* #undef HAVE_CLOCK_GETTIME */
|
||||||
|
|
||||||
|
/* Define to 1 if clock_gettime supports CLOCK_MONOTONIC. */
|
||||||
|
/* #undef HAVE_CLOCK_MONOTONIC */
|
||||||
|
|
||||||
|
/* Define to 1 if Berkeley DB release includes strong cryptography. */
|
||||||
|
#ifndef HAVE_SMALLBUILD
|
||||||
|
#define HAVE_CRYPTO 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `ctime_r' function. */
|
||||||
|
/* #undef HAVE_CTIME_R */
|
||||||
|
|
||||||
|
/* Define to 1 if ctime_r takes a buffer length as a third argument. */
|
||||||
|
/* #undef HAVE_CTIME_R_3ARG */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `directio' function. */
|
||||||
|
/* #undef HAVE_DIRECTIO */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
|
||||||
|
*/
|
||||||
|
/* #undef HAVE_DIRENT_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <dlfcn.h> header file. */
|
||||||
|
/* #undef HAVE_DLFCN_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <execinfo.h> header file. */
|
||||||
|
/* #undef HAVE_EXECINFO_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have EXIT_SUCCESS/EXIT_FAILURE #defines. */
|
||||||
|
#define HAVE_EXIT_SUCCESS 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fchmod' function. */
|
||||||
|
/* #undef HAVE_FCHMOD */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fclose' function. */
|
||||||
|
#define HAVE_FCLOSE 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fcntl' function. */
|
||||||
|
/* #undef HAVE_FCNTL */
|
||||||
|
|
||||||
|
/* Define to 1 if fcntl/F_SETFD denies child access to file descriptors. */
|
||||||
|
/* #undef HAVE_FCNTL_F_SETFD */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fdatasync' function. */
|
||||||
|
/* #undef HAVE_FDATASYNC */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fgetc' function. */
|
||||||
|
#define HAVE_FGETC 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fgets' function. */
|
||||||
|
#define HAVE_FGETS 1
|
||||||
|
|
||||||
|
/* Define to 1 if allocated filesystem blocks are not zeroed. */
|
||||||
|
#define HAVE_FILESYSTEM_NOTZERO 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fopen' function. */
|
||||||
|
#define HAVE_FOPEN 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `ftruncate' function. */
|
||||||
|
/* #undef HAVE_FTRUNCATE */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fwrite' function. */
|
||||||
|
#define HAVE_FWRITE 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getaddrinfo' function. */
|
||||||
|
/* #undef HAVE_GETADDRINFO */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getcwd' function. */
|
||||||
|
/* #undef HAVE_GETCWD */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getenv' function. */
|
||||||
|
/* #undef HAVE_GETENV */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getgid' function. */
|
||||||
|
/* #undef HAVE_GETGID */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getopt' function. */
|
||||||
|
/*
|
||||||
|
* Windows does not have the getopt function, but as Berkeley DB example
|
||||||
|
* programs require getopt, we handle it outside of this configuration.
|
||||||
|
*/
|
||||||
|
#define HAVE_GETOPT 1
|
||||||
|
|
||||||
|
/* Define to 1 if getopt supports the optreset variable. */
|
||||||
|
#define HAVE_GETOPT_OPTRESET 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getrusage' function. */
|
||||||
|
/* #undef HAVE_GETRUSAGE */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `gettimeofday' function. */
|
||||||
|
/* #undef HAVE_GETTIMEOFDAY */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getuid' function. */
|
||||||
|
/* #undef HAVE_GETUID */
|
||||||
|
|
||||||
|
/* Define to 1 if building Hash access method. */
|
||||||
|
#ifndef HAVE_SMALLBUILD
|
||||||
|
#define HAVE_HASH 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `hstrerror' function. */
|
||||||
|
/* #undef HAVE_HSTRERROR */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||||
|
/* #undef HAVE_INTTYPES_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `isalpha' function. */
|
||||||
|
#define HAVE_ISALPHA 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `isdigit' function. */
|
||||||
|
#define HAVE_ISDIGIT 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `isprint' function. */
|
||||||
|
#define HAVE_ISPRINT 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `localtime' function. */
|
||||||
|
/* #undef HAVE_LOCALTIME */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `isspace' function. */
|
||||||
|
#define HAVE_ISSPACE 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `memcmp' function. */
|
||||||
|
#define HAVE_MEMCMP 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `memcpy' function. */
|
||||||
|
#define HAVE_MEMCPY 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `memmove' function. */
|
||||||
|
#define HAVE_MEMMOVE 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <memory.h> header file. */
|
||||||
|
#define HAVE_MEMORY_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `mlock' function. */
|
||||||
|
/* #undef HAVE_MLOCK */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `mmap' function. */
|
||||||
|
/* #undef HAVE_MMAP */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `mprotect' function. */
|
||||||
|
/* #undef HAVE_MPROTECT */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `munlock' function. */
|
||||||
|
/* #undef HAVE_MUNLOCK */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `munmap' function. */
|
||||||
|
/* #undef HAVE_MUNMAP */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and 68K assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_68K_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the AIX _check_lock mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_AIX_CHECK_LOCK */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and Alpha assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_ALPHA_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and ARM assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_ARM_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the Apple/Darwin _spin_lock_try mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_DARWIN_SPIN_LOCK_TRY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the UNIX fcntl system call mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_FCNTL */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and PaRisc assembly language mutexes.
|
||||||
|
*/
|
||||||
|
/* #undef HAVE_MUTEX_HPPA_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the msem_XXX mutexes on HP-UX. */
|
||||||
|
/* #undef HAVE_MUTEX_HPPA_MSEM_INIT */
|
||||||
|
|
||||||
|
/* Define to 1 to use test-and-set mutexes with blocking mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_HYBRID */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and IA64 assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_IA64_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and MIPS assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_MIPS_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the msem_XXX mutexes on systems other than HP-UX. */
|
||||||
|
/* #undef HAVE_MUTEX_MSEM_INIT */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and PowerPC assembly language mutexes.
|
||||||
|
*/
|
||||||
|
/* #undef HAVE_MUTEX_PPC_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use POSIX 1003.1 pthread_XXX mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_PTHREADS */
|
||||||
|
|
||||||
|
/* Define to 1 to use Reliant UNIX initspin mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_RELIANTUNIX_INITSPIN */
|
||||||
|
|
||||||
|
/* Define to 1 to use the IBM C compiler and S/390 assembly language mutexes.
|
||||||
|
*/
|
||||||
|
/* #undef HAVE_MUTEX_S390_CC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and S/390 assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_S390_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the SCO compiler and x86 assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_SCO_X86_CC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the obsolete POSIX 1003.1 sema_XXX mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_SEMA_INIT */
|
||||||
|
|
||||||
|
/* Define to 1 to use the SGI XXX_lock mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_SGI_INIT_LOCK */
|
||||||
|
|
||||||
|
/* Define to 1 to use the Solaris _lock_XXX mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_SOLARIS_LOCK_TRY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the Solaris lwp threads mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_SOLARIS_LWP */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and Sparc assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_SPARC_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 if the Berkeley DB library should support mutexes. */
|
||||||
|
#define HAVE_MUTEX_SUPPORT 1
|
||||||
|
|
||||||
|
/* Define to 1 if mutexes hold system resources. */
|
||||||
|
/* #undef HAVE_MUTEX_SYSTEM_RESOURCES */
|
||||||
|
|
||||||
|
/* Define to 1 to configure mutexes intra-process only. */
|
||||||
|
/* #undef HAVE_MUTEX_THREAD_ONLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the CC compiler and Tru64 assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_TRU64_CC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the UNIX International mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_UI_THREADS */
|
||||||
|
|
||||||
|
/* Define to 1 to use the UTS compiler and assembly language mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_UTS_CC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use VMS mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_VMS */
|
||||||
|
|
||||||
|
/* Define to 1 to use VxWorks mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_VXWORKS */
|
||||||
|
|
||||||
|
/* Define to 1 to use the MSVC compiler and Windows mutexes. */
|
||||||
|
#define HAVE_MUTEX_WIN32 1
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and Windows mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_WIN32_GCC */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and 64-bit x86 assembly language
|
||||||
|
mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_X86_64_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 to use the GCC compiler and 32-bit x86 assembly language
|
||||||
|
mutexes. */
|
||||||
|
/* #undef HAVE_MUTEX_X86_GCC_ASSEMBLY */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
|
||||||
|
/* #undef HAVE_NDIR_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the O_DIRECT flag. */
|
||||||
|
/* #undef HAVE_O_DIRECT */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `pread' function. */
|
||||||
|
/* #undef HAVE_PREAD */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `printf' function. */
|
||||||
|
#define HAVE_PRINTF 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `pstat_getdynamic' function. */
|
||||||
|
/* #undef HAVE_PSTAT_GETDYNAMIC */
|
||||||
|
|
||||||
|
/* Define to 1 to configure Berkeley DB for POSIX pthread API. */
|
||||||
|
/* #undef HAVE_PTHREAD_API */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `pthread_yield' function. */
|
||||||
|
/* #undef HAVE_PTHREAD_YIELD */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `pwrite' function. */
|
||||||
|
/* #undef HAVE_PWRITE */
|
||||||
|
|
||||||
|
/* Define to 1 if building on QNX. */
|
||||||
|
/* #undef HAVE_QNX */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `qsort' function. */
|
||||||
|
#define HAVE_QSORT 1
|
||||||
|
|
||||||
|
/* Define to 1 if building Queue access method. */
|
||||||
|
#ifndef HAVE_SMALLBUILD
|
||||||
|
#define HAVE_QUEUE 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `raise' function. */
|
||||||
|
#define HAVE_RAISE 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `rand' function. */
|
||||||
|
#define HAVE_RAND 1
|
||||||
|
|
||||||
|
/* Define to 1 if building replication support. */
|
||||||
|
/* #undef HAVE_REPLICATION */
|
||||||
|
|
||||||
|
/* Define to 1 if building the Berkeley DB replication framework. */
|
||||||
|
/* #undef HAVE_REPLICATION_THREADS */
|
||||||
|
|
||||||
|
/* Define to 1 if building RPC client/server. */
|
||||||
|
/* #undef HAVE_RPC */
|
||||||
|
|
||||||
|
/* Define to 1 if building on S60. */
|
||||||
|
/* #undef HAVE_S60 */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `sched_yield' function. */
|
||||||
|
/* #undef HAVE_SCHED_YIELD */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `select' function. */
|
||||||
|
/* #undef HAVE_SELECT */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `setgid' function. */
|
||||||
|
/* #undef HAVE_SETGID */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `setuid' function. */
|
||||||
|
#define HAVE_SETUID 1
|
||||||
|
|
||||||
|
/* Define to 1 if shmctl/SHM_LOCK locks down shared memory segments. */
|
||||||
|
/* #undef HAVE_SHMCTL_SHM_LOCK */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `shmget' function. */
|
||||||
|
/* #undef HAVE_SHMGET */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `sigaction' function. */
|
||||||
|
/* #undef HAVE_SIGACTION */
|
||||||
|
|
||||||
|
/* Define to 1 if thread identifier type db_threadid_t is integral. */
|
||||||
|
#define HAVE_SIMPLE_THREAD_TYPE 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `snprintf' function. */
|
||||||
|
#define HAVE_SNPRINTF 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `stat' function. */
|
||||||
|
#define HAVE_STAT 1
|
||||||
|
|
||||||
|
/* Define to 1 if building statistics support. */
|
||||||
|
#define HAVE_STATISTICS 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <stdint.h> header file. */
|
||||||
|
/* #undef HAVE_STDINT_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||||
|
#define HAVE_STDLIB_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strcasecmp' function. */
|
||||||
|
#define HAVE_STRCASECMP 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strcat' function. */
|
||||||
|
#define HAVE_STRCAT 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strchr' function. */
|
||||||
|
#define HAVE_STRCHR 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strdup' function. */
|
||||||
|
/* #undef HAVE_STRDUP */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strerror' function. */
|
||||||
|
/* #undef HAVE_STRERROR */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strftime' function. */
|
||||||
|
/* #undef HAVE_STRFTIME */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <strings.h> header file. */
|
||||||
|
#define HAVE_STRINGS_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <string.h> header file. */
|
||||||
|
#define HAVE_STRING_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strncat' function. */
|
||||||
|
#define HAVE_STRNCAT 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strncmp' function. */
|
||||||
|
#define HAVE_STRNCMP 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strrchr' function. */
|
||||||
|
#define HAVE_STRRCHR 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strsep' function. */
|
||||||
|
/* #undef HAVE_STRSEP */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strtol' function. */
|
||||||
|
#define HAVE_STRTOL 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strtoul' function. */
|
||||||
|
#define HAVE_STRTOUL 1
|
||||||
|
|
||||||
|
/* Define to 1 if `st_blksize' is member of `struct stat'. */
|
||||||
|
/* #undef HAVE_STRUCT_STAT_ST_BLKSIZE */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `sysconf' function. */
|
||||||
|
/* #undef HAVE_SYSCONF */
|
||||||
|
|
||||||
|
/* Define to 1 if port includes files in the Berkeley DB source code. */
|
||||||
|
/* #undef HAVE_SYSTEM_INCLUDE_FILES */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
|
||||||
|
*/
|
||||||
|
/* #undef HAVE_SYS_DIR_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
|
||||||
|
*/
|
||||||
|
/* #undef HAVE_SYS_NDIR_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/select.h> header file. */
|
||||||
|
/* #undef HAVE_SYS_SELECT_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/socket.h> header file. */
|
||||||
|
/* #undef HAVE_SYS_SOCKET_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||||
|
#define HAVE_SYS_STAT_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/time.h> header file. */
|
||||||
|
/* #undef HAVE_SYS_TIME_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||||
|
#define HAVE_SYS_TYPES_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `time' function. */
|
||||||
|
/* #undef HAVE_TIME */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <unistd.h> header file. */
|
||||||
|
/* #undef HAVE_UNISTD_H */
|
||||||
|
|
||||||
|
/* Define to 1 if unlink of file with open file descriptors will fail. */
|
||||||
|
/* #undef HAVE_UNLINK_WITH_OPEN_FAILURE */
|
||||||
|
|
||||||
|
/* Define to 1 if port includes historic database upgrade support. */
|
||||||
|
/* #undef HAVE_UPGRADE_SUPPORT */
|
||||||
|
|
||||||
|
/* Define to 1 if building access method verification support. */
|
||||||
|
#ifndef HAVE_SMALLBUILD
|
||||||
|
#define HAVE_VERIFY 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `vsnprintf' function. */
|
||||||
|
#define HAVE_VSNPRINTF 1
|
||||||
|
|
||||||
|
/* Define to 1 if building VxWorks. */
|
||||||
|
/* #undef HAVE_VXWORKS */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `yield' function. */
|
||||||
|
/* #undef HAVE_YIELD */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `_fstati64' function. */
|
||||||
|
#define HAVE__FSTATI64 1
|
||||||
|
|
||||||
|
/* Define to the address where bug reports for this package should be sent. */
|
||||||
|
#define PACKAGE_BUGREPORT "Oracle Technology Network Berkeley DB forum"
|
||||||
|
|
||||||
|
/* Define to the full name of this package. */
|
||||||
|
#define PACKAGE_NAME "Berkeley DB"
|
||||||
|
|
||||||
|
/* Define to the full name and version of this package. */
|
||||||
|
#define PACKAGE_STRING "Berkeley DB 4.7.25"
|
||||||
|
|
||||||
|
/* Define to the one symbol short name of this package. */
|
||||||
|
#define PACKAGE_TARNAME "db-4.7.25"
|
||||||
|
|
||||||
|
/* Define to the version of this package. */
|
||||||
|
#define PACKAGE_VERSION "4.7.25"
|
||||||
|
|
||||||
|
/* The size of a `char', as computed by sizeof. */
|
||||||
|
/* #undef SIZEOF_CHAR */
|
||||||
|
|
||||||
|
/* The size of a `char *', as computed by sizeof. */
|
||||||
|
/* #undef SIZEOF_CHAR_P */
|
||||||
|
|
||||||
|
/* The size of a `int', as computed by sizeof. */
|
||||||
|
/* #undef SIZEOF_INT */
|
||||||
|
|
||||||
|
/* The size of a `long', as computed by sizeof. */
|
||||||
|
/* #undef SIZEOF_LONG */
|
||||||
|
|
||||||
|
/* The size of a `long long', as computed by sizeof. */
|
||||||
|
/* #undef SIZEOF_LONG_LONG */
|
||||||
|
|
||||||
|
/* The size of a `short', as computed by sizeof. */
|
||||||
|
/* #undef SIZEOF_SHORT */
|
||||||
|
|
||||||
|
/* The size of a `size_t', as computed by sizeof. */
|
||||||
|
/* #undef SIZEOF_SIZE_T */
|
||||||
|
|
||||||
|
/* The size of a `unsigned char', as computed by sizeof. */
|
||||||
|
/* #undef SIZEOF_UNSIGNED_CHAR */
|
||||||
|
|
||||||
|
/* The size of a `unsigned int', as computed by sizeof. */
|
||||||
|
/* #undef SIZEOF_UNSIGNED_INT */
|
||||||
|
|
||||||
|
/* The size of a `unsigned long', as computed by sizeof. */
|
||||||
|
/* #undef SIZEOF_UNSIGNED_LONG */
|
||||||
|
|
||||||
|
/* The size of a `unsigned long long', as computed by sizeof. */
|
||||||
|
/* #undef SIZEOF_UNSIGNED_LONG_LONG */
|
||||||
|
|
||||||
|
/* The size of a `unsigned short', as computed by sizeof. */
|
||||||
|
/* #undef SIZEOF_UNSIGNED_SHORT */
|
||||||
|
|
||||||
|
/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */
|
||||||
|
/* #undef STAT_MACROS_BROKEN */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the ANSI C header files. */
|
||||||
|
#define STDC_HEADERS 1
|
||||||
|
|
||||||
|
/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
|
||||||
|
/* #undef TIME_WITH_SYS_TIME */
|
||||||
|
|
||||||
|
/* Define to 1 to mask harmless uninitialized memory read/writes. */
|
||||||
|
/* #undef UMRW */
|
||||||
|
|
||||||
|
/* Number of bits in a file offset, on hosts where this is settable. */
|
||||||
|
/* #undef _FILE_OFFSET_BITS */
|
||||||
|
|
||||||
|
/* Define for large files, on AIX-style hosts. */
|
||||||
|
/* #undef _LARGE_FILES */
|
||||||
|
|
||||||
|
/* Define to empty if `const' does not conform to ANSI C. */
|
||||||
|
/* #undef const */
|
||||||
|
|
||||||
|
/* Define to `__inline__' or `__inline' if that's what the C compiler
|
||||||
|
calls it, or to nothing if 'inline' is not supported under any name. */
|
||||||
|
#ifndef __cplusplus
|
||||||
|
#define inline __inline
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* type to use in place of socklen_t if not defined */
|
||||||
|
/* #undef socklen_t */
|
||||||
913
build_wince/db_int.h
Normal file
913
build_wince/db_int.h
Normal file
@@ -0,0 +1,913 @@
|
|||||||
|
/* DO NOT EDIT: automatically built by dist/s_windows. */
|
||||||
|
/*-
|
||||||
|
* See the file LICENSE for redistribution information.
|
||||||
|
*
|
||||||
|
* Copyright (c) 1996,2008 Oracle. All rights reserved.
|
||||||
|
*
|
||||||
|
* $Id: db_int.h 63573 2008-05-23 21:43:21Z trent.nelson $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _DB_INT_H_
|
||||||
|
#define _DB_INT_H_
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Berkeley DB ANSI/POSIX include files.
|
||||||
|
*******************************************************/
|
||||||
|
#ifdef HAVE_SYSTEM_INCLUDE_FILES
|
||||||
|
#include <sys/types.h>
|
||||||
|
#ifdef DIAG_MVCC
|
||||||
|
#include <sys/mman.h>
|
||||||
|
#endif
|
||||||
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
#if defined(__INCLUDE_SELECT_H)
|
||||||
|
#ifdef HAVE_SYS_SELECT_H
|
||||||
|
#include <sys/select.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_VXWORKS
|
||||||
|
#include <selectLib.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if TIME_WITH_SYS_TIME
|
||||||
|
#include <sys/time.h>
|
||||||
|
#include <time.h>
|
||||||
|
#else
|
||||||
|
#if HAVE_SYS_TIME_H
|
||||||
|
#include <sys/time.h>
|
||||||
|
#else
|
||||||
|
#include <time.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_VXWORKS
|
||||||
|
#include <net/uio.h>
|
||||||
|
#else
|
||||||
|
#include <sys/uio.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__INCLUDE_NETWORKING)
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <netdb.h>
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(STDC_HEADERS) || defined(__cplusplus)
|
||||||
|
#include <stdarg.h>
|
||||||
|
#else
|
||||||
|
#include <varargs.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <limits.h>
|
||||||
|
#include <signal.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#if defined(__INCLUDE_DIRECTORY)
|
||||||
|
#if HAVE_DIRENT_H
|
||||||
|
# include <dirent.h>
|
||||||
|
# define NAMLEN(dirent) strlen((dirent)->d_name)
|
||||||
|
#else
|
||||||
|
# define dirent direct
|
||||||
|
# define NAMLEN(dirent) (dirent)->d_namlen
|
||||||
|
# if HAVE_SYS_NDIR_H
|
||||||
|
# include <sys/ndir.h>
|
||||||
|
# endif
|
||||||
|
# if HAVE_SYS_DIR_H
|
||||||
|
# include <sys/dir.h>
|
||||||
|
# endif
|
||||||
|
# if HAVE_NDIR_H
|
||||||
|
# include <ndir.h>
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
#endif /* __INCLUDE_DIRECTORY */
|
||||||
|
|
||||||
|
#endif /* !HAVE_SYSTEM_INCLUDE_FILES */
|
||||||
|
|
||||||
|
#ifdef DB_WIN32
|
||||||
|
#include "dbinc/win_db.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "db.h"
|
||||||
|
#include "clib_port.h"
|
||||||
|
|
||||||
|
#include "dbinc/queue.h"
|
||||||
|
#include "dbinc/shqueue.h"
|
||||||
|
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Forward structure declarations.
|
||||||
|
*******************************************************/
|
||||||
|
struct __db_reginfo_t; typedef struct __db_reginfo_t REGINFO;
|
||||||
|
struct __db_txnhead; typedef struct __db_txnhead DB_TXNHEAD;
|
||||||
|
struct __db_txnlist; typedef struct __db_txnlist DB_TXNLIST;
|
||||||
|
struct __vrfy_childinfo;typedef struct __vrfy_childinfo VRFY_CHILDINFO;
|
||||||
|
struct __vrfy_dbinfo; typedef struct __vrfy_dbinfo VRFY_DBINFO;
|
||||||
|
struct __vrfy_pageinfo; typedef struct __vrfy_pageinfo VRFY_PAGEINFO;
|
||||||
|
|
||||||
|
typedef SH_TAILQ_HEAD(__hash_head) DB_HASHTAB;
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* General purpose constants and macros.
|
||||||
|
*******************************************************/
|
||||||
|
#undef FALSE
|
||||||
|
#define FALSE 0
|
||||||
|
#undef TRUE
|
||||||
|
#define TRUE (!FALSE)
|
||||||
|
|
||||||
|
#define MEGABYTE 1048576
|
||||||
|
#define GIGABYTE 1073741824
|
||||||
|
|
||||||
|
#define NS_PER_MS 1000000 /* Nanoseconds in a millisecond */
|
||||||
|
#define NS_PER_US 1000 /* Nanoseconds in a microsecond */
|
||||||
|
#define NS_PER_SEC 1000000000 /* Nanoseconds in a second */
|
||||||
|
#define US_PER_MS 1000 /* Microseconds in a millisecond */
|
||||||
|
#define US_PER_SEC 1000000 /* Microseconds in a second */
|
||||||
|
#define MS_PER_SEC 1000 /* Milliseconds in a second */
|
||||||
|
|
||||||
|
#define RECNO_OOB 0 /* Illegal record number. */
|
||||||
|
|
||||||
|
/* Test for a power-of-two (tests true for zero, which doesn't matter here). */
|
||||||
|
#define POWER_OF_TWO(x) (((x) & ((x) - 1)) == 0)
|
||||||
|
|
||||||
|
/* Test for valid page sizes. */
|
||||||
|
#define DB_MIN_PGSIZE 0x000200 /* Minimum page size (512). */
|
||||||
|
#define DB_MAX_PGSIZE 0x010000 /* Maximum page size (65536). */
|
||||||
|
#define IS_VALID_PAGESIZE(x) \
|
||||||
|
(POWER_OF_TWO(x) && (x) >= DB_MIN_PGSIZE && ((x) <= DB_MAX_PGSIZE))
|
||||||
|
|
||||||
|
/* Minimum number of pages cached, by default. */
|
||||||
|
#define DB_MINPAGECACHE 16
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If we are unable to determine the underlying filesystem block size, use
|
||||||
|
* 8K on the grounds that most OS's use less than 8K for a VM page size.
|
||||||
|
*/
|
||||||
|
#define DB_DEF_IOSIZE (8 * 1024)
|
||||||
|
|
||||||
|
/* Align an integer to a specific boundary. */
|
||||||
|
#undef DB_ALIGN
|
||||||
|
#define DB_ALIGN(v, bound) \
|
||||||
|
(((v) + (bound) - 1) & ~(((uintmax_t)(bound)) - 1))
|
||||||
|
|
||||||
|
/* Increment a pointer to a specific boundary. */
|
||||||
|
#undef ALIGNP_INC
|
||||||
|
#define ALIGNP_INC(p, bound) \
|
||||||
|
(void *)(((uintptr_t)(p) + (bound) - 1) & ~(((uintptr_t)(bound)) - 1))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Print an address as a u_long (a u_long is the largest type we can print
|
||||||
|
* portably). Most 64-bit systems have made longs 64-bits, so this should
|
||||||
|
* work.
|
||||||
|
*/
|
||||||
|
#define P_TO_ULONG(p) ((u_long)(uintptr_t)(p))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Convert a pointer to a small integral value.
|
||||||
|
*
|
||||||
|
* The (u_int16_t)(uintptr_t) cast avoids warnings: the (uintptr_t) cast
|
||||||
|
* converts the value to an integral type, and the (u_int16_t) cast converts
|
||||||
|
* it to a small integral type so we don't get complaints when we assign the
|
||||||
|
* final result to an integral type smaller than uintptr_t.
|
||||||
|
*/
|
||||||
|
#define P_TO_UINT32(p) ((u_int32_t)(uintptr_t)(p))
|
||||||
|
#define P_TO_UINT16(p) ((u_int16_t)(uintptr_t)(p))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* There are several on-page structures that are declared to have a number of
|
||||||
|
* fields followed by a variable length array of items. The structure size
|
||||||
|
* without including the variable length array or the address of the first of
|
||||||
|
* those elements can be found using SSZ.
|
||||||
|
*
|
||||||
|
* This macro can also be used to find the offset of a structure element in a
|
||||||
|
* structure. This is used in various places to copy structure elements from
|
||||||
|
* unaligned memory references, e.g., pointers into a packed page.
|
||||||
|
*
|
||||||
|
* There are two versions because compilers object if you take the address of
|
||||||
|
* an array.
|
||||||
|
*/
|
||||||
|
#undef SSZ
|
||||||
|
#define SSZ(name, field) P_TO_UINT16(&(((name *)0)->field))
|
||||||
|
|
||||||
|
#undef SSZA
|
||||||
|
#define SSZA(name, field) P_TO_UINT16(&(((name *)0)->field[0]))
|
||||||
|
|
||||||
|
/* Structure used to print flag values. */
|
||||||
|
typedef struct __fn {
|
||||||
|
u_int32_t mask; /* Flag value. */
|
||||||
|
const char *name; /* Flag name. */
|
||||||
|
} FN;
|
||||||
|
|
||||||
|
/* Set, clear and test flags. */
|
||||||
|
#define FLD_CLR(fld, f) (fld) &= ~(f)
|
||||||
|
#define FLD_ISSET(fld, f) ((fld) & (f))
|
||||||
|
#define FLD_SET(fld, f) (fld) |= (f)
|
||||||
|
#define F_CLR(p, f) (p)->flags &= ~(f)
|
||||||
|
#define F_ISSET(p, f) ((p)->flags & (f))
|
||||||
|
#define F_SET(p, f) (p)->flags |= (f)
|
||||||
|
#define LF_CLR(f) ((flags) &= ~(f))
|
||||||
|
#define LF_ISSET(f) ((flags) & (f))
|
||||||
|
#define LF_SET(f) ((flags) |= (f))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Calculate a percentage. The values can overflow 32-bit integer arithmetic
|
||||||
|
* so we use floating point.
|
||||||
|
*
|
||||||
|
* When calculating a bytes-vs-page size percentage, we're getting the inverse
|
||||||
|
* of the percentage in all cases, that is, we want 100 minus the percentage we
|
||||||
|
* calculate.
|
||||||
|
*/
|
||||||
|
#define DB_PCT(v, total) \
|
||||||
|
((int)((total) == 0 ? 0 : ((double)(v) * 100) / (total)))
|
||||||
|
#define DB_PCT_PG(v, total, pgsize) \
|
||||||
|
((int)((total) == 0 ? 0 : \
|
||||||
|
100 - ((double)(v) * 100) / (((double)total) * (pgsize))))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Statistics update shared memory and so are expensive -- don't update the
|
||||||
|
* values unless we're going to display the results.
|
||||||
|
*/
|
||||||
|
#undef STAT
|
||||||
|
#ifdef HAVE_STATISTICS
|
||||||
|
#define STAT(x) x
|
||||||
|
#else
|
||||||
|
#define STAT(x)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Structure used for callback message aggregation.
|
||||||
|
*
|
||||||
|
* Display values in XXX_stat_print calls.
|
||||||
|
*/
|
||||||
|
typedef struct __db_msgbuf {
|
||||||
|
char *buf; /* Heap allocated buffer. */
|
||||||
|
char *cur; /* Current end of message. */
|
||||||
|
size_t len; /* Allocated length of buffer. */
|
||||||
|
} DB_MSGBUF;
|
||||||
|
#define DB_MSGBUF_INIT(a) do { \
|
||||||
|
(a)->buf = (a)->cur = NULL; \
|
||||||
|
(a)->len = 0; \
|
||||||
|
} while (0)
|
||||||
|
#define DB_MSGBUF_FLUSH(env, a) do { \
|
||||||
|
if ((a)->buf != NULL) { \
|
||||||
|
if ((a)->cur != (a)->buf) \
|
||||||
|
__db_msg(env, "%s", (a)->buf); \
|
||||||
|
__os_free(env, (a)->buf); \
|
||||||
|
DB_MSGBUF_INIT(a); \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
#define STAT_FMT(msg, fmt, type, v) do { \
|
||||||
|
DB_MSGBUF __mb; \
|
||||||
|
DB_MSGBUF_INIT(&__mb); \
|
||||||
|
__db_msgadd(env, &__mb, fmt, (type)(v)); \
|
||||||
|
__db_msgadd(env, &__mb, "\t%s", msg); \
|
||||||
|
DB_MSGBUF_FLUSH(env, &__mb); \
|
||||||
|
} while (0)
|
||||||
|
#define STAT_HEX(msg, v) \
|
||||||
|
__db_msg(env, "%#lx\t%s", (u_long)(v), msg)
|
||||||
|
#define STAT_ISSET(msg, p) \
|
||||||
|
__db_msg(env, "%sSet\t%s", (p) == NULL ? "!" : " ", msg)
|
||||||
|
#define STAT_LONG(msg, v) \
|
||||||
|
__db_msg(env, "%ld\t%s", (long)(v), msg)
|
||||||
|
#define STAT_LSN(msg, lsnp) \
|
||||||
|
__db_msg(env, "%lu/%lu\t%s", \
|
||||||
|
(u_long)(lsnp)->file, (u_long)(lsnp)->offset, msg)
|
||||||
|
#define STAT_POINTER(msg, v) \
|
||||||
|
__db_msg(env, "%#lx\t%s", P_TO_ULONG(v), msg)
|
||||||
|
#define STAT_STRING(msg, p) do { \
|
||||||
|
const char *__p = p; /* p may be a function call. */ \
|
||||||
|
__db_msg(env, "%s\t%s", __p == NULL ? "!Set" : __p, msg); \
|
||||||
|
} while (0)
|
||||||
|
#define STAT_ULONG(msg, v) \
|
||||||
|
__db_msg(env, "%lu\t%s", (u_long)(v), msg)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* There are quite a few places in Berkeley DB where we want to initialize
|
||||||
|
* a DBT from a string or other random pointer type, using a length typed
|
||||||
|
* to size_t in most cases. This macro avoids a lot of casting. The macro
|
||||||
|
* comes in two flavors because we often want to clear the DBT first.
|
||||||
|
*/
|
||||||
|
#define DB_SET_DBT(dbt, d, s) do { \
|
||||||
|
(dbt).data = (void *)(d); \
|
||||||
|
(dbt).size = (u_int32_t)(s); \
|
||||||
|
} while (0)
|
||||||
|
#define DB_INIT_DBT(dbt, d, s) do { \
|
||||||
|
memset(&(dbt), 0, sizeof(dbt)); \
|
||||||
|
DB_SET_DBT(dbt, d, s); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* API return values
|
||||||
|
*******************************************************/
|
||||||
|
/*
|
||||||
|
* Return values that are OK for each different call. Most calls have a
|
||||||
|
* standard 'return of 0 is only OK value', but some, like db->get have
|
||||||
|
* DB_NOTFOUND as a return value, but it really isn't an error.
|
||||||
|
*/
|
||||||
|
#define DB_RETOK_STD(ret) ((ret) == 0)
|
||||||
|
#define DB_RETOK_DBCDEL(ret) ((ret) == 0 || (ret) == DB_KEYEMPTY || \
|
||||||
|
(ret) == DB_NOTFOUND)
|
||||||
|
#define DB_RETOK_DBCGET(ret) ((ret) == 0 || (ret) == DB_KEYEMPTY || \
|
||||||
|
(ret) == DB_NOTFOUND)
|
||||||
|
#define DB_RETOK_DBCPUT(ret) ((ret) == 0 || (ret) == DB_KEYEXIST || \
|
||||||
|
(ret) == DB_NOTFOUND)
|
||||||
|
#define DB_RETOK_DBDEL(ret) DB_RETOK_DBCDEL(ret)
|
||||||
|
#define DB_RETOK_DBGET(ret) DB_RETOK_DBCGET(ret)
|
||||||
|
#define DB_RETOK_DBPUT(ret) ((ret) == 0 || (ret) == DB_KEYEXIST)
|
||||||
|
#define DB_RETOK_EXISTS(ret) DB_RETOK_DBCGET(ret)
|
||||||
|
#define DB_RETOK_LGGET(ret) ((ret) == 0 || (ret) == DB_NOTFOUND)
|
||||||
|
#define DB_RETOK_MPGET(ret) ((ret) == 0 || (ret) == DB_PAGE_NOTFOUND)
|
||||||
|
#define DB_RETOK_REPPMSG(ret) ((ret) == 0 || \
|
||||||
|
(ret) == DB_REP_IGNORE || \
|
||||||
|
(ret) == DB_REP_ISPERM || \
|
||||||
|
(ret) == DB_REP_NEWMASTER || \
|
||||||
|
(ret) == DB_REP_NEWSITE || \
|
||||||
|
(ret) == DB_REP_NOTPERM)
|
||||||
|
|
||||||
|
/* Find a reasonable operation-not-supported error. */
|
||||||
|
#ifdef EOPNOTSUPP
|
||||||
|
#define DB_OPNOTSUP EOPNOTSUPP
|
||||||
|
#else
|
||||||
|
#ifdef ENOTSUP
|
||||||
|
#define DB_OPNOTSUP ENOTSUP
|
||||||
|
#else
|
||||||
|
#define DB_OPNOTSUP EINVAL
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Files.
|
||||||
|
*******************************************************/
|
||||||
|
/*
|
||||||
|
* We use 1024 as the maximum path length. It's too hard to figure out what
|
||||||
|
* the real path length is, as it was traditionally stored in <sys/param.h>,
|
||||||
|
* and that file isn't always available.
|
||||||
|
*/
|
||||||
|
#define DB_MAXPATHLEN 1024
|
||||||
|
|
||||||
|
#define PATH_DOT "." /* Current working directory. */
|
||||||
|
/* Path separator character(s). */
|
||||||
|
#define PATH_SEPARATOR "\\/:"
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Environment.
|
||||||
|
*******************************************************/
|
||||||
|
/* Type passed to __db_appname(). */
|
||||||
|
typedef enum {
|
||||||
|
DB_APP_NONE=0, /* No type (region). */
|
||||||
|
DB_APP_DATA, /* Data file. */
|
||||||
|
DB_APP_LOG, /* Log file. */
|
||||||
|
DB_APP_TMP /* Temporary file. */
|
||||||
|
} APPNAME;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* A set of macros to check if various functionality has been configured.
|
||||||
|
*
|
||||||
|
* ALIVE_ON The is_alive function is configured.
|
||||||
|
* CDB_LOCKING CDB product locking.
|
||||||
|
* CRYPTO_ON Security has been configured.
|
||||||
|
* LOCKING_ON Locking has been configured.
|
||||||
|
* LOGGING_ON Logging has been configured.
|
||||||
|
* MUTEX_ON Mutexes have been configured.
|
||||||
|
* MPOOL_ON Memory pool has been configured.
|
||||||
|
* REP_ON Replication has been configured.
|
||||||
|
* RPC_ON RPC has been configured.
|
||||||
|
* TXN_ON Transactions have been configured.
|
||||||
|
*
|
||||||
|
* REP_ON is more complex than most: if the BDB library was compiled without
|
||||||
|
* replication support, ENV->rep_handle will be NULL; if the BDB library has
|
||||||
|
* replication support, but it was not configured, the region reference will
|
||||||
|
* be NULL.
|
||||||
|
*/
|
||||||
|
#define ALIVE_ON(env) ((env)->dbenv->is_alive != NULL)
|
||||||
|
#define CDB_LOCKING(env) F_ISSET(env, ENV_CDB)
|
||||||
|
#define CRYPTO_ON(env) ((env)->crypto_handle != NULL)
|
||||||
|
#define LOCKING_ON(env) ((env)->lk_handle != NULL)
|
||||||
|
#define LOGGING_ON(env) ((env)->lg_handle != NULL)
|
||||||
|
#define MPOOL_ON(env) ((env)->mp_handle != NULL)
|
||||||
|
#define MUTEX_ON(env) ((env)->mutex_handle != NULL)
|
||||||
|
#define REP_ON(env) \
|
||||||
|
((env)->rep_handle != NULL && (env)->rep_handle->region != NULL)
|
||||||
|
#define RPC_ON(dbenv) ((dbenv)->cl_handle != NULL)
|
||||||
|
#define TXN_ON(env) ((env)->tx_handle != NULL)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* STD_LOCKING Standard locking, that is, locking was configured and CDB
|
||||||
|
* was not. We do not do locking in off-page duplicate trees,
|
||||||
|
* so we check for that in the cursor first.
|
||||||
|
*/
|
||||||
|
#define STD_LOCKING(dbc) \
|
||||||
|
(!F_ISSET(dbc, DBC_OPD) && \
|
||||||
|
!CDB_LOCKING((dbc)->env) && LOCKING_ON((dbc)->env))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* IS_RECOVERING: The system is running recovery.
|
||||||
|
*/
|
||||||
|
#define IS_RECOVERING(env) \
|
||||||
|
(LOGGING_ON(env) && F_ISSET((env)->lg_handle, DBLOG_RECOVER))
|
||||||
|
|
||||||
|
/* Initialization methods are often illegal before/after open is called. */
|
||||||
|
#define ENV_ILLEGAL_AFTER_OPEN(env, name) \
|
||||||
|
if (F_ISSET((env), ENV_OPEN_CALLED)) \
|
||||||
|
return (__db_mi_open(env, name, 1));
|
||||||
|
#define ENV_ILLEGAL_BEFORE_OPEN(env, name) \
|
||||||
|
if (!F_ISSET((env), ENV_OPEN_CALLED)) \
|
||||||
|
return (__db_mi_open(env, name, 0));
|
||||||
|
|
||||||
|
/* We're not actually user hostile, honest. */
|
||||||
|
#define ENV_REQUIRES_CONFIG(env, handle, i, flags) \
|
||||||
|
if (handle == NULL) \
|
||||||
|
return (__env_not_config(env, i, flags));
|
||||||
|
#define ENV_REQUIRES_CONFIG_XX(env, handle, i, flags) \
|
||||||
|
if ((env)->handle->region == NULL) \
|
||||||
|
return (__env_not_config(env, i, flags));
|
||||||
|
#define ENV_NOT_CONFIGURED(env, handle, i, flags) \
|
||||||
|
if (F_ISSET((env), ENV_OPEN_CALLED)) \
|
||||||
|
ENV_REQUIRES_CONFIG(env, handle, i, flags)
|
||||||
|
|
||||||
|
#define ENV_ENTER(env, ip) do { \
|
||||||
|
int __ret; \
|
||||||
|
PANIC_CHECK(env); \
|
||||||
|
if ((env)->thr_hashtab == NULL) \
|
||||||
|
ip = NULL; \
|
||||||
|
else { \
|
||||||
|
if ((__ret = \
|
||||||
|
__env_set_state(env, &(ip), THREAD_ACTIVE)) != 0) \
|
||||||
|
return (__ret); \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define ENV_GET_THREAD_INFO(env, ip) ENV_ENTER(env, ip)
|
||||||
|
|
||||||
|
#ifdef DIAGNOSTIC
|
||||||
|
#define ENV_LEAVE(env, ip) do { \
|
||||||
|
if ((ip) != NULL) { \
|
||||||
|
DB_ASSERT(env, (ip)->dbth_state == THREAD_ACTIVE); \
|
||||||
|
(ip)->dbth_state = THREAD_OUT; \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
#else
|
||||||
|
#define ENV_LEAVE(env, ip) do { \
|
||||||
|
if ((ip) != NULL) \
|
||||||
|
(ip)->dbth_state = THREAD_OUT; \
|
||||||
|
} while (0)
|
||||||
|
#endif
|
||||||
|
#ifdef DIAGNOSTIC
|
||||||
|
#define CHECK_THREAD(env) do { \
|
||||||
|
if ((env)->thr_hashtab != NULL) \
|
||||||
|
(void)__env_set_state(env, NULL, THREAD_VERIFY); \
|
||||||
|
} while (0)
|
||||||
|
#ifdef HAVE_STATISTICS
|
||||||
|
#define CHECK_MTX_THREAD(env, mtx) do { \
|
||||||
|
if (mtx->alloc_id != MTX_MUTEX_REGION && \
|
||||||
|
mtx->alloc_id != MTX_ENV_REGION && \
|
||||||
|
mtx->alloc_id != MTX_APPLICATION) \
|
||||||
|
CHECK_THREAD(env); \
|
||||||
|
} while (0)
|
||||||
|
#else
|
||||||
|
#define CHECK_MTX_THREAD(env, mtx)
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#define CHECK_THREAD(env)
|
||||||
|
#define CHECK_MTX_THREAD(env, mtx)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
THREAD_SLOT_NOT_IN_USE=0,
|
||||||
|
THREAD_OUT,
|
||||||
|
THREAD_ACTIVE,
|
||||||
|
THREAD_BLOCKED,
|
||||||
|
THREAD_BLOCKED_DEAD
|
||||||
|
#ifdef DIAGNOSTIC
|
||||||
|
, THREAD_VERIFY
|
||||||
|
#endif
|
||||||
|
} DB_THREAD_STATE;
|
||||||
|
|
||||||
|
typedef struct __pin_list {
|
||||||
|
roff_t b_ref; /* offset to buffer. */
|
||||||
|
int region; /* region containing buffer. */
|
||||||
|
} PIN_LIST;
|
||||||
|
#define PINMAX 4
|
||||||
|
|
||||||
|
struct __db_thread_info {
|
||||||
|
pid_t dbth_pid;
|
||||||
|
db_threadid_t dbth_tid;
|
||||||
|
DB_THREAD_STATE dbth_state;
|
||||||
|
SH_TAILQ_ENTRY dbth_links;
|
||||||
|
/*
|
||||||
|
* The following fields track which buffers this thread of
|
||||||
|
* control has pinned in the mpool buffer cache.
|
||||||
|
*/
|
||||||
|
u_int16_t dbth_pincount; /* Number of pins for this thread. */
|
||||||
|
u_int16_t dbth_pinmax; /* Number of slots allocated. */
|
||||||
|
roff_t dbth_pinlist; /* List of pins. */
|
||||||
|
PIN_LIST dbth_pinarray[PINMAX]; /* Initial array of slots. */
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct __env_thread_info {
|
||||||
|
u_int32_t thr_count;
|
||||||
|
u_int32_t thr_max;
|
||||||
|
u_int32_t thr_nbucket;
|
||||||
|
roff_t thr_hashoff;
|
||||||
|
} THREAD_INFO;
|
||||||
|
|
||||||
|
#define DB_EVENT(env, e, einfo) do { \
|
||||||
|
DB_ENV *__dbenv = (env)->dbenv; \
|
||||||
|
if (__dbenv->db_event_func != NULL) \
|
||||||
|
__dbenv->db_event_func(__dbenv, e, einfo); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
typedef struct __flag_map {
|
||||||
|
u_int32_t inflag, outflag;
|
||||||
|
} FLAG_MAP;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Internal database environment structure.
|
||||||
|
*
|
||||||
|
* This is the private database environment handle. The public environment
|
||||||
|
* handle is the DB_ENV structure. The library owns this structure, the user
|
||||||
|
* owns the DB_ENV structure. The reason there are two structures is because
|
||||||
|
* the user's configuration outlives any particular DB_ENV->open call, and
|
||||||
|
* separate structures allows us to easily discard internal information without
|
||||||
|
* discarding the user's configuration.
|
||||||
|
*/
|
||||||
|
struct __env {
|
||||||
|
DB_ENV *dbenv; /* Linked DB_ENV structure */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The ENV structure can be used concurrently, so field access is
|
||||||
|
* protected.
|
||||||
|
*/
|
||||||
|
db_mutex_t mtx_env; /* ENV structure mutex */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Some fields are included in the ENV structure rather than in the
|
||||||
|
* DB_ENV structure because they are only set as arguments to the
|
||||||
|
* DB_ENV->open method. In other words, because of the historic API,
|
||||||
|
* not for any rational reason.
|
||||||
|
*
|
||||||
|
* Arguments to DB_ENV->open.
|
||||||
|
*/
|
||||||
|
char *db_home; /* Database home */
|
||||||
|
u_int32_t open_flags; /* Flags */
|
||||||
|
int db_mode; /* Default open permissions */
|
||||||
|
|
||||||
|
pid_t pid_cache; /* Cached process ID */
|
||||||
|
|
||||||
|
DB_FH *lockfhp; /* fcntl(2) locking file handle */
|
||||||
|
|
||||||
|
DB_LOCKER *env_lref; /* Locker in non-threaded handles */
|
||||||
|
|
||||||
|
DB_DISTAB recover_dtab; /* Dispatch table for recover funcs */
|
||||||
|
|
||||||
|
int dir_mode; /* Intermediate directory perms. */
|
||||||
|
|
||||||
|
/* Thread tracking */
|
||||||
|
u_int32_t thr_nbucket; /* Number of hash buckets */
|
||||||
|
DB_HASHTAB *thr_hashtab; /* Hash table of DB_THREAD_INFO */
|
||||||
|
|
||||||
|
/* Mutex allocation */
|
||||||
|
struct {
|
||||||
|
int alloc_id; /* Allocation ID argument */
|
||||||
|
u_int32_t flags; /* Flags argument */
|
||||||
|
} *mutex_iq; /* Initial mutexes queue */
|
||||||
|
u_int mutex_iq_next; /* Count of initial mutexes */
|
||||||
|
u_int mutex_iq_max; /* Maximum initial mutexes */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* List of open DB handles for this ENV, used for cursor
|
||||||
|
* adjustment. Must be protected for multi-threaded support.
|
||||||
|
*/
|
||||||
|
db_mutex_t mtx_dblist;
|
||||||
|
int db_ref; /* DB handle reference count */
|
||||||
|
TAILQ_HEAD(__dblist, __db) dblist;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* XA support.
|
||||||
|
*/
|
||||||
|
int xa_rmid; /* XA Resource Manager ID */
|
||||||
|
TAILQ_ENTRY(__env) links; /* XA environments */
|
||||||
|
TAILQ_HEAD(__xa_txn, __db_txn) xa_txn; /* XA active transactions */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* List of open file handles for this ENV. Must be protected
|
||||||
|
* for multi-threaded support.
|
||||||
|
*/
|
||||||
|
TAILQ_HEAD(__fdlist, __fh_t) fdlist;
|
||||||
|
|
||||||
|
db_mutex_t mtx_mt; /* Mersenne Twister mutex */
|
||||||
|
int mti; /* Mersenne Twister index */
|
||||||
|
u_long *mt; /* Mersenne Twister state vector */
|
||||||
|
|
||||||
|
DB_CIPHER *crypto_handle; /* Crypto handle */
|
||||||
|
DB_LOCKTAB *lk_handle; /* Lock handle */
|
||||||
|
DB_LOG *lg_handle; /* Log handle */
|
||||||
|
DB_MPOOL *mp_handle; /* Mpool handle */
|
||||||
|
DB_MUTEXMGR *mutex_handle; /* Mutex handle */
|
||||||
|
DB_REP *rep_handle; /* Replication handle */
|
||||||
|
DB_TXNMGR *tx_handle; /* Txn handle */
|
||||||
|
|
||||||
|
/* Application callback to copy data to/from a custom data source */
|
||||||
|
#define DB_USERCOPY_GETDATA 0x0001
|
||||||
|
#define DB_USERCOPY_SETDATA 0x0002
|
||||||
|
int (*dbt_usercopy)
|
||||||
|
__P((DBT *, u_int32_t, void *, u_int32_t, u_int32_t));
|
||||||
|
|
||||||
|
REGINFO *reginfo; /* REGINFO structure reference */
|
||||||
|
|
||||||
|
#define DB_TEST_ELECTINIT 1 /* after __rep_elect_init */
|
||||||
|
#define DB_TEST_ELECTVOTE1 2 /* after sending VOTE1 */
|
||||||
|
#define DB_TEST_POSTDESTROY 3 /* after destroy op */
|
||||||
|
#define DB_TEST_POSTLOG 4 /* after logging all pages */
|
||||||
|
#define DB_TEST_POSTLOGMETA 5 /* after logging meta in btree */
|
||||||
|
#define DB_TEST_POSTOPEN 6 /* after __os_open */
|
||||||
|
#define DB_TEST_POSTSYNC 7 /* after syncing the log */
|
||||||
|
#define DB_TEST_PREDESTROY 8 /* before destroy op */
|
||||||
|
#define DB_TEST_PREOPEN 9 /* before __os_open */
|
||||||
|
#define DB_TEST_SUBDB_LOCKS 10 /* subdb locking tests */
|
||||||
|
int test_abort; /* Abort value for testing */
|
||||||
|
int test_check; /* Checkpoint value for testing */
|
||||||
|
int test_copy; /* Copy value for testing */
|
||||||
|
|
||||||
|
#define ENV_CDB 0x00000001 /* DB_INIT_CDB */
|
||||||
|
#define ENV_DBLOCAL 0x00000002 /* Environment for a private DB */
|
||||||
|
#define ENV_LITTLEENDIAN 0x00000004 /* Little endian system. */
|
||||||
|
#define ENV_LOCKDOWN 0x00000008 /* DB_LOCKDOWN set */
|
||||||
|
#define ENV_NO_OUTPUT_SET 0x00000010 /* No output channel set */
|
||||||
|
#define ENV_OPEN_CALLED 0x00000020 /* DB_ENV->open called */
|
||||||
|
#define ENV_PRIVATE 0x00000040 /* DB_PRIVATE set */
|
||||||
|
#define ENV_RECOVER_FATAL 0x00000080 /* Doing fatal recovery in env */
|
||||||
|
#define ENV_REF_COUNTED 0x00000100 /* Region references this handle */
|
||||||
|
#define ENV_SYSTEM_MEM 0x00000200 /* DB_SYSTEM_MEM set */
|
||||||
|
#define ENV_THREAD 0x00000400 /* DB_THREAD set */
|
||||||
|
u_int32_t flags;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Database Access Methods.
|
||||||
|
*******************************************************/
|
||||||
|
/*
|
||||||
|
* DB_IS_THREADED --
|
||||||
|
* The database handle is free-threaded (was opened with DB_THREAD).
|
||||||
|
*/
|
||||||
|
#define DB_IS_THREADED(dbp) \
|
||||||
|
((dbp)->mutex != MUTEX_INVALID)
|
||||||
|
|
||||||
|
/* Initialization methods are often illegal before/after open is called. */
|
||||||
|
#define DB_ILLEGAL_AFTER_OPEN(dbp, name) \
|
||||||
|
if (F_ISSET((dbp), DB_AM_OPEN_CALLED)) \
|
||||||
|
return (__db_mi_open((dbp)->env, name, 1));
|
||||||
|
#define DB_ILLEGAL_BEFORE_OPEN(dbp, name) \
|
||||||
|
if (!F_ISSET((dbp), DB_AM_OPEN_CALLED)) \
|
||||||
|
return (__db_mi_open((dbp)->env, name, 0));
|
||||||
|
/* Some initialization methods are illegal if environment isn't local. */
|
||||||
|
#define DB_ILLEGAL_IN_ENV(dbp, name) \
|
||||||
|
if (!F_ISSET((dbp)->env, ENV_DBLOCAL)) \
|
||||||
|
return (__db_mi_env((dbp)->env, name));
|
||||||
|
#define DB_ILLEGAL_METHOD(dbp, flags) { \
|
||||||
|
int __ret; \
|
||||||
|
if ((__ret = __dbh_am_chk(dbp, flags)) != 0) \
|
||||||
|
return (__ret); \
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Common DBC->internal fields. Each access method adds additional fields
|
||||||
|
* to this list, but the initial fields are common.
|
||||||
|
*/
|
||||||
|
#define __DBC_INTERNAL \
|
||||||
|
DBC *opd; /* Off-page duplicate cursor. */\
|
||||||
|
\
|
||||||
|
void *page; /* Referenced page. */ \
|
||||||
|
db_pgno_t root; /* Tree root. */ \
|
||||||
|
db_pgno_t pgno; /* Referenced page number. */ \
|
||||||
|
db_indx_t indx; /* Referenced key item index. */\
|
||||||
|
\
|
||||||
|
DB_LOCK lock; /* Cursor lock. */ \
|
||||||
|
db_lockmode_t lock_mode; /* Lock mode. */
|
||||||
|
|
||||||
|
struct __dbc_internal {
|
||||||
|
__DBC_INTERNAL
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Actions that __db_master_update can take. */
|
||||||
|
typedef enum { MU_REMOVE, MU_RENAME, MU_OPEN } mu_action;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Access-method-common macro for determining whether a cursor
|
||||||
|
* has been initialized.
|
||||||
|
*/
|
||||||
|
#define IS_INITIALIZED(dbc) ((dbc)->internal->pgno != PGNO_INVALID)
|
||||||
|
|
||||||
|
/* Free the callback-allocated buffer, if necessary, hanging off of a DBT. */
|
||||||
|
#define FREE_IF_NEEDED(env, dbt) \
|
||||||
|
if (F_ISSET((dbt), DB_DBT_APPMALLOC)) { \
|
||||||
|
__os_ufree((env), (dbt)->data); \
|
||||||
|
F_CLR((dbt), DB_DBT_APPMALLOC); \
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Use memory belonging to object "owner" to return the results of
|
||||||
|
* any no-DBT-flag get ops on cursor "dbc".
|
||||||
|
*/
|
||||||
|
#define SET_RET_MEM(dbc, owner) \
|
||||||
|
do { \
|
||||||
|
(dbc)->rskey = &(owner)->my_rskey; \
|
||||||
|
(dbc)->rkey = &(owner)->my_rkey; \
|
||||||
|
(dbc)->rdata = &(owner)->my_rdata; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
/* Use the return-data memory src is currently set to use in dest as well. */
|
||||||
|
#define COPY_RET_MEM(src, dest) \
|
||||||
|
do { \
|
||||||
|
(dest)->rskey = (src)->rskey; \
|
||||||
|
(dest)->rkey = (src)->rkey; \
|
||||||
|
(dest)->rdata = (src)->rdata; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
/* Reset the returned-memory pointers to their defaults. */
|
||||||
|
#define RESET_RET_MEM(dbc) \
|
||||||
|
do { \
|
||||||
|
(dbc)->rskey = &(dbc)->my_rskey; \
|
||||||
|
(dbc)->rkey = &(dbc)->my_rkey; \
|
||||||
|
(dbc)->rdata = &(dbc)->my_rdata; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Mpool.
|
||||||
|
*******************************************************/
|
||||||
|
/*
|
||||||
|
* File types for DB access methods. Negative numbers are reserved to DB.
|
||||||
|
*/
|
||||||
|
#define DB_FTYPE_SET -1 /* Call pgin/pgout functions. */
|
||||||
|
#define DB_FTYPE_NOTSET 0 /* Don't call... */
|
||||||
|
#define DB_LSN_OFF_NOTSET -1 /* Not yet set. */
|
||||||
|
#define DB_CLEARLEN_NOTSET UINT32_MAX /* Not yet set. */
|
||||||
|
|
||||||
|
/* Structure used as the DB pgin/pgout pgcookie. */
|
||||||
|
typedef struct __dbpginfo {
|
||||||
|
size_t db_pagesize; /* Underlying page size. */
|
||||||
|
u_int32_t flags; /* Some DB_AM flags needed. */
|
||||||
|
DBTYPE type; /* DB type */
|
||||||
|
} DB_PGINFO;
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Log.
|
||||||
|
*******************************************************/
|
||||||
|
/* Initialize an LSN to 'zero'. */
|
||||||
|
#define ZERO_LSN(LSN) do { \
|
||||||
|
(LSN).file = 0; \
|
||||||
|
(LSN).offset = 0; \
|
||||||
|
} while (0)
|
||||||
|
#define IS_ZERO_LSN(LSN) ((LSN).file == 0 && (LSN).offset == 0)
|
||||||
|
|
||||||
|
#define IS_INIT_LSN(LSN) ((LSN).file == 1 && (LSN).offset == 0)
|
||||||
|
#define INIT_LSN(LSN) do { \
|
||||||
|
(LSN).file = 1; \
|
||||||
|
(LSN).offset = 0; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define MAX_LSN(LSN) do { \
|
||||||
|
(LSN).file = UINT32_MAX; \
|
||||||
|
(LSN).offset = UINT32_MAX; \
|
||||||
|
} while (0)
|
||||||
|
#define IS_MAX_LSN(LSN) \
|
||||||
|
((LSN).file == UINT32_MAX && (LSN).offset == UINT32_MAX)
|
||||||
|
|
||||||
|
/* If logging is turned off, smash the lsn. */
|
||||||
|
#define LSN_NOT_LOGGED(LSN) do { \
|
||||||
|
(LSN).file = 0; \
|
||||||
|
(LSN).offset = 1; \
|
||||||
|
} while (0)
|
||||||
|
#define IS_NOT_LOGGED_LSN(LSN) \
|
||||||
|
((LSN).file == 0 && (LSN).offset == 1)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* LOG_COMPARE -- compare two LSNs.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define LOG_COMPARE(lsn0, lsn1) \
|
||||||
|
((lsn0)->file != (lsn1)->file ? \
|
||||||
|
((lsn0)->file < (lsn1)->file ? -1 : 1) : \
|
||||||
|
((lsn0)->offset != (lsn1)->offset ? \
|
||||||
|
((lsn0)->offset < (lsn1)->offset ? -1 : 1) : 0))
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Txn.
|
||||||
|
*******************************************************/
|
||||||
|
#define DB_NONBLOCK(C) ((C)->txn != NULL && F_ISSET((C)->txn, TXN_NOWAIT))
|
||||||
|
#define NOWAIT_FLAG(txn) \
|
||||||
|
((txn) != NULL && F_ISSET((txn), TXN_NOWAIT) ? DB_LOCK_NOWAIT : 0)
|
||||||
|
#define IS_REAL_TXN(txn) \
|
||||||
|
((txn) != NULL && !F_ISSET(txn, TXN_CDSGROUP))
|
||||||
|
#define IS_SUBTRANSACTION(txn) \
|
||||||
|
((txn) != NULL && (txn)->parent != NULL)
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Crypto.
|
||||||
|
*******************************************************/
|
||||||
|
#define DB_IV_BYTES 16 /* Bytes per IV */
|
||||||
|
#define DB_MAC_KEY 20 /* Bytes per MAC checksum */
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Secondaries over RPC.
|
||||||
|
*******************************************************/
|
||||||
|
#ifdef CONFIG_TEST
|
||||||
|
/*
|
||||||
|
* These are flags passed to DB->associate calls by the Tcl API if running
|
||||||
|
* over RPC. The RPC server will mask out these flags before making the real
|
||||||
|
* DB->associate call.
|
||||||
|
*
|
||||||
|
* These flags must coexist with the valid flags to DB->associate (currently
|
||||||
|
* DB_AUTO_COMMIT and DB_CREATE). DB_AUTO_COMMIT is in the group of
|
||||||
|
* high-order shared flags (0xff000000), and DB_CREATE is in the low-order
|
||||||
|
* group (0x00000fff), so we pick a range in between.
|
||||||
|
*/
|
||||||
|
#define DB_RPC2ND_MASK 0x00f00000 /* Reserved bits. */
|
||||||
|
|
||||||
|
#define DB_RPC2ND_REVERSEDATA 0x00100000 /* callback_n(0) _s_reversedata. */
|
||||||
|
#define DB_RPC2ND_NOOP 0x00200000 /* callback_n(1) _s_noop */
|
||||||
|
#define DB_RPC2ND_CONCATKEYDATA 0x00300000 /* callback_n(2) _s_concatkeydata */
|
||||||
|
#define DB_RPC2ND_CONCATDATAKEY 0x00400000 /* callback_n(3) _s_concatdatakey */
|
||||||
|
#define DB_RPC2ND_REVERSECONCAT 0x00500000 /* callback_n(4) _s_reverseconcat */
|
||||||
|
#define DB_RPC2ND_TRUNCDATA 0x00600000 /* callback_n(5) _s_truncdata */
|
||||||
|
#define DB_RPC2ND_CONSTANT 0x00700000 /* callback_n(6) _s_constant */
|
||||||
|
#define DB_RPC2ND_GETZIP 0x00800000 /* sj_getzip */
|
||||||
|
#define DB_RPC2ND_GETNAME 0x00900000 /* sj_getname */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Remaining general DB includes.
|
||||||
|
*******************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
#include "dbinc/globals.h"
|
||||||
|
#include "dbinc/clock.h"
|
||||||
|
#include "dbinc/debug.h"
|
||||||
|
#include "dbinc/region.h"
|
||||||
|
#include "dbinc_auto/env_ext.h"
|
||||||
|
#include "dbinc/mutex.h"
|
||||||
|
#ifdef HAVE_REPLICATION_THREADS
|
||||||
|
#include "dbinc/repmgr.h"
|
||||||
|
#endif
|
||||||
|
#include "dbinc/rep.h"
|
||||||
|
#include "dbinc/os.h"
|
||||||
|
#include "dbinc_auto/clib_ext.h"
|
||||||
|
#include "dbinc_auto/common_ext.h"
|
||||||
|
|
||||||
|
/*******************************************************
|
||||||
|
* Remaining Log.
|
||||||
|
* These need to be defined after the general includes
|
||||||
|
* because they need rep.h from above.
|
||||||
|
*******************************************************/
|
||||||
|
/*
|
||||||
|
* Test if the environment is currently logging changes. If we're in recovery
|
||||||
|
* or we're a replication client, we don't need to log changes because they're
|
||||||
|
* already in the log, even though we have a fully functional log system.
|
||||||
|
*/
|
||||||
|
#define DBENV_LOGGING(env) \
|
||||||
|
(LOGGING_ON(env) && !IS_REP_CLIENT(env) && (!IS_RECOVERING(env)))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Test if we need to log a change. By default, we don't log operations without
|
||||||
|
* associated transactions, unless DIAGNOSTIC, DEBUG_ROP or DEBUG_WOP are on.
|
||||||
|
* This is because we want to get log records for read/write operations, and, if
|
||||||
|
* we are trying to debug something, more information is always better.
|
||||||
|
*
|
||||||
|
* The DBC_RECOVER flag is set when we're in abort, as well as during recovery;
|
||||||
|
* thus DBC_LOGGING may be false for a particular dbc even when DBENV_LOGGING
|
||||||
|
* is true.
|
||||||
|
*
|
||||||
|
* We explicitly use LOGGING_ON/IS_REP_CLIENT here because we don't want to pull
|
||||||
|
* in the log headers, which IS_RECOVERING (and thus DBENV_LOGGING) rely on, and
|
||||||
|
* because DBC_RECOVER should be set anytime IS_RECOVERING would be true.
|
||||||
|
*
|
||||||
|
* If we're not in recovery (master - doing an abort or a client applying
|
||||||
|
* a txn), then a client's only path through here is on an internal
|
||||||
|
* operation, and a master's only path through here is a transactional
|
||||||
|
* operation. Detect if either is not the case.
|
||||||
|
*/
|
||||||
|
#if defined(DIAGNOSTIC) || defined(DEBUG_ROP) || defined(DEBUG_WOP)
|
||||||
|
#define DBC_LOGGING(dbc) __dbc_logging(dbc)
|
||||||
|
#else
|
||||||
|
#define DBC_LOGGING(dbc) \
|
||||||
|
((dbc)->txn != NULL && LOGGING_ON((dbc)->env) && \
|
||||||
|
!F_ISSET((dbc), DBC_RECOVER) && !IS_REP_CLIENT((dbc)->env))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* !_DB_INT_H_ */
|
||||||
858
build_wince/db_small.vcp
Normal file
858
build_wince/db_small.vcp
Normal file
@@ -0,0 +1,858 @@
|
|||||||
|
# Microsoft eMbedded Visual Tools Project File - Name="db_small" - Package Owner=<4>
|
||||||
|
# Microsoft eMbedded Visual Tools Generated Build File, Format Version 6.02
|
||||||
|
# ** DO NOT EDIT **
|
||||||
|
|
||||||
|
# TARGTYPE "Win32 (WCE ARMV4) Static Library" 0xa304
|
||||||
|
# TARGTYPE "Win32 (WCE emulator) Static Library" 0xa604
|
||||||
|
|
||||||
|
CFG=db_small - Win32 (WCE emulator) Debug
|
||||||
|
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||||
|
!MESSAGE use the Export Makefile command and run
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE NMAKE /f "db_small.vcn".
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE You can specify a configuration when running NMAKE
|
||||||
|
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE NMAKE /f "db_small.vcn" CFG="db_small - Win32 (WCE emulator) Debug"
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE Possible choices for configuration are:
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE "db_small - Win32 (WCE emulator) Release" (based on "Win32 (WCE emulator) Static Library")
|
||||||
|
!MESSAGE "db_small - Win32 (WCE emulator) Debug" (based on "Win32 (WCE emulator) Static Library")
|
||||||
|
!MESSAGE "db_small - Win32 (WCE ARMV4) Release" (based on "Win32 (WCE ARMV4) Static Library")
|
||||||
|
!MESSAGE "db_small - Win32 (WCE ARMV4) Debug" (based on "Win32 (WCE ARMV4) Static Library")
|
||||||
|
!MESSAGE
|
||||||
|
|
||||||
|
# Begin Project
|
||||||
|
# PROP AllowPerConfigDependencies 0
|
||||||
|
# PROP Scc_ProjName ""
|
||||||
|
# PROP Scc_LocalPath ""
|
||||||
|
# PROP ATL_Project 2
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "db_small - Win32 (WCE emulator) Release"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 0
|
||||||
|
# PROP BASE Output_Dir "Release_EMU"
|
||||||
|
# PROP BASE Intermediate_Dir "Release_EMU/db_small"
|
||||||
|
# PROP BASE CPU_ID "{32E52003-403E-442D-BE48-DE10F8C6131D}"
|
||||||
|
# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 0
|
||||||
|
# PROP Use_Debug_Libraries 0
|
||||||
|
# PROP Output_Dir "Release_EMU"
|
||||||
|
# PROP Intermediate_Dir "Release_EMU/db_small"
|
||||||
|
# PROP CPU_ID "{32E52003-403E-442D-BE48-DE10F8C6131D}"
|
||||||
|
# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
CPP=cl.exe
|
||||||
|
# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "_i386_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_X86_" /D "x86" /D "NDEBUG" /D "_LIB" /Yu"stdafx.h" /Gs8192 /D "HAVE_SMALLBUILD" /GF /O2 /c
|
||||||
|
# ADD CPP /nologo /W3 /I "." /I ".." /D "DB_WIN32" /D "DB_WINCE" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "_i386_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_X86_" /D "x86" /D "NDEBUG" /D "_LIB" /D "__NO_SYSTEM_INCLUDES" /Yu"stdafx.h" /Gs8192 /D "HAVE_SMALLBUILD" /GF /O2 /c
|
||||||
|
# SUBTRACT CPP /YX /Yc /Yu
|
||||||
|
LIB32=link.exe -lib
|
||||||
|
# ADD BASE LIB32 /nologo /out:"Release_EMU/libdb_small47s.lib"
|
||||||
|
# ADD LIB32 /nologo /out:"Release_EMU/libdb_small47s.lib"
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "db_small - Win32 (WCE emulator) Debug"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 1
|
||||||
|
# PROP BASE Output_Dir "Debug_EMU"
|
||||||
|
# PROP BASE Intermediate_Dir "Debug_EMU/db_small"
|
||||||
|
# PROP BASE CPU_ID "{32E52003-403E-442D-BE48-DE10F8C6131D}"
|
||||||
|
# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 0
|
||||||
|
# PROP Use_Debug_Libraries 1
|
||||||
|
# PROP Output_Dir "Debug_EMU"
|
||||||
|
# PROP Intermediate_Dir "Debug_EMU/db_small"
|
||||||
|
# PROP CPU_ID "{32E52003-403E-442D-BE48-DE10F8C6131D}"
|
||||||
|
# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
CPP=cl.exe
|
||||||
|
# ADD BASE CPP /nologo /W3 /Zi /Od /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "_i386_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_X86_" /D "x86" /D "_LIB" /Yu"stdafx.h" /Gs8192 /D "HAVE_SMALLBUILD" /GF /c
|
||||||
|
# ADD CPP /nologo /W3 /I "." /I ".." /D "DB_WIN32" /D "DB_WINCE" /Zi /Od /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "_i386_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_X86_" /D "x86" /D "_LIB" /D "__NO_SYSTEM_INCLUDES" /Yu"stdafx.h" /Gs8192 /D "HAVE_SMALLBUILD" /GF /c
|
||||||
|
# SUBTRACT CPP /YX /Yc /Yu
|
||||||
|
LIB32=link.exe -lib
|
||||||
|
# ADD BASE LIB32 /nologo /out:"Debug_EMU/libdb_small47sd.lib"
|
||||||
|
# ADD LIB32 /nologo /out:"Debug_EMU/libdb_small47sd.lib"
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "db_small - Win32 (WCE ARMV4) Release"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 0
|
||||||
|
# PROP BASE Output_Dir "Release_ARMV4"
|
||||||
|
# PROP BASE Intermediate_Dir "Release_ARMV4/db_small"
|
||||||
|
# PROP BASE CPU_ID "{ECBEA43D-CD7B-4852-AD55-D4227B5D624B}"
|
||||||
|
# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 0
|
||||||
|
# PROP Use_Debug_Libraries 0
|
||||||
|
# PROP Output_Dir "Release_ARMV4"
|
||||||
|
# PROP Intermediate_Dir "Release_ARMV4/db_small"
|
||||||
|
# PROP CPU_ID "{ECBEA43D-CD7B-4852-AD55-D4227B5D624B}"
|
||||||
|
# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
CPP=clarm.exe
|
||||||
|
# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "NDEBUG" /D "ARM" /D "_ARM_" /D "ARMV4" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /Yu"stdafx.h" /O2 /M$(CECrtMT) /D "HAVE_SMALLBUILD" /c
|
||||||
|
# ADD CPP /nologo /W3 /I "." /I ".." /D "DB_WIN32" /D "DB_WINCE" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "NDEBUG" /D "ARM" /D "_ARM_" /D "ARMV4" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /D "__NO_SYSTEM_INCLUDES" /Yu"stdafx.h" /O2 /M$(CECrtMT) /D "HAVE_SMALLBUILD" /c
|
||||||
|
# SUBTRACT CPP /YX /Yc /Yu
|
||||||
|
LIB32=link.exe -lib
|
||||||
|
# ADD BASE LIB32 /nologo /out:"Release_ARMV4/libdb_small47s.lib"
|
||||||
|
# ADD LIB32 /nologo /out:"Release_ARMV4/libdb_small47s.lib"
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "db_small - Win32 (WCE ARMV4) Debug"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 1
|
||||||
|
# PROP BASE Output_Dir "Debug_ARMV4"
|
||||||
|
# PROP BASE Intermediate_Dir "Debug_ARMV4/db_small"
|
||||||
|
# PROP BASE CPU_ID "{ECBEA43D-CD7B-4852-AD55-D4227B5D624B}"
|
||||||
|
# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 0
|
||||||
|
# PROP Use_Debug_Libraries 1
|
||||||
|
# PROP Output_Dir "Debug_ARMV4"
|
||||||
|
# PROP Intermediate_Dir "Debug_ARMV4/db_small"
|
||||||
|
# PROP CPU_ID "{ECBEA43D-CD7B-4852-AD55-D4227B5D624B}"
|
||||||
|
# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
CPP=clarm.exe
|
||||||
|
# ADD BASE CPP /nologo /W3 /Zi /Od /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "ARM" /D "_ARM_" /D "ARMV4" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /Yu"stdafx.h" /M$(CECrtMTDebug) /D "HAVE_SMALLBUILD" /c
|
||||||
|
# ADD CPP /nologo /W3 /I "." /I ".." /D "DB_WIN32" /D "DB_WINCE" /Zi /Od /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "ARM" /D "_ARM_" /D "ARMV4" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /D "__NO_SYSTEM_INCLUDES" /Yu"stdafx.h" /M$(CECrtMTDebug) /D "HAVE_SMALLBUILD" /c
|
||||||
|
# SUBTRACT CPP /YX /Yc /Yu
|
||||||
|
LIB32=link.exe -lib
|
||||||
|
# ADD BASE LIB32 /nologo /out:"Debug_ARMV4/libdb_small47sd.lib"
|
||||||
|
# ADD LIB32 /nologo /out:"Debug_ARMV4/libdb_small47sd.lib"
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
# Begin Target
|
||||||
|
|
||||||
|
# Name "db_small - Win32 (WCE emulator) Release"
|
||||||
|
# Name "db_small - Win32 (WCE emulator) Debug"
|
||||||
|
# Name "db_small - Win32 (WCE ARMV4) Release"
|
||||||
|
# Name "db_small - Win32 (WCE ARMV4) Debug"
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\btree\bt_compact.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\btree\bt_compare.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\btree\bt_conv.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\btree\bt_curadj.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\btree\bt_cursor.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\btree\bt_delete.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\btree\bt_method.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\btree\bt_open.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\btree\bt_put.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\btree\bt_rec.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\btree\bt_reclaim.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\btree\bt_recno.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\btree\bt_rsearch.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\btree\bt_search.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\btree\bt_split.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\btree\bt_stat.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\btree\bt_upgrade.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\btree\bt_verify.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\btree\btree_auto.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\clib\strdup.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\clib\strerror.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\clib\strsep.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\clib\time.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\common\crypto_stub.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\common\db_byteorder.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\common\db_err.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\common\db_getlong.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\common\db_idspace.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\common\db_log2.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\common\db_shash.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\common\dbt.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\common\mkpath.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\common\util_cache.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\common\util_log.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\common\zerofill.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\crdel_auto.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\crdel_rec.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_am.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_auto.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_cam.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_cds.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_conv.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_dispatch.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_dup.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_iface.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_join.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_meta.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_method.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_open.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_overflow.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_pr.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_rec.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_reclaim.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_remove.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_rename.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_ret.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_setid.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_setlsn.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_stati.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_truncate.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_upg.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_upg_opd.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_vrfy_stub.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\dbreg\dbreg.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\dbreg\dbreg_auto.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\dbreg\dbreg_rec.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\dbreg\dbreg_stat.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\dbreg\dbreg_util.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\env\env_alloc.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\env\env_config.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\env\env_failchk.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\env\env_file.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\env\env_globals.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\env\env_method.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\env\env_name.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\env\env_open.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\env\env_recover.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\env\env_region.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\env\env_register.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\env\env_sig.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\env\env_stat.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\fileops\fileops_auto.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\fileops\fop_basic.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\fileops\fop_rec.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\fileops\fop_util.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\hash\hash_func.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\hash\hash_stub.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\hmac\hmac.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\hmac\sha1.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\lock\lock.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\lock\lock_deadlock.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\lock\lock_failchk.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\lock\lock_id.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\lock\lock_list.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\lock\lock_method.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\lock\lock_region.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\lock\lock_stat.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\lock\lock_timer.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\lock\lock_util.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\log\log.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\log\log_archive.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\log\log_compare.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\log\log_debug.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\log\log_get.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\log\log_method.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\log\log_put.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\log\log_stat.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\mp\mp_alloc.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\mp\mp_bh.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\mp\mp_fget.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\mp\mp_fmethod.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\mp\mp_fopen.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\mp\mp_fput.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\mp\mp_fset.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\mp\mp_method.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\mp\mp_mvcc.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\mp\mp_region.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\mp\mp_register.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\mp\mp_resize.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\mp\mp_stat.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\mp\mp_sync.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\mp\mp_trickle.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\mutex\mut_alloc.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\mutex\mut_failchk.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\mutex\mut_method.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\mutex\mut_region.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\mutex\mut_stat.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\mutex\mut_win32.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os\os_abort.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os\os_alloc.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os\os_pid.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os\os_root.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os\os_rpath.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os\os_stack.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os\os_tmpdir.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os\os_uid.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os_windows\ce_ctime.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os_windows\os_abs.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os_windows\os_clock.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os_windows\os_config.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os_windows\os_cpu.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os_windows\os_dir.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os_windows\os_errno.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os_windows\os_fid.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os_windows\os_flock.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os_windows\os_fsync.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os_windows\os_getenv.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os_windows\os_handle.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os_windows\os_map.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os_windows\os_mkdir.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os_windows\os_open.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os_windows\os_rename.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os_windows\os_rw.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os_windows\os_seek.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os_windows\os_stat.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os_windows\os_truncate.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os_windows\os_unlink.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os_windows\os_yield.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\qam\qam_stub.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\rep\rep_stub.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\repmgr\repmgr_stub.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\sequence\seq_stat.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\sequence\sequence.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\txn\txn.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\txn\txn_auto.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\txn\txn_chkpt.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\txn\txn_failchk.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\txn\txn_method.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\txn\txn_rec.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\txn\txn_recover.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\txn\txn_region.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\txn\txn_stat.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\txn\txn_util.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\xa\xa.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\xa\xa_db.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\xa\xa_map.c
|
||||||
|
# End Source File
|
||||||
|
# End Target
|
||||||
|
# End Project
|
||||||
7442
build_wince/db_small.vcproj
Normal file
7442
build_wince/db_small.vcproj
Normal file
File diff suppressed because it is too large
Load Diff
966
build_wince/db_static.vcp
Normal file
966
build_wince/db_static.vcp
Normal file
@@ -0,0 +1,966 @@
|
|||||||
|
# Microsoft eMbedded Visual Tools Project File - Name="db_static" - Package Owner=<4>
|
||||||
|
# Microsoft eMbedded Visual Tools Generated Build File, Format Version 6.02
|
||||||
|
# ** DO NOT EDIT **
|
||||||
|
|
||||||
|
# TARGTYPE "Win32 (WCE ARMV4) Static Library" 0xa304
|
||||||
|
# TARGTYPE "Win32 (WCE emulator) Static Library" 0xa604
|
||||||
|
|
||||||
|
CFG=db_static - Win32 (WCE emulator) Debug
|
||||||
|
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||||
|
!MESSAGE use the Export Makefile command and run
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE NMAKE /f "db_static.vcn".
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE You can specify a configuration when running NMAKE
|
||||||
|
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE NMAKE /f "db_static.vcn" CFG="db_static - Win32 (WCE emulator) Debug"
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE Possible choices for configuration are:
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE "db_static - Win32 (WCE emulator) Release" (based on "Win32 (WCE emulator) Static Library")
|
||||||
|
!MESSAGE "db_static - Win32 (WCE emulator) Debug" (based on "Win32 (WCE emulator) Static Library")
|
||||||
|
!MESSAGE "db_static - Win32 (WCE ARMV4) Release" (based on "Win32 (WCE ARMV4) Static Library")
|
||||||
|
!MESSAGE "db_static - Win32 (WCE ARMV4) Debug" (based on "Win32 (WCE ARMV4) Static Library")
|
||||||
|
!MESSAGE
|
||||||
|
|
||||||
|
# Begin Project
|
||||||
|
# PROP AllowPerConfigDependencies 0
|
||||||
|
# PROP Scc_ProjName ""
|
||||||
|
# PROP Scc_LocalPath ""
|
||||||
|
# PROP ATL_Project 2
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "db_static - Win32 (WCE emulator) Release"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 0
|
||||||
|
# PROP BASE Output_Dir "Release_EMU"
|
||||||
|
# PROP BASE Intermediate_Dir "Release_EMU/db_static"
|
||||||
|
# PROP BASE CPU_ID "{32E52003-403E-442D-BE48-DE10F8C6131D}"
|
||||||
|
# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 0
|
||||||
|
# PROP Use_Debug_Libraries 0
|
||||||
|
# PROP Output_Dir "Release_EMU"
|
||||||
|
# PROP Intermediate_Dir "Release_EMU/db_static"
|
||||||
|
# PROP CPU_ID "{32E52003-403E-442D-BE48-DE10F8C6131D}"
|
||||||
|
# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
CPP=cl.exe
|
||||||
|
# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "_i386_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_X86_" /D "x86" /D "NDEBUG" /D "_LIB" /Yu"stdafx.h" /Gs8192 /GF /O2 /c
|
||||||
|
# ADD CPP /nologo /W3 /I "." /I ".." /D "DB_WIN32" /D "DB_WINCE" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "_i386_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_X86_" /D "x86" /D "NDEBUG" /D "_LIB" /D "__NO_SYSTEM_INCLUDES" /Yu"stdafx.h" /Gs8192 /GF /O2 /c
|
||||||
|
# SUBTRACT CPP /YX /Yc /Yu
|
||||||
|
LIB32=link.exe -lib
|
||||||
|
# ADD BASE LIB32 /nologo /out:"Release_EMU/libdb47s.lib"
|
||||||
|
# ADD LIB32 /nologo /out:"Release_EMU/libdb47s.lib"
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "db_static - Win32 (WCE emulator) Debug"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 1
|
||||||
|
# PROP BASE Output_Dir "Debug_EMU"
|
||||||
|
# PROP BASE Intermediate_Dir "Debug_EMU/db_static"
|
||||||
|
# PROP BASE CPU_ID "{32E52003-403E-442D-BE48-DE10F8C6131D}"
|
||||||
|
# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 0
|
||||||
|
# PROP Use_Debug_Libraries 1
|
||||||
|
# PROP Output_Dir "Debug_EMU"
|
||||||
|
# PROP Intermediate_Dir "Debug_EMU/db_static"
|
||||||
|
# PROP CPU_ID "{32E52003-403E-442D-BE48-DE10F8C6131D}"
|
||||||
|
# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
CPP=cl.exe
|
||||||
|
# ADD BASE CPP /nologo /W3 /Zi /Od /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "_i386_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_X86_" /D "x86" /D "_LIB" /Yu"stdafx.h" /Gs8192 /GF /c
|
||||||
|
# ADD CPP /nologo /W3 /I "." /I ".." /D "DB_WIN32" /D "DB_WINCE" /Zi /Od /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "_i386_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_X86_" /D "x86" /D "_LIB" /D "__NO_SYSTEM_INCLUDES" /Yu"stdafx.h" /Gs8192 /GF /c
|
||||||
|
# SUBTRACT CPP /YX /Yc /Yu
|
||||||
|
LIB32=link.exe -lib
|
||||||
|
# ADD BASE LIB32 /nologo /out:"Debug_EMU/libdb47sd.lib"
|
||||||
|
# ADD LIB32 /nologo /out:"Debug_EMU/libdb47sd.lib"
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "db_static - Win32 (WCE ARMV4) Release"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 0
|
||||||
|
# PROP BASE Output_Dir "Release_ARMV4"
|
||||||
|
# PROP BASE Intermediate_Dir "Release_ARMV4/db_static"
|
||||||
|
# PROP BASE CPU_ID "{ECBEA43D-CD7B-4852-AD55-D4227B5D624B}"
|
||||||
|
# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 0
|
||||||
|
# PROP Use_Debug_Libraries 0
|
||||||
|
# PROP Output_Dir "Release_ARMV4"
|
||||||
|
# PROP Intermediate_Dir "Release_ARMV4/db_static"
|
||||||
|
# PROP CPU_ID "{ECBEA43D-CD7B-4852-AD55-D4227B5D624B}"
|
||||||
|
# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
CPP=clarm.exe
|
||||||
|
# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "NDEBUG" /D "ARM" /D "_ARM_" /D "ARMV4" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /Yu"stdafx.h" /O2 /M$(CECrtMT) /c
|
||||||
|
# ADD CPP /nologo /W3 /I "." /I ".." /D "DB_WIN32" /D "DB_WINCE" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "NDEBUG" /D "ARM" /D "_ARM_" /D "ARMV4" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /D "__NO_SYSTEM_INCLUDES" /Yu"stdafx.h" /O2 /M$(CECrtMT) /c
|
||||||
|
# SUBTRACT CPP /YX /Yc /Yu
|
||||||
|
LIB32=link.exe -lib
|
||||||
|
# ADD BASE LIB32 /nologo /out:"Release_ARMV4/libdb47s.lib"
|
||||||
|
# ADD LIB32 /nologo /out:"Release_ARMV4/libdb47s.lib"
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "db_static - Win32 (WCE ARMV4) Debug"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 1
|
||||||
|
# PROP BASE Output_Dir "Debug_ARMV4"
|
||||||
|
# PROP BASE Intermediate_Dir "Debug_ARMV4/db_static"
|
||||||
|
# PROP BASE CPU_ID "{ECBEA43D-CD7B-4852-AD55-D4227B5D624B}"
|
||||||
|
# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 0
|
||||||
|
# PROP Use_Debug_Libraries 1
|
||||||
|
# PROP Output_Dir "Debug_ARMV4"
|
||||||
|
# PROP Intermediate_Dir "Debug_ARMV4/db_static"
|
||||||
|
# PROP CPU_ID "{ECBEA43D-CD7B-4852-AD55-D4227B5D624B}"
|
||||||
|
# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
CPP=clarm.exe
|
||||||
|
# ADD BASE CPP /nologo /W3 /Zi /Od /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "ARM" /D "_ARM_" /D "ARMV4" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /Yu"stdafx.h" /M$(CECrtMTDebug) /c
|
||||||
|
# ADD CPP /nologo /W3 /I "." /I ".." /D "DB_WIN32" /D "DB_WINCE" /Zi /Od /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "ARM" /D "_ARM_" /D "ARMV4" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /D "__NO_SYSTEM_INCLUDES" /Yu"stdafx.h" /M$(CECrtMTDebug) /c
|
||||||
|
# SUBTRACT CPP /YX /Yc /Yu
|
||||||
|
LIB32=link.exe -lib
|
||||||
|
# ADD BASE LIB32 /nologo /out:"Debug_ARMV4/libdb47sd.lib"
|
||||||
|
# ADD LIB32 /nologo /out:"Debug_ARMV4/libdb47sd.lib"
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
# Begin Target
|
||||||
|
|
||||||
|
# Name "db_static - Win32 (WCE emulator) Release"
|
||||||
|
# Name "db_static - Win32 (WCE emulator) Debug"
|
||||||
|
# Name "db_static - Win32 (WCE ARMV4) Release"
|
||||||
|
# Name "db_static - Win32 (WCE ARMV4) Debug"
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\btree\bt_compact.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\btree\bt_compare.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\btree\bt_conv.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\btree\bt_curadj.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\btree\bt_cursor.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\btree\bt_delete.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\btree\bt_method.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\btree\bt_open.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\btree\bt_put.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\btree\bt_rec.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\btree\bt_reclaim.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\btree\bt_recno.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\btree\bt_rsearch.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\btree\bt_search.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\btree\bt_split.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\btree\bt_stat.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\btree\bt_upgrade.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\btree\bt_verify.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\btree\btree_auto.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\clib\strdup.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\clib\strerror.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\clib\strsep.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\clib\time.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\common\db_byteorder.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\common\db_err.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\common\db_getlong.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\common\db_idspace.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\common\db_log2.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\common\db_shash.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\common\dbt.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\common\mkpath.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\common\util_cache.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\common\util_log.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\common\zerofill.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\crypto\aes_method.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\crypto\crypto.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\crypto\mersenne\mt19937db.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\crypto\rijndael\rijndael-alg-fst.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\crypto\rijndael\rijndael-api-fst.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\crdel_auto.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\crdel_rec.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_am.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_auto.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_cam.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_cds.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_conv.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_dispatch.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_dup.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_iface.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_join.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_meta.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_method.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_open.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_overflow.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_ovfl_vrfy.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_pr.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_rec.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_reclaim.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_remove.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_rename.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_ret.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_setid.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_setlsn.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_stati.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_truncate.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_upg.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_upg_opd.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_vrfy.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\db\db_vrfyutil.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\dbreg\dbreg.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\dbreg\dbreg_auto.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\dbreg\dbreg_rec.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\dbreg\dbreg_stat.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\dbreg\dbreg_util.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\env\env_alloc.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\env\env_config.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\env\env_failchk.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\env\env_file.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\env\env_globals.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\env\env_method.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\env\env_name.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\env\env_open.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\env\env_recover.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\env\env_region.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\env\env_register.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\env\env_sig.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\env\env_stat.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\fileops\fileops_auto.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\fileops\fop_basic.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\fileops\fop_rec.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\fileops\fop_util.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\hash\hash.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\hash\hash_auto.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\hash\hash_conv.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\hash\hash_dup.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\hash\hash_func.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\hash\hash_meta.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\hash\hash_method.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\hash\hash_open.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\hash\hash_page.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\hash\hash_rec.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\hash\hash_reclaim.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\hash\hash_stat.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\hash\hash_upgrade.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\hash\hash_verify.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\hmac\hmac.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\hmac\sha1.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\lock\lock.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\lock\lock_deadlock.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\lock\lock_failchk.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\lock\lock_id.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\lock\lock_list.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\lock\lock_method.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\lock\lock_region.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\lock\lock_stat.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\lock\lock_timer.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\lock\lock_util.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\log\log.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\log\log_archive.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\log\log_compare.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\log\log_debug.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\log\log_get.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\log\log_method.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\log\log_put.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\log\log_stat.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\mp\mp_alloc.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\mp\mp_bh.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\mp\mp_fget.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\mp\mp_fmethod.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\mp\mp_fopen.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\mp\mp_fput.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\mp\mp_fset.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\mp\mp_method.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\mp\mp_mvcc.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\mp\mp_region.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\mp\mp_register.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\mp\mp_resize.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\mp\mp_stat.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\mp\mp_sync.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\mp\mp_trickle.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\mutex\mut_alloc.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\mutex\mut_failchk.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\mutex\mut_method.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\mutex\mut_region.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\mutex\mut_stat.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\mutex\mut_win32.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os\os_abort.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os\os_alloc.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os\os_pid.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os\os_root.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os\os_rpath.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os\os_stack.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os\os_tmpdir.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os\os_uid.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os_windows\ce_ctime.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os_windows\os_abs.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os_windows\os_clock.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os_windows\os_config.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os_windows\os_cpu.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os_windows\os_dir.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os_windows\os_errno.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os_windows\os_fid.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os_windows\os_flock.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os_windows\os_fsync.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os_windows\os_getenv.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os_windows\os_handle.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os_windows\os_map.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os_windows\os_mkdir.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os_windows\os_open.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os_windows\os_rename.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os_windows\os_rw.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os_windows\os_seek.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os_windows\os_stat.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os_windows\os_truncate.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os_windows\os_unlink.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\os_windows\os_yield.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\qam\qam.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\qam\qam_auto.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\qam\qam_conv.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\qam\qam_files.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\qam\qam_method.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\qam\qam_open.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\qam\qam_rec.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\qam\qam_stat.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\qam\qam_upgrade.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\qam\qam_verify.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\rep\rep_stub.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\repmgr\repmgr_stub.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\sequence\seq_stat.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\sequence\sequence.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\txn\txn.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\txn\txn_auto.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\txn\txn_chkpt.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\txn\txn_failchk.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\txn\txn_method.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\txn\txn_rec.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\txn\txn_recover.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\txn\txn_region.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\txn\txn_stat.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\txn\txn_util.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\xa\xa.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\xa\xa_db.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\xa\xa_map.c
|
||||||
|
# End Source File
|
||||||
|
# End Target
|
||||||
|
# End Project
|
||||||
8522
build_wince/db_static.vcproj
Normal file
8522
build_wince/db_static.vcproj
Normal file
File diff suppressed because it is too large
Load Diff
188
build_wince/errno.h
Normal file
188
build_wince/errno.h
Normal file
@@ -0,0 +1,188 @@
|
|||||||
|
/*-
|
||||||
|
* Copyright (c) 1982, 1986, 1989, 1993
|
||||||
|
* The Regents of the University of California. All rights reserved.
|
||||||
|
* (c) UNIX System Laboratories, Inc.
|
||||||
|
* All or some portions of this file are derived from material licensed
|
||||||
|
* to the University of California by American Telephone and Telegraph
|
||||||
|
* Co. or Unix System Laboratories, Inc. and are reproduced herein with
|
||||||
|
* the permission of UNIX System Laboratories, Inc.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 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.
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @(#)errno.h 8.5 (Berkeley) 1/21/94
|
||||||
|
* FreeBSD: /repoman/r/ncvs/src/sys/sys/errno.h,v 1.28 2005/04/02 12:33:28 das Exp $
|
||||||
|
*
|
||||||
|
* $Id: errno.h 63573 2008-05-23 21:43:21Z trent.nelson $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _SYS_ERRNO_H_
|
||||||
|
#define _SYS_ERRNO_H_
|
||||||
|
|
||||||
|
#undef errno
|
||||||
|
#define errno DB_GLOBAL(db_errno)
|
||||||
|
|
||||||
|
#define EPERM 1 /* Operation not permitted */
|
||||||
|
#define ENOENT 2 /* No such file or directory */
|
||||||
|
#define ESRCH 3 /* No such process */
|
||||||
|
#define EINTR 4 /* Interrupted system call */
|
||||||
|
#define EIO 5 /* Input/output error */
|
||||||
|
#define ENXIO 6 /* Device not configured */
|
||||||
|
#define E2BIG 7 /* Argument list too long */
|
||||||
|
#define ENOEXEC 8 /* Exec format error */
|
||||||
|
#define EBADF 9 /* Bad file descriptor */
|
||||||
|
#define ECHILD 10 /* No child processes */
|
||||||
|
#define EDEADLK 11 /* Resource deadlock avoided */
|
||||||
|
/* 11 was EAGAIN */
|
||||||
|
#define ENOMEM 12 /* Cannot allocate memory */
|
||||||
|
#define EACCES 13 /* Permission denied */
|
||||||
|
#define EFAULT 14 /* Bad address */
|
||||||
|
#ifndef _POSIX_SOURCE
|
||||||
|
#define ENOTBLK 15 /* Block device required */
|
||||||
|
#endif
|
||||||
|
#define EBUSY 16 /* Device busy */
|
||||||
|
#define EEXIST 17 /* File exists */
|
||||||
|
#define EXDEV 18 /* Cross-device link */
|
||||||
|
#define ENODEV 19 /* Operation not supported by device */
|
||||||
|
#define ENOTDIR 20 /* Not a directory */
|
||||||
|
#define EISDIR 21 /* Is a directory */
|
||||||
|
#define EINVAL 22 /* Invalid argument */
|
||||||
|
#define ENFILE 23 /* Too many open files in system */
|
||||||
|
#define EMFILE 24 /* Too many open files */
|
||||||
|
#define ENOTTY 25 /* Inappropriate ioctl for device */
|
||||||
|
#ifndef _POSIX_SOURCE
|
||||||
|
#define ETXTBSY 26 /* Text file busy */
|
||||||
|
#endif
|
||||||
|
#define EFBIG 27 /* File too large */
|
||||||
|
#define ENOSPC 28 /* No space left on device */
|
||||||
|
#define ESPIPE 29 /* Illegal seek */
|
||||||
|
#define EROFS 30 /* Read-only filesystem */
|
||||||
|
#define EMLINK 31 /* Too many links */
|
||||||
|
#define EPIPE 32 /* Broken pipe */
|
||||||
|
|
||||||
|
/* math software */
|
||||||
|
#define EDOM 33 /* Numerical argument out of domain */
|
||||||
|
#define ERANGE 34 /* Result too large */
|
||||||
|
|
||||||
|
/* non-blocking and interrupt i/o */
|
||||||
|
#define EAGAIN 35 /* Resource temporarily unavailable */
|
||||||
|
#ifndef _POSIX_SOURCE
|
||||||
|
#define EWOULDBLOCK EAGAIN /* Operation would block */
|
||||||
|
#define EINPROGRESS 36 /* Operation now in progress */
|
||||||
|
|
||||||
|
#ifndef EALREADY /* BREW already has an EALREADY. */
|
||||||
|
#define EALREADY 37 /* Operation already in progress */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* ipc/network software -- argument errors */
|
||||||
|
#define ENOTSOCK 38 /* Socket operation on non-socket */
|
||||||
|
#define EDESTADDRREQ 39 /* Destination address required */
|
||||||
|
#define EMSGSIZE 40 /* Message too long */
|
||||||
|
#define EPROTOTYPE 41 /* Protocol wrong type for socket */
|
||||||
|
#define ENOPROTOOPT 42 /* Protocol not available */
|
||||||
|
#define EPROTONOSUPPORT 43 /* Protocol not supported */
|
||||||
|
#define ESOCKTNOSUPPORT 44 /* Socket type not supported */
|
||||||
|
#define EOPNOTSUPP 45 /* Operation not supported */
|
||||||
|
#define ENOTSUP EOPNOTSUPP /* Operation not supported */
|
||||||
|
#define EPFNOSUPPORT 46 /* Protocol family not supported */
|
||||||
|
#define EAFNOSUPPORT 47 /* Address family not supported by protocol family */
|
||||||
|
#define EADDRINUSE 48 /* Address already in use */
|
||||||
|
#define EADDRNOTAVAIL 49 /* Can't assign requested address */
|
||||||
|
|
||||||
|
/* ipc/network software -- operational errors */
|
||||||
|
#define ENETDOWN 50 /* Network is down */
|
||||||
|
#define ENETUNREACH 51 /* Network is unreachable */
|
||||||
|
#define ENETRESET 52 /* Network dropped connection on reset */
|
||||||
|
#define ECONNABORTED 53 /* Software caused connection abort */
|
||||||
|
#define ECONNRESET 54 /* Connection reset by peer */
|
||||||
|
#define ENOBUFS 55 /* No buffer space available */
|
||||||
|
#define EISCONN 56 /* Socket is already connected */
|
||||||
|
#define ENOTCONN 57 /* Socket is not connected */
|
||||||
|
#define ESHUTDOWN 58 /* Can't send after socket shutdown */
|
||||||
|
#define ETOOMANYREFS 59 /* Too many references: can't splice */
|
||||||
|
#define ETIMEDOUT 60 /* Operation timed out */
|
||||||
|
#define ECONNREFUSED 61 /* Connection refused */
|
||||||
|
|
||||||
|
#define ELOOP 62 /* Too many levels of symbolic links */
|
||||||
|
#endif /* _POSIX_SOURCE */
|
||||||
|
#define ENAMETOOLONG 63 /* File name too long */
|
||||||
|
|
||||||
|
/* should be rearranged */
|
||||||
|
#ifndef _POSIX_SOURCE
|
||||||
|
#define EHOSTDOWN 64 /* Host is down */
|
||||||
|
#define EHOSTUNREACH 65 /* No route to host */
|
||||||
|
#endif /* _POSIX_SOURCE */
|
||||||
|
#define ENOTEMPTY 66 /* Directory not empty */
|
||||||
|
|
||||||
|
/* quotas & mush */
|
||||||
|
#ifndef _POSIX_SOURCE
|
||||||
|
#define EPROCLIM 67 /* Too many processes */
|
||||||
|
#define EUSERS 68 /* Too many users */
|
||||||
|
#define EDQUOT 69 /* Disc quota exceeded */
|
||||||
|
|
||||||
|
/* Network File System */
|
||||||
|
#define ESTALE 70 /* Stale NFS file handle */
|
||||||
|
#define EREMOTE 71 /* Too many levels of remote in path */
|
||||||
|
#define EBADRPC 72 /* RPC struct is bad */
|
||||||
|
#define ERPCMISMATCH 73 /* RPC version wrong */
|
||||||
|
#define EPROGUNAVAIL 74 /* RPC prog. not avail */
|
||||||
|
#define EPROGMISMATCH 75 /* Program version wrong */
|
||||||
|
#define EPROCUNAVAIL 76 /* Bad procedure for program */
|
||||||
|
#endif /* _POSIX_SOURCE */
|
||||||
|
|
||||||
|
#define ENOLCK 77 /* No locks available */
|
||||||
|
#define ENOSYS 78 /* Function not implemented */
|
||||||
|
|
||||||
|
#ifndef _POSIX_SOURCE
|
||||||
|
#define EFTYPE 79 /* Inappropriate file type or format */
|
||||||
|
#define EAUTH 80 /* Authentication error */
|
||||||
|
#define ENEEDAUTH 81 /* Need authenticator */
|
||||||
|
#define EIDRM 82 /* Identifier removed */
|
||||||
|
#define ENOMSG 83 /* No message of desired type */
|
||||||
|
#define EOVERFLOW 84 /* Value too large to be stored in data type */
|
||||||
|
#define ECANCELED 85 /* Operation canceled */
|
||||||
|
#define EILSEQ 86 /* Illegal byte sequence */
|
||||||
|
#define ENOATTR 87 /* Attribute not found */
|
||||||
|
|
||||||
|
#define EDOOFUS 88 /* Programming error */
|
||||||
|
#endif /* _POSIX_SOURCE */
|
||||||
|
|
||||||
|
#define EBADMSG 89 /* Bad message */
|
||||||
|
#define EMULTIHOP 90 /* Multihop attempted */
|
||||||
|
#define ENOLINK 91 /* Link has been severed */
|
||||||
|
#define EPROTO 92 /* Protocol error */
|
||||||
|
|
||||||
|
#ifndef _POSIX_SOURCE
|
||||||
|
#define ELAST 92 /* Must be equal largest errno */
|
||||||
|
#endif /* _POSIX_SOURCE */
|
||||||
|
|
||||||
|
#ifdef _KERNEL
|
||||||
|
/* pseudo-errors returned inside kernel to modify return to process */
|
||||||
|
#define ERESTART (-1) /* restart syscall */
|
||||||
|
#define EJUSTRETURN (-2) /* don't modify regs, just return */
|
||||||
|
#define ENOIOCTL (-3) /* ioctl not handled by this layer */
|
||||||
|
#define EDIRIOCTL (-4) /* do direct ioctl in GEOM */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
40
build_wince/rsrcfile_vcproj.src
Normal file
40
build_wince/rsrcfile_vcproj.src
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
<File
|
||||||
|
RelativePath="@srcdir@\@srcfile@"
|
||||||
|
>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Release|Smartphone 2003 (ARMV4)"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=""
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Release|Pocket PC 2003 (ARMV4)"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=""
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug|Smartphone 2003 (ARMV4)"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=""
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug|Pocket PC 2003 (ARMV4)"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=""
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
4
build_wince/srcfile_vcp.src
Normal file
4
build_wince/srcfile_vcp.src
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=@srcdir@\@srcfile@
|
||||||
|
# End Source File
|
||||||
40
build_wince/srcfile_vcproj.src
Normal file
40
build_wince/srcfile_vcproj.src
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
<File
|
||||||
|
RelativePath="@srcdir@\@srcfile@"
|
||||||
|
>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Release|Smartphone 2003 (ARMV4)"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=""
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Release|Pocket PC 2003 (ARMV4)"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=""
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug|Smartphone 2003 (ARMV4)"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=""
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug|Pocket PC 2003 (ARMV4)"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=""
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user