1*84d9c625SLionel Sambuc /* Do not edit: automatically built by gen_rec.awk. */
2*84d9c625SLionel Sambuc #include <sys/types.h>
3*84d9c625SLionel Sambuc #include <sys/queue.h>
4*84d9c625SLionel Sambuc #include <sys/stat.h>
5*84d9c625SLionel Sambuc #include <bitstring.h>
6*84d9c625SLionel Sambuc #include <errno.h>
7*84d9c625SLionel Sambuc #include <fcntl.h>
8*84d9c625SLionel Sambuc #include <limits.h>
9*84d9c625SLionel Sambuc #include <stdio.h>
10*84d9c625SLionel Sambuc #include <stdlib.h>
11*84d9c625SLionel Sambuc #include <string.h>
12*84d9c625SLionel Sambuc #include "common.h"
13*84d9c625SLionel Sambuc #include <db_int.h>
14*84d9c625SLionel Sambuc #include "db_page.h"
15*84d9c625SLionel Sambuc #include "db_am.h"
16*84d9c625SLionel Sambuc #include "rep.h"
17*84d9c625SLionel Sambuc #include "txn.h"
18*84d9c625SLionel Sambuc /*
19*84d9c625SLionel Sambuc * PUBLIC: #ifdef USE_DB4_LOGGING
20*84d9c625SLionel Sambuc */
21*84d9c625SLionel Sambuc /*
22*84d9c625SLionel Sambuc * PUBLIC: int __vi_marker_log __P((DB_ENV *, DB_TXN *, DB_LSN *, u_int32_t,
23*84d9c625SLionel Sambuc * PUBLIC: u_int32_t));
24*84d9c625SLionel Sambuc */
25*84d9c625SLionel Sambuc int
__vi_marker_log(dbenv,txnid,ret_lsnp,flags,opcode)26*84d9c625SLionel Sambuc __vi_marker_log(dbenv, txnid, ret_lsnp, flags,
27*84d9c625SLionel Sambuc opcode)
28*84d9c625SLionel Sambuc DB_ENV *dbenv;
29*84d9c625SLionel Sambuc DB_TXN *txnid;
30*84d9c625SLionel Sambuc DB_LSN *ret_lsnp;
31*84d9c625SLionel Sambuc u_int32_t flags;
32*84d9c625SLionel Sambuc u_int32_t opcode;
33*84d9c625SLionel Sambuc {
34*84d9c625SLionel Sambuc DBT logrec;
35*84d9c625SLionel Sambuc DB_LSN *lsnp, null_lsn;
36*84d9c625SLionel Sambuc u_int32_t uinttmp;
37*84d9c625SLionel Sambuc u_int32_t rectype, txn_num;
38*84d9c625SLionel Sambuc int ret;
39*84d9c625SLionel Sambuc u_int8_t *bp;
40*84d9c625SLionel Sambuc
41*84d9c625SLionel Sambuc rectype = DB_vi_marker;
42*84d9c625SLionel Sambuc if (txnid != NULL &&
43*84d9c625SLionel Sambuc TAILQ_FIRST(&txnid->kids) != NULL &&
44*84d9c625SLionel Sambuc (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
45*84d9c625SLionel Sambuc return (ret);
46*84d9c625SLionel Sambuc txn_num = txnid == NULL ? 0 : txnid->txnid;
47*84d9c625SLionel Sambuc if (txnid == NULL) {
48*84d9c625SLionel Sambuc ZERO_LSN(null_lsn);
49*84d9c625SLionel Sambuc lsnp = &null_lsn;
50*84d9c625SLionel Sambuc } else
51*84d9c625SLionel Sambuc lsnp = &txnid->last_lsn;
52*84d9c625SLionel Sambuc logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
53*84d9c625SLionel Sambuc + sizeof(u_int32_t);
54*84d9c625SLionel Sambuc if ((ret = __os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
55*84d9c625SLionel Sambuc return (ret);
56*84d9c625SLionel Sambuc
57*84d9c625SLionel Sambuc bp = logrec.data;
58*84d9c625SLionel Sambuc
59*84d9c625SLionel Sambuc memcpy(bp, &rectype, sizeof(rectype));
60*84d9c625SLionel Sambuc bp += sizeof(rectype);
61*84d9c625SLionel Sambuc
62*84d9c625SLionel Sambuc memcpy(bp, &txn_num, sizeof(txn_num));
63*84d9c625SLionel Sambuc bp += sizeof(txn_num);
64*84d9c625SLionel Sambuc
65*84d9c625SLionel Sambuc memcpy(bp, lsnp, sizeof(DB_LSN));
66*84d9c625SLionel Sambuc bp += sizeof(DB_LSN);
67*84d9c625SLionel Sambuc
68*84d9c625SLionel Sambuc uinttmp = (u_int32_t)opcode;
69*84d9c625SLionel Sambuc memcpy(bp, &uinttmp, sizeof(uinttmp));
70*84d9c625SLionel Sambuc bp += sizeof(uinttmp);
71*84d9c625SLionel Sambuc
72*84d9c625SLionel Sambuc DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
73*84d9c625SLionel Sambuc ret = dbenv->log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
74*84d9c625SLionel Sambuc if (txnid != NULL && ret == 0)
75*84d9c625SLionel Sambuc txnid->last_lsn = *ret_lsnp;
76*84d9c625SLionel Sambuc #ifdef LOG_DIAGNOSTIC
77*84d9c625SLionel Sambuc if (ret != 0)
78*84d9c625SLionel Sambuc (void)__vi_marker_print(dbenv,
79*84d9c625SLionel Sambuc (DBT *)&logrec, ret_lsnp, NULL, NULL);
80*84d9c625SLionel Sambuc #endif
81*84d9c625SLionel Sambuc __os_free(dbenv, logrec.data, logrec.size);
82*84d9c625SLionel Sambuc return (ret);
83*84d9c625SLionel Sambuc }
84*84d9c625SLionel Sambuc
85*84d9c625SLionel Sambuc /*
86*84d9c625SLionel Sambuc * PUBLIC: int __vi_marker_getpgnos __P((DB_ENV *, DBT *, DB_LSN *, db_recops,
87*84d9c625SLionel Sambuc * PUBLIC: void *));
88*84d9c625SLionel Sambuc */
89*84d9c625SLionel Sambuc int
__vi_marker_getpgnos(dbenv,rec,lsnp,notused1,summary)90*84d9c625SLionel Sambuc __vi_marker_getpgnos(dbenv, rec, lsnp, notused1, summary)
91*84d9c625SLionel Sambuc DB_ENV *dbenv;
92*84d9c625SLionel Sambuc DBT *rec;
93*84d9c625SLionel Sambuc DB_LSN *lsnp;
94*84d9c625SLionel Sambuc db_recops notused1;
95*84d9c625SLionel Sambuc void *summary;
96*84d9c625SLionel Sambuc {
97*84d9c625SLionel Sambuc TXN_RECS *t;
98*84d9c625SLionel Sambuc int ret;
99*84d9c625SLionel Sambuc COMPQUIET(rec, NULL);
100*84d9c625SLionel Sambuc COMPQUIET(notused1, DB_TXN_ABORT);
101*84d9c625SLionel Sambuc
102*84d9c625SLionel Sambuc t = (TXN_RECS *)summary;
103*84d9c625SLionel Sambuc
104*84d9c625SLionel Sambuc if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
105*84d9c625SLionel Sambuc return (ret);
106*84d9c625SLionel Sambuc
107*84d9c625SLionel Sambuc t->array[t->npages].flags = LSN_PAGE_NOLOCK;
108*84d9c625SLionel Sambuc t->array[t->npages].lsn = *lsnp;
109*84d9c625SLionel Sambuc t->array[t->npages].fid = DB_LOGFILEID_INVALID;
110*84d9c625SLionel Sambuc memset(&t->array[t->npages].pgdesc, 0,
111*84d9c625SLionel Sambuc sizeof(t->array[t->npages].pgdesc));
112*84d9c625SLionel Sambuc
113*84d9c625SLionel Sambuc t->npages++;
114*84d9c625SLionel Sambuc
115*84d9c625SLionel Sambuc return (0);
116*84d9c625SLionel Sambuc }
117*84d9c625SLionel Sambuc
118*84d9c625SLionel Sambuc /*
119*84d9c625SLionel Sambuc * PUBLIC: int __vi_marker_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops,
120*84d9c625SLionel Sambuc * PUBLIC: void *));
121*84d9c625SLionel Sambuc */
122*84d9c625SLionel Sambuc int
__vi_marker_print(dbenv,dbtp,lsnp,notused2,notused3)123*84d9c625SLionel Sambuc __vi_marker_print(dbenv, dbtp, lsnp, notused2, notused3)
124*84d9c625SLionel Sambuc DB_ENV *dbenv;
125*84d9c625SLionel Sambuc DBT *dbtp;
126*84d9c625SLionel Sambuc DB_LSN *lsnp;
127*84d9c625SLionel Sambuc db_recops notused2;
128*84d9c625SLionel Sambuc void *notused3;
129*84d9c625SLionel Sambuc {
130*84d9c625SLionel Sambuc __vi_marker_args *argp;
131*84d9c625SLionel Sambuc int ret;
132*84d9c625SLionel Sambuc
133*84d9c625SLionel Sambuc notused2 = DB_TXN_ABORT;
134*84d9c625SLionel Sambuc notused3 = NULL;
135*84d9c625SLionel Sambuc
136*84d9c625SLionel Sambuc if ((ret = __vi_marker_read(dbenv, dbtp->data, &argp)) != 0)
137*84d9c625SLionel Sambuc return (ret);
138*84d9c625SLionel Sambuc (void)printf(
139*84d9c625SLionel Sambuc "[%lu][%lu]vi_marker: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
140*84d9c625SLionel Sambuc (u_long)lsnp->file,
141*84d9c625SLionel Sambuc (u_long)lsnp->offset,
142*84d9c625SLionel Sambuc (u_long)argp->type,
143*84d9c625SLionel Sambuc (u_long)argp->txnid->txnid,
144*84d9c625SLionel Sambuc (u_long)argp->prev_lsn.file,
145*84d9c625SLionel Sambuc (u_long)argp->prev_lsn.offset);
146*84d9c625SLionel Sambuc (void)printf("\topcode: %lu\n", (u_long)argp->opcode);
147*84d9c625SLionel Sambuc (void)printf("\n");
148*84d9c625SLionel Sambuc __os_free(dbenv, argp, 0);
149*84d9c625SLionel Sambuc return (0);
150*84d9c625SLionel Sambuc }
151*84d9c625SLionel Sambuc
152*84d9c625SLionel Sambuc /*
153*84d9c625SLionel Sambuc * PUBLIC: int __vi_marker_read __P((DB_ENV *, void *, __vi_marker_args **));
154*84d9c625SLionel Sambuc */
155*84d9c625SLionel Sambuc int
__vi_marker_read(dbenv,recbuf,argpp)156*84d9c625SLionel Sambuc __vi_marker_read(dbenv, recbuf, argpp)
157*84d9c625SLionel Sambuc DB_ENV *dbenv;
158*84d9c625SLionel Sambuc void *recbuf;
159*84d9c625SLionel Sambuc __vi_marker_args **argpp;
160*84d9c625SLionel Sambuc {
161*84d9c625SLionel Sambuc __vi_marker_args *argp;
162*84d9c625SLionel Sambuc int ret;
163*84d9c625SLionel Sambuc u_int32_t uinttmp;
164*84d9c625SLionel Sambuc u_int8_t *bp;
165*84d9c625SLionel Sambuc
166*84d9c625SLionel Sambuc ret = __os_malloc(dbenv, sizeof(__vi_marker_args) +
167*84d9c625SLionel Sambuc sizeof(DB_TXN), &argp);
168*84d9c625SLionel Sambuc if (ret != 0)
169*84d9c625SLionel Sambuc return (ret);
170*84d9c625SLionel Sambuc argp->txnid = (DB_TXN *)&argp[1];
171*84d9c625SLionel Sambuc
172*84d9c625SLionel Sambuc bp = recbuf;
173*84d9c625SLionel Sambuc memcpy(&argp->type, bp, sizeof(argp->type));
174*84d9c625SLionel Sambuc bp += sizeof(argp->type);
175*84d9c625SLionel Sambuc
176*84d9c625SLionel Sambuc memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
177*84d9c625SLionel Sambuc bp += sizeof(argp->txnid->txnid);
178*84d9c625SLionel Sambuc
179*84d9c625SLionel Sambuc memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
180*84d9c625SLionel Sambuc bp += sizeof(DB_LSN);
181*84d9c625SLionel Sambuc
182*84d9c625SLionel Sambuc memcpy(&uinttmp, bp, sizeof(uinttmp));
183*84d9c625SLionel Sambuc argp->opcode = (u_int32_t)uinttmp;
184*84d9c625SLionel Sambuc bp += sizeof(uinttmp);
185*84d9c625SLionel Sambuc
186*84d9c625SLionel Sambuc *argpp = argp;
187*84d9c625SLionel Sambuc return (0);
188*84d9c625SLionel Sambuc }
189*84d9c625SLionel Sambuc
190*84d9c625SLionel Sambuc /*
191*84d9c625SLionel Sambuc * PUBLIC: int __vi_cursor_log __P((DB_ENV *, DB_TXN *, DB_LSN *, u_int32_t,
192*84d9c625SLionel Sambuc * PUBLIC: u_int32_t, db_recno_t, size_t));
193*84d9c625SLionel Sambuc */
194*84d9c625SLionel Sambuc int
__vi_cursor_log(dbenv,txnid,ret_lsnp,flags,opcode,lno,cno)195*84d9c625SLionel Sambuc __vi_cursor_log(dbenv, txnid, ret_lsnp, flags,
196*84d9c625SLionel Sambuc opcode, lno, cno)
197*84d9c625SLionel Sambuc DB_ENV *dbenv;
198*84d9c625SLionel Sambuc DB_TXN *txnid;
199*84d9c625SLionel Sambuc DB_LSN *ret_lsnp;
200*84d9c625SLionel Sambuc u_int32_t flags;
201*84d9c625SLionel Sambuc u_int32_t opcode;
202*84d9c625SLionel Sambuc db_recno_t lno;
203*84d9c625SLionel Sambuc size_t cno;
204*84d9c625SLionel Sambuc {
205*84d9c625SLionel Sambuc DBT logrec;
206*84d9c625SLionel Sambuc DB_LSN *lsnp, null_lsn;
207*84d9c625SLionel Sambuc u_int32_t uinttmp;
208*84d9c625SLionel Sambuc u_int32_t rectype, txn_num;
209*84d9c625SLionel Sambuc int ret;
210*84d9c625SLionel Sambuc u_int8_t *bp;
211*84d9c625SLionel Sambuc
212*84d9c625SLionel Sambuc rectype = DB_vi_cursor;
213*84d9c625SLionel Sambuc if (txnid != NULL &&
214*84d9c625SLionel Sambuc TAILQ_FIRST(&txnid->kids) != NULL &&
215*84d9c625SLionel Sambuc (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
216*84d9c625SLionel Sambuc return (ret);
217*84d9c625SLionel Sambuc txn_num = txnid == NULL ? 0 : txnid->txnid;
218*84d9c625SLionel Sambuc if (txnid == NULL) {
219*84d9c625SLionel Sambuc ZERO_LSN(null_lsn);
220*84d9c625SLionel Sambuc lsnp = &null_lsn;
221*84d9c625SLionel Sambuc } else
222*84d9c625SLionel Sambuc lsnp = &txnid->last_lsn;
223*84d9c625SLionel Sambuc logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
224*84d9c625SLionel Sambuc + sizeof(u_int32_t)
225*84d9c625SLionel Sambuc + sizeof(u_int32_t)
226*84d9c625SLionel Sambuc + sizeof(u_int32_t);
227*84d9c625SLionel Sambuc if ((ret = __os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
228*84d9c625SLionel Sambuc return (ret);
229*84d9c625SLionel Sambuc
230*84d9c625SLionel Sambuc bp = logrec.data;
231*84d9c625SLionel Sambuc
232*84d9c625SLionel Sambuc memcpy(bp, &rectype, sizeof(rectype));
233*84d9c625SLionel Sambuc bp += sizeof(rectype);
234*84d9c625SLionel Sambuc
235*84d9c625SLionel Sambuc memcpy(bp, &txn_num, sizeof(txn_num));
236*84d9c625SLionel Sambuc bp += sizeof(txn_num);
237*84d9c625SLionel Sambuc
238*84d9c625SLionel Sambuc memcpy(bp, lsnp, sizeof(DB_LSN));
239*84d9c625SLionel Sambuc bp += sizeof(DB_LSN);
240*84d9c625SLionel Sambuc
241*84d9c625SLionel Sambuc uinttmp = (u_int32_t)opcode;
242*84d9c625SLionel Sambuc memcpy(bp, &uinttmp, sizeof(uinttmp));
243*84d9c625SLionel Sambuc bp += sizeof(uinttmp);
244*84d9c625SLionel Sambuc
245*84d9c625SLionel Sambuc uinttmp = (u_int32_t)lno;
246*84d9c625SLionel Sambuc memcpy(bp, &uinttmp, sizeof(uinttmp));
247*84d9c625SLionel Sambuc bp += sizeof(uinttmp);
248*84d9c625SLionel Sambuc
249*84d9c625SLionel Sambuc uinttmp = (u_int32_t)cno;
250*84d9c625SLionel Sambuc memcpy(bp, &uinttmp, sizeof(uinttmp));
251*84d9c625SLionel Sambuc bp += sizeof(uinttmp);
252*84d9c625SLionel Sambuc
253*84d9c625SLionel Sambuc DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
254*84d9c625SLionel Sambuc ret = dbenv->log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
255*84d9c625SLionel Sambuc if (txnid != NULL && ret == 0)
256*84d9c625SLionel Sambuc txnid->last_lsn = *ret_lsnp;
257*84d9c625SLionel Sambuc #ifdef LOG_DIAGNOSTIC
258*84d9c625SLionel Sambuc if (ret != 0)
259*84d9c625SLionel Sambuc (void)__vi_cursor_print(dbenv,
260*84d9c625SLionel Sambuc (DBT *)&logrec, ret_lsnp, NULL, NULL);
261*84d9c625SLionel Sambuc #endif
262*84d9c625SLionel Sambuc __os_free(dbenv, logrec.data, logrec.size);
263*84d9c625SLionel Sambuc return (ret);
264*84d9c625SLionel Sambuc }
265*84d9c625SLionel Sambuc
266*84d9c625SLionel Sambuc /*
267*84d9c625SLionel Sambuc * PUBLIC: int __vi_cursor_getpgnos __P((DB_ENV *, DBT *, DB_LSN *, db_recops,
268*84d9c625SLionel Sambuc * PUBLIC: void *));
269*84d9c625SLionel Sambuc */
270*84d9c625SLionel Sambuc int
__vi_cursor_getpgnos(dbenv,rec,lsnp,notused1,summary)271*84d9c625SLionel Sambuc __vi_cursor_getpgnos(dbenv, rec, lsnp, notused1, summary)
272*84d9c625SLionel Sambuc DB_ENV *dbenv;
273*84d9c625SLionel Sambuc DBT *rec;
274*84d9c625SLionel Sambuc DB_LSN *lsnp;
275*84d9c625SLionel Sambuc db_recops notused1;
276*84d9c625SLionel Sambuc void *summary;
277*84d9c625SLionel Sambuc {
278*84d9c625SLionel Sambuc TXN_RECS *t;
279*84d9c625SLionel Sambuc int ret;
280*84d9c625SLionel Sambuc COMPQUIET(rec, NULL);
281*84d9c625SLionel Sambuc COMPQUIET(notused1, DB_TXN_ABORT);
282*84d9c625SLionel Sambuc
283*84d9c625SLionel Sambuc t = (TXN_RECS *)summary;
284*84d9c625SLionel Sambuc
285*84d9c625SLionel Sambuc if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
286*84d9c625SLionel Sambuc return (ret);
287*84d9c625SLionel Sambuc
288*84d9c625SLionel Sambuc t->array[t->npages].flags = LSN_PAGE_NOLOCK;
289*84d9c625SLionel Sambuc t->array[t->npages].lsn = *lsnp;
290*84d9c625SLionel Sambuc t->array[t->npages].fid = DB_LOGFILEID_INVALID;
291*84d9c625SLionel Sambuc memset(&t->array[t->npages].pgdesc, 0,
292*84d9c625SLionel Sambuc sizeof(t->array[t->npages].pgdesc));
293*84d9c625SLionel Sambuc
294*84d9c625SLionel Sambuc t->npages++;
295*84d9c625SLionel Sambuc
296*84d9c625SLionel Sambuc return (0);
297*84d9c625SLionel Sambuc }
298*84d9c625SLionel Sambuc
299*84d9c625SLionel Sambuc /*
300*84d9c625SLionel Sambuc * PUBLIC: int __vi_cursor_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops,
301*84d9c625SLionel Sambuc * PUBLIC: void *));
302*84d9c625SLionel Sambuc */
303*84d9c625SLionel Sambuc int
__vi_cursor_print(dbenv,dbtp,lsnp,notused2,notused3)304*84d9c625SLionel Sambuc __vi_cursor_print(dbenv, dbtp, lsnp, notused2, notused3)
305*84d9c625SLionel Sambuc DB_ENV *dbenv;
306*84d9c625SLionel Sambuc DBT *dbtp;
307*84d9c625SLionel Sambuc DB_LSN *lsnp;
308*84d9c625SLionel Sambuc db_recops notused2;
309*84d9c625SLionel Sambuc void *notused3;
310*84d9c625SLionel Sambuc {
311*84d9c625SLionel Sambuc __vi_cursor_args *argp;
312*84d9c625SLionel Sambuc int ret;
313*84d9c625SLionel Sambuc
314*84d9c625SLionel Sambuc notused2 = DB_TXN_ABORT;
315*84d9c625SLionel Sambuc notused3 = NULL;
316*84d9c625SLionel Sambuc
317*84d9c625SLionel Sambuc if ((ret = __vi_cursor_read(dbenv, dbtp->data, &argp)) != 0)
318*84d9c625SLionel Sambuc return (ret);
319*84d9c625SLionel Sambuc (void)printf(
320*84d9c625SLionel Sambuc "[%lu][%lu]vi_cursor: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
321*84d9c625SLionel Sambuc (u_long)lsnp->file,
322*84d9c625SLionel Sambuc (u_long)lsnp->offset,
323*84d9c625SLionel Sambuc (u_long)argp->type,
324*84d9c625SLionel Sambuc (u_long)argp->txnid->txnid,
325*84d9c625SLionel Sambuc (u_long)argp->prev_lsn.file,
326*84d9c625SLionel Sambuc (u_long)argp->prev_lsn.offset);
327*84d9c625SLionel Sambuc (void)printf("\topcode: %lu\n", (u_long)argp->opcode);
328*84d9c625SLionel Sambuc (void)printf("\tlno: %lu\n", (u_long)argp->lno);
329*84d9c625SLionel Sambuc (void)printf("\tcno: %d\n", argp->cno);
330*84d9c625SLionel Sambuc (void)printf("\n");
331*84d9c625SLionel Sambuc __os_free(dbenv, argp, 0);
332*84d9c625SLionel Sambuc return (0);
333*84d9c625SLionel Sambuc }
334*84d9c625SLionel Sambuc
335*84d9c625SLionel Sambuc /*
336*84d9c625SLionel Sambuc * PUBLIC: int __vi_cursor_read __P((DB_ENV *, void *, __vi_cursor_args **));
337*84d9c625SLionel Sambuc */
338*84d9c625SLionel Sambuc int
__vi_cursor_read(dbenv,recbuf,argpp)339*84d9c625SLionel Sambuc __vi_cursor_read(dbenv, recbuf, argpp)
340*84d9c625SLionel Sambuc DB_ENV *dbenv;
341*84d9c625SLionel Sambuc void *recbuf;
342*84d9c625SLionel Sambuc __vi_cursor_args **argpp;
343*84d9c625SLionel Sambuc {
344*84d9c625SLionel Sambuc __vi_cursor_args *argp;
345*84d9c625SLionel Sambuc int ret;
346*84d9c625SLionel Sambuc u_int32_t uinttmp;
347*84d9c625SLionel Sambuc u_int8_t *bp;
348*84d9c625SLionel Sambuc
349*84d9c625SLionel Sambuc ret = __os_malloc(dbenv, sizeof(__vi_cursor_args) +
350*84d9c625SLionel Sambuc sizeof(DB_TXN), &argp);
351*84d9c625SLionel Sambuc if (ret != 0)
352*84d9c625SLionel Sambuc return (ret);
353*84d9c625SLionel Sambuc argp->txnid = (DB_TXN *)&argp[1];
354*84d9c625SLionel Sambuc
355*84d9c625SLionel Sambuc bp = recbuf;
356*84d9c625SLionel Sambuc memcpy(&argp->type, bp, sizeof(argp->type));
357*84d9c625SLionel Sambuc bp += sizeof(argp->type);
358*84d9c625SLionel Sambuc
359*84d9c625SLionel Sambuc memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
360*84d9c625SLionel Sambuc bp += sizeof(argp->txnid->txnid);
361*84d9c625SLionel Sambuc
362*84d9c625SLionel Sambuc memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
363*84d9c625SLionel Sambuc bp += sizeof(DB_LSN);
364*84d9c625SLionel Sambuc
365*84d9c625SLionel Sambuc memcpy(&uinttmp, bp, sizeof(uinttmp));
366*84d9c625SLionel Sambuc argp->opcode = (u_int32_t)uinttmp;
367*84d9c625SLionel Sambuc bp += sizeof(uinttmp);
368*84d9c625SLionel Sambuc
369*84d9c625SLionel Sambuc memcpy(&uinttmp, bp, sizeof(uinttmp));
370*84d9c625SLionel Sambuc argp->lno = (db_recno_t)uinttmp;
371*84d9c625SLionel Sambuc bp += sizeof(uinttmp);
372*84d9c625SLionel Sambuc
373*84d9c625SLionel Sambuc memcpy(&uinttmp, bp, sizeof(uinttmp));
374*84d9c625SLionel Sambuc argp->cno = (size_t)uinttmp;
375*84d9c625SLionel Sambuc bp += sizeof(uinttmp);
376*84d9c625SLionel Sambuc
377*84d9c625SLionel Sambuc *argpp = argp;
378*84d9c625SLionel Sambuc return (0);
379*84d9c625SLionel Sambuc }
380*84d9c625SLionel Sambuc
381*84d9c625SLionel Sambuc /*
382*84d9c625SLionel Sambuc * PUBLIC: int __vi_mark_log __P((DB_ENV *, DB_TXN *, DB_LSN *, u_int32_t,
383*84d9c625SLionel Sambuc * PUBLIC: LMARK *));
384*84d9c625SLionel Sambuc */
385*84d9c625SLionel Sambuc int
__vi_mark_log(dbenv,txnid,ret_lsnp,flags,lmp)386*84d9c625SLionel Sambuc __vi_mark_log(dbenv, txnid, ret_lsnp, flags,
387*84d9c625SLionel Sambuc lmp)
388*84d9c625SLionel Sambuc DB_ENV *dbenv;
389*84d9c625SLionel Sambuc DB_TXN *txnid;
390*84d9c625SLionel Sambuc DB_LSN *ret_lsnp;
391*84d9c625SLionel Sambuc u_int32_t flags;
392*84d9c625SLionel Sambuc LMARK * lmp;
393*84d9c625SLionel Sambuc {
394*84d9c625SLionel Sambuc DBT logrec;
395*84d9c625SLionel Sambuc DB_LSN *lsnp, null_lsn;
396*84d9c625SLionel Sambuc u_int32_t rectype, txn_num;
397*84d9c625SLionel Sambuc int ret;
398*84d9c625SLionel Sambuc u_int8_t *bp;
399*84d9c625SLionel Sambuc
400*84d9c625SLionel Sambuc rectype = DB_vi_mark;
401*84d9c625SLionel Sambuc if (txnid != NULL &&
402*84d9c625SLionel Sambuc TAILQ_FIRST(&txnid->kids) != NULL &&
403*84d9c625SLionel Sambuc (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
404*84d9c625SLionel Sambuc return (ret);
405*84d9c625SLionel Sambuc txn_num = txnid == NULL ? 0 : txnid->txnid;
406*84d9c625SLionel Sambuc if (txnid == NULL) {
407*84d9c625SLionel Sambuc ZERO_LSN(null_lsn);
408*84d9c625SLionel Sambuc lsnp = &null_lsn;
409*84d9c625SLionel Sambuc } else
410*84d9c625SLionel Sambuc lsnp = &txnid->last_lsn;
411*84d9c625SLionel Sambuc logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
412*84d9c625SLionel Sambuc + sizeof(*lmp);
413*84d9c625SLionel Sambuc if ((ret = __os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
414*84d9c625SLionel Sambuc return (ret);
415*84d9c625SLionel Sambuc
416*84d9c625SLionel Sambuc bp = logrec.data;
417*84d9c625SLionel Sambuc
418*84d9c625SLionel Sambuc memcpy(bp, &rectype, sizeof(rectype));
419*84d9c625SLionel Sambuc bp += sizeof(rectype);
420*84d9c625SLionel Sambuc
421*84d9c625SLionel Sambuc memcpy(bp, &txn_num, sizeof(txn_num));
422*84d9c625SLionel Sambuc bp += sizeof(txn_num);
423*84d9c625SLionel Sambuc
424*84d9c625SLionel Sambuc memcpy(bp, lsnp, sizeof(DB_LSN));
425*84d9c625SLionel Sambuc bp += sizeof(DB_LSN);
426*84d9c625SLionel Sambuc
427*84d9c625SLionel Sambuc if (lmp != NULL)
428*84d9c625SLionel Sambuc memcpy(bp, lmp, sizeof(*lmp));
429*84d9c625SLionel Sambuc else
430*84d9c625SLionel Sambuc memset(bp, 0, sizeof(*lmp));
431*84d9c625SLionel Sambuc bp += sizeof(*lmp);
432*84d9c625SLionel Sambuc
433*84d9c625SLionel Sambuc DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
434*84d9c625SLionel Sambuc ret = dbenv->log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
435*84d9c625SLionel Sambuc if (txnid != NULL && ret == 0)
436*84d9c625SLionel Sambuc txnid->last_lsn = *ret_lsnp;
437*84d9c625SLionel Sambuc #ifdef LOG_DIAGNOSTIC
438*84d9c625SLionel Sambuc if (ret != 0)
439*84d9c625SLionel Sambuc (void)__vi_mark_print(dbenv,
440*84d9c625SLionel Sambuc (DBT *)&logrec, ret_lsnp, NULL, NULL);
441*84d9c625SLionel Sambuc #endif
442*84d9c625SLionel Sambuc __os_free(dbenv, logrec.data, logrec.size);
443*84d9c625SLionel Sambuc return (ret);
444*84d9c625SLionel Sambuc }
445*84d9c625SLionel Sambuc
446*84d9c625SLionel Sambuc /*
447*84d9c625SLionel Sambuc * PUBLIC: int __vi_mark_getpgnos __P((DB_ENV *, DBT *, DB_LSN *, db_recops,
448*84d9c625SLionel Sambuc * PUBLIC: void *));
449*84d9c625SLionel Sambuc */
450*84d9c625SLionel Sambuc int
__vi_mark_getpgnos(dbenv,rec,lsnp,notused1,summary)451*84d9c625SLionel Sambuc __vi_mark_getpgnos(dbenv, rec, lsnp, notused1, summary)
452*84d9c625SLionel Sambuc DB_ENV *dbenv;
453*84d9c625SLionel Sambuc DBT *rec;
454*84d9c625SLionel Sambuc DB_LSN *lsnp;
455*84d9c625SLionel Sambuc db_recops notused1;
456*84d9c625SLionel Sambuc void *summary;
457*84d9c625SLionel Sambuc {
458*84d9c625SLionel Sambuc TXN_RECS *t;
459*84d9c625SLionel Sambuc int ret;
460*84d9c625SLionel Sambuc COMPQUIET(rec, NULL);
461*84d9c625SLionel Sambuc COMPQUIET(notused1, DB_TXN_ABORT);
462*84d9c625SLionel Sambuc
463*84d9c625SLionel Sambuc t = (TXN_RECS *)summary;
464*84d9c625SLionel Sambuc
465*84d9c625SLionel Sambuc if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
466*84d9c625SLionel Sambuc return (ret);
467*84d9c625SLionel Sambuc
468*84d9c625SLionel Sambuc t->array[t->npages].flags = LSN_PAGE_NOLOCK;
469*84d9c625SLionel Sambuc t->array[t->npages].lsn = *lsnp;
470*84d9c625SLionel Sambuc t->array[t->npages].fid = DB_LOGFILEID_INVALID;
471*84d9c625SLionel Sambuc memset(&t->array[t->npages].pgdesc, 0,
472*84d9c625SLionel Sambuc sizeof(t->array[t->npages].pgdesc));
473*84d9c625SLionel Sambuc
474*84d9c625SLionel Sambuc t->npages++;
475*84d9c625SLionel Sambuc
476*84d9c625SLionel Sambuc return (0);
477*84d9c625SLionel Sambuc }
478*84d9c625SLionel Sambuc
479*84d9c625SLionel Sambuc /*
480*84d9c625SLionel Sambuc * PUBLIC: int __vi_mark_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops,
481*84d9c625SLionel Sambuc * PUBLIC: void *));
482*84d9c625SLionel Sambuc */
483*84d9c625SLionel Sambuc int
__vi_mark_print(dbenv,dbtp,lsnp,notused2,notused3)484*84d9c625SLionel Sambuc __vi_mark_print(dbenv, dbtp, lsnp, notused2, notused3)
485*84d9c625SLionel Sambuc DB_ENV *dbenv;
486*84d9c625SLionel Sambuc DBT *dbtp;
487*84d9c625SLionel Sambuc DB_LSN *lsnp;
488*84d9c625SLionel Sambuc db_recops notused2;
489*84d9c625SLionel Sambuc void *notused3;
490*84d9c625SLionel Sambuc {
491*84d9c625SLionel Sambuc __vi_mark_args *argp;
492*84d9c625SLionel Sambuc int ret;
493*84d9c625SLionel Sambuc
494*84d9c625SLionel Sambuc notused2 = DB_TXN_ABORT;
495*84d9c625SLionel Sambuc notused3 = NULL;
496*84d9c625SLionel Sambuc
497*84d9c625SLionel Sambuc if ((ret = __vi_mark_read(dbenv, dbtp->data, &argp)) != 0)
498*84d9c625SLionel Sambuc return (ret);
499*84d9c625SLionel Sambuc (void)printf(
500*84d9c625SLionel Sambuc "[%lu][%lu]vi_mark: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
501*84d9c625SLionel Sambuc (u_long)lsnp->file,
502*84d9c625SLionel Sambuc (u_long)lsnp->offset,
503*84d9c625SLionel Sambuc (u_long)argp->type,
504*84d9c625SLionel Sambuc (u_long)argp->txnid->txnid,
505*84d9c625SLionel Sambuc (u_long)argp->prev_lsn.file,
506*84d9c625SLionel Sambuc (u_long)argp->prev_lsn.offset);
507*84d9c625SLionel Sambuc (void)printf("\tlmp: %%\n", argp->lmp);
508*84d9c625SLionel Sambuc (void)printf("\n");
509*84d9c625SLionel Sambuc __os_free(dbenv, argp, 0);
510*84d9c625SLionel Sambuc return (0);
511*84d9c625SLionel Sambuc }
512*84d9c625SLionel Sambuc
513*84d9c625SLionel Sambuc /*
514*84d9c625SLionel Sambuc * PUBLIC: int __vi_mark_read __P((DB_ENV *, void *, __vi_mark_args **));
515*84d9c625SLionel Sambuc */
516*84d9c625SLionel Sambuc int
__vi_mark_read(dbenv,recbuf,argpp)517*84d9c625SLionel Sambuc __vi_mark_read(dbenv, recbuf, argpp)
518*84d9c625SLionel Sambuc DB_ENV *dbenv;
519*84d9c625SLionel Sambuc void *recbuf;
520*84d9c625SLionel Sambuc __vi_mark_args **argpp;
521*84d9c625SLionel Sambuc {
522*84d9c625SLionel Sambuc __vi_mark_args *argp;
523*84d9c625SLionel Sambuc int ret;
524*84d9c625SLionel Sambuc u_int8_t *bp;
525*84d9c625SLionel Sambuc
526*84d9c625SLionel Sambuc ret = __os_malloc(dbenv, sizeof(__vi_mark_args) +
527*84d9c625SLionel Sambuc sizeof(DB_TXN), &argp);
528*84d9c625SLionel Sambuc if (ret != 0)
529*84d9c625SLionel Sambuc return (ret);
530*84d9c625SLionel Sambuc argp->txnid = (DB_TXN *)&argp[1];
531*84d9c625SLionel Sambuc
532*84d9c625SLionel Sambuc bp = recbuf;
533*84d9c625SLionel Sambuc memcpy(&argp->type, bp, sizeof(argp->type));
534*84d9c625SLionel Sambuc bp += sizeof(argp->type);
535*84d9c625SLionel Sambuc
536*84d9c625SLionel Sambuc memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
537*84d9c625SLionel Sambuc bp += sizeof(argp->txnid->txnid);
538*84d9c625SLionel Sambuc
539*84d9c625SLionel Sambuc memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
540*84d9c625SLionel Sambuc bp += sizeof(DB_LSN);
541*84d9c625SLionel Sambuc
542*84d9c625SLionel Sambuc memcpy(&argp->lmp, bp, sizeof(argp->lmp));
543*84d9c625SLionel Sambuc bp += sizeof(argp->lmp);
544*84d9c625SLionel Sambuc
545*84d9c625SLionel Sambuc *argpp = argp;
546*84d9c625SLionel Sambuc return (0);
547*84d9c625SLionel Sambuc }
548*84d9c625SLionel Sambuc
549*84d9c625SLionel Sambuc /*
550*84d9c625SLionel Sambuc * PUBLIC: int __vi_change_log __P((DB_ENV *, DB_TXN *, DB_LSN *, u_int32_t,
551*84d9c625SLionel Sambuc * PUBLIC: u_int32_t, db_recno_t));
552*84d9c625SLionel Sambuc */
553*84d9c625SLionel Sambuc int
__vi_change_log(dbenv,txnid,ret_lsnp,flags,opcode,lno)554*84d9c625SLionel Sambuc __vi_change_log(dbenv, txnid, ret_lsnp, flags,
555*84d9c625SLionel Sambuc opcode, lno)
556*84d9c625SLionel Sambuc DB_ENV *dbenv;
557*84d9c625SLionel Sambuc DB_TXN *txnid;
558*84d9c625SLionel Sambuc DB_LSN *ret_lsnp;
559*84d9c625SLionel Sambuc u_int32_t flags;
560*84d9c625SLionel Sambuc u_int32_t opcode;
561*84d9c625SLionel Sambuc db_recno_t lno;
562*84d9c625SLionel Sambuc {
563*84d9c625SLionel Sambuc DBT logrec;
564*84d9c625SLionel Sambuc DB_LSN *lsnp, null_lsn;
565*84d9c625SLionel Sambuc u_int32_t uinttmp;
566*84d9c625SLionel Sambuc u_int32_t rectype, txn_num;
567*84d9c625SLionel Sambuc int ret;
568*84d9c625SLionel Sambuc u_int8_t *bp;
569*84d9c625SLionel Sambuc
570*84d9c625SLionel Sambuc rectype = DB_vi_change;
571*84d9c625SLionel Sambuc if (txnid != NULL &&
572*84d9c625SLionel Sambuc TAILQ_FIRST(&txnid->kids) != NULL &&
573*84d9c625SLionel Sambuc (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
574*84d9c625SLionel Sambuc return (ret);
575*84d9c625SLionel Sambuc txn_num = txnid == NULL ? 0 : txnid->txnid;
576*84d9c625SLionel Sambuc if (txnid == NULL) {
577*84d9c625SLionel Sambuc ZERO_LSN(null_lsn);
578*84d9c625SLionel Sambuc lsnp = &null_lsn;
579*84d9c625SLionel Sambuc } else
580*84d9c625SLionel Sambuc lsnp = &txnid->last_lsn;
581*84d9c625SLionel Sambuc logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
582*84d9c625SLionel Sambuc + sizeof(u_int32_t)
583*84d9c625SLionel Sambuc + sizeof(u_int32_t);
584*84d9c625SLionel Sambuc if ((ret = __os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
585*84d9c625SLionel Sambuc return (ret);
586*84d9c625SLionel Sambuc
587*84d9c625SLionel Sambuc bp = logrec.data;
588*84d9c625SLionel Sambuc
589*84d9c625SLionel Sambuc memcpy(bp, &rectype, sizeof(rectype));
590*84d9c625SLionel Sambuc bp += sizeof(rectype);
591*84d9c625SLionel Sambuc
592*84d9c625SLionel Sambuc memcpy(bp, &txn_num, sizeof(txn_num));
593*84d9c625SLionel Sambuc bp += sizeof(txn_num);
594*84d9c625SLionel Sambuc
595*84d9c625SLionel Sambuc memcpy(bp, lsnp, sizeof(DB_LSN));
596*84d9c625SLionel Sambuc bp += sizeof(DB_LSN);
597*84d9c625SLionel Sambuc
598*84d9c625SLionel Sambuc uinttmp = (u_int32_t)opcode;
599*84d9c625SLionel Sambuc memcpy(bp, &uinttmp, sizeof(uinttmp));
600*84d9c625SLionel Sambuc bp += sizeof(uinttmp);
601*84d9c625SLionel Sambuc
602*84d9c625SLionel Sambuc uinttmp = (u_int32_t)lno;
603*84d9c625SLionel Sambuc memcpy(bp, &uinttmp, sizeof(uinttmp));
604*84d9c625SLionel Sambuc bp += sizeof(uinttmp);
605*84d9c625SLionel Sambuc
606*84d9c625SLionel Sambuc DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
607*84d9c625SLionel Sambuc ret = dbenv->log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
608*84d9c625SLionel Sambuc if (txnid != NULL && ret == 0)
609*84d9c625SLionel Sambuc txnid->last_lsn = *ret_lsnp;
610*84d9c625SLionel Sambuc #ifdef LOG_DIAGNOSTIC
611*84d9c625SLionel Sambuc if (ret != 0)
612*84d9c625SLionel Sambuc (void)__vi_change_print(dbenv,
613*84d9c625SLionel Sambuc (DBT *)&logrec, ret_lsnp, NULL, NULL);
614*84d9c625SLionel Sambuc #endif
615*84d9c625SLionel Sambuc __os_free(dbenv, logrec.data, logrec.size);
616*84d9c625SLionel Sambuc return (ret);
617*84d9c625SLionel Sambuc }
618*84d9c625SLionel Sambuc
619*84d9c625SLionel Sambuc /*
620*84d9c625SLionel Sambuc * PUBLIC: int __vi_change_getpgnos __P((DB_ENV *, DBT *, DB_LSN *, db_recops,
621*84d9c625SLionel Sambuc * PUBLIC: void *));
622*84d9c625SLionel Sambuc */
623*84d9c625SLionel Sambuc int
__vi_change_getpgnos(dbenv,rec,lsnp,notused1,summary)624*84d9c625SLionel Sambuc __vi_change_getpgnos(dbenv, rec, lsnp, notused1, summary)
625*84d9c625SLionel Sambuc DB_ENV *dbenv;
626*84d9c625SLionel Sambuc DBT *rec;
627*84d9c625SLionel Sambuc DB_LSN *lsnp;
628*84d9c625SLionel Sambuc db_recops notused1;
629*84d9c625SLionel Sambuc void *summary;
630*84d9c625SLionel Sambuc {
631*84d9c625SLionel Sambuc TXN_RECS *t;
632*84d9c625SLionel Sambuc int ret;
633*84d9c625SLionel Sambuc COMPQUIET(rec, NULL);
634*84d9c625SLionel Sambuc COMPQUIET(notused1, DB_TXN_ABORT);
635*84d9c625SLionel Sambuc
636*84d9c625SLionel Sambuc t = (TXN_RECS *)summary;
637*84d9c625SLionel Sambuc
638*84d9c625SLionel Sambuc if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
639*84d9c625SLionel Sambuc return (ret);
640*84d9c625SLionel Sambuc
641*84d9c625SLionel Sambuc t->array[t->npages].flags = LSN_PAGE_NOLOCK;
642*84d9c625SLionel Sambuc t->array[t->npages].lsn = *lsnp;
643*84d9c625SLionel Sambuc t->array[t->npages].fid = DB_LOGFILEID_INVALID;
644*84d9c625SLionel Sambuc memset(&t->array[t->npages].pgdesc, 0,
645*84d9c625SLionel Sambuc sizeof(t->array[t->npages].pgdesc));
646*84d9c625SLionel Sambuc
647*84d9c625SLionel Sambuc t->npages++;
648*84d9c625SLionel Sambuc
649*84d9c625SLionel Sambuc return (0);
650*84d9c625SLionel Sambuc }
651*84d9c625SLionel Sambuc
652*84d9c625SLionel Sambuc /*
653*84d9c625SLionel Sambuc * PUBLIC: int __vi_change_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops,
654*84d9c625SLionel Sambuc * PUBLIC: void *));
655*84d9c625SLionel Sambuc */
656*84d9c625SLionel Sambuc int
__vi_change_print(dbenv,dbtp,lsnp,notused2,notused3)657*84d9c625SLionel Sambuc __vi_change_print(dbenv, dbtp, lsnp, notused2, notused3)
658*84d9c625SLionel Sambuc DB_ENV *dbenv;
659*84d9c625SLionel Sambuc DBT *dbtp;
660*84d9c625SLionel Sambuc DB_LSN *lsnp;
661*84d9c625SLionel Sambuc db_recops notused2;
662*84d9c625SLionel Sambuc void *notused3;
663*84d9c625SLionel Sambuc {
664*84d9c625SLionel Sambuc __vi_change_args *argp;
665*84d9c625SLionel Sambuc int ret;
666*84d9c625SLionel Sambuc
667*84d9c625SLionel Sambuc notused2 = DB_TXN_ABORT;
668*84d9c625SLionel Sambuc notused3 = NULL;
669*84d9c625SLionel Sambuc
670*84d9c625SLionel Sambuc if ((ret = __vi_change_read(dbenv, dbtp->data, &argp)) != 0)
671*84d9c625SLionel Sambuc return (ret);
672*84d9c625SLionel Sambuc (void)printf(
673*84d9c625SLionel Sambuc "[%lu][%lu]vi_change: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
674*84d9c625SLionel Sambuc (u_long)lsnp->file,
675*84d9c625SLionel Sambuc (u_long)lsnp->offset,
676*84d9c625SLionel Sambuc (u_long)argp->type,
677*84d9c625SLionel Sambuc (u_long)argp->txnid->txnid,
678*84d9c625SLionel Sambuc (u_long)argp->prev_lsn.file,
679*84d9c625SLionel Sambuc (u_long)argp->prev_lsn.offset);
680*84d9c625SLionel Sambuc (void)printf("\topcode: %lu\n", (u_long)argp->opcode);
681*84d9c625SLionel Sambuc (void)printf("\tlno: %lu\n", (u_long)argp->lno);
682*84d9c625SLionel Sambuc (void)printf("\n");
683*84d9c625SLionel Sambuc __os_free(dbenv, argp, 0);
684*84d9c625SLionel Sambuc return (0);
685*84d9c625SLionel Sambuc }
686*84d9c625SLionel Sambuc
687*84d9c625SLionel Sambuc /*
688*84d9c625SLionel Sambuc * PUBLIC: int __vi_change_read __P((DB_ENV *, void *, __vi_change_args **));
689*84d9c625SLionel Sambuc */
690*84d9c625SLionel Sambuc int
__vi_change_read(dbenv,recbuf,argpp)691*84d9c625SLionel Sambuc __vi_change_read(dbenv, recbuf, argpp)
692*84d9c625SLionel Sambuc DB_ENV *dbenv;
693*84d9c625SLionel Sambuc void *recbuf;
694*84d9c625SLionel Sambuc __vi_change_args **argpp;
695*84d9c625SLionel Sambuc {
696*84d9c625SLionel Sambuc __vi_change_args *argp;
697*84d9c625SLionel Sambuc int ret;
698*84d9c625SLionel Sambuc u_int32_t uinttmp;
699*84d9c625SLionel Sambuc u_int8_t *bp;
700*84d9c625SLionel Sambuc
701*84d9c625SLionel Sambuc ret = __os_malloc(dbenv, sizeof(__vi_change_args) +
702*84d9c625SLionel Sambuc sizeof(DB_TXN), &argp);
703*84d9c625SLionel Sambuc if (ret != 0)
704*84d9c625SLionel Sambuc return (ret);
705*84d9c625SLionel Sambuc argp->txnid = (DB_TXN *)&argp[1];
706*84d9c625SLionel Sambuc
707*84d9c625SLionel Sambuc bp = recbuf;
708*84d9c625SLionel Sambuc memcpy(&argp->type, bp, sizeof(argp->type));
709*84d9c625SLionel Sambuc bp += sizeof(argp->type);
710*84d9c625SLionel Sambuc
711*84d9c625SLionel Sambuc memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
712*84d9c625SLionel Sambuc bp += sizeof(argp->txnid->txnid);
713*84d9c625SLionel Sambuc
714*84d9c625SLionel Sambuc memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
715*84d9c625SLionel Sambuc bp += sizeof(DB_LSN);
716*84d9c625SLionel Sambuc
717*84d9c625SLionel Sambuc memcpy(&uinttmp, bp, sizeof(uinttmp));
718*84d9c625SLionel Sambuc argp->opcode = (u_int32_t)uinttmp;
719*84d9c625SLionel Sambuc bp += sizeof(uinttmp);
720*84d9c625SLionel Sambuc
721*84d9c625SLionel Sambuc memcpy(&uinttmp, bp, sizeof(uinttmp));
722*84d9c625SLionel Sambuc argp->lno = (db_recno_t)uinttmp;
723*84d9c625SLionel Sambuc bp += sizeof(uinttmp);
724*84d9c625SLionel Sambuc
725*84d9c625SLionel Sambuc *argpp = argp;
726*84d9c625SLionel Sambuc return (0);
727*84d9c625SLionel Sambuc }
728*84d9c625SLionel Sambuc
729*84d9c625SLionel Sambuc /*
730*84d9c625SLionel Sambuc * PUBLIC: int __vi_init_print __P((DB_ENV *, int (***)(DB_ENV *, DBT *,
731*84d9c625SLionel Sambuc * PUBLIC: DB_LSN *, db_recops, void *), size_t *));
732*84d9c625SLionel Sambuc */
733*84d9c625SLionel Sambuc int
__vi_init_print(dbenv,dtabp,dtabsizep)734*84d9c625SLionel Sambuc __vi_init_print(dbenv, dtabp, dtabsizep)
735*84d9c625SLionel Sambuc DB_ENV *dbenv;
736*84d9c625SLionel Sambuc int (***dtabp)__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
737*84d9c625SLionel Sambuc size_t *dtabsizep;
738*84d9c625SLionel Sambuc {
739*84d9c625SLionel Sambuc int ret;
740*84d9c625SLionel Sambuc
741*84d9c625SLionel Sambuc if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
742*84d9c625SLionel Sambuc __vi_marker_print, DB_vi_marker)) != 0)
743*84d9c625SLionel Sambuc return (ret);
744*84d9c625SLionel Sambuc if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
745*84d9c625SLionel Sambuc __vi_cursor_print, DB_vi_cursor)) != 0)
746*84d9c625SLionel Sambuc return (ret);
747*84d9c625SLionel Sambuc if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
748*84d9c625SLionel Sambuc __vi_mark_print, DB_vi_mark)) != 0)
749*84d9c625SLionel Sambuc return (ret);
750*84d9c625SLionel Sambuc if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
751*84d9c625SLionel Sambuc __vi_change_print, DB_vi_change)) != 0)
752*84d9c625SLionel Sambuc return (ret);
753*84d9c625SLionel Sambuc return (0);
754*84d9c625SLionel Sambuc }
755*84d9c625SLionel Sambuc
756*84d9c625SLionel Sambuc /*
757*84d9c625SLionel Sambuc * PUBLIC: int __vi_init_getpgnos __P((DB_ENV *, int (***)(DB_ENV *, DBT *,
758*84d9c625SLionel Sambuc * PUBLIC: DB_LSN *, db_recops, void *), size_t *));
759*84d9c625SLionel Sambuc */
760*84d9c625SLionel Sambuc int
__vi_init_getpgnos(dbenv,dtabp,dtabsizep)761*84d9c625SLionel Sambuc __vi_init_getpgnos(dbenv, dtabp, dtabsizep)
762*84d9c625SLionel Sambuc DB_ENV *dbenv;
763*84d9c625SLionel Sambuc int (***dtabp)__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
764*84d9c625SLionel Sambuc size_t *dtabsizep;
765*84d9c625SLionel Sambuc {
766*84d9c625SLionel Sambuc int ret;
767*84d9c625SLionel Sambuc
768*84d9c625SLionel Sambuc if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
769*84d9c625SLionel Sambuc __vi_marker_getpgnos, DB_vi_marker)) != 0)
770*84d9c625SLionel Sambuc return (ret);
771*84d9c625SLionel Sambuc if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
772*84d9c625SLionel Sambuc __vi_cursor_getpgnos, DB_vi_cursor)) != 0)
773*84d9c625SLionel Sambuc return (ret);
774*84d9c625SLionel Sambuc if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
775*84d9c625SLionel Sambuc __vi_mark_getpgnos, DB_vi_mark)) != 0)
776*84d9c625SLionel Sambuc return (ret);
777*84d9c625SLionel Sambuc if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
778*84d9c625SLionel Sambuc __vi_change_getpgnos, DB_vi_change)) != 0)
779*84d9c625SLionel Sambuc return (ret);
780*84d9c625SLionel Sambuc return (0);
781*84d9c625SLionel Sambuc }
782*84d9c625SLionel Sambuc
783*84d9c625SLionel Sambuc /*
784*84d9c625SLionel Sambuc * PUBLIC: int __vi_init_recover __P((DB_ENV *));
785*84d9c625SLionel Sambuc */
786*84d9c625SLionel Sambuc int
__vi_init_recover(dbenv)787*84d9c625SLionel Sambuc __vi_init_recover(dbenv)
788*84d9c625SLionel Sambuc DB_ENV *dbenv;
789*84d9c625SLionel Sambuc {
790*84d9c625SLionel Sambuc int ret;
791*84d9c625SLionel Sambuc
792*84d9c625SLionel Sambuc if ((ret = __db_add_recovery(dbenv, &dbenv->dtab, &dbenv->dtab_size,
793*84d9c625SLionel Sambuc __vi_marker_recover, DB_vi_marker)) != 0)
794*84d9c625SLionel Sambuc return (ret);
795*84d9c625SLionel Sambuc if ((ret = __db_add_recovery(dbenv, &dbenv->dtab, &dbenv->dtab_size,
796*84d9c625SLionel Sambuc __vi_cursor_recover, DB_vi_cursor)) != 0)
797*84d9c625SLionel Sambuc return (ret);
798*84d9c625SLionel Sambuc if ((ret = __db_add_recovery(dbenv, &dbenv->dtab, &dbenv->dtab_size,
799*84d9c625SLionel Sambuc __vi_mark_recover, DB_vi_mark)) != 0)
800*84d9c625SLionel Sambuc return (ret);
801*84d9c625SLionel Sambuc if ((ret = __db_add_recovery(dbenv, &dbenv->dtab, &dbenv->dtab_size,
802*84d9c625SLionel Sambuc __vi_change_recover, DB_vi_change)) != 0)
803*84d9c625SLionel Sambuc return (ret);
804*84d9c625SLionel Sambuc return (0);
805*84d9c625SLionel Sambuc }
806*84d9c625SLionel Sambuc /*
807*84d9c625SLionel Sambuc * PUBLIC: #endif
808*84d9c625SLionel Sambuc */
809