1b8ba871bSPeter Wemm /*- 2b8ba871bSPeter Wemm * Copyright (c) 1992, 1993, 1994 3b8ba871bSPeter Wemm * The Regents of the University of California. All rights reserved. 4b8ba871bSPeter Wemm * Copyright (c) 1992, 1993, 1994, 1995, 1996 5b8ba871bSPeter Wemm * Keith Bostic. All rights reserved. 6b8ba871bSPeter Wemm * 7b8ba871bSPeter Wemm * See the LICENSE file for redistribution information. 8b8ba871bSPeter Wemm */ 9b8ba871bSPeter Wemm /* Undo direction. */ 10b8ba871bSPeter Wemm /* 11b8ba871bSPeter Wemm * exf -- 12b8ba871bSPeter Wemm * The file structure. 13b8ba871bSPeter Wemm */ 14b8ba871bSPeter Wemm struct _exf { 15b8ba871bSPeter Wemm int refcnt; /* Reference count. */ 16b8ba871bSPeter Wemm 17b8ba871bSPeter Wemm /* Underlying database state. */ 18b8ba871bSPeter Wemm DB *db; /* File db structure. */ 19*f0957ccaSPeter Wemm CHAR_T *c_lp; /* Cached line. */ 20b8ba871bSPeter Wemm size_t c_len; /* Cached line length. */ 21*f0957ccaSPeter Wemm size_t c_blen; /* Cached line buffer length. */ 22b8ba871bSPeter Wemm recno_t c_lno; /* Cached line number. */ 23b8ba871bSPeter Wemm recno_t c_nlines; /* Cached lines in the file. */ 24b8ba871bSPeter Wemm 25b8ba871bSPeter Wemm DB *log; /* Log db structure. */ 26b8ba871bSPeter Wemm char *l_lp; /* Log buffer. */ 27b8ba871bSPeter Wemm size_t l_len; /* Log buffer length. */ 28b8ba871bSPeter Wemm recno_t l_high; /* Log last + 1 record number. */ 29b8ba871bSPeter Wemm recno_t l_cur; /* Log current record number. */ 30b8ba871bSPeter Wemm MARK l_cursor; /* Log cursor position. */ 31b8ba871bSPeter Wemm dir_t lundo; /* Last undo direction. */ 32b8ba871bSPeter Wemm 33*f0957ccaSPeter Wemm /* Linked list of file MARK's. */ 34*f0957ccaSPeter Wemm SLIST_HEAD(_markh, _lmark) marks[1]; 35b8ba871bSPeter Wemm 36b8ba871bSPeter Wemm dev_t mdev; /* Device. */ 37b8ba871bSPeter Wemm ino_t minode; /* Inode. */ 38*f0957ccaSPeter Wemm struct timespec mtim; /* Last modification time. */ 39b8ba871bSPeter Wemm 40b8ba871bSPeter Wemm /* 41b8ba871bSPeter Wemm * Recovery in general, and these fields specifically, are described 42b8ba871bSPeter Wemm * in recover.c. 43b8ba871bSPeter Wemm */ 44b8ba871bSPeter Wemm #define RCV_PERIOD 120 /* Sync every two minutes. */ 45b8ba871bSPeter Wemm char *rcv_path; /* Recover file name. */ 46b8ba871bSPeter Wemm char *rcv_mpath; /* Recover mail file name. */ 47b8ba871bSPeter Wemm int rcv_fd; /* Locked mail file descriptor. */ 48b8ba871bSPeter Wemm 49b8ba871bSPeter Wemm #define F_DEVSET 0x001 /* mdev/minode fields initialized. */ 50b8ba871bSPeter Wemm #define F_FIRSTMODIFY 0x002 /* File not yet modified. */ 51b8ba871bSPeter Wemm #define F_MODIFIED 0x004 /* File is currently dirty. */ 52b8ba871bSPeter Wemm #define F_MULTILOCK 0x008 /* Multiple processes running, lock. */ 53b8ba871bSPeter Wemm #define F_NOLOG 0x010 /* Logging turned off. */ 54b8ba871bSPeter Wemm #define F_RCV_NORM 0x020 /* Don't delete recovery files. */ 55b8ba871bSPeter Wemm #define F_RCV_ON 0x040 /* Recovery is possible. */ 56b8ba871bSPeter Wemm #define F_UNDO 0x080 /* No change since last undo. */ 57b8ba871bSPeter Wemm u_int8_t flags; 58b8ba871bSPeter Wemm }; 59b8ba871bSPeter Wemm 60b8ba871bSPeter Wemm /* Flags to db_get(). */ 61b8ba871bSPeter Wemm #define DBG_FATAL 0x001 /* If DNE, error message. */ 62b8ba871bSPeter Wemm #define DBG_NOCACHE 0x002 /* Ignore the front-end cache. */ 63b8ba871bSPeter Wemm 64b8ba871bSPeter Wemm /* Flags to file_init() and file_write(). */ 65b8ba871bSPeter Wemm #define FS_ALL 0x001 /* Write the entire file. */ 66b8ba871bSPeter Wemm #define FS_APPEND 0x002 /* Append to the file. */ 67b8ba871bSPeter Wemm #define FS_FORCE 0x004 /* Force is set. */ 68b8ba871bSPeter Wemm #define FS_OPENERR 0x008 /* Open failed, try it again. */ 69b8ba871bSPeter Wemm #define FS_POSSIBLE 0x010 /* Force could have been set. */ 70b8ba871bSPeter Wemm #define FS_SETALT 0x020 /* Set alternate file name. */ 71b8ba871bSPeter Wemm 72b8ba871bSPeter Wemm /* Flags to rcv_sync(). */ 73b8ba871bSPeter Wemm #define RCV_EMAIL 0x01 /* Send the user email, IFF file modified. */ 74b8ba871bSPeter Wemm #define RCV_ENDSESSION 0x02 /* End the file session. */ 75b8ba871bSPeter Wemm #define RCV_PRESERVE 0x04 /* Preserve backup file, IFF file modified. */ 76b8ba871bSPeter Wemm #define RCV_SNAPSHOT 0x08 /* Snapshot the recovery, and send email. */ 77