diff options
Diffstat (limited to 'debian/htdig/htdig-3.2.0b6/db/mp_register.c')
-rw-r--r-- | debian/htdig/htdig-3.2.0b6/db/mp_register.c | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/debian/htdig/htdig-3.2.0b6/db/mp_register.c b/debian/htdig/htdig-3.2.0b6/db/mp_register.c new file mode 100644 index 00000000..20c81bab --- /dev/null +++ b/debian/htdig/htdig-3.2.0b6/db/mp_register.c @@ -0,0 +1,71 @@ +/*- + * See the file LICENSE for redistribution information. + * + * Copyright (c) 1996, 1997, 1998, 1999 + * Sleepycat Software. All rights reserved. + */ +#include "db_config.h" + +#ifndef lint +static const char sccsid[] = "@(#)mp_register.c 11.2 (Sleepycat) 9/16/99"; +#endif /* not lint */ + +#ifndef NO_SYSTEM_INCLUDES +#include <sys/types.h> +#endif + +#include "db_int.h" +#include "db_shash.h" +#include "mp.h" + +/* + * CDB_memp_register -- + * Register a file type's pgin, pgout routines. + */ +int +CDB_memp_register(dbenv, ftype, pgin, pgout) + DB_ENV *dbenv; + int ftype; + int (*pgin) __P((db_pgno_t, void *, DBT *)); + int (*pgout) __P((db_pgno_t, void *, DBT *)); +{ + DB_MPOOL *dbmp; + DB_MPREG *mpreg; + int ret; + + PANIC_CHECK(dbenv); + ENV_REQUIRES_CONFIG(dbenv, dbenv->mp_handle, DB_INIT_MPOOL); + + dbmp = dbenv->mp_handle; + + /* + * Chances are good that the item has already been registered, as the + * DB access methods are the folks that call this routine. If already + * registered, just update the entry, although it's probably unchanged. + */ + MUTEX_THREAD_LOCK(dbmp->mutexp); + for (mpreg = LIST_FIRST(&dbmp->dbregq); + mpreg != NULL; mpreg = LIST_NEXT(mpreg, q)) + if (mpreg->ftype == ftype) { + mpreg->pgin = pgin; + mpreg->pgout = pgout; + break; + } + MUTEX_THREAD_UNLOCK(dbmp->mutexp); + if (mpreg != NULL) + return (0); + + /* New entry. */ + if ((ret = CDB___os_malloc(sizeof(DB_MPREG), NULL, &mpreg)) != 0) + return (ret); + + mpreg->ftype = ftype; + mpreg->pgin = pgin; + mpreg->pgout = pgout; + + MUTEX_THREAD_LOCK(dbmp->mutexp); + LIST_INSERT_HEAD(&dbmp->dbregq, mpreg, q); + MUTEX_THREAD_UNLOCK(dbmp->mutexp); + + return (0); +} |