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