diff options
Diffstat (limited to 'bdb/btree/bt_reclaim.c')
-rw-r--r-- | bdb/btree/bt_reclaim.c | 45 |
1 files changed, 39 insertions, 6 deletions
diff --git a/bdb/btree/bt_reclaim.c b/bdb/btree/bt_reclaim.c index 538d837c2d2..ae4554ea7d6 100644 --- a/bdb/btree/bt_reclaim.c +++ b/bdb/btree/bt_reclaim.c @@ -1,14 +1,14 @@ /*- * See the file LICENSE for redistribution information. * - * Copyright (c) 1998, 1999, 2000 + * Copyright (c) 1998-2002 * Sleepycat Software. All rights reserved. */ #include "db_config.h" #ifndef lint -static const char revid[] = "$Id: bt_reclaim.c,v 11.5 2000/03/22 04:21:01 ubell Exp $"; +static const char revid[] = "$Id: bt_reclaim.c,v 11.11 2002/03/29 20:46:26 bostic Exp $"; #endif /* not lint */ #ifndef NO_SYSTEM_INCLUDES @@ -18,10 +18,8 @@ static const char revid[] = "$Id: bt_reclaim.c,v 11.5 2000/03/22 04:21:01 ubell #endif #include "db_int.h" -#include "db_page.h" -#include "db_shash.h" -#include "lock.h" -#include "btree.h" +#include "dbinc/db_page.h" +#include "dbinc/btree.h" /* * __bam_reclaim -- @@ -51,3 +49,38 @@ __bam_reclaim(dbp, txn) return (ret); } + +/* + * __bam_truncate -- + * Truncate a database. + * + * PUBLIC: int __bam_truncate __P((DB *, DB_TXN *, u_int32_t *)); + */ +int +__bam_truncate(dbp, txn, countp) + DB *dbp; + DB_TXN *txn; + u_int32_t *countp; +{ + DBC *dbc; + db_trunc_param trunc; + int ret, t_ret; + + /* Acquire a cursor. */ + if ((ret = dbp->cursor(dbp, txn, &dbc, 0)) != 0) + return (ret); + + trunc.count = 0; + trunc.dbc = dbc; + /* Walk the tree, freeing pages. */ + ret = __bam_traverse(dbc, + DB_LOCK_WRITE, dbc->internal->root, __db_truncate_callback, &trunc); + + /* Discard the cursor. */ + if ((t_ret = dbc->c_close(dbc)) != 0 && ret == 0) + ret = t_ret; + + *countp = trunc.count; + + return (ret); +} |