119304Speter/*- 219304Speter * Copyright (c) 1992, 1993, 1994 319304Speter * The Regents of the University of California. All rights reserved. 419304Speter * Copyright (c) 1992, 1993, 1994, 1995, 1996 519304Speter * Keith Bostic. All rights reserved. 619304Speter * 719304Speter * See the LICENSE file for redistribution information. 819304Speter * 9254225Speter * $Id: exf.h,v 10.10 2012/07/06 16:03:37 zy Exp $ 1019304Speter */ 1119304Speter /* Undo direction. */ 1219304Speter/* 1319304Speter * exf -- 1419304Speter * The file structure. 1519304Speter */ 1619304Speterstruct _exf { 1719304Speter int refcnt; /* Reference count. */ 1819304Speter 1919304Speter /* Underlying database state. */ 2019304Speter DB *db; /* File db structure. */ 21254225Speter CHAR_T *c_lp; /* Cached line. */ 2219304Speter size_t c_len; /* Cached line length. */ 23254225Speter size_t c_blen; /* Cached line buffer length. */ 2419304Speter recno_t c_lno; /* Cached line number. */ 2519304Speter recno_t c_nlines; /* Cached lines in the file. */ 2619304Speter 2719304Speter DB *log; /* Log db structure. */ 2819304Speter char *l_lp; /* Log buffer. */ 2919304Speter size_t l_len; /* Log buffer length. */ 3019304Speter recno_t l_high; /* Log last + 1 record number. */ 3119304Speter recno_t l_cur; /* Log current record number. */ 3219304Speter MARK l_cursor; /* Log cursor position. */ 3319304Speter dir_t lundo; /* Last undo direction. */ 3419304Speter 35254225Speter /* Linked list of file MARK's. */ 36254225Speter SLIST_HEAD(_markh, _lmark) marks[1]; 3719304Speter 38254225Speter dev_t mdev; /* Device. */ 39254225Speter ino_t minode; /* Inode. */ 40254225Speter struct timespec mtim; /* Last modification time. */ 4119304Speter 4219304Speter /* 4319304Speter * Recovery in general, and these fields specifically, are described 4419304Speter * in recover.c. 4519304Speter */ 4619304Speter#define RCV_PERIOD 120 /* Sync every two minutes. */ 4719304Speter char *rcv_path; /* Recover file name. */ 4819304Speter char *rcv_mpath; /* Recover mail file name. */ 4919304Speter int rcv_fd; /* Locked mail file descriptor. */ 5019304Speter 5119304Speter#define F_DEVSET 0x001 /* mdev/minode fields initialized. */ 5219304Speter#define F_FIRSTMODIFY 0x002 /* File not yet modified. */ 5319304Speter#define F_MODIFIED 0x004 /* File is currently dirty. */ 5419304Speter#define F_MULTILOCK 0x008 /* Multiple processes running, lock. */ 5519304Speter#define F_NOLOG 0x010 /* Logging turned off. */ 5619304Speter#define F_RCV_NORM 0x020 /* Don't delete recovery files. */ 5719304Speter#define F_RCV_ON 0x040 /* Recovery is possible. */ 5819304Speter#define F_UNDO 0x080 /* No change since last undo. */ 5919304Speter u_int8_t flags; 6019304Speter}; 6119304Speter 6219304Speter/* Flags to db_get(). */ 6319304Speter#define DBG_FATAL 0x001 /* If DNE, error message. */ 6419304Speter#define DBG_NOCACHE 0x002 /* Ignore the front-end cache. */ 6519304Speter 6619304Speter/* Flags to file_init() and file_write(). */ 6719304Speter#define FS_ALL 0x001 /* Write the entire file. */ 6819304Speter#define FS_APPEND 0x002 /* Append to the file. */ 6919304Speter#define FS_FORCE 0x004 /* Force is set. */ 7019304Speter#define FS_OPENERR 0x008 /* Open failed, try it again. */ 7119304Speter#define FS_POSSIBLE 0x010 /* Force could have been set. */ 7219304Speter#define FS_SETALT 0x020 /* Set alternate file name. */ 7319304Speter 7419304Speter/* Flags to rcv_sync(). */ 7519304Speter#define RCV_EMAIL 0x01 /* Send the user email, IFF file modified. */ 7619304Speter#define RCV_ENDSESSION 0x02 /* End the file session. */ 7719304Speter#define RCV_PRESERVE 0x04 /* Preserve backup file, IFF file modified. */ 7819304Speter#define RCV_SNAPSHOT 0x08 /* Snapshot the recovery, and send email. */ 79