/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * db_log_c.x * * Copyright 2005 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ #if RPC_HDR %#ifndef _DB_LOG_H %#define _DB_LOG_H #ifdef USINGC %#include "db_log_entry_c.h" #else %#include "db_pickle.h" %#include "db_log_entry.h" #endif /* USINGC */ #endif /* RPC_HDR */ % %#include "nisdb_rw.h" % #ifndef USINGC #ifdef RPC_HDR %class db_log: public pickle_file { % private: % int syncstate; /* 0 if changes xfrd to .log */ % char *tmplog; /*
.log.tmp */ % char *stablelog; /*
.log.stable */ % char *oldlog; /* remember name of
.log */ % STRUCTRWLOCK(log); % % public: % %/* Constructor: create log file; default is PICKLE_READ mode. */ % db_log( char* f, pickle_mode m = PICKLE_READ ): pickle_file(f, m) { % syncstate = 0; % tmplog = stablelog = oldlog = 0; % INITRW(log); % } % % ~db_log(void) { % DESTROYRW(log); % } % %/* Execute given function 'func' on log. % function takes as arguments: pointer to log entry, character pointer to % another argument, and pointer to an integer, which is used as a counter. % 'func' should increment this value for each successful application. % The log is traversed until either 'func' returns FALSE, or when the log % is exhausted. The second argument to 'execute_on_log' is passed as the % second argument to 'func'. The third argument, 'clean' determines whether % the log entry is deleted after the function has been applied. % Returns the number of times that 'func' incremented its third argument. */ % int execute_on_log( bool_t(* f) (db_log_entry *, char *, int *), % char *, bool_t = TRUE ); % % %/* Print contents of log file to stdout */ % int print(); % %/* Make copy of current log to log pointed to by 'f'. */ % int copy( db_log*); % %/*Rewinds current log */ % int rewind(); % %/*Append given log entry to log. */ % int append( db_log_entry * ); % %/* Flush and sync log file. */ % int sync_log(); % %/* Return the next element in current log; return NULL if end of log or error. % Log must have been opened for READ. */ % db_log_entry *get(); % %/* bool_t dump( pptr ) {return TRUE;}*/ // does nothing. % %/* Open log file */ % bool_t open(void); %/* Close log file */ % int close(); %/* Do we need to copy the log file */ % bool_t copylog; % %/* Locking methods */ % % int acqexcl(void) { % return (WLOCK(log)); % } % % int relexcl(void) { % return (WULOCK(log)); % } % % int acqnonexcl(void) { % return (RLOCK(log)); % } % % int relnonexcl(void) { % return (RULOCK(log)); % } %}; #endif /* RPC_HDR */ #endif /* USINGC */ #if RPC_HDR %#endif /* _DB_LOG_H */ #endif /* RPC_HDR */