refs #27 --HG-- branch : keith rename : lint/fl => dist/lint/fl rename : lint/lint.current => dist/lint/lint.current rename : inc_posix/bitstring.h => include/bitstring.h rename : inc_posix/btree.h => include/btree.h rename : inc_posix/cache.h => include/cache.h rename : inc_posix/debug.h => include/debug.h rename : inc_posix/extern.h => include/extern.h rename : inc_posix/fh.h => include/fh.h rename : inc_posix/mem.h => include/mem.h rename : inc_posix/misc.h => include/misc.h rename : inc_posix/mutex.h => include/mutex.h rename : inc_posix/queue.h => include/queue.h rename : inc_posix/serial.h => include/serial.h rename : inc_posix/stat.h => include/stat.h rename : inc_posix/util.h => include/util.h rename : inc_posix/walk.h => include/walk.h rename : inc_posix/wiredtiger.in => include/wiredtiger.in rename : inc_posix/wt_internal.in => include/wt_internal.in rename : btree/bt_alloc.c => src/btree/bt_alloc.c rename : btree/bt_bulk.c => src/btree/bt_bulk.c rename : btree/bt_cache.c => src/btree/bt_cache.c rename : btree/bt_close.c => src/btree/bt_close.c rename : btree/bt_cmp.c => src/btree/bt_cmp.c rename : btree/bt_debug.c => src/btree/bt_debug.c rename : btree/bt_desc.c => src/btree/bt_desc.c rename : btree/bt_discard.c => src/btree/bt_discard.c rename : btree/bt_dump.c => src/btree/bt_dump.c rename : btree/bt_evict.c => src/btree/bt_evict.c rename : btree/bt_misc.c => src/btree/bt_misc.c rename : btree/bt_open.c => src/btree/bt_open.c rename : btree/bt_ovfl.c => src/btree/bt_ovfl.c rename : btree/bt_page.c => src/btree/bt_page.c rename : btree/bt_read.c => src/btree/bt_read.c rename : btree/bt_reconcile.c => src/btree/bt_reconcile.c rename : btree/bt_ret.c => src/btree/bt_ret.c rename : btree/bt_rw.c => src/btree/bt_rw.c rename : btree/bt_stat.c => src/btree/bt_stat.c rename : btree/bt_sync.c => src/btree/bt_sync.c rename : btree/bt_vrfy.c => src/btree/bt_vrfy.c rename : btree/bt_walk.c => src/btree/bt_walk.c rename : btree/c_drain.c => src/btree/c_drain.c rename : btree/c_init.c => src/btree/c_init.c rename : btree/c_page.c => src/btree/c_page.c rename : btree/c_read.c => src/btree/c_read.c rename : btree/col_get.c => src/btree/col_get.c rename : btree/col_put.c => src/btree/col_put.c rename : btree/col_srch.c => src/btree/col_srch.c rename : btree/row_get.c => src/btree/row_get.c rename : btree/row_put.c => src/btree/row_put.c rename : btree/row_srch.c => src/btree/row_srch.c rename : db/db_err.c => src/db/db_err.c rename : db/db_getset.c => src/db/db_getset.c rename : db/db_handle.c => src/db/db_handle.c rename : db/db_huffman.c => src/db/db_huffman.c rename : db/db_open.c => src/db/db_open.c rename : db/db_stat.c => src/db/db_stat.c rename : db/db_sync.c => src/db/db_sync.c rename : env/env_err.c => src/env/env_err.c rename : env/env_getset.c => src/env/env_getset.c rename : env/env_global.c => src/env/env_global.c rename : env/env_handle.c => src/env/env_handle.c rename : env/env_init.c => src/env/env_init.c rename : env/env_msg.c => src/env/env_msg.c rename : env/env_open.c => src/env/env_open.c rename : env/env_stat.c => src/env/env_stat.c rename : env/env_sync.c => src/env/env_sync.c rename : env/env_toc.c => src/env/env_toc.c rename : env/env_workq.c => src/env/env_workq.c rename : os_posix/os_abort.c => src/os_posix/os_abort.c rename : os_posix/os_alloc.c => src/os_posix/os_alloc.c rename : os_posix/os_filesize.c => src/os_posix/os_filesize.c rename : os_posix/os_fsync.c => src/os_posix/os_fsync.c rename : os_posix/os_mtx.c => src/os_posix/os_mtx.c rename : os_posix/os_open.c => src/os_posix/os_open.c rename : os_posix/os_rw.c => src/os_posix/os_rw.c rename : os_posix/os_sleep.c => src/os_posix/os_sleep.c rename : os_posix/os_thread.c => src/os_posix/os_thread.c rename : os_posix/os_yield.c => src/os_posix/os_yield.c rename : support/api.c => src/support/api.c rename : support/cksum.c => src/support/cksum.c rename : support/err.c => src/support/err.c rename : support/hazard.c => src/support/hazard.c rename : support/huffman.c => src/support/huffman.c rename : support/pow.c => src/support/pow.c rename : support/prime.c => src/support/prime.c rename : support/progress.c => src/support/progress.c rename : support/scratch.c => src/support/scratch.c rename : support/serial.c => src/support/serial.c rename : support/simple_setup.c => src/support/simple_setup.c rename : support/stat.c => src/support/stat.c rename : support/strerror.c => src/support/strerror.c rename : support/version.c => src/support/version.c rename : utilities/db_dump/util_dump.c => src/utilities/db_dump/util_dump.c rename : utilities/db_load/util_load.c => src/utilities/db_load/util_load.c rename : utilities/db_stat/util_stat.c => src/utilities/db_stat/util_stat.c rename : utilities/db_verify/util_verify.c => src/utilities/db_verify/util_verify.c
124 lines
3.3 KiB
C
124 lines
3.3 KiB
C
/*-
|
|
* See the file LICENSE for redistribution information.
|
|
*
|
|
* Copyright (c) 2008-2011 WiredTiger, Inc.
|
|
* All rights reserved.
|
|
*
|
|
* $Id$
|
|
*/
|
|
|
|
#if defined(__cplusplus)
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* Basic constants. */
|
|
#define WT_BILLION (1000000000)
|
|
#define WT_MEGABYTE (1048576)
|
|
#define WT_MILLION (1000000)
|
|
|
|
/* Align a number to a specified power-of-2. */
|
|
#define WT_ALIGN(n, v) \
|
|
(((n) + ((v) - 1)) & ~(((uintmax_t)(v)) - 1))
|
|
|
|
/* Min, max. */
|
|
#define WT_MIN(a, b) ((a) < (b) ? (a) : (b))
|
|
#define WT_MAX(a, b) ((a) < (b) ? (b) : (a))
|
|
|
|
/* Elements in an array. */
|
|
#define WT_ELEMENTS(a) (sizeof(a) / sizeof(a[0]))
|
|
|
|
/* Flag check for API functions. */
|
|
#define WT_ENV_FCHK_RET(env, name, f, mask, ret) \
|
|
if ((f) & ~(mask)) \
|
|
ret = __wt_api_args(env, name);
|
|
#define WT_ENV_FCHK(env, name, f, mask) \
|
|
if ((f) & ~(mask)) \
|
|
return (__wt_api_args(env, name));
|
|
#define WT_DB_FCHK(db, name, f, mask) \
|
|
WT_ENV_FCHK((db)->env, name, f, mask)
|
|
|
|
/* Read-only database check. */
|
|
#define WT_DB_RDONLY(db, name) \
|
|
if (F_ISSET((db)->idb, WT_RDONLY)) \
|
|
return (__wt_database_readonly(db, name));
|
|
|
|
/* Column- and row-only database check. */
|
|
#define WT_DB_ROW_ONLY(db, name) \
|
|
if (F_ISSET((db)->idb, WT_COLUMN)) \
|
|
return (__wt_database_method_type(db, name, 1));
|
|
#define WT_DB_COL_ONLY(db, name) \
|
|
if (!F_ISSET((db)->idb, WT_COLUMN)) \
|
|
return (__wt_database_method_type(db, name, 0));
|
|
|
|
/*
|
|
* Flag set, clear and test. They come in 3 flavors: F_XXX (handles a
|
|
* field named "flags" in the structure referenced by its argument),
|
|
* LF_XXX (handles a local variable named "flags"), and FLD_XXX (handles
|
|
* any variable, anywhere.
|
|
*/
|
|
#define F_CLR(p, mask) ((p)->flags &= ~(mask))
|
|
#define F_ISSET(p, mask) ((p)->flags & (mask))
|
|
#define F_SET(p, mask) ((p)->flags |= (mask))
|
|
|
|
#define LF_CLR(mask) ((flags) &= ~(mask))
|
|
#define LF_ISSET(mask) ((flags) & (mask))
|
|
#define LF_SET(mask) ((flags) |= (mask))
|
|
|
|
#define FLD_CLR(field, mask) ((field) &= ~(mask))
|
|
#define FLD_ISSET(field, mask) ((field) & (mask))
|
|
#define FLD_SET(field, mask) ((field) |= (mask))
|
|
|
|
/* Output a verbose message. */
|
|
#ifdef HAVE_VERBOSE
|
|
#define WT_VERBOSE(env, f, msg) do { \
|
|
if (FLD_ISSET((env)->verbose, WT_VERB_ALL | (f))) \
|
|
__wt_msg msg; \
|
|
} while (0)
|
|
#else
|
|
#define WT_VERBOSE(env, f, msg)
|
|
#endif
|
|
|
|
/* Clear a structure. */
|
|
#define WT_CLEAR(s) \
|
|
memset(&(s), 0, sizeof(s))
|
|
|
|
#define WT_ILLEGAL_FORMAT(db) \
|
|
default: \
|
|
return (__wt_database_format(db))
|
|
#define WT_ILLEGAL_FORMAT_ERR(db, ret) \
|
|
default: \
|
|
ret = __wt_database_format(db); \
|
|
goto err
|
|
|
|
/*
|
|
* Macros to handle standard return values and optionally branch to an error
|
|
* label.
|
|
*/
|
|
#define WT_ERR(a) do { \
|
|
if ((ret = (a)) != 0) \
|
|
goto err; \
|
|
} while (0)
|
|
#define WT_RET(a) do { \
|
|
int __ret; \
|
|
if ((__ret = (a)) != 0) \
|
|
return (__ret); \
|
|
} while (0)
|
|
#define WT_TRET(a) do { \
|
|
int __ret; \
|
|
if ((__ret = (a)) != 0 && ret == 0) \
|
|
ret = __ret; \
|
|
} while (0)
|
|
|
|
/*
|
|
* There are lots of places where we release a reference to a page, unless it's
|
|
* the root page, which remains pinned for the life of the table handle. It's
|
|
* common enough to need a macro.
|
|
*/
|
|
#define WT_PAGE_OUT(toc, p) \
|
|
if ((p) != NULL && (p) != (toc)->db->idb->root_page.page) \
|
|
__wt_hazard_clear(toc, p);
|
|
|
|
#if defined(__cplusplus)
|
|
}
|
|
#endif
|