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