mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-01 22:55:23 +00:00
158 lines
3.5 KiB
C++
158 lines
3.5 KiB
C++
/*-
|
|
* See the file LICENSE for redistribution information.
|
|
*
|
|
* Copyright (c) 1997, 1998
|
|
* Sleepycat Software. All rights reserved.
|
|
*/
|
|
|
|
#include "config.h"
|
|
|
|
#ifndef lint
|
|
static const char sccsid[] = "@(#)cxx_log.cpp 10.7 (Sleepycat) 4/10/98";
|
|
#endif /* not lint */
|
|
|
|
#include "db_cxx.h"
|
|
#include "cxx_int.h"
|
|
#include <errno.h>
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// DbLog //
|
|
// //
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
DbLog::DbLog()
|
|
: imp_(0)
|
|
{
|
|
}
|
|
|
|
DbLog::~DbLog()
|
|
{
|
|
}
|
|
|
|
int DbLog::archive(char **list[], u_int32_t flags, void *(*db_malloc)(size_t))
|
|
{
|
|
int err;
|
|
DB_LOG *log = unwrap(this);
|
|
if ((err = log_archive(log, list, flags, db_malloc)) != 0) {
|
|
DB_ERROR("DbLog::archive", err);
|
|
return err;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int DbLog::close()
|
|
{
|
|
int err;
|
|
DB_LOG *log = unwrap(this);
|
|
if ((err = log_close(log)) != 0) {
|
|
DB_ERROR("DbLog::close", err);
|
|
return err;
|
|
}
|
|
imp_ = 0; // extra safety
|
|
|
|
// This may seem weird, but is legal as long as we don't access
|
|
// any data before returning.
|
|
//
|
|
delete this;
|
|
return 0;
|
|
}
|
|
|
|
int DbLog::compare(const DbLsn *lsn0, const DbLsn *lsn1)
|
|
{
|
|
return log_compare(lsn0, lsn1);
|
|
}
|
|
|
|
int DbLog::file(DbLsn *lsn, char *namep, int len)
|
|
{
|
|
int err;
|
|
DB_LOG *log = unwrap(this);
|
|
if ((err = log_file(log, lsn, namep, len)) != 0) {
|
|
DB_ERROR("DbLog::file", err);
|
|
return err;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int DbLog::flush(const DbLsn *lsn)
|
|
{
|
|
int err;
|
|
DB_LOG *log = unwrap(this);
|
|
if ((err = log_flush(log, lsn)) != 0) {
|
|
DB_ERROR("DbLog::flush", err);
|
|
return err;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int DbLog::get(DbLsn *lsn, Dbt *data, u_int32_t flags)
|
|
{
|
|
int err;
|
|
DB_LOG *log = unwrap(this);
|
|
if ((err = log_get(log, lsn, data, flags)) != 0) {
|
|
DB_ERROR("DbLog::get", err);
|
|
return err;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int DbLog::put(DbLsn *lsn, const Dbt *data, u_int32_t flags)
|
|
{
|
|
int err = 0;
|
|
DB_LOG *log = unwrap(this);
|
|
if ((err = log_put(log, lsn, data, flags)) != 0) {
|
|
DB_ERROR("DbLog::put", err);
|
|
return err;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int DbLog::db_register(Db *dbp, const char *name, DBTYPE type, u_int32_t *fidp)
|
|
{
|
|
int err = 0;
|
|
DB_LOG *log = unwrap(this);
|
|
if ((err = log_register(log, unwrap(dbp), name, type, fidp)) != 0) {
|
|
DB_ERROR("DbLog::db_register", err);
|
|
return err;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int DbLog::db_unregister(u_int32_t fid)
|
|
{
|
|
int err;
|
|
DB_LOG *log = unwrap(this);
|
|
if ((err = log_unregister(log, fid)) != 0) {
|
|
DB_ERROR("DbLog::db_unregister", err);
|
|
return err;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
// static method
|
|
int DbLog::open(const char *dir, u_int32_t flags, int mode,
|
|
DbEnv *dbenv, DbLog **regionp)
|
|
{
|
|
*regionp = 0;
|
|
DB_LOG *result = 0;
|
|
int err;
|
|
if ((err = log_open(dir, flags, mode, dbenv, &result)) != 0) {
|
|
DB_ERROR("DbLog::open", err);
|
|
return err;
|
|
}
|
|
*regionp = new DbLog();
|
|
(*regionp)->imp_ = wrap(result);
|
|
return err;
|
|
}
|
|
|
|
// static method
|
|
int DbLog::unlink(const char *dir, int force, DbEnv *dbenv)
|
|
{
|
|
int err;
|
|
if ((err = log_unlink(dir, force, dbenv)) != 0) {
|
|
DB_ERROR("DbLog::unlink", err);
|
|
return err;
|
|
}
|
|
return err;
|
|
}
|