1 /* Do not edit: automatically built by gen_rec.awk. */
2 #include <errno.h>
3 #include "db_config.h"
4
5 #ifndef NO_SYSTEM_INCLUDES
6 #include <sys/types.h>
7
8 #include <ctype.h>
9 #include <string.h>
10 #endif
11
12 #include "db_int.h"
13 #include "db_page.h"
14 #include "db_dispatch.h"
15 #include "db_am.h"
16 #include "txn.h"
17
CDB___crdel_fileopen_log(dbenv,txnid,ret_lsnp,flags,name,mode)18 int CDB___crdel_fileopen_log(dbenv, txnid, ret_lsnp, flags,
19 name, mode)
20 DB_ENV *dbenv;
21 DB_TXN *txnid;
22 DB_LSN *ret_lsnp;
23 u_int32_t flags;
24 const DBT *name;
25 u_int32_t mode;
26 {
27 DBT logrec;
28 DB_LSN *lsnp, null_lsn;
29 u_int32_t zero;
30 u_int32_t rectype, txn_num;
31 int ret;
32 u_int8_t *bp;
33
34 if (txnid != NULL &&
35 TAILQ_FIRST(&txnid->kids) != NULL && CDB___txn_activekids(txnid) != 0)
36 return (EPERM);
37 rectype = DB_crdel_fileopen;
38 txn_num = txnid == NULL ? 0 : txnid->txnid;
39 if (txnid == NULL) {
40 ZERO_LSN(null_lsn);
41 lsnp = &null_lsn;
42 } else
43 lsnp = &txnid->last_lsn;
44 logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
45 + sizeof(u_int32_t) + (name == NULL ? 0 : name->size)
46 + sizeof(mode);
47 if ((ret = CDB___os_malloc(logrec.size, NULL, &logrec.data)) != 0)
48 return (ret);
49
50 bp = logrec.data;
51 memcpy(bp, &rectype, sizeof(rectype));
52 bp += sizeof(rectype);
53 memcpy(bp, &txn_num, sizeof(txn_num));
54 bp += sizeof(txn_num);
55 memcpy(bp, lsnp, sizeof(DB_LSN));
56 bp += sizeof(DB_LSN);
57 if (name == NULL) {
58 zero = 0;
59 memcpy(bp, &zero, sizeof(u_int32_t));
60 bp += sizeof(u_int32_t);
61 } else {
62 memcpy(bp, &name->size, sizeof(name->size));
63 bp += sizeof(name->size);
64 memcpy(bp, name->data, name->size);
65 bp += name->size;
66 }
67 memcpy(bp, &mode, sizeof(mode));
68 bp += sizeof(mode);
69 DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
70 ret = CDB_log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
71 if (txnid != NULL)
72 txnid->last_lsn = *ret_lsnp;
73 CDB___os_free(logrec.data, logrec.size);
74 return (ret);
75 }
76
77 int
CDB___crdel_fileopen_print(notused1,dbtp,lsnp,notused2,notused3)78 CDB___crdel_fileopen_print(notused1, dbtp, lsnp, notused2, notused3)
79 DB_ENV *notused1;
80 DBT *dbtp;
81 DB_LSN *lsnp;
82 int notused2;
83 void *notused3;
84 {
85 __crdel_fileopen_args *argp;
86 u_int32_t i;
87 u_int ch;
88 int ret;
89
90 i = 0;
91 ch = 0;
92 notused1 = NULL;
93 notused2 = 0;
94 notused3 = NULL;
95
96 if ((ret = CDB___crdel_fileopen_read(dbtp->data, &argp)) != 0)
97 return (ret);
98 printf("[%lu][%lu]crdel_fileopen: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
99 (u_long)lsnp->file,
100 (u_long)lsnp->offset,
101 (u_long)argp->type,
102 (u_long)argp->txnid->txnid,
103 (u_long)argp->prev_lsn.file,
104 (u_long)argp->prev_lsn.offset);
105 printf("\tname: ");
106 for (i = 0; i < argp->name.size; i++) {
107 ch = ((u_int8_t *)argp->name.data)[i];
108 if (isprint(ch) || ch == 0xa)
109 putchar(ch);
110 else
111 printf("%#x ", ch);
112 }
113 printf("\n");
114 printf("\tmode: %o\n", argp->mode);
115 printf("\n");
116 CDB___os_free(argp, 0);
117 return (0);
118 }
119
120 int
CDB___crdel_fileopen_read(recbuf,argpp)121 CDB___crdel_fileopen_read(recbuf, argpp)
122 void *recbuf;
123 __crdel_fileopen_args **argpp;
124 {
125 __crdel_fileopen_args *argp;
126 u_int8_t *bp;
127 int ret;
128
129 ret = CDB___os_malloc(sizeof(__crdel_fileopen_args) +
130 sizeof(DB_TXN), NULL, &argp);
131 if (ret != 0)
132 return (ret);
133 argp->txnid = (DB_TXN *)&argp[1];
134 bp = recbuf;
135 memcpy(&argp->type, bp, sizeof(argp->type));
136 bp += sizeof(argp->type);
137 memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
138 bp += sizeof(argp->txnid->txnid);
139 memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
140 bp += sizeof(DB_LSN);
141 memset(&argp->name, 0, sizeof(argp->name));
142 memcpy(&argp->name.size, bp, sizeof(u_int32_t));
143 bp += sizeof(u_int32_t);
144 argp->name.data = bp;
145 bp += argp->name.size;
146 memcpy(&argp->mode, bp, sizeof(argp->mode));
147 bp += sizeof(argp->mode);
148 *argpp = argp;
149 return (0);
150 }
151
CDB___crdel_metasub_log(dbenv,txnid,ret_lsnp,flags,fileid,pgno,page,lsn)152 int CDB___crdel_metasub_log(dbenv, txnid, ret_lsnp, flags,
153 fileid, pgno, page, lsn)
154 DB_ENV *dbenv;
155 DB_TXN *txnid;
156 DB_LSN *ret_lsnp;
157 u_int32_t flags;
158 u_int32_t fileid;
159 db_pgno_t pgno;
160 const DBT *page;
161 DB_LSN * lsn;
162 {
163 DBT logrec;
164 DB_LSN *lsnp, null_lsn;
165 u_int32_t zero;
166 u_int32_t rectype, txn_num;
167 int ret;
168 u_int8_t *bp;
169
170 if (txnid != NULL &&
171 TAILQ_FIRST(&txnid->kids) != NULL && CDB___txn_activekids(txnid) != 0)
172 return (EPERM);
173 rectype = DB_crdel_metasub;
174 txn_num = txnid == NULL ? 0 : txnid->txnid;
175 if (txnid == NULL) {
176 ZERO_LSN(null_lsn);
177 lsnp = &null_lsn;
178 } else
179 lsnp = &txnid->last_lsn;
180 logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
181 + sizeof(fileid)
182 + sizeof(pgno)
183 + sizeof(u_int32_t) + (page == NULL ? 0 : page->size)
184 + sizeof(*lsn);
185 if ((ret = CDB___os_malloc(logrec.size, NULL, &logrec.data)) != 0)
186 return (ret);
187
188 bp = logrec.data;
189 memcpy(bp, &rectype, sizeof(rectype));
190 bp += sizeof(rectype);
191 memcpy(bp, &txn_num, sizeof(txn_num));
192 bp += sizeof(txn_num);
193 memcpy(bp, lsnp, sizeof(DB_LSN));
194 bp += sizeof(DB_LSN);
195 memcpy(bp, &fileid, sizeof(fileid));
196 bp += sizeof(fileid);
197 memcpy(bp, &pgno, sizeof(pgno));
198 bp += sizeof(pgno);
199 if (page == NULL) {
200 zero = 0;
201 memcpy(bp, &zero, sizeof(u_int32_t));
202 bp += sizeof(u_int32_t);
203 } else {
204 memcpy(bp, &page->size, sizeof(page->size));
205 bp += sizeof(page->size);
206 memcpy(bp, page->data, page->size);
207 bp += page->size;
208 }
209 if (lsn != NULL)
210 memcpy(bp, lsn, sizeof(*lsn));
211 else
212 memset(bp, 0, sizeof(*lsn));
213 bp += sizeof(*lsn);
214 DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
215 ret = CDB_log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
216 if (txnid != NULL)
217 txnid->last_lsn = *ret_lsnp;
218 CDB___os_free(logrec.data, logrec.size);
219 return (ret);
220 }
221
222 int
CDB___crdel_metasub_print(notused1,dbtp,lsnp,notused2,notused3)223 CDB___crdel_metasub_print(notused1, dbtp, lsnp, notused2, notused3)
224 DB_ENV *notused1;
225 DBT *dbtp;
226 DB_LSN *lsnp;
227 int notused2;
228 void *notused3;
229 {
230 __crdel_metasub_args *argp;
231 u_int32_t i;
232 u_int ch;
233 int ret;
234
235 i = 0;
236 ch = 0;
237 notused1 = NULL;
238 notused2 = 0;
239 notused3 = NULL;
240
241 if ((ret = CDB___crdel_metasub_read(dbtp->data, &argp)) != 0)
242 return (ret);
243 printf("[%lu][%lu]crdel_metasub: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
244 (u_long)lsnp->file,
245 (u_long)lsnp->offset,
246 (u_long)argp->type,
247 (u_long)argp->txnid->txnid,
248 (u_long)argp->prev_lsn.file,
249 (u_long)argp->prev_lsn.offset);
250 printf("\tfileid: %lu\n", (u_long)argp->fileid);
251 printf("\tpgno: %d\n", argp->pgno);
252 printf("\tpage: ");
253 for (i = 0; i < argp->page.size; i++) {
254 ch = ((u_int8_t *)argp->page.data)[i];
255 if (isprint(ch) || ch == 0xa)
256 putchar(ch);
257 else
258 printf("%#x ", ch);
259 }
260 printf("\n");
261 printf("\tlsn: [%lu][%lu]\n",
262 (u_long)argp->lsn.file, (u_long)argp->lsn.offset);
263 printf("\n");
264 CDB___os_free(argp, 0);
265 return (0);
266 }
267
268 int
CDB___crdel_metasub_read(recbuf,argpp)269 CDB___crdel_metasub_read(recbuf, argpp)
270 void *recbuf;
271 __crdel_metasub_args **argpp;
272 {
273 __crdel_metasub_args *argp;
274 u_int8_t *bp;
275 int ret;
276
277 ret = CDB___os_malloc(sizeof(__crdel_metasub_args) +
278 sizeof(DB_TXN), NULL, &argp);
279 if (ret != 0)
280 return (ret);
281 argp->txnid = (DB_TXN *)&argp[1];
282 bp = recbuf;
283 memcpy(&argp->type, bp, sizeof(argp->type));
284 bp += sizeof(argp->type);
285 memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
286 bp += sizeof(argp->txnid->txnid);
287 memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
288 bp += sizeof(DB_LSN);
289 memcpy(&argp->fileid, bp, sizeof(argp->fileid));
290 bp += sizeof(argp->fileid);
291 memcpy(&argp->pgno, bp, sizeof(argp->pgno));
292 bp += sizeof(argp->pgno);
293 memset(&argp->page, 0, sizeof(argp->page));
294 memcpy(&argp->page.size, bp, sizeof(u_int32_t));
295 bp += sizeof(u_int32_t);
296 argp->page.data = bp;
297 bp += argp->page.size;
298 memcpy(&argp->lsn, bp, sizeof(argp->lsn));
299 bp += sizeof(argp->lsn);
300 *argpp = argp;
301 return (0);
302 }
303
CDB___crdel_metapage_log(dbenv,txnid,ret_lsnp,flags,fileid,name,pgno,page)304 int CDB___crdel_metapage_log(dbenv, txnid, ret_lsnp, flags,
305 fileid, name, pgno, page)
306 DB_ENV *dbenv;
307 DB_TXN *txnid;
308 DB_LSN *ret_lsnp;
309 u_int32_t flags;
310 u_int32_t fileid;
311 const DBT *name;
312 db_pgno_t pgno;
313 const DBT *page;
314 {
315 DBT logrec;
316 DB_LSN *lsnp, null_lsn;
317 u_int32_t zero;
318 u_int32_t rectype, txn_num;
319 int ret;
320 u_int8_t *bp;
321
322 if (txnid != NULL &&
323 TAILQ_FIRST(&txnid->kids) != NULL && CDB___txn_activekids(txnid) != 0)
324 return (EPERM);
325 rectype = DB_crdel_metapage;
326 txn_num = txnid == NULL ? 0 : txnid->txnid;
327 if (txnid == NULL) {
328 ZERO_LSN(null_lsn);
329 lsnp = &null_lsn;
330 } else
331 lsnp = &txnid->last_lsn;
332 logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
333 + sizeof(fileid)
334 + sizeof(u_int32_t) + (name == NULL ? 0 : name->size)
335 + sizeof(pgno)
336 + sizeof(u_int32_t) + (page == NULL ? 0 : page->size);
337 if ((ret = CDB___os_malloc(logrec.size, NULL, &logrec.data)) != 0)
338 return (ret);
339
340 bp = logrec.data;
341 memcpy(bp, &rectype, sizeof(rectype));
342 bp += sizeof(rectype);
343 memcpy(bp, &txn_num, sizeof(txn_num));
344 bp += sizeof(txn_num);
345 memcpy(bp, lsnp, sizeof(DB_LSN));
346 bp += sizeof(DB_LSN);
347 memcpy(bp, &fileid, sizeof(fileid));
348 bp += sizeof(fileid);
349 if (name == NULL) {
350 zero = 0;
351 memcpy(bp, &zero, sizeof(u_int32_t));
352 bp += sizeof(u_int32_t);
353 } else {
354 memcpy(bp, &name->size, sizeof(name->size));
355 bp += sizeof(name->size);
356 memcpy(bp, name->data, name->size);
357 bp += name->size;
358 }
359 memcpy(bp, &pgno, sizeof(pgno));
360 bp += sizeof(pgno);
361 if (page == NULL) {
362 zero = 0;
363 memcpy(bp, &zero, sizeof(u_int32_t));
364 bp += sizeof(u_int32_t);
365 } else {
366 memcpy(bp, &page->size, sizeof(page->size));
367 bp += sizeof(page->size);
368 memcpy(bp, page->data, page->size);
369 bp += page->size;
370 }
371 DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
372 ret = CDB_log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
373 if (txnid != NULL)
374 txnid->last_lsn = *ret_lsnp;
375 CDB___os_free(logrec.data, logrec.size);
376 return (ret);
377 }
378
379 int
CDB___crdel_metapage_print(notused1,dbtp,lsnp,notused2,notused3)380 CDB___crdel_metapage_print(notused1, dbtp, lsnp, notused2, notused3)
381 DB_ENV *notused1;
382 DBT *dbtp;
383 DB_LSN *lsnp;
384 int notused2;
385 void *notused3;
386 {
387 __crdel_metapage_args *argp;
388 u_int32_t i;
389 u_int ch;
390 int ret;
391
392 i = 0;
393 ch = 0;
394 notused1 = NULL;
395 notused2 = 0;
396 notused3 = NULL;
397
398 if ((ret = CDB___crdel_metapage_read(dbtp->data, &argp)) != 0)
399 return (ret);
400 printf("[%lu][%lu]crdel_metapage: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
401 (u_long)lsnp->file,
402 (u_long)lsnp->offset,
403 (u_long)argp->type,
404 (u_long)argp->txnid->txnid,
405 (u_long)argp->prev_lsn.file,
406 (u_long)argp->prev_lsn.offset);
407 printf("\tfileid: %lu\n", (u_long)argp->fileid);
408 printf("\tname: ");
409 for (i = 0; i < argp->name.size; i++) {
410 ch = ((u_int8_t *)argp->name.data)[i];
411 if (isprint(ch) || ch == 0xa)
412 putchar(ch);
413 else
414 printf("%#x ", ch);
415 }
416 printf("\n");
417 printf("\tpgno: %d\n", argp->pgno);
418 printf("\tpage: ");
419 for (i = 0; i < argp->page.size; i++) {
420 ch = ((u_int8_t *)argp->page.data)[i];
421 if (isprint(ch) || ch == 0xa)
422 putchar(ch);
423 else
424 printf("%#x ", ch);
425 }
426 printf("\n");
427 printf("\n");
428 CDB___os_free(argp, 0);
429 return (0);
430 }
431
432 int
CDB___crdel_metapage_read(recbuf,argpp)433 CDB___crdel_metapage_read(recbuf, argpp)
434 void *recbuf;
435 __crdel_metapage_args **argpp;
436 {
437 __crdel_metapage_args *argp;
438 u_int8_t *bp;
439 int ret;
440
441 ret = CDB___os_malloc(sizeof(__crdel_metapage_args) +
442 sizeof(DB_TXN), NULL, &argp);
443 if (ret != 0)
444 return (ret);
445 argp->txnid = (DB_TXN *)&argp[1];
446 bp = recbuf;
447 memcpy(&argp->type, bp, sizeof(argp->type));
448 bp += sizeof(argp->type);
449 memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
450 bp += sizeof(argp->txnid->txnid);
451 memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
452 bp += sizeof(DB_LSN);
453 memcpy(&argp->fileid, bp, sizeof(argp->fileid));
454 bp += sizeof(argp->fileid);
455 memset(&argp->name, 0, sizeof(argp->name));
456 memcpy(&argp->name.size, bp, sizeof(u_int32_t));
457 bp += sizeof(u_int32_t);
458 argp->name.data = bp;
459 bp += argp->name.size;
460 memcpy(&argp->pgno, bp, sizeof(argp->pgno));
461 bp += sizeof(argp->pgno);
462 memset(&argp->page, 0, sizeof(argp->page));
463 memcpy(&argp->page.size, bp, sizeof(u_int32_t));
464 bp += sizeof(u_int32_t);
465 argp->page.data = bp;
466 bp += argp->page.size;
467 *argpp = argp;
468 return (0);
469 }
470
CDB___crdel_delete_log(dbenv,txnid,ret_lsnp,flags,name)471 int CDB___crdel_delete_log(dbenv, txnid, ret_lsnp, flags,
472 name)
473 DB_ENV *dbenv;
474 DB_TXN *txnid;
475 DB_LSN *ret_lsnp;
476 u_int32_t flags;
477 const DBT *name;
478 {
479 DBT logrec;
480 DB_LSN *lsnp, null_lsn;
481 u_int32_t zero;
482 u_int32_t rectype, txn_num;
483 int ret;
484 u_int8_t *bp;
485
486 if (txnid != NULL &&
487 TAILQ_FIRST(&txnid->kids) != NULL && CDB___txn_activekids(txnid) != 0)
488 return (EPERM);
489 rectype = DB_crdel_delete;
490 txn_num = txnid == NULL ? 0 : txnid->txnid;
491 if (txnid == NULL) {
492 ZERO_LSN(null_lsn);
493 lsnp = &null_lsn;
494 } else
495 lsnp = &txnid->last_lsn;
496 logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
497 + sizeof(u_int32_t) + (name == NULL ? 0 : name->size);
498 if ((ret = CDB___os_malloc(logrec.size, NULL, &logrec.data)) != 0)
499 return (ret);
500
501 bp = logrec.data;
502 memcpy(bp, &rectype, sizeof(rectype));
503 bp += sizeof(rectype);
504 memcpy(bp, &txn_num, sizeof(txn_num));
505 bp += sizeof(txn_num);
506 memcpy(bp, lsnp, sizeof(DB_LSN));
507 bp += sizeof(DB_LSN);
508 if (name == NULL) {
509 zero = 0;
510 memcpy(bp, &zero, sizeof(u_int32_t));
511 bp += sizeof(u_int32_t);
512 } else {
513 memcpy(bp, &name->size, sizeof(name->size));
514 bp += sizeof(name->size);
515 memcpy(bp, name->data, name->size);
516 bp += name->size;
517 }
518 DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
519 ret = CDB_log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
520 if (txnid != NULL)
521 txnid->last_lsn = *ret_lsnp;
522 CDB___os_free(logrec.data, logrec.size);
523 return (ret);
524 }
525
526 int
CDB___crdel_delete_print(notused1,dbtp,lsnp,notused2,notused3)527 CDB___crdel_delete_print(notused1, dbtp, lsnp, notused2, notused3)
528 DB_ENV *notused1;
529 DBT *dbtp;
530 DB_LSN *lsnp;
531 int notused2;
532 void *notused3;
533 {
534 __crdel_delete_args *argp;
535 u_int32_t i;
536 u_int ch;
537 int ret;
538
539 i = 0;
540 ch = 0;
541 notused1 = NULL;
542 notused2 = 0;
543 notused3 = NULL;
544
545 if ((ret = CDB___crdel_delete_read(dbtp->data, &argp)) != 0)
546 return (ret);
547 printf("[%lu][%lu]crdel_delete: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
548 (u_long)lsnp->file,
549 (u_long)lsnp->offset,
550 (u_long)argp->type,
551 (u_long)argp->txnid->txnid,
552 (u_long)argp->prev_lsn.file,
553 (u_long)argp->prev_lsn.offset);
554 printf("\tname: ");
555 for (i = 0; i < argp->name.size; i++) {
556 ch = ((u_int8_t *)argp->name.data)[i];
557 if (isprint(ch) || ch == 0xa)
558 putchar(ch);
559 else
560 printf("%#x ", ch);
561 }
562 printf("\n");
563 printf("\n");
564 CDB___os_free(argp, 0);
565 return (0);
566 }
567
568 int
CDB___crdel_delete_read(recbuf,argpp)569 CDB___crdel_delete_read(recbuf, argpp)
570 void *recbuf;
571 __crdel_delete_args **argpp;
572 {
573 __crdel_delete_args *argp;
574 u_int8_t *bp;
575 int ret;
576
577 ret = CDB___os_malloc(sizeof(__crdel_delete_args) +
578 sizeof(DB_TXN), NULL, &argp);
579 if (ret != 0)
580 return (ret);
581 argp->txnid = (DB_TXN *)&argp[1];
582 bp = recbuf;
583 memcpy(&argp->type, bp, sizeof(argp->type));
584 bp += sizeof(argp->type);
585 memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
586 bp += sizeof(argp->txnid->txnid);
587 memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
588 bp += sizeof(DB_LSN);
589 memset(&argp->name, 0, sizeof(argp->name));
590 memcpy(&argp->name.size, bp, sizeof(u_int32_t));
591 bp += sizeof(u_int32_t);
592 argp->name.data = bp;
593 bp += argp->name.size;
594 *argpp = argp;
595 return (0);
596 }
597
598 int
CDB___crdel_init_print(dbenv)599 CDB___crdel_init_print(dbenv)
600 DB_ENV *dbenv;
601 {
602 int ret;
603
604 if ((ret = CDB___db_add_recovery(dbenv,
605 CDB___crdel_fileopen_print, DB_crdel_fileopen)) != 0)
606 return (ret);
607 if ((ret = CDB___db_add_recovery(dbenv,
608 CDB___crdel_metasub_print, DB_crdel_metasub)) != 0)
609 return (ret);
610 if ((ret = CDB___db_add_recovery(dbenv,
611 CDB___crdel_metapage_print, DB_crdel_metapage)) != 0)
612 return (ret);
613 if ((ret = CDB___db_add_recovery(dbenv,
614 CDB___crdel_delete_print, DB_crdel_delete)) != 0)
615 return (ret);
616 return (0);
617 }
618
619 /*
620 * PUBLIC: int CDB___crdel_init_recover __P((DB_ENV *));
621 */
622 int
CDB___crdel_init_recover(dbenv)623 CDB___crdel_init_recover(dbenv)
624 DB_ENV *dbenv;
625 {
626 int ret;
627
628 if ((ret = CDB___db_add_recovery(dbenv,
629 CDB___crdel_fileopen_recover, DB_crdel_fileopen)) != 0)
630 return (ret);
631 if ((ret = CDB___db_add_recovery(dbenv,
632 CDB___crdel_metasub_recover, DB_crdel_metasub)) != 0)
633 return (ret);
634 if ((ret = CDB___db_add_recovery(dbenv,
635 CDB___crdel_metapage_recover, DB_crdel_metapage)) != 0)
636 return (ret);
637 if ((ret = CDB___db_add_recovery(dbenv,
638 CDB___crdel_delete_recover, DB_crdel_delete)) != 0)
639 return (ret);
640 return (0);
641 }
642
643