1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22 /* 23 * db_log_c.x 24 * 25 * Copyright 2005 Sun Microsystems, Inc. All rights reserved. 26 * Use is subject to license terms. 27 */ 28 29 %#pragma ident "%Z%%M% %I% %E% SMI" 30 31 #if RPC_HDR 32 %#ifndef _DB_LOG_H 33 %#define _DB_LOG_H 34 35 #ifdef USINGC 36 %#include "db_log_entry_c.h" 37 #else 38 %#include "db_pickle.h" 39 %#include "db_log_entry.h" 40 #endif /* USINGC */ 41 #endif /* RPC_HDR */ 42 % 43 %#include "nisdb_rw.h" 44 % 45 #ifndef USINGC 46 #ifdef RPC_HDR 47 %class db_log: public pickle_file { 48 % private: 49 % int syncstate; /* 0 if changes xfrd to <table>.log */ 50 % char *tmplog; /* <table>.log.tmp */ 51 % char *stablelog; /* <table>.log.stable */ 52 % char *oldlog; /* remember name of <table>.log */ 53 % STRUCTRWLOCK(log); 54 % 55 % public: 56 % 57 %/* Constructor: create log file; default is PICKLE_READ mode. */ 58 % db_log( char* f, pickle_mode m = PICKLE_READ ): pickle_file(f, m) { 59 % syncstate = 0; 60 % tmplog = stablelog = oldlog = 0; 61 % INITRW(log); 62 % } 63 % 64 % ~db_log(void) { 65 % DESTROYRW(log); 66 % } 67 % 68 %/* Execute given function 'func' on log. 69 % function takes as arguments: pointer to log entry, character pointer to 70 % another argument, and pointer to an integer, which is used as a counter. 71 % 'func' should increment this value for each successful application. 72 % The log is traversed until either 'func' returns FALSE, or when the log 73 % is exhausted. The second argument to 'execute_on_log' is passed as the 74 % second argument to 'func'. The third argument, 'clean' determines whether 75 % the log entry is deleted after the function has been applied. 76 % Returns the number of times that 'func' incremented its third argument. */ 77 % int execute_on_log( bool_t(* f) (db_log_entry *, char *, int *), 78 % char *, bool_t = TRUE ); 79 % 80 % 81 %/* Print contents of log file to stdout */ 82 % int print(); 83 % 84 %/* Make copy of current log to log pointed to by 'f'. */ 85 % int copy( db_log*); 86 % 87 %/*Rewinds current log */ 88 % int rewind(); 89 % 90 %/*Append given log entry to log. */ 91 % int append( db_log_entry * ); 92 % 93 %/* Flush and sync log file. */ 94 % int sync_log(); 95 % 96 %/* Return the next element in current log; return NULL if end of log or error. 97 % Log must have been opened for READ. */ 98 % db_log_entry *get(); 99 % 100 %/* bool_t dump( pptr ) {return TRUE;}*/ // does nothing. 101 % 102 %/* Open log file */ 103 % int open(void); 104 %/* Close log file */ 105 % int close(); 106 %/* Do we need to copy the log file */ 107 % bool_t copylog; 108 % 109 %/* Locking methods */ 110 % 111 % int acqexcl(void) { 112 % return (WLOCK(log)); 113 % } 114 % 115 % int relexcl(void) { 116 % return (WULOCK(log)); 117 % } 118 % 119 % int acqnonexcl(void) { 120 % return (RLOCK(log)); 121 % } 122 % 123 % int relnonexcl(void) { 124 % return (RULOCK(log)); 125 % } 126 %}; 127 #endif /* RPC_HDR */ 128 #endif /* USINGC */ 129 130 #if RPC_HDR 131 %#endif /* _DB_LOG_H */ 132 #endif /* RPC_HDR */ 133