rename O_DIRECTORY to O_TMP_DIRECTORY to avoid conflict with open option
[nvi.git] / common / vi_auto.c
blob79d8971f4c5d0b28f7554624989544c60580f4c0
1 /* Do not edit: automatically built by gen_rec.awk. */
2 #include <sys/types.h>
3 #include <sys/queue.h>
4 #include <sys/stat.h>
5 #include <bitstring.h>
6 #include <errno.h>
7 #include <fcntl.h>
8 #include <limits.h>
9 #include <stdio.h>
10 #include <stdlib.h>
11 #include <string.h>
12 #include "common.h"
13 #include <db_int.h>
14 #include "db_page.h"
15 #include "db_am.h"
16 #include "rep.h"
17 #include "txn.h"
19 * PUBLIC: int __vi_marker_log __P((DB_ENV *, DB_TXN *, DB_LSN *, u_int32_t,
20 * PUBLIC: u_int32_t));
22 int
23 __vi_marker_log(dbenv, txnid, ret_lsnp, flags,
24 opcode)
25 DB_ENV *dbenv;
26 DB_TXN *txnid;
27 DB_LSN *ret_lsnp;
28 u_int32_t flags;
29 u_int32_t opcode;
31 DBT logrec;
32 DB_LSN *lsnp, null_lsn;
33 u_int32_t uinttmp;
34 u_int32_t rectype, txn_num;
35 int ret;
36 u_int8_t *bp;
38 rectype = DB_vi_marker;
39 if (txnid != NULL &&
40 TAILQ_FIRST(&txnid->kids) != NULL &&
41 (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
42 return (ret);
43 txn_num = txnid == NULL ? 0 : txnid->txnid;
44 if (txnid == NULL) {
45 ZERO_LSN(null_lsn);
46 lsnp = &null_lsn;
47 } else
48 lsnp = &txnid->last_lsn;
49 logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
50 + sizeof(u_int32_t);
51 if ((ret = __os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
52 return (ret);
54 bp = logrec.data;
56 memcpy(bp, &rectype, sizeof(rectype));
57 bp += sizeof(rectype);
59 memcpy(bp, &txn_num, sizeof(txn_num));
60 bp += sizeof(txn_num);
62 memcpy(bp, lsnp, sizeof(DB_LSN));
63 bp += sizeof(DB_LSN);
65 uinttmp = (u_int32_t)opcode;
66 memcpy(bp, &uinttmp, sizeof(uinttmp));
67 bp += sizeof(uinttmp);
69 DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
70 ret = dbenv->log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
71 if (txnid != NULL && ret == 0)
72 txnid->last_lsn = *ret_lsnp;
73 #ifdef LOG_DIAGNOSTIC
74 if (ret != 0)
75 (void)__vi_marker_print(dbenv,
76 (DBT *)&logrec, ret_lsnp, NULL, NULL);
77 #endif
78 __os_free(dbenv, logrec.data, logrec.size);
79 return (ret);
83 * PUBLIC: int __vi_marker_getpgnos __P((DB_ENV *, DBT *, DB_LSN *, db_recops,
84 * PUBLIC: void *));
86 int
87 __vi_marker_getpgnos(dbenv, rec, lsnp, notused1, summary)
88 DB_ENV *dbenv;
89 DBT *rec;
90 DB_LSN *lsnp;
91 db_recops notused1;
92 void *summary;
94 TXN_RECS *t;
95 int ret;
96 COMPQUIET(rec, NULL);
97 COMPQUIET(notused1, DB_TXN_ABORT);
99 t = (TXN_RECS *)summary;
101 if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
102 return (ret);
104 t->array[t->npages].flags = LSN_PAGE_NOLOCK;
105 t->array[t->npages].lsn = *lsnp;
106 t->array[t->npages].fid = DB_LOGFILEID_INVALID;
107 memset(&t->array[t->npages].pgdesc, 0,
108 sizeof(t->array[t->npages].pgdesc));
110 t->npages++;
112 return (0);
116 * PUBLIC: int __vi_marker_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops,
117 * PUBLIC: void *));
120 __vi_marker_print(dbenv, dbtp, lsnp, notused2, notused3)
121 DB_ENV *dbenv;
122 DBT *dbtp;
123 DB_LSN *lsnp;
124 db_recops notused2;
125 void *notused3;
127 __vi_marker_args *argp;
128 int ret;
130 notused2 = DB_TXN_ABORT;
131 notused3 = NULL;
133 if ((ret = __vi_marker_read(dbenv, dbtp->data, &argp)) != 0)
134 return (ret);
135 (void)printf(
136 "[%lu][%lu]vi_marker: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
137 (u_long)lsnp->file,
138 (u_long)lsnp->offset,
139 (u_long)argp->type,
140 (u_long)argp->txnid->txnid,
141 (u_long)argp->prev_lsn.file,
142 (u_long)argp->prev_lsn.offset);
143 (void)printf("\topcode: %lu\n", (u_long)argp->opcode);
144 (void)printf("\n");
145 __os_free(dbenv, argp, 0);
146 return (0);
150 * PUBLIC: int __vi_marker_read __P((DB_ENV *, void *, __vi_marker_args **));
153 __vi_marker_read(dbenv, recbuf, argpp)
154 DB_ENV *dbenv;
155 void *recbuf;
156 __vi_marker_args **argpp;
158 __vi_marker_args *argp;
159 int ret;
160 u_int32_t uinttmp;
161 u_int8_t *bp;
163 ret = __os_malloc(dbenv, sizeof(__vi_marker_args) +
164 sizeof(DB_TXN), &argp);
165 if (ret != 0)
166 return (ret);
167 argp->txnid = (DB_TXN *)&argp[1];
169 bp = recbuf;
170 memcpy(&argp->type, bp, sizeof(argp->type));
171 bp += sizeof(argp->type);
173 memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
174 bp += sizeof(argp->txnid->txnid);
176 memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
177 bp += sizeof(DB_LSN);
179 memcpy(&uinttmp, bp, sizeof(uinttmp));
180 argp->opcode = (u_int32_t)uinttmp;
181 bp += sizeof(uinttmp);
183 *argpp = argp;
184 return (0);
188 * PUBLIC: int __vi_cursor_log __P((DB_ENV *, DB_TXN *, DB_LSN *, u_int32_t,
189 * PUBLIC: u_int32_t, db_recno_t, size_t));
192 __vi_cursor_log(dbenv, txnid, ret_lsnp, flags,
193 opcode, lno, cno)
194 DB_ENV *dbenv;
195 DB_TXN *txnid;
196 DB_LSN *ret_lsnp;
197 u_int32_t flags;
198 u_int32_t opcode;
199 db_recno_t lno;
200 size_t cno;
202 DBT logrec;
203 DB_LSN *lsnp, null_lsn;
204 u_int32_t uinttmp;
205 u_int32_t rectype, txn_num;
206 int ret;
207 u_int8_t *bp;
209 rectype = DB_vi_cursor;
210 if (txnid != NULL &&
211 TAILQ_FIRST(&txnid->kids) != NULL &&
212 (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
213 return (ret);
214 txn_num = txnid == NULL ? 0 : txnid->txnid;
215 if (txnid == NULL) {
216 ZERO_LSN(null_lsn);
217 lsnp = &null_lsn;
218 } else
219 lsnp = &txnid->last_lsn;
220 logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
221 + sizeof(u_int32_t)
222 + sizeof(u_int32_t)
223 + sizeof(u_int32_t);
224 if ((ret = __os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
225 return (ret);
227 bp = logrec.data;
229 memcpy(bp, &rectype, sizeof(rectype));
230 bp += sizeof(rectype);
232 memcpy(bp, &txn_num, sizeof(txn_num));
233 bp += sizeof(txn_num);
235 memcpy(bp, lsnp, sizeof(DB_LSN));
236 bp += sizeof(DB_LSN);
238 uinttmp = (u_int32_t)opcode;
239 memcpy(bp, &uinttmp, sizeof(uinttmp));
240 bp += sizeof(uinttmp);
242 uinttmp = (u_int32_t)lno;
243 memcpy(bp, &uinttmp, sizeof(uinttmp));
244 bp += sizeof(uinttmp);
246 uinttmp = (u_int32_t)cno;
247 memcpy(bp, &uinttmp, sizeof(uinttmp));
248 bp += sizeof(uinttmp);
250 DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
251 ret = dbenv->log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
252 if (txnid != NULL && ret == 0)
253 txnid->last_lsn = *ret_lsnp;
254 #ifdef LOG_DIAGNOSTIC
255 if (ret != 0)
256 (void)__vi_cursor_print(dbenv,
257 (DBT *)&logrec, ret_lsnp, NULL, NULL);
258 #endif
259 __os_free(dbenv, logrec.data, logrec.size);
260 return (ret);
264 * PUBLIC: int __vi_cursor_getpgnos __P((DB_ENV *, DBT *, DB_LSN *, db_recops,
265 * PUBLIC: void *));
268 __vi_cursor_getpgnos(dbenv, rec, lsnp, notused1, summary)
269 DB_ENV *dbenv;
270 DBT *rec;
271 DB_LSN *lsnp;
272 db_recops notused1;
273 void *summary;
275 TXN_RECS *t;
276 int ret;
277 COMPQUIET(rec, NULL);
278 COMPQUIET(notused1, DB_TXN_ABORT);
280 t = (TXN_RECS *)summary;
282 if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
283 return (ret);
285 t->array[t->npages].flags = LSN_PAGE_NOLOCK;
286 t->array[t->npages].lsn = *lsnp;
287 t->array[t->npages].fid = DB_LOGFILEID_INVALID;
288 memset(&t->array[t->npages].pgdesc, 0,
289 sizeof(t->array[t->npages].pgdesc));
291 t->npages++;
293 return (0);
297 * PUBLIC: int __vi_cursor_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops,
298 * PUBLIC: void *));
301 __vi_cursor_print(dbenv, dbtp, lsnp, notused2, notused3)
302 DB_ENV *dbenv;
303 DBT *dbtp;
304 DB_LSN *lsnp;
305 db_recops notused2;
306 void *notused3;
308 __vi_cursor_args *argp;
309 int ret;
311 notused2 = DB_TXN_ABORT;
312 notused3 = NULL;
314 if ((ret = __vi_cursor_read(dbenv, dbtp->data, &argp)) != 0)
315 return (ret);
316 (void)printf(
317 "[%lu][%lu]vi_cursor: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
318 (u_long)lsnp->file,
319 (u_long)lsnp->offset,
320 (u_long)argp->type,
321 (u_long)argp->txnid->txnid,
322 (u_long)argp->prev_lsn.file,
323 (u_long)argp->prev_lsn.offset);
324 (void)printf("\topcode: %lu\n", (u_long)argp->opcode);
325 (void)printf("\tlno: %lu\n", (u_long)argp->lno);
326 (void)printf("\tcno: %d\n", argp->cno);
327 (void)printf("\n");
328 __os_free(dbenv, argp, 0);
329 return (0);
333 * PUBLIC: int __vi_cursor_read __P((DB_ENV *, void *, __vi_cursor_args **));
336 __vi_cursor_read(dbenv, recbuf, argpp)
337 DB_ENV *dbenv;
338 void *recbuf;
339 __vi_cursor_args **argpp;
341 __vi_cursor_args *argp;
342 int ret;
343 u_int32_t uinttmp;
344 u_int8_t *bp;
346 ret = __os_malloc(dbenv, sizeof(__vi_cursor_args) +
347 sizeof(DB_TXN), &argp);
348 if (ret != 0)
349 return (ret);
350 argp->txnid = (DB_TXN *)&argp[1];
352 bp = recbuf;
353 memcpy(&argp->type, bp, sizeof(argp->type));
354 bp += sizeof(argp->type);
356 memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
357 bp += sizeof(argp->txnid->txnid);
359 memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
360 bp += sizeof(DB_LSN);
362 memcpy(&uinttmp, bp, sizeof(uinttmp));
363 argp->opcode = (u_int32_t)uinttmp;
364 bp += sizeof(uinttmp);
366 memcpy(&uinttmp, bp, sizeof(uinttmp));
367 argp->lno = (db_recno_t)uinttmp;
368 bp += sizeof(uinttmp);
370 memcpy(&uinttmp, bp, sizeof(uinttmp));
371 argp->cno = (size_t)uinttmp;
372 bp += sizeof(uinttmp);
374 *argpp = argp;
375 return (0);
379 * PUBLIC: int __vi_mark_log __P((DB_ENV *, DB_TXN *, DB_LSN *, u_int32_t,
380 * PUBLIC: LMARK *));
383 __vi_mark_log(dbenv, txnid, ret_lsnp, flags,
384 lmp)
385 DB_ENV *dbenv;
386 DB_TXN *txnid;
387 DB_LSN *ret_lsnp;
388 u_int32_t flags;
389 LMARK * lmp;
391 DBT logrec;
392 DB_LSN *lsnp, null_lsn;
393 u_int32_t rectype, txn_num;
394 int ret;
395 u_int8_t *bp;
397 rectype = DB_vi_mark;
398 if (txnid != NULL &&
399 TAILQ_FIRST(&txnid->kids) != NULL &&
400 (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
401 return (ret);
402 txn_num = txnid == NULL ? 0 : txnid->txnid;
403 if (txnid == NULL) {
404 ZERO_LSN(null_lsn);
405 lsnp = &null_lsn;
406 } else
407 lsnp = &txnid->last_lsn;
408 logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
409 + sizeof(*lmp);
410 if ((ret = __os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
411 return (ret);
413 bp = logrec.data;
415 memcpy(bp, &rectype, sizeof(rectype));
416 bp += sizeof(rectype);
418 memcpy(bp, &txn_num, sizeof(txn_num));
419 bp += sizeof(txn_num);
421 memcpy(bp, lsnp, sizeof(DB_LSN));
422 bp += sizeof(DB_LSN);
424 if (lmp != NULL)
425 memcpy(bp, lmp, sizeof(*lmp));
426 else
427 memset(bp, 0, sizeof(*lmp));
428 bp += sizeof(*lmp);
430 DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
431 ret = dbenv->log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
432 if (txnid != NULL && ret == 0)
433 txnid->last_lsn = *ret_lsnp;
434 #ifdef LOG_DIAGNOSTIC
435 if (ret != 0)
436 (void)__vi_mark_print(dbenv,
437 (DBT *)&logrec, ret_lsnp, NULL, NULL);
438 #endif
439 __os_free(dbenv, logrec.data, logrec.size);
440 return (ret);
444 * PUBLIC: int __vi_mark_getpgnos __P((DB_ENV *, DBT *, DB_LSN *, db_recops,
445 * PUBLIC: void *));
448 __vi_mark_getpgnos(dbenv, rec, lsnp, notused1, summary)
449 DB_ENV *dbenv;
450 DBT *rec;
451 DB_LSN *lsnp;
452 db_recops notused1;
453 void *summary;
455 TXN_RECS *t;
456 int ret;
457 COMPQUIET(rec, NULL);
458 COMPQUIET(notused1, DB_TXN_ABORT);
460 t = (TXN_RECS *)summary;
462 if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
463 return (ret);
465 t->array[t->npages].flags = LSN_PAGE_NOLOCK;
466 t->array[t->npages].lsn = *lsnp;
467 t->array[t->npages].fid = DB_LOGFILEID_INVALID;
468 memset(&t->array[t->npages].pgdesc, 0,
469 sizeof(t->array[t->npages].pgdesc));
471 t->npages++;
473 return (0);
477 * PUBLIC: int __vi_mark_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops,
478 * PUBLIC: void *));
481 __vi_mark_print(dbenv, dbtp, lsnp, notused2, notused3)
482 DB_ENV *dbenv;
483 DBT *dbtp;
484 DB_LSN *lsnp;
485 db_recops notused2;
486 void *notused3;
488 __vi_mark_args *argp;
489 int ret;
491 notused2 = DB_TXN_ABORT;
492 notused3 = NULL;
494 if ((ret = __vi_mark_read(dbenv, dbtp->data, &argp)) != 0)
495 return (ret);
496 (void)printf(
497 "[%lu][%lu]vi_mark: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
498 (u_long)lsnp->file,
499 (u_long)lsnp->offset,
500 (u_long)argp->type,
501 (u_long)argp->txnid->txnid,
502 (u_long)argp->prev_lsn.file,
503 (u_long)argp->prev_lsn.offset);
504 (void)printf("\tlmp: %%\n", argp->lmp);
505 (void)printf("\n");
506 __os_free(dbenv, argp, 0);
507 return (0);
511 * PUBLIC: int __vi_mark_read __P((DB_ENV *, void *, __vi_mark_args **));
514 __vi_mark_read(dbenv, recbuf, argpp)
515 DB_ENV *dbenv;
516 void *recbuf;
517 __vi_mark_args **argpp;
519 __vi_mark_args *argp;
520 int ret;
521 u_int8_t *bp;
523 ret = __os_malloc(dbenv, sizeof(__vi_mark_args) +
524 sizeof(DB_TXN), &argp);
525 if (ret != 0)
526 return (ret);
527 argp->txnid = (DB_TXN *)&argp[1];
529 bp = recbuf;
530 memcpy(&argp->type, bp, sizeof(argp->type));
531 bp += sizeof(argp->type);
533 memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
534 bp += sizeof(argp->txnid->txnid);
536 memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
537 bp += sizeof(DB_LSN);
539 memcpy(&argp->lmp, bp, sizeof(argp->lmp));
540 bp += sizeof(argp->lmp);
542 *argpp = argp;
543 return (0);
547 * PUBLIC: int __vi_change_log __P((DB_ENV *, DB_TXN *, DB_LSN *, u_int32_t,
548 * PUBLIC: u_int32_t, db_recno_t));
551 __vi_change_log(dbenv, txnid, ret_lsnp, flags,
552 opcode, lno)
553 DB_ENV *dbenv;
554 DB_TXN *txnid;
555 DB_LSN *ret_lsnp;
556 u_int32_t flags;
557 u_int32_t opcode;
558 db_recno_t lno;
560 DBT logrec;
561 DB_LSN *lsnp, null_lsn;
562 u_int32_t uinttmp;
563 u_int32_t rectype, txn_num;
564 int ret;
565 u_int8_t *bp;
567 rectype = DB_vi_change;
568 if (txnid != NULL &&
569 TAILQ_FIRST(&txnid->kids) != NULL &&
570 (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
571 return (ret);
572 txn_num = txnid == NULL ? 0 : txnid->txnid;
573 if (txnid == NULL) {
574 ZERO_LSN(null_lsn);
575 lsnp = &null_lsn;
576 } else
577 lsnp = &txnid->last_lsn;
578 logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
579 + sizeof(u_int32_t)
580 + sizeof(u_int32_t);
581 if ((ret = __os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
582 return (ret);
584 bp = logrec.data;
586 memcpy(bp, &rectype, sizeof(rectype));
587 bp += sizeof(rectype);
589 memcpy(bp, &txn_num, sizeof(txn_num));
590 bp += sizeof(txn_num);
592 memcpy(bp, lsnp, sizeof(DB_LSN));
593 bp += sizeof(DB_LSN);
595 uinttmp = (u_int32_t)opcode;
596 memcpy(bp, &uinttmp, sizeof(uinttmp));
597 bp += sizeof(uinttmp);
599 uinttmp = (u_int32_t)lno;
600 memcpy(bp, &uinttmp, sizeof(uinttmp));
601 bp += sizeof(uinttmp);
603 DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
604 ret = dbenv->log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
605 if (txnid != NULL && ret == 0)
606 txnid->last_lsn = *ret_lsnp;
607 #ifdef LOG_DIAGNOSTIC
608 if (ret != 0)
609 (void)__vi_change_print(dbenv,
610 (DBT *)&logrec, ret_lsnp, NULL, NULL);
611 #endif
612 __os_free(dbenv, logrec.data, logrec.size);
613 return (ret);
617 * PUBLIC: int __vi_change_getpgnos __P((DB_ENV *, DBT *, DB_LSN *, db_recops,
618 * PUBLIC: void *));
621 __vi_change_getpgnos(dbenv, rec, lsnp, notused1, summary)
622 DB_ENV *dbenv;
623 DBT *rec;
624 DB_LSN *lsnp;
625 db_recops notused1;
626 void *summary;
628 TXN_RECS *t;
629 int ret;
630 COMPQUIET(rec, NULL);
631 COMPQUIET(notused1, DB_TXN_ABORT);
633 t = (TXN_RECS *)summary;
635 if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
636 return (ret);
638 t->array[t->npages].flags = LSN_PAGE_NOLOCK;
639 t->array[t->npages].lsn = *lsnp;
640 t->array[t->npages].fid = DB_LOGFILEID_INVALID;
641 memset(&t->array[t->npages].pgdesc, 0,
642 sizeof(t->array[t->npages].pgdesc));
644 t->npages++;
646 return (0);
650 * PUBLIC: int __vi_change_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops,
651 * PUBLIC: void *));
654 __vi_change_print(dbenv, dbtp, lsnp, notused2, notused3)
655 DB_ENV *dbenv;
656 DBT *dbtp;
657 DB_LSN *lsnp;
658 db_recops notused2;
659 void *notused3;
661 __vi_change_args *argp;
662 int ret;
664 notused2 = DB_TXN_ABORT;
665 notused3 = NULL;
667 if ((ret = __vi_change_read(dbenv, dbtp->data, &argp)) != 0)
668 return (ret);
669 (void)printf(
670 "[%lu][%lu]vi_change: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
671 (u_long)lsnp->file,
672 (u_long)lsnp->offset,
673 (u_long)argp->type,
674 (u_long)argp->txnid->txnid,
675 (u_long)argp->prev_lsn.file,
676 (u_long)argp->prev_lsn.offset);
677 (void)printf("\topcode: %lu\n", (u_long)argp->opcode);
678 (void)printf("\tlno: %lu\n", (u_long)argp->lno);
679 (void)printf("\n");
680 __os_free(dbenv, argp, 0);
681 return (0);
685 * PUBLIC: int __vi_change_read __P((DB_ENV *, void *, __vi_change_args **));
688 __vi_change_read(dbenv, recbuf, argpp)
689 DB_ENV *dbenv;
690 void *recbuf;
691 __vi_change_args **argpp;
693 __vi_change_args *argp;
694 int ret;
695 u_int32_t uinttmp;
696 u_int8_t *bp;
698 ret = __os_malloc(dbenv, sizeof(__vi_change_args) +
699 sizeof(DB_TXN), &argp);
700 if (ret != 0)
701 return (ret);
702 argp->txnid = (DB_TXN *)&argp[1];
704 bp = recbuf;
705 memcpy(&argp->type, bp, sizeof(argp->type));
706 bp += sizeof(argp->type);
708 memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
709 bp += sizeof(argp->txnid->txnid);
711 memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
712 bp += sizeof(DB_LSN);
714 memcpy(&uinttmp, bp, sizeof(uinttmp));
715 argp->opcode = (u_int32_t)uinttmp;
716 bp += sizeof(uinttmp);
718 memcpy(&uinttmp, bp, sizeof(uinttmp));
719 argp->lno = (db_recno_t)uinttmp;
720 bp += sizeof(uinttmp);
722 *argpp = argp;
723 return (0);
727 * PUBLIC: int __vi_init_print __P((DB_ENV *, int (***)(DB_ENV *, DBT *,
728 * PUBLIC: DB_LSN *, db_recops, void *), size_t *));
731 __vi_init_print(dbenv, dtabp, dtabsizep)
732 DB_ENV *dbenv;
733 int (***dtabp)__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
734 size_t *dtabsizep;
736 int ret;
738 if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
739 __vi_marker_print, DB_vi_marker)) != 0)
740 return (ret);
741 if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
742 __vi_cursor_print, DB_vi_cursor)) != 0)
743 return (ret);
744 if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
745 __vi_mark_print, DB_vi_mark)) != 0)
746 return (ret);
747 if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
748 __vi_change_print, DB_vi_change)) != 0)
749 return (ret);
750 return (0);
754 * PUBLIC: int __vi_init_getpgnos __P((DB_ENV *, int (***)(DB_ENV *, DBT *,
755 * PUBLIC: DB_LSN *, db_recops, void *), size_t *));
758 __vi_init_getpgnos(dbenv, dtabp, dtabsizep)
759 DB_ENV *dbenv;
760 int (***dtabp)__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
761 size_t *dtabsizep;
763 int ret;
765 if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
766 __vi_marker_getpgnos, DB_vi_marker)) != 0)
767 return (ret);
768 if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
769 __vi_cursor_getpgnos, DB_vi_cursor)) != 0)
770 return (ret);
771 if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
772 __vi_mark_getpgnos, DB_vi_mark)) != 0)
773 return (ret);
774 if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
775 __vi_change_getpgnos, DB_vi_change)) != 0)
776 return (ret);
777 return (0);
781 * PUBLIC: int __vi_init_recover __P((DB_ENV *));
784 __vi_init_recover(dbenv)
785 DB_ENV *dbenv;
787 int ret;
789 if ((ret = __db_add_recovery(dbenv, &dbenv->dtab, &dbenv->dtab_size,
790 __vi_marker_recover, DB_vi_marker)) != 0)
791 return (ret);
792 if ((ret = __db_add_recovery(dbenv, &dbenv->dtab, &dbenv->dtab_size,
793 __vi_cursor_recover, DB_vi_cursor)) != 0)
794 return (ret);
795 if ((ret = __db_add_recovery(dbenv, &dbenv->dtab, &dbenv->dtab_size,
796 __vi_mark_recover, DB_vi_mark)) != 0)
797 return (ret);
798 if ((ret = __db_add_recovery(dbenv, &dbenv->dtab, &dbenv->dtab_size,
799 __vi_change_recover, DB_vi_change)) != 0)
800 return (ret);
801 return (0);