remove generated compile, depcomp, missing and mkinstalldirs
[nvi.git] / common / vi_auto.c
blobe6faf9f2fd93d1a44b871649a8f0c96bc6b43acb
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: #ifdef USE_DB4_LOGGING
22 * PUBLIC: int __vi_marker_log __P((DB_ENV *, DB_TXN *, DB_LSN *, u_int32_t,
23 * PUBLIC: u_int32_t));
25 int
26 __vi_marker_log(dbenv, txnid, ret_lsnp, flags,
27 opcode)
28 DB_ENV *dbenv;
29 DB_TXN *txnid;
30 DB_LSN *ret_lsnp;
31 u_int32_t flags;
32 u_int32_t opcode;
34 DBT logrec;
35 DB_LSN *lsnp, null_lsn;
36 u_int32_t uinttmp;
37 u_int32_t rectype, txn_num;
38 int ret;
39 u_int8_t *bp;
41 rectype = DB_vi_marker;
42 if (txnid != NULL &&
43 TAILQ_FIRST(&txnid->kids) != NULL &&
44 (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
45 return (ret);
46 txn_num = txnid == NULL ? 0 : txnid->txnid;
47 if (txnid == NULL) {
48 ZERO_LSN(null_lsn);
49 lsnp = &null_lsn;
50 } else
51 lsnp = &txnid->last_lsn;
52 logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
53 + sizeof(u_int32_t);
54 if ((ret = __os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
55 return (ret);
57 bp = logrec.data;
59 memcpy(bp, &rectype, sizeof(rectype));
60 bp += sizeof(rectype);
62 memcpy(bp, &txn_num, sizeof(txn_num));
63 bp += sizeof(txn_num);
65 memcpy(bp, lsnp, sizeof(DB_LSN));
66 bp += sizeof(DB_LSN);
68 uinttmp = (u_int32_t)opcode;
69 memcpy(bp, &uinttmp, sizeof(uinttmp));
70 bp += sizeof(uinttmp);
72 DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
73 ret = dbenv->log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
74 if (txnid != NULL && ret == 0)
75 txnid->last_lsn = *ret_lsnp;
76 #ifdef LOG_DIAGNOSTIC
77 if (ret != 0)
78 (void)__vi_marker_print(dbenv,
79 (DBT *)&logrec, ret_lsnp, NULL, NULL);
80 #endif
81 __os_free(dbenv, logrec.data, logrec.size);
82 return (ret);
86 * PUBLIC: int __vi_marker_getpgnos __P((DB_ENV *, DBT *, DB_LSN *, db_recops,
87 * PUBLIC: void *));
89 int
90 __vi_marker_getpgnos(dbenv, rec, lsnp, notused1, summary)
91 DB_ENV *dbenv;
92 DBT *rec;
93 DB_LSN *lsnp;
94 db_recops notused1;
95 void *summary;
97 TXN_RECS *t;
98 int ret;
99 COMPQUIET(rec, NULL);
100 COMPQUIET(notused1, DB_TXN_ABORT);
102 t = (TXN_RECS *)summary;
104 if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
105 return (ret);
107 t->array[t->npages].flags = LSN_PAGE_NOLOCK;
108 t->array[t->npages].lsn = *lsnp;
109 t->array[t->npages].fid = DB_LOGFILEID_INVALID;
110 memset(&t->array[t->npages].pgdesc, 0,
111 sizeof(t->array[t->npages].pgdesc));
113 t->npages++;
115 return (0);
119 * PUBLIC: int __vi_marker_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops,
120 * PUBLIC: void *));
123 __vi_marker_print(dbenv, dbtp, lsnp, notused2, notused3)
124 DB_ENV *dbenv;
125 DBT *dbtp;
126 DB_LSN *lsnp;
127 db_recops notused2;
128 void *notused3;
130 __vi_marker_args *argp;
131 int ret;
133 notused2 = DB_TXN_ABORT;
134 notused3 = NULL;
136 if ((ret = __vi_marker_read(dbenv, dbtp->data, &argp)) != 0)
137 return (ret);
138 (void)printf(
139 "[%lu][%lu]vi_marker: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
140 (u_long)lsnp->file,
141 (u_long)lsnp->offset,
142 (u_long)argp->type,
143 (u_long)argp->txnid->txnid,
144 (u_long)argp->prev_lsn.file,
145 (u_long)argp->prev_lsn.offset);
146 (void)printf("\topcode: %lu\n", (u_long)argp->opcode);
147 (void)printf("\n");
148 __os_free(dbenv, argp, 0);
149 return (0);
153 * PUBLIC: int __vi_marker_read __P((DB_ENV *, void *, __vi_marker_args **));
156 __vi_marker_read(dbenv, recbuf, argpp)
157 DB_ENV *dbenv;
158 void *recbuf;
159 __vi_marker_args **argpp;
161 __vi_marker_args *argp;
162 int ret;
163 u_int32_t uinttmp;
164 u_int8_t *bp;
166 ret = __os_malloc(dbenv, sizeof(__vi_marker_args) +
167 sizeof(DB_TXN), &argp);
168 if (ret != 0)
169 return (ret);
170 argp->txnid = (DB_TXN *)&argp[1];
172 bp = recbuf;
173 memcpy(&argp->type, bp, sizeof(argp->type));
174 bp += sizeof(argp->type);
176 memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
177 bp += sizeof(argp->txnid->txnid);
179 memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
180 bp += sizeof(DB_LSN);
182 memcpy(&uinttmp, bp, sizeof(uinttmp));
183 argp->opcode = (u_int32_t)uinttmp;
184 bp += sizeof(uinttmp);
186 *argpp = argp;
187 return (0);
191 * PUBLIC: int __vi_cursor_log __P((DB_ENV *, DB_TXN *, DB_LSN *, u_int32_t,
192 * PUBLIC: u_int32_t, db_recno_t, size_t));
195 __vi_cursor_log(dbenv, txnid, ret_lsnp, flags,
196 opcode, lno, cno)
197 DB_ENV *dbenv;
198 DB_TXN *txnid;
199 DB_LSN *ret_lsnp;
200 u_int32_t flags;
201 u_int32_t opcode;
202 db_recno_t lno;
203 size_t cno;
205 DBT logrec;
206 DB_LSN *lsnp, null_lsn;
207 u_int32_t uinttmp;
208 u_int32_t rectype, txn_num;
209 int ret;
210 u_int8_t *bp;
212 rectype = DB_vi_cursor;
213 if (txnid != NULL &&
214 TAILQ_FIRST(&txnid->kids) != NULL &&
215 (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
216 return (ret);
217 txn_num = txnid == NULL ? 0 : txnid->txnid;
218 if (txnid == NULL) {
219 ZERO_LSN(null_lsn);
220 lsnp = &null_lsn;
221 } else
222 lsnp = &txnid->last_lsn;
223 logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
224 + sizeof(u_int32_t)
225 + sizeof(u_int32_t)
226 + sizeof(u_int32_t);
227 if ((ret = __os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
228 return (ret);
230 bp = logrec.data;
232 memcpy(bp, &rectype, sizeof(rectype));
233 bp += sizeof(rectype);
235 memcpy(bp, &txn_num, sizeof(txn_num));
236 bp += sizeof(txn_num);
238 memcpy(bp, lsnp, sizeof(DB_LSN));
239 bp += sizeof(DB_LSN);
241 uinttmp = (u_int32_t)opcode;
242 memcpy(bp, &uinttmp, sizeof(uinttmp));
243 bp += sizeof(uinttmp);
245 uinttmp = (u_int32_t)lno;
246 memcpy(bp, &uinttmp, sizeof(uinttmp));
247 bp += sizeof(uinttmp);
249 uinttmp = (u_int32_t)cno;
250 memcpy(bp, &uinttmp, sizeof(uinttmp));
251 bp += sizeof(uinttmp);
253 DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
254 ret = dbenv->log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
255 if (txnid != NULL && ret == 0)
256 txnid->last_lsn = *ret_lsnp;
257 #ifdef LOG_DIAGNOSTIC
258 if (ret != 0)
259 (void)__vi_cursor_print(dbenv,
260 (DBT *)&logrec, ret_lsnp, NULL, NULL);
261 #endif
262 __os_free(dbenv, logrec.data, logrec.size);
263 return (ret);
267 * PUBLIC: int __vi_cursor_getpgnos __P((DB_ENV *, DBT *, DB_LSN *, db_recops,
268 * PUBLIC: void *));
271 __vi_cursor_getpgnos(dbenv, rec, lsnp, notused1, summary)
272 DB_ENV *dbenv;
273 DBT *rec;
274 DB_LSN *lsnp;
275 db_recops notused1;
276 void *summary;
278 TXN_RECS *t;
279 int ret;
280 COMPQUIET(rec, NULL);
281 COMPQUIET(notused1, DB_TXN_ABORT);
283 t = (TXN_RECS *)summary;
285 if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
286 return (ret);
288 t->array[t->npages].flags = LSN_PAGE_NOLOCK;
289 t->array[t->npages].lsn = *lsnp;
290 t->array[t->npages].fid = DB_LOGFILEID_INVALID;
291 memset(&t->array[t->npages].pgdesc, 0,
292 sizeof(t->array[t->npages].pgdesc));
294 t->npages++;
296 return (0);
300 * PUBLIC: int __vi_cursor_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops,
301 * PUBLIC: void *));
304 __vi_cursor_print(dbenv, dbtp, lsnp, notused2, notused3)
305 DB_ENV *dbenv;
306 DBT *dbtp;
307 DB_LSN *lsnp;
308 db_recops notused2;
309 void *notused3;
311 __vi_cursor_args *argp;
312 int ret;
314 notused2 = DB_TXN_ABORT;
315 notused3 = NULL;
317 if ((ret = __vi_cursor_read(dbenv, dbtp->data, &argp)) != 0)
318 return (ret);
319 (void)printf(
320 "[%lu][%lu]vi_cursor: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
321 (u_long)lsnp->file,
322 (u_long)lsnp->offset,
323 (u_long)argp->type,
324 (u_long)argp->txnid->txnid,
325 (u_long)argp->prev_lsn.file,
326 (u_long)argp->prev_lsn.offset);
327 (void)printf("\topcode: %lu\n", (u_long)argp->opcode);
328 (void)printf("\tlno: %lu\n", (u_long)argp->lno);
329 (void)printf("\tcno: %d\n", argp->cno);
330 (void)printf("\n");
331 __os_free(dbenv, argp, 0);
332 return (0);
336 * PUBLIC: int __vi_cursor_read __P((DB_ENV *, void *, __vi_cursor_args **));
339 __vi_cursor_read(dbenv, recbuf, argpp)
340 DB_ENV *dbenv;
341 void *recbuf;
342 __vi_cursor_args **argpp;
344 __vi_cursor_args *argp;
345 int ret;
346 u_int32_t uinttmp;
347 u_int8_t *bp;
349 ret = __os_malloc(dbenv, sizeof(__vi_cursor_args) +
350 sizeof(DB_TXN), &argp);
351 if (ret != 0)
352 return (ret);
353 argp->txnid = (DB_TXN *)&argp[1];
355 bp = recbuf;
356 memcpy(&argp->type, bp, sizeof(argp->type));
357 bp += sizeof(argp->type);
359 memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
360 bp += sizeof(argp->txnid->txnid);
362 memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
363 bp += sizeof(DB_LSN);
365 memcpy(&uinttmp, bp, sizeof(uinttmp));
366 argp->opcode = (u_int32_t)uinttmp;
367 bp += sizeof(uinttmp);
369 memcpy(&uinttmp, bp, sizeof(uinttmp));
370 argp->lno = (db_recno_t)uinttmp;
371 bp += sizeof(uinttmp);
373 memcpy(&uinttmp, bp, sizeof(uinttmp));
374 argp->cno = (size_t)uinttmp;
375 bp += sizeof(uinttmp);
377 *argpp = argp;
378 return (0);
382 * PUBLIC: int __vi_mark_log __P((DB_ENV *, DB_TXN *, DB_LSN *, u_int32_t,
383 * PUBLIC: LMARK *));
386 __vi_mark_log(dbenv, txnid, ret_lsnp, flags,
387 lmp)
388 DB_ENV *dbenv;
389 DB_TXN *txnid;
390 DB_LSN *ret_lsnp;
391 u_int32_t flags;
392 LMARK * lmp;
394 DBT logrec;
395 DB_LSN *lsnp, null_lsn;
396 u_int32_t rectype, txn_num;
397 int ret;
398 u_int8_t *bp;
400 rectype = DB_vi_mark;
401 if (txnid != NULL &&
402 TAILQ_FIRST(&txnid->kids) != NULL &&
403 (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
404 return (ret);
405 txn_num = txnid == NULL ? 0 : txnid->txnid;
406 if (txnid == NULL) {
407 ZERO_LSN(null_lsn);
408 lsnp = &null_lsn;
409 } else
410 lsnp = &txnid->last_lsn;
411 logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
412 + sizeof(*lmp);
413 if ((ret = __os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
414 return (ret);
416 bp = logrec.data;
418 memcpy(bp, &rectype, sizeof(rectype));
419 bp += sizeof(rectype);
421 memcpy(bp, &txn_num, sizeof(txn_num));
422 bp += sizeof(txn_num);
424 memcpy(bp, lsnp, sizeof(DB_LSN));
425 bp += sizeof(DB_LSN);
427 if (lmp != NULL)
428 memcpy(bp, lmp, sizeof(*lmp));
429 else
430 memset(bp, 0, sizeof(*lmp));
431 bp += sizeof(*lmp);
433 DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
434 ret = dbenv->log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
435 if (txnid != NULL && ret == 0)
436 txnid->last_lsn = *ret_lsnp;
437 #ifdef LOG_DIAGNOSTIC
438 if (ret != 0)
439 (void)__vi_mark_print(dbenv,
440 (DBT *)&logrec, ret_lsnp, NULL, NULL);
441 #endif
442 __os_free(dbenv, logrec.data, logrec.size);
443 return (ret);
447 * PUBLIC: int __vi_mark_getpgnos __P((DB_ENV *, DBT *, DB_LSN *, db_recops,
448 * PUBLIC: void *));
451 __vi_mark_getpgnos(dbenv, rec, lsnp, notused1, summary)
452 DB_ENV *dbenv;
453 DBT *rec;
454 DB_LSN *lsnp;
455 db_recops notused1;
456 void *summary;
458 TXN_RECS *t;
459 int ret;
460 COMPQUIET(rec, NULL);
461 COMPQUIET(notused1, DB_TXN_ABORT);
463 t = (TXN_RECS *)summary;
465 if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
466 return (ret);
468 t->array[t->npages].flags = LSN_PAGE_NOLOCK;
469 t->array[t->npages].lsn = *lsnp;
470 t->array[t->npages].fid = DB_LOGFILEID_INVALID;
471 memset(&t->array[t->npages].pgdesc, 0,
472 sizeof(t->array[t->npages].pgdesc));
474 t->npages++;
476 return (0);
480 * PUBLIC: int __vi_mark_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops,
481 * PUBLIC: void *));
484 __vi_mark_print(dbenv, dbtp, lsnp, notused2, notused3)
485 DB_ENV *dbenv;
486 DBT *dbtp;
487 DB_LSN *lsnp;
488 db_recops notused2;
489 void *notused3;
491 __vi_mark_args *argp;
492 int ret;
494 notused2 = DB_TXN_ABORT;
495 notused3 = NULL;
497 if ((ret = __vi_mark_read(dbenv, dbtp->data, &argp)) != 0)
498 return (ret);
499 (void)printf(
500 "[%lu][%lu]vi_mark: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
501 (u_long)lsnp->file,
502 (u_long)lsnp->offset,
503 (u_long)argp->type,
504 (u_long)argp->txnid->txnid,
505 (u_long)argp->prev_lsn.file,
506 (u_long)argp->prev_lsn.offset);
507 (void)printf("\tlmp: %%\n", argp->lmp);
508 (void)printf("\n");
509 __os_free(dbenv, argp, 0);
510 return (0);
514 * PUBLIC: int __vi_mark_read __P((DB_ENV *, void *, __vi_mark_args **));
517 __vi_mark_read(dbenv, recbuf, argpp)
518 DB_ENV *dbenv;
519 void *recbuf;
520 __vi_mark_args **argpp;
522 __vi_mark_args *argp;
523 int ret;
524 u_int8_t *bp;
526 ret = __os_malloc(dbenv, sizeof(__vi_mark_args) +
527 sizeof(DB_TXN), &argp);
528 if (ret != 0)
529 return (ret);
530 argp->txnid = (DB_TXN *)&argp[1];
532 bp = recbuf;
533 memcpy(&argp->type, bp, sizeof(argp->type));
534 bp += sizeof(argp->type);
536 memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
537 bp += sizeof(argp->txnid->txnid);
539 memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
540 bp += sizeof(DB_LSN);
542 memcpy(&argp->lmp, bp, sizeof(argp->lmp));
543 bp += sizeof(argp->lmp);
545 *argpp = argp;
546 return (0);
550 * PUBLIC: int __vi_change_log __P((DB_ENV *, DB_TXN *, DB_LSN *, u_int32_t,
551 * PUBLIC: u_int32_t, db_recno_t));
554 __vi_change_log(dbenv, txnid, ret_lsnp, flags,
555 opcode, lno)
556 DB_ENV *dbenv;
557 DB_TXN *txnid;
558 DB_LSN *ret_lsnp;
559 u_int32_t flags;
560 u_int32_t opcode;
561 db_recno_t lno;
563 DBT logrec;
564 DB_LSN *lsnp, null_lsn;
565 u_int32_t uinttmp;
566 u_int32_t rectype, txn_num;
567 int ret;
568 u_int8_t *bp;
570 rectype = DB_vi_change;
571 if (txnid != NULL &&
572 TAILQ_FIRST(&txnid->kids) != NULL &&
573 (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
574 return (ret);
575 txn_num = txnid == NULL ? 0 : txnid->txnid;
576 if (txnid == NULL) {
577 ZERO_LSN(null_lsn);
578 lsnp = &null_lsn;
579 } else
580 lsnp = &txnid->last_lsn;
581 logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
582 + sizeof(u_int32_t)
583 + sizeof(u_int32_t);
584 if ((ret = __os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
585 return (ret);
587 bp = logrec.data;
589 memcpy(bp, &rectype, sizeof(rectype));
590 bp += sizeof(rectype);
592 memcpy(bp, &txn_num, sizeof(txn_num));
593 bp += sizeof(txn_num);
595 memcpy(bp, lsnp, sizeof(DB_LSN));
596 bp += sizeof(DB_LSN);
598 uinttmp = (u_int32_t)opcode;
599 memcpy(bp, &uinttmp, sizeof(uinttmp));
600 bp += sizeof(uinttmp);
602 uinttmp = (u_int32_t)lno;
603 memcpy(bp, &uinttmp, sizeof(uinttmp));
604 bp += sizeof(uinttmp);
606 DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
607 ret = dbenv->log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
608 if (txnid != NULL && ret == 0)
609 txnid->last_lsn = *ret_lsnp;
610 #ifdef LOG_DIAGNOSTIC
611 if (ret != 0)
612 (void)__vi_change_print(dbenv,
613 (DBT *)&logrec, ret_lsnp, NULL, NULL);
614 #endif
615 __os_free(dbenv, logrec.data, logrec.size);
616 return (ret);
620 * PUBLIC: int __vi_change_getpgnos __P((DB_ENV *, DBT *, DB_LSN *, db_recops,
621 * PUBLIC: void *));
624 __vi_change_getpgnos(dbenv, rec, lsnp, notused1, summary)
625 DB_ENV *dbenv;
626 DBT *rec;
627 DB_LSN *lsnp;
628 db_recops notused1;
629 void *summary;
631 TXN_RECS *t;
632 int ret;
633 COMPQUIET(rec, NULL);
634 COMPQUIET(notused1, DB_TXN_ABORT);
636 t = (TXN_RECS *)summary;
638 if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
639 return (ret);
641 t->array[t->npages].flags = LSN_PAGE_NOLOCK;
642 t->array[t->npages].lsn = *lsnp;
643 t->array[t->npages].fid = DB_LOGFILEID_INVALID;
644 memset(&t->array[t->npages].pgdesc, 0,
645 sizeof(t->array[t->npages].pgdesc));
647 t->npages++;
649 return (0);
653 * PUBLIC: int __vi_change_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops,
654 * PUBLIC: void *));
657 __vi_change_print(dbenv, dbtp, lsnp, notused2, notused3)
658 DB_ENV *dbenv;
659 DBT *dbtp;
660 DB_LSN *lsnp;
661 db_recops notused2;
662 void *notused3;
664 __vi_change_args *argp;
665 int ret;
667 notused2 = DB_TXN_ABORT;
668 notused3 = NULL;
670 if ((ret = __vi_change_read(dbenv, dbtp->data, &argp)) != 0)
671 return (ret);
672 (void)printf(
673 "[%lu][%lu]vi_change: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
674 (u_long)lsnp->file,
675 (u_long)lsnp->offset,
676 (u_long)argp->type,
677 (u_long)argp->txnid->txnid,
678 (u_long)argp->prev_lsn.file,
679 (u_long)argp->prev_lsn.offset);
680 (void)printf("\topcode: %lu\n", (u_long)argp->opcode);
681 (void)printf("\tlno: %lu\n", (u_long)argp->lno);
682 (void)printf("\n");
683 __os_free(dbenv, argp, 0);
684 return (0);
688 * PUBLIC: int __vi_change_read __P((DB_ENV *, void *, __vi_change_args **));
691 __vi_change_read(dbenv, recbuf, argpp)
692 DB_ENV *dbenv;
693 void *recbuf;
694 __vi_change_args **argpp;
696 __vi_change_args *argp;
697 int ret;
698 u_int32_t uinttmp;
699 u_int8_t *bp;
701 ret = __os_malloc(dbenv, sizeof(__vi_change_args) +
702 sizeof(DB_TXN), &argp);
703 if (ret != 0)
704 return (ret);
705 argp->txnid = (DB_TXN *)&argp[1];
707 bp = recbuf;
708 memcpy(&argp->type, bp, sizeof(argp->type));
709 bp += sizeof(argp->type);
711 memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
712 bp += sizeof(argp->txnid->txnid);
714 memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
715 bp += sizeof(DB_LSN);
717 memcpy(&uinttmp, bp, sizeof(uinttmp));
718 argp->opcode = (u_int32_t)uinttmp;
719 bp += sizeof(uinttmp);
721 memcpy(&uinttmp, bp, sizeof(uinttmp));
722 argp->lno = (db_recno_t)uinttmp;
723 bp += sizeof(uinttmp);
725 *argpp = argp;
726 return (0);
730 * PUBLIC: int __vi_init_print __P((DB_ENV *, int (***)(DB_ENV *, DBT *,
731 * PUBLIC: DB_LSN *, db_recops, void *), size_t *));
734 __vi_init_print(dbenv, dtabp, dtabsizep)
735 DB_ENV *dbenv;
736 int (***dtabp)__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
737 size_t *dtabsizep;
739 int ret;
741 if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
742 __vi_marker_print, DB_vi_marker)) != 0)
743 return (ret);
744 if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
745 __vi_cursor_print, DB_vi_cursor)) != 0)
746 return (ret);
747 if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
748 __vi_mark_print, DB_vi_mark)) != 0)
749 return (ret);
750 if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
751 __vi_change_print, DB_vi_change)) != 0)
752 return (ret);
753 return (0);
757 * PUBLIC: int __vi_init_getpgnos __P((DB_ENV *, int (***)(DB_ENV *, DBT *,
758 * PUBLIC: DB_LSN *, db_recops, void *), size_t *));
761 __vi_init_getpgnos(dbenv, dtabp, dtabsizep)
762 DB_ENV *dbenv;
763 int (***dtabp)__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
764 size_t *dtabsizep;
766 int ret;
768 if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
769 __vi_marker_getpgnos, DB_vi_marker)) != 0)
770 return (ret);
771 if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
772 __vi_cursor_getpgnos, DB_vi_cursor)) != 0)
773 return (ret);
774 if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
775 __vi_mark_getpgnos, DB_vi_mark)) != 0)
776 return (ret);
777 if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
778 __vi_change_getpgnos, DB_vi_change)) != 0)
779 return (ret);
780 return (0);
784 * PUBLIC: int __vi_init_recover __P((DB_ENV *));
787 __vi_init_recover(dbenv)
788 DB_ENV *dbenv;
790 int ret;
792 if ((ret = __db_add_recovery(dbenv, &dbenv->dtab, &dbenv->dtab_size,
793 __vi_marker_recover, DB_vi_marker)) != 0)
794 return (ret);
795 if ((ret = __db_add_recovery(dbenv, &dbenv->dtab, &dbenv->dtab_size,
796 __vi_cursor_recover, DB_vi_cursor)) != 0)
797 return (ret);
798 if ((ret = __db_add_recovery(dbenv, &dbenv->dtab, &dbenv->dtab_size,
799 __vi_mark_recover, DB_vi_mark)) != 0)
800 return (ret);
801 if ((ret = __db_add_recovery(dbenv, &dbenv->dtab, &dbenv->dtab_size,
802 __vi_change_recover, DB_vi_change)) != 0)
803 return (ret);
804 return (0);
807 * PUBLIC: #endif