1 /* Do not edit: automatically built by gen_rec.awk. */
2 #include "config.h"
3
4 #ifndef NO_SYSTEM_INCLUDES
5 #include <sys/types.h>
6
7 #include <ctype.h>
8 #include <errno.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___db_addrem_log(dbenv,txnid,ret_lsnp,flags,opcode,fileid,pgno,indx,nbytes,hdr,dbt,pagelsn)18 int CDB___db_addrem_log(dbenv, txnid, ret_lsnp, flags,
19 opcode, fileid, pgno, indx, nbytes, hdr,
20 dbt, pagelsn)
21 DB_ENV *dbenv;
22 DB_TXN *txnid;
23 DB_LSN *ret_lsnp;
24 u_int32_t flags;
25 u_int32_t opcode;
26 int32_t fileid;
27 db_pgno_t pgno;
28 u_int32_t indx;
29 size_t nbytes;
30 const DBT *hdr;
31 const DBT *dbt;
32 DB_LSN * pagelsn;
33 {
34 DBT logrec;
35 DB_LSN *lsnp, null_lsn;
36 u_int32_t zero;
37 u_int32_t rectype, txn_num;
38 int ret;
39 u_int8_t *bp;
40
41 if (txnid != NULL &&
42 TAILQ_FIRST(&txnid->kids) != NULL && CDB___txn_activekids(txnid) != 0)
43 return (CDB___db_child_active_err(dbenv));
44 rectype = DB_db_addrem;
45 txn_num = txnid == NULL ? 0 : txnid->txnid;
46 if (txnid == NULL) {
47 ZERO_LSN(null_lsn);
48 lsnp = &null_lsn;
49 } else
50 lsnp = &txnid->last_lsn;
51 logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
52 + sizeof(opcode)
53 + sizeof(fileid)
54 + sizeof(pgno)
55 + sizeof(indx)
56 + sizeof(nbytes)
57 + sizeof(u_int32_t) + (hdr == NULL ? 0 : hdr->size)
58 + sizeof(u_int32_t) + (dbt == NULL ? 0 : dbt->size)
59 + sizeof(*pagelsn);
60 if ((ret = CDB___os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
61 return (ret);
62
63 bp = logrec.data;
64 memcpy(bp, &rectype, sizeof(rectype));
65 bp += sizeof(rectype);
66 memcpy(bp, &txn_num, sizeof(txn_num));
67 bp += sizeof(txn_num);
68 memcpy(bp, lsnp, sizeof(DB_LSN));
69 bp += sizeof(DB_LSN);
70 memcpy(bp, &opcode, sizeof(opcode));
71 bp += sizeof(opcode);
72 memcpy(bp, &fileid, sizeof(fileid));
73 bp += sizeof(fileid);
74 memcpy(bp, &pgno, sizeof(pgno));
75 bp += sizeof(pgno);
76 memcpy(bp, &indx, sizeof(indx));
77 bp += sizeof(indx);
78 memcpy(bp, &nbytes, sizeof(nbytes));
79 bp += sizeof(nbytes);
80 if (hdr == NULL) {
81 zero = 0;
82 memcpy(bp, &zero, sizeof(u_int32_t));
83 bp += sizeof(u_int32_t);
84 } else {
85 memcpy(bp, &hdr->size, sizeof(hdr->size));
86 bp += sizeof(hdr->size);
87 memcpy(bp, hdr->data, hdr->size);
88 bp += hdr->size;
89 }
90 if (dbt == NULL) {
91 zero = 0;
92 memcpy(bp, &zero, sizeof(u_int32_t));
93 bp += sizeof(u_int32_t);
94 } else {
95 memcpy(bp, &dbt->size, sizeof(dbt->size));
96 bp += sizeof(dbt->size);
97 memcpy(bp, dbt->data, dbt->size);
98 bp += dbt->size;
99 }
100 if (pagelsn != NULL)
101 memcpy(bp, pagelsn, sizeof(*pagelsn));
102 else
103 memset(bp, 0, sizeof(*pagelsn));
104 bp += sizeof(*pagelsn);
105 DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
106 ret = CDB_log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
107 if (txnid != NULL)
108 txnid->last_lsn = *ret_lsnp;
109 CDB___os_free(logrec.data, logrec.size);
110 return (ret);
111 }
112
113 int
CDB___db_addrem_print(dbenv,dbtp,lsnp,notused2,notused3)114 CDB___db_addrem_print(dbenv, dbtp, lsnp, notused2, notused3)
115 DB_ENV *dbenv;
116 DBT *dbtp;
117 DB_LSN *lsnp;
118 db_recops notused2;
119 void *notused3;
120 {
121 if(notused2||notused3) {}
122 __db_addrem_args *argp;
123 u_int32_t i;
124 u_int ch;
125 int ret;
126
127 i = 0;
128 ch = 0;
129 notused2 = 0;
130 notused3 = NULL;
131
132 if ((ret = CDB___db_addrem_read(dbenv, dbtp->data, &argp)) != 0)
133 return (ret);
134 printf("[%lu][%lu]db_addrem: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
135 (u_long)lsnp->file,
136 (u_long)lsnp->offset,
137 (u_long)argp->type,
138 (u_long)argp->txnid->txnid,
139 (u_long)argp->prev_lsn.file,
140 (u_long)argp->prev_lsn.offset);
141 printf("\topcode: %lu\n", (u_long)argp->opcode);
142 printf("\tfileid: %ld\n", (long)argp->fileid);
143 printf("\tpgno: %lu\n", (u_long)argp->pgno);
144 printf("\tindx: %lu\n", (u_long)argp->indx);
145 printf("\tnbytes: %lu\n", (u_long)argp->nbytes);
146 printf("\thdr: ");
147 for (i = 0; i < argp->hdr.size; i++) {
148 ch = ((u_int8_t *)argp->hdr.data)[i];
149 if (isprint(ch) || ch == 0xa)
150 putchar(ch);
151 else
152 printf("%#x ", ch);
153 }
154 printf("\n");
155 printf("\tdbt: ");
156 for (i = 0; i < argp->dbt.size; i++) {
157 ch = ((u_int8_t *)argp->dbt.data)[i];
158 if (isprint(ch) || ch == 0xa)
159 putchar(ch);
160 else
161 printf("%#x ", ch);
162 }
163 printf("\n");
164 printf("\tpagelsn: [%lu][%lu]\n",
165 (u_long)argp->pagelsn.file, (u_long)argp->pagelsn.offset);
166 printf("\n");
167 CDB___os_free(argp, 0);
168 return (0);
169 }
170
171 int
CDB___db_addrem_read(dbenv,recbuf,argpp)172 CDB___db_addrem_read(dbenv, recbuf, argpp)
173 DB_ENV *dbenv;
174 void *recbuf;
175 __db_addrem_args **argpp;
176 {
177 __db_addrem_args *argp;
178 u_int8_t *bp;
179 int ret;
180
181 ret = CDB___os_malloc(dbenv, sizeof(__db_addrem_args) +
182 sizeof(DB_TXN), NULL, &argp);
183 if (ret != 0)
184 return (ret);
185 argp->txnid = (DB_TXN *)&argp[1];
186 bp = recbuf;
187 memcpy(&argp->type, bp, sizeof(argp->type));
188 bp += sizeof(argp->type);
189 memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
190 bp += sizeof(argp->txnid->txnid);
191 memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
192 bp += sizeof(DB_LSN);
193 memcpy(&argp->opcode, bp, sizeof(argp->opcode));
194 bp += sizeof(argp->opcode);
195 memcpy(&argp->fileid, bp, sizeof(argp->fileid));
196 bp += sizeof(argp->fileid);
197 memcpy(&argp->pgno, bp, sizeof(argp->pgno));
198 bp += sizeof(argp->pgno);
199 memcpy(&argp->indx, bp, sizeof(argp->indx));
200 bp += sizeof(argp->indx);
201 memcpy(&argp->nbytes, bp, sizeof(argp->nbytes));
202 bp += sizeof(argp->nbytes);
203 memset(&argp->hdr, 0, sizeof(argp->hdr));
204 memcpy(&argp->hdr.size, bp, sizeof(u_int32_t));
205 bp += sizeof(u_int32_t);
206 argp->hdr.data = bp;
207 bp += argp->hdr.size;
208 memset(&argp->dbt, 0, sizeof(argp->dbt));
209 memcpy(&argp->dbt.size, bp, sizeof(u_int32_t));
210 bp += sizeof(u_int32_t);
211 argp->dbt.data = bp;
212 bp += argp->dbt.size;
213 memcpy(&argp->pagelsn, bp, sizeof(argp->pagelsn));
214 bp += sizeof(argp->pagelsn);
215 *argpp = argp;
216 return (0);
217 }
218
219 int
CDB___db_split_print(dbenv,dbtp,lsnp,notused2,notused3)220 CDB___db_split_print(dbenv, dbtp, lsnp, notused2, notused3)
221 DB_ENV *dbenv;
222 DBT *dbtp;
223 DB_LSN *lsnp;
224 db_recops notused2;
225 void *notused3;
226 {
227 if(notused2||notused3) {}
228 __db_split_args *argp;
229 u_int32_t i;
230 u_int ch;
231 int ret;
232
233 i = 0;
234 ch = 0;
235 notused2 = 0;
236 notused3 = NULL;
237
238 if ((ret = CDB___db_split_read(dbenv, dbtp->data, &argp)) != 0)
239 return (ret);
240 printf("[%lu][%lu]db_split: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
241 (u_long)lsnp->file,
242 (u_long)lsnp->offset,
243 (u_long)argp->type,
244 (u_long)argp->txnid->txnid,
245 (u_long)argp->prev_lsn.file,
246 (u_long)argp->prev_lsn.offset);
247 printf("\topcode: %lu\n", (u_long)argp->opcode);
248 printf("\tfileid: %ld\n", (long)argp->fileid);
249 printf("\tpgno: %lu\n", (u_long)argp->pgno);
250 printf("\tpageimage: ");
251 for (i = 0; i < argp->pageimage.size; i++) {
252 ch = ((u_int8_t *)argp->pageimage.data)[i];
253 if (isprint(ch) || ch == 0xa)
254 putchar(ch);
255 else
256 printf("%#x ", ch);
257 }
258 printf("\n");
259 printf("\tpagelsn: [%lu][%lu]\n",
260 (u_long)argp->pagelsn.file, (u_long)argp->pagelsn.offset);
261 printf("\n");
262 CDB___os_free(argp, 0);
263 return (0);
264 }
265
266 int
CDB___db_split_read(dbenv,recbuf,argpp)267 CDB___db_split_read(dbenv, recbuf, argpp)
268 DB_ENV *dbenv;
269 void *recbuf;
270 __db_split_args **argpp;
271 {
272 __db_split_args *argp;
273 u_int8_t *bp;
274 int ret;
275
276 ret = CDB___os_malloc(dbenv, sizeof(__db_split_args) +
277 sizeof(DB_TXN), NULL, &argp);
278 if (ret != 0)
279 return (ret);
280 argp->txnid = (DB_TXN *)&argp[1];
281 bp = recbuf;
282 memcpy(&argp->type, bp, sizeof(argp->type));
283 bp += sizeof(argp->type);
284 memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
285 bp += sizeof(argp->txnid->txnid);
286 memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
287 bp += sizeof(DB_LSN);
288 memcpy(&argp->opcode, bp, sizeof(argp->opcode));
289 bp += sizeof(argp->opcode);
290 memcpy(&argp->fileid, bp, sizeof(argp->fileid));
291 bp += sizeof(argp->fileid);
292 memcpy(&argp->pgno, bp, sizeof(argp->pgno));
293 bp += sizeof(argp->pgno);
294 memset(&argp->pageimage, 0, sizeof(argp->pageimage));
295 memcpy(&argp->pageimage.size, bp, sizeof(u_int32_t));
296 bp += sizeof(u_int32_t);
297 argp->pageimage.data = bp;
298 bp += argp->pageimage.size;
299 memcpy(&argp->pagelsn, bp, sizeof(argp->pagelsn));
300 bp += sizeof(argp->pagelsn);
301 *argpp = argp;
302 return (0);
303 }
304
CDB___db_big_log(dbenv,txnid,ret_lsnp,flags,opcode,fileid,pgno,prev_pgno,next_pgno,dbt,pagelsn,prevlsn,nextlsn)305 int CDB___db_big_log(dbenv, txnid, ret_lsnp, flags,
306 opcode, fileid, pgno, prev_pgno, next_pgno, dbt,
307 pagelsn, prevlsn, nextlsn)
308 DB_ENV *dbenv;
309 DB_TXN *txnid;
310 DB_LSN *ret_lsnp;
311 u_int32_t flags;
312 u_int32_t opcode;
313 int32_t fileid;
314 db_pgno_t pgno;
315 db_pgno_t prev_pgno;
316 db_pgno_t next_pgno;
317 const DBT *dbt;
318 DB_LSN * pagelsn;
319 DB_LSN * prevlsn;
320 DB_LSN * nextlsn;
321 {
322 DBT logrec;
323 DB_LSN *lsnp, null_lsn;
324 u_int32_t zero;
325 u_int32_t rectype, txn_num;
326 int ret;
327 u_int8_t *bp;
328
329 if (txnid != NULL &&
330 TAILQ_FIRST(&txnid->kids) != NULL && CDB___txn_activekids(txnid) != 0)
331 return (CDB___db_child_active_err(dbenv));
332 rectype = DB_db_big;
333 txn_num = txnid == NULL ? 0 : txnid->txnid;
334 if (txnid == NULL) {
335 ZERO_LSN(null_lsn);
336 lsnp = &null_lsn;
337 } else
338 lsnp = &txnid->last_lsn;
339 logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
340 + sizeof(opcode)
341 + sizeof(fileid)
342 + sizeof(pgno)
343 + sizeof(prev_pgno)
344 + sizeof(next_pgno)
345 + sizeof(u_int32_t) + (dbt == NULL ? 0 : dbt->size)
346 + sizeof(*pagelsn)
347 + sizeof(*prevlsn)
348 + sizeof(*nextlsn);
349 if ((ret = CDB___os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
350 return (ret);
351
352 bp = logrec.data;
353 memcpy(bp, &rectype, sizeof(rectype));
354 bp += sizeof(rectype);
355 memcpy(bp, &txn_num, sizeof(txn_num));
356 bp += sizeof(txn_num);
357 memcpy(bp, lsnp, sizeof(DB_LSN));
358 bp += sizeof(DB_LSN);
359 memcpy(bp, &opcode, sizeof(opcode));
360 bp += sizeof(opcode);
361 memcpy(bp, &fileid, sizeof(fileid));
362 bp += sizeof(fileid);
363 memcpy(bp, &pgno, sizeof(pgno));
364 bp += sizeof(pgno);
365 memcpy(bp, &prev_pgno, sizeof(prev_pgno));
366 bp += sizeof(prev_pgno);
367 memcpy(bp, &next_pgno, sizeof(next_pgno));
368 bp += sizeof(next_pgno);
369 if (dbt == NULL) {
370 zero = 0;
371 memcpy(bp, &zero, sizeof(u_int32_t));
372 bp += sizeof(u_int32_t);
373 } else {
374 memcpy(bp, &dbt->size, sizeof(dbt->size));
375 bp += sizeof(dbt->size);
376 memcpy(bp, dbt->data, dbt->size);
377 bp += dbt->size;
378 }
379 if (pagelsn != NULL)
380 memcpy(bp, pagelsn, sizeof(*pagelsn));
381 else
382 memset(bp, 0, sizeof(*pagelsn));
383 bp += sizeof(*pagelsn);
384 if (prevlsn != NULL)
385 memcpy(bp, prevlsn, sizeof(*prevlsn));
386 else
387 memset(bp, 0, sizeof(*prevlsn));
388 bp += sizeof(*prevlsn);
389 if (nextlsn != NULL)
390 memcpy(bp, nextlsn, sizeof(*nextlsn));
391 else
392 memset(bp, 0, sizeof(*nextlsn));
393 bp += sizeof(*nextlsn);
394 DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
395 ret = CDB_log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
396 if (txnid != NULL)
397 txnid->last_lsn = *ret_lsnp;
398 CDB___os_free(logrec.data, logrec.size);
399 return (ret);
400 }
401
402 int
CDB___db_big_print(dbenv,dbtp,lsnp,notused2,notused3)403 CDB___db_big_print(dbenv, dbtp, lsnp, notused2, notused3)
404 DB_ENV *dbenv;
405 DBT *dbtp;
406 DB_LSN *lsnp;
407 db_recops notused2;
408 void *notused3;
409 {
410 if(notused2||notused3) {}
411 __db_big_args *argp;
412 u_int32_t i;
413 u_int ch;
414 int ret;
415
416 i = 0;
417 ch = 0;
418 notused2 = 0;
419 notused3 = NULL;
420
421 if ((ret = CDB___db_big_read(dbenv, dbtp->data, &argp)) != 0)
422 return (ret);
423 printf("[%lu][%lu]db_big: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
424 (u_long)lsnp->file,
425 (u_long)lsnp->offset,
426 (u_long)argp->type,
427 (u_long)argp->txnid->txnid,
428 (u_long)argp->prev_lsn.file,
429 (u_long)argp->prev_lsn.offset);
430 printf("\topcode: %lu\n", (u_long)argp->opcode);
431 printf("\tfileid: %ld\n", (long)argp->fileid);
432 printf("\tpgno: %lu\n", (u_long)argp->pgno);
433 printf("\tprev_pgno: %lu\n", (u_long)argp->prev_pgno);
434 printf("\tnext_pgno: %lu\n", (u_long)argp->next_pgno);
435 printf("\tdbt: ");
436 for (i = 0; i < argp->dbt.size; i++) {
437 ch = ((u_int8_t *)argp->dbt.data)[i];
438 if (isprint(ch) || ch == 0xa)
439 putchar(ch);
440 else
441 printf("%#x ", ch);
442 }
443 printf("\n");
444 printf("\tpagelsn: [%lu][%lu]\n",
445 (u_long)argp->pagelsn.file, (u_long)argp->pagelsn.offset);
446 printf("\tprevlsn: [%lu][%lu]\n",
447 (u_long)argp->prevlsn.file, (u_long)argp->prevlsn.offset);
448 printf("\tnextlsn: [%lu][%lu]\n",
449 (u_long)argp->nextlsn.file, (u_long)argp->nextlsn.offset);
450 printf("\n");
451 CDB___os_free(argp, 0);
452 return (0);
453 }
454
455 int
CDB___db_big_read(dbenv,recbuf,argpp)456 CDB___db_big_read(dbenv, recbuf, argpp)
457 DB_ENV *dbenv;
458 void *recbuf;
459 __db_big_args **argpp;
460 {
461 __db_big_args *argp;
462 u_int8_t *bp;
463 int ret;
464
465 ret = CDB___os_malloc(dbenv, sizeof(__db_big_args) +
466 sizeof(DB_TXN), NULL, &argp);
467 if (ret != 0)
468 return (ret);
469 argp->txnid = (DB_TXN *)&argp[1];
470 bp = recbuf;
471 memcpy(&argp->type, bp, sizeof(argp->type));
472 bp += sizeof(argp->type);
473 memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
474 bp += sizeof(argp->txnid->txnid);
475 memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
476 bp += sizeof(DB_LSN);
477 memcpy(&argp->opcode, bp, sizeof(argp->opcode));
478 bp += sizeof(argp->opcode);
479 memcpy(&argp->fileid, bp, sizeof(argp->fileid));
480 bp += sizeof(argp->fileid);
481 memcpy(&argp->pgno, bp, sizeof(argp->pgno));
482 bp += sizeof(argp->pgno);
483 memcpy(&argp->prev_pgno, bp, sizeof(argp->prev_pgno));
484 bp += sizeof(argp->prev_pgno);
485 memcpy(&argp->next_pgno, bp, sizeof(argp->next_pgno));
486 bp += sizeof(argp->next_pgno);
487 memset(&argp->dbt, 0, sizeof(argp->dbt));
488 memcpy(&argp->dbt.size, bp, sizeof(u_int32_t));
489 bp += sizeof(u_int32_t);
490 argp->dbt.data = bp;
491 bp += argp->dbt.size;
492 memcpy(&argp->pagelsn, bp, sizeof(argp->pagelsn));
493 bp += sizeof(argp->pagelsn);
494 memcpy(&argp->prevlsn, bp, sizeof(argp->prevlsn));
495 bp += sizeof(argp->prevlsn);
496 memcpy(&argp->nextlsn, bp, sizeof(argp->nextlsn));
497 bp += sizeof(argp->nextlsn);
498 *argpp = argp;
499 return (0);
500 }
501
CDB___db_ovref_log(dbenv,txnid,ret_lsnp,flags,fileid,pgno,adjust,lsn)502 int CDB___db_ovref_log(dbenv, txnid, ret_lsnp, flags,
503 fileid, pgno, adjust, lsn)
504 DB_ENV *dbenv;
505 DB_TXN *txnid;
506 DB_LSN *ret_lsnp;
507 u_int32_t flags;
508 int32_t fileid;
509 db_pgno_t pgno;
510 int32_t adjust;
511 DB_LSN * lsn;
512 {
513 DBT logrec;
514 DB_LSN *lsnp, null_lsn;
515 u_int32_t rectype, txn_num;
516 int ret;
517 u_int8_t *bp;
518
519 if (txnid != NULL &&
520 TAILQ_FIRST(&txnid->kids) != NULL && CDB___txn_activekids(txnid) != 0)
521 return (CDB___db_child_active_err(dbenv));
522 rectype = DB_db_ovref;
523 txn_num = txnid == NULL ? 0 : txnid->txnid;
524 if (txnid == NULL) {
525 ZERO_LSN(null_lsn);
526 lsnp = &null_lsn;
527 } else
528 lsnp = &txnid->last_lsn;
529 logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
530 + sizeof(fileid)
531 + sizeof(pgno)
532 + sizeof(adjust)
533 + sizeof(*lsn);
534 if ((ret = CDB___os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
535 return (ret);
536
537 bp = logrec.data;
538 memcpy(bp, &rectype, sizeof(rectype));
539 bp += sizeof(rectype);
540 memcpy(bp, &txn_num, sizeof(txn_num));
541 bp += sizeof(txn_num);
542 memcpy(bp, lsnp, sizeof(DB_LSN));
543 bp += sizeof(DB_LSN);
544 memcpy(bp, &fileid, sizeof(fileid));
545 bp += sizeof(fileid);
546 memcpy(bp, &pgno, sizeof(pgno));
547 bp += sizeof(pgno);
548 memcpy(bp, &adjust, sizeof(adjust));
549 bp += sizeof(adjust);
550 if (lsn != NULL)
551 memcpy(bp, lsn, sizeof(*lsn));
552 else
553 memset(bp, 0, sizeof(*lsn));
554 bp += sizeof(*lsn);
555 DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
556 ret = CDB_log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
557 if (txnid != NULL)
558 txnid->last_lsn = *ret_lsnp;
559 CDB___os_free(logrec.data, logrec.size);
560 return (ret);
561 }
562
563 int
CDB___db_ovref_print(dbenv,dbtp,lsnp,notused2,notused3)564 CDB___db_ovref_print(dbenv, dbtp, lsnp, notused2, notused3)
565 DB_ENV *dbenv;
566 DBT *dbtp;
567 DB_LSN *lsnp;
568 db_recops notused2;
569 void *notused3;
570 {
571 if(notused2||notused3) {}
572 __db_ovref_args *argp;
573 int ret;
574
575 notused2 = 0;
576 notused3 = NULL;
577
578 if ((ret = CDB___db_ovref_read(dbenv, dbtp->data, &argp)) != 0)
579 return (ret);
580 printf("[%lu][%lu]db_ovref: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
581 (u_long)lsnp->file,
582 (u_long)lsnp->offset,
583 (u_long)argp->type,
584 (u_long)argp->txnid->txnid,
585 (u_long)argp->prev_lsn.file,
586 (u_long)argp->prev_lsn.offset);
587 printf("\tfileid: %ld\n", (long)argp->fileid);
588 printf("\tpgno: %lu\n", (u_long)argp->pgno);
589 printf("\tadjust: %ld\n", (long)argp->adjust);
590 printf("\tlsn: [%lu][%lu]\n",
591 (u_long)argp->lsn.file, (u_long)argp->lsn.offset);
592 printf("\n");
593 CDB___os_free(argp, 0);
594 return (0);
595 }
596
597 int
CDB___db_ovref_read(dbenv,recbuf,argpp)598 CDB___db_ovref_read(dbenv, recbuf, argpp)
599 DB_ENV *dbenv;
600 void *recbuf;
601 __db_ovref_args **argpp;
602 {
603 __db_ovref_args *argp;
604 u_int8_t *bp;
605 int ret;
606
607 ret = CDB___os_malloc(dbenv, sizeof(__db_ovref_args) +
608 sizeof(DB_TXN), NULL, &argp);
609 if (ret != 0)
610 return (ret);
611 argp->txnid = (DB_TXN *)&argp[1];
612 bp = recbuf;
613 memcpy(&argp->type, bp, sizeof(argp->type));
614 bp += sizeof(argp->type);
615 memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
616 bp += sizeof(argp->txnid->txnid);
617 memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
618 bp += sizeof(DB_LSN);
619 memcpy(&argp->fileid, bp, sizeof(argp->fileid));
620 bp += sizeof(argp->fileid);
621 memcpy(&argp->pgno, bp, sizeof(argp->pgno));
622 bp += sizeof(argp->pgno);
623 memcpy(&argp->adjust, bp, sizeof(argp->adjust));
624 bp += sizeof(argp->adjust);
625 memcpy(&argp->lsn, bp, sizeof(argp->lsn));
626 bp += sizeof(argp->lsn);
627 *argpp = argp;
628 return (0);
629 }
630
CDB___db_relink_log(dbenv,txnid,ret_lsnp,flags,opcode,fileid,pgno,lsn,prev,lsn_prev,next,lsn_next)631 int CDB___db_relink_log(dbenv, txnid, ret_lsnp, flags,
632 opcode, fileid, pgno, lsn, prev, lsn_prev,
633 next, lsn_next)
634 DB_ENV *dbenv;
635 DB_TXN *txnid;
636 DB_LSN *ret_lsnp;
637 u_int32_t flags;
638 u_int32_t opcode;
639 int32_t fileid;
640 db_pgno_t pgno;
641 DB_LSN * lsn;
642 db_pgno_t prev;
643 DB_LSN * lsn_prev;
644 db_pgno_t next;
645 DB_LSN * lsn_next;
646 {
647 DBT logrec;
648 DB_LSN *lsnp, null_lsn;
649 u_int32_t rectype, txn_num;
650 int ret;
651 u_int8_t *bp;
652
653 if (txnid != NULL &&
654 TAILQ_FIRST(&txnid->kids) != NULL && CDB___txn_activekids(txnid) != 0)
655 return (CDB___db_child_active_err(dbenv));
656 rectype = DB_db_relink;
657 txn_num = txnid == NULL ? 0 : txnid->txnid;
658 if (txnid == NULL) {
659 ZERO_LSN(null_lsn);
660 lsnp = &null_lsn;
661 } else
662 lsnp = &txnid->last_lsn;
663 logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
664 + sizeof(opcode)
665 + sizeof(fileid)
666 + sizeof(pgno)
667 + sizeof(*lsn)
668 + sizeof(prev)
669 + sizeof(*lsn_prev)
670 + sizeof(next)
671 + sizeof(*lsn_next);
672 if ((ret = CDB___os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
673 return (ret);
674
675 bp = logrec.data;
676 memcpy(bp, &rectype, sizeof(rectype));
677 bp += sizeof(rectype);
678 memcpy(bp, &txn_num, sizeof(txn_num));
679 bp += sizeof(txn_num);
680 memcpy(bp, lsnp, sizeof(DB_LSN));
681 bp += sizeof(DB_LSN);
682 memcpy(bp, &opcode, sizeof(opcode));
683 bp += sizeof(opcode);
684 memcpy(bp, &fileid, sizeof(fileid));
685 bp += sizeof(fileid);
686 memcpy(bp, &pgno, sizeof(pgno));
687 bp += sizeof(pgno);
688 if (lsn != NULL)
689 memcpy(bp, lsn, sizeof(*lsn));
690 else
691 memset(bp, 0, sizeof(*lsn));
692 bp += sizeof(*lsn);
693 memcpy(bp, &prev, sizeof(prev));
694 bp += sizeof(prev);
695 if (lsn_prev != NULL)
696 memcpy(bp, lsn_prev, sizeof(*lsn_prev));
697 else
698 memset(bp, 0, sizeof(*lsn_prev));
699 bp += sizeof(*lsn_prev);
700 memcpy(bp, &next, sizeof(next));
701 bp += sizeof(next);
702 if (lsn_next != NULL)
703 memcpy(bp, lsn_next, sizeof(*lsn_next));
704 else
705 memset(bp, 0, sizeof(*lsn_next));
706 bp += sizeof(*lsn_next);
707 DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
708 ret = CDB_log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
709 if (txnid != NULL)
710 txnid->last_lsn = *ret_lsnp;
711 CDB___os_free(logrec.data, logrec.size);
712 return (ret);
713 }
714
715 int
CDB___db_relink_print(dbenv,dbtp,lsnp,notused2,notused3)716 CDB___db_relink_print(dbenv, dbtp, lsnp, notused2, notused3)
717 DB_ENV *dbenv;
718 DBT *dbtp;
719 DB_LSN *lsnp;
720 db_recops notused2;
721 void *notused3;
722 {
723 if(notused2||notused3) {}
724 __db_relink_args *argp;
725 int ret;
726
727 notused2 = 0;
728 notused3 = NULL;
729
730 if ((ret = CDB___db_relink_read(dbenv, dbtp->data, &argp)) != 0)
731 return (ret);
732 printf("[%lu][%lu]db_relink: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
733 (u_long)lsnp->file,
734 (u_long)lsnp->offset,
735 (u_long)argp->type,
736 (u_long)argp->txnid->txnid,
737 (u_long)argp->prev_lsn.file,
738 (u_long)argp->prev_lsn.offset);
739 printf("\topcode: %lu\n", (u_long)argp->opcode);
740 printf("\tfileid: %ld\n", (long)argp->fileid);
741 printf("\tpgno: %lu\n", (u_long)argp->pgno);
742 printf("\tlsn: [%lu][%lu]\n",
743 (u_long)argp->lsn.file, (u_long)argp->lsn.offset);
744 printf("\tprev: %lu\n", (u_long)argp->prev);
745 printf("\tlsn_prev: [%lu][%lu]\n",
746 (u_long)argp->lsn_prev.file, (u_long)argp->lsn_prev.offset);
747 printf("\tnext: %lu\n", (u_long)argp->next);
748 printf("\tlsn_next: [%lu][%lu]\n",
749 (u_long)argp->lsn_next.file, (u_long)argp->lsn_next.offset);
750 printf("\n");
751 CDB___os_free(argp, 0);
752 return (0);
753 }
754
755 int
CDB___db_relink_read(dbenv,recbuf,argpp)756 CDB___db_relink_read(dbenv, recbuf, argpp)
757 DB_ENV *dbenv;
758 void *recbuf;
759 __db_relink_args **argpp;
760 {
761 __db_relink_args *argp;
762 u_int8_t *bp;
763 int ret;
764
765 ret = CDB___os_malloc(dbenv, sizeof(__db_relink_args) +
766 sizeof(DB_TXN), NULL, &argp);
767 if (ret != 0)
768 return (ret);
769 argp->txnid = (DB_TXN *)&argp[1];
770 bp = recbuf;
771 memcpy(&argp->type, bp, sizeof(argp->type));
772 bp += sizeof(argp->type);
773 memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
774 bp += sizeof(argp->txnid->txnid);
775 memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
776 bp += sizeof(DB_LSN);
777 memcpy(&argp->opcode, bp, sizeof(argp->opcode));
778 bp += sizeof(argp->opcode);
779 memcpy(&argp->fileid, bp, sizeof(argp->fileid));
780 bp += sizeof(argp->fileid);
781 memcpy(&argp->pgno, bp, sizeof(argp->pgno));
782 bp += sizeof(argp->pgno);
783 memcpy(&argp->lsn, bp, sizeof(argp->lsn));
784 bp += sizeof(argp->lsn);
785 memcpy(&argp->prev, bp, sizeof(argp->prev));
786 bp += sizeof(argp->prev);
787 memcpy(&argp->lsn_prev, bp, sizeof(argp->lsn_prev));
788 bp += sizeof(argp->lsn_prev);
789 memcpy(&argp->next, bp, sizeof(argp->next));
790 bp += sizeof(argp->next);
791 memcpy(&argp->lsn_next, bp, sizeof(argp->lsn_next));
792 bp += sizeof(argp->lsn_next);
793 *argpp = argp;
794 return (0);
795 }
796
797 int
CDB___db_addpage_print(dbenv,dbtp,lsnp,notused2,notused3)798 CDB___db_addpage_print(dbenv, dbtp, lsnp, notused2, notused3)
799 DB_ENV *dbenv;
800 DBT *dbtp;
801 DB_LSN *lsnp;
802 db_recops notused2;
803 void *notused3;
804 {
805 if(notused2||notused3) {}
806 __db_addpage_args *argp;
807 int ret;
808
809 notused2 = 0;
810 notused3 = NULL;
811
812 if ((ret = CDB___db_addpage_read(dbenv, dbtp->data, &argp)) != 0)
813 return (ret);
814 printf("[%lu][%lu]db_addpage: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
815 (u_long)lsnp->file,
816 (u_long)lsnp->offset,
817 (u_long)argp->type,
818 (u_long)argp->txnid->txnid,
819 (u_long)argp->prev_lsn.file,
820 (u_long)argp->prev_lsn.offset);
821 printf("\tfileid: %ld\n", (long)argp->fileid);
822 printf("\tpgno: %lu\n", (u_long)argp->pgno);
823 printf("\tlsn: [%lu][%lu]\n",
824 (u_long)argp->lsn.file, (u_long)argp->lsn.offset);
825 printf("\tnextpgno: %lu\n", (u_long)argp->nextpgno);
826 printf("\tnextlsn: [%lu][%lu]\n",
827 (u_long)argp->nextlsn.file, (u_long)argp->nextlsn.offset);
828 printf("\n");
829 CDB___os_free(argp, 0);
830 return (0);
831 }
832
833 int
CDB___db_addpage_read(dbenv,recbuf,argpp)834 CDB___db_addpage_read(dbenv, recbuf, argpp)
835 DB_ENV *dbenv;
836 void *recbuf;
837 __db_addpage_args **argpp;
838 {
839 __db_addpage_args *argp;
840 u_int8_t *bp;
841 int ret;
842
843 ret = CDB___os_malloc(dbenv, sizeof(__db_addpage_args) +
844 sizeof(DB_TXN), NULL, &argp);
845 if (ret != 0)
846 return (ret);
847 argp->txnid = (DB_TXN *)&argp[1];
848 bp = recbuf;
849 memcpy(&argp->type, bp, sizeof(argp->type));
850 bp += sizeof(argp->type);
851 memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
852 bp += sizeof(argp->txnid->txnid);
853 memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
854 bp += sizeof(DB_LSN);
855 memcpy(&argp->fileid, bp, sizeof(argp->fileid));
856 bp += sizeof(argp->fileid);
857 memcpy(&argp->pgno, bp, sizeof(argp->pgno));
858 bp += sizeof(argp->pgno);
859 memcpy(&argp->lsn, bp, sizeof(argp->lsn));
860 bp += sizeof(argp->lsn);
861 memcpy(&argp->nextpgno, bp, sizeof(argp->nextpgno));
862 bp += sizeof(argp->nextpgno);
863 memcpy(&argp->nextlsn, bp, sizeof(argp->nextlsn));
864 bp += sizeof(argp->nextlsn);
865 *argpp = argp;
866 return (0);
867 }
868
CDB___db_debug_log(dbenv,txnid,ret_lsnp,flags,op,fileid,key,data,arg_flags)869 int CDB___db_debug_log(dbenv, txnid, ret_lsnp, flags,
870 op, fileid, key, data, arg_flags)
871 DB_ENV *dbenv;
872 DB_TXN *txnid;
873 DB_LSN *ret_lsnp;
874 u_int32_t flags;
875 const DBT *op;
876 int32_t fileid;
877 const DBT *key;
878 const DBT *data;
879 u_int32_t arg_flags;
880 {
881 DBT logrec;
882 DB_LSN *lsnp, null_lsn;
883 u_int32_t zero;
884 u_int32_t rectype, txn_num;
885 int ret;
886 u_int8_t *bp;
887
888 if (txnid != NULL &&
889 TAILQ_FIRST(&txnid->kids) != NULL && CDB___txn_activekids(txnid) != 0)
890 return (CDB___db_child_active_err(dbenv));
891 rectype = DB_db_debug;
892 txn_num = txnid == NULL ? 0 : txnid->txnid;
893 if (txnid == NULL) {
894 ZERO_LSN(null_lsn);
895 lsnp = &null_lsn;
896 } else
897 lsnp = &txnid->last_lsn;
898 logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
899 + sizeof(u_int32_t) + (op == NULL ? 0 : op->size)
900 + sizeof(fileid)
901 + sizeof(u_int32_t) + (key == NULL ? 0 : key->size)
902 + sizeof(u_int32_t) + (data == NULL ? 0 : data->size)
903 + sizeof(arg_flags);
904 if ((ret = CDB___os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
905 return (ret);
906
907 bp = logrec.data;
908 memcpy(bp, &rectype, sizeof(rectype));
909 bp += sizeof(rectype);
910 memcpy(bp, &txn_num, sizeof(txn_num));
911 bp += sizeof(txn_num);
912 memcpy(bp, lsnp, sizeof(DB_LSN));
913 bp += sizeof(DB_LSN);
914 if (op == NULL) {
915 zero = 0;
916 memcpy(bp, &zero, sizeof(u_int32_t));
917 bp += sizeof(u_int32_t);
918 } else {
919 memcpy(bp, &op->size, sizeof(op->size));
920 bp += sizeof(op->size);
921 memcpy(bp, op->data, op->size);
922 bp += op->size;
923 }
924 memcpy(bp, &fileid, sizeof(fileid));
925 bp += sizeof(fileid);
926 if (key == NULL) {
927 zero = 0;
928 memcpy(bp, &zero, sizeof(u_int32_t));
929 bp += sizeof(u_int32_t);
930 } else {
931 memcpy(bp, &key->size, sizeof(key->size));
932 bp += sizeof(key->size);
933 memcpy(bp, key->data, key->size);
934 bp += key->size;
935 }
936 if (data == NULL) {
937 zero = 0;
938 memcpy(bp, &zero, sizeof(u_int32_t));
939 bp += sizeof(u_int32_t);
940 } else {
941 memcpy(bp, &data->size, sizeof(data->size));
942 bp += sizeof(data->size);
943 memcpy(bp, data->data, data->size);
944 bp += data->size;
945 }
946 memcpy(bp, &arg_flags, sizeof(arg_flags));
947 bp += sizeof(arg_flags);
948 DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
949 ret = CDB_log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
950 if (txnid != NULL)
951 txnid->last_lsn = *ret_lsnp;
952 CDB___os_free(logrec.data, logrec.size);
953 return (ret);
954 }
955
956 int
CDB___db_debug_print(dbenv,dbtp,lsnp,notused2,notused3)957 CDB___db_debug_print(dbenv, dbtp, lsnp, notused2, notused3)
958 DB_ENV *dbenv;
959 DBT *dbtp;
960 DB_LSN *lsnp;
961 db_recops notused2;
962 void *notused3;
963 {
964 if(notused2||notused3) {}
965 __db_debug_args *argp;
966 u_int32_t i;
967 u_int ch;
968 int ret;
969
970 i = 0;
971 ch = 0;
972 notused2 = 0;
973 notused3 = NULL;
974
975 if ((ret = CDB___db_debug_read(dbenv, dbtp->data, &argp)) != 0)
976 return (ret);
977 printf("[%lu][%lu]db_debug: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
978 (u_long)lsnp->file,
979 (u_long)lsnp->offset,
980 (u_long)argp->type,
981 (u_long)argp->txnid->txnid,
982 (u_long)argp->prev_lsn.file,
983 (u_long)argp->prev_lsn.offset);
984 printf("\top: ");
985 for (i = 0; i < argp->op.size; i++) {
986 ch = ((u_int8_t *)argp->op.data)[i];
987 if (isprint(ch) || ch == 0xa)
988 putchar(ch);
989 else
990 printf("%#x ", ch);
991 }
992 printf("\n");
993 printf("\tfileid: %ld\n", (long)argp->fileid);
994 printf("\tkey: ");
995 for (i = 0; i < argp->key.size; i++) {
996 ch = ((u_int8_t *)argp->key.data)[i];
997 if (isprint(ch) || ch == 0xa)
998 putchar(ch);
999 else
1000 printf("%#x ", ch);
1001 }
1002 printf("\n");
1003 printf("\tdata: ");
1004 for (i = 0; i < argp->data.size; i++) {
1005 ch = ((u_int8_t *)argp->data.data)[i];
1006 if (isprint(ch) || ch == 0xa)
1007 putchar(ch);
1008 else
1009 printf("%#x ", ch);
1010 }
1011 printf("\n");
1012 printf("\targ_flags: %lu\n", (u_long)argp->arg_flags);
1013 printf("\n");
1014 CDB___os_free(argp, 0);
1015 return (0);
1016 }
1017
1018 int
CDB___db_debug_read(dbenv,recbuf,argpp)1019 CDB___db_debug_read(dbenv, recbuf, argpp)
1020 DB_ENV *dbenv;
1021 void *recbuf;
1022 __db_debug_args **argpp;
1023 {
1024 __db_debug_args *argp;
1025 u_int8_t *bp;
1026 int ret;
1027
1028 ret = CDB___os_malloc(dbenv, sizeof(__db_debug_args) +
1029 sizeof(DB_TXN), NULL, &argp);
1030 if (ret != 0)
1031 return (ret);
1032 argp->txnid = (DB_TXN *)&argp[1];
1033 bp = recbuf;
1034 memcpy(&argp->type, bp, sizeof(argp->type));
1035 bp += sizeof(argp->type);
1036 memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
1037 bp += sizeof(argp->txnid->txnid);
1038 memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
1039 bp += sizeof(DB_LSN);
1040 memset(&argp->op, 0, sizeof(argp->op));
1041 memcpy(&argp->op.size, bp, sizeof(u_int32_t));
1042 bp += sizeof(u_int32_t);
1043 argp->op.data = bp;
1044 bp += argp->op.size;
1045 memcpy(&argp->fileid, bp, sizeof(argp->fileid));
1046 bp += sizeof(argp->fileid);
1047 memset(&argp->key, 0, sizeof(argp->key));
1048 memcpy(&argp->key.size, bp, sizeof(u_int32_t));
1049 bp += sizeof(u_int32_t);
1050 argp->key.data = bp;
1051 bp += argp->key.size;
1052 memset(&argp->data, 0, sizeof(argp->data));
1053 memcpy(&argp->data.size, bp, sizeof(u_int32_t));
1054 bp += sizeof(u_int32_t);
1055 argp->data.data = bp;
1056 bp += argp->data.size;
1057 memcpy(&argp->arg_flags, bp, sizeof(argp->arg_flags));
1058 bp += sizeof(argp->arg_flags);
1059 *argpp = argp;
1060 return (0);
1061 }
1062
CDB___db_noop_log(dbenv,txnid,ret_lsnp,flags,fileid,pgno,prevlsn)1063 int CDB___db_noop_log(dbenv, txnid, ret_lsnp, flags,
1064 fileid, pgno, prevlsn)
1065 DB_ENV *dbenv;
1066 DB_TXN *txnid;
1067 DB_LSN *ret_lsnp;
1068 u_int32_t flags;
1069 int32_t fileid;
1070 db_pgno_t pgno;
1071 DB_LSN * prevlsn;
1072 {
1073 DBT logrec;
1074 DB_LSN *lsnp, null_lsn;
1075 u_int32_t rectype, txn_num;
1076 int ret;
1077 u_int8_t *bp;
1078
1079 if (txnid != NULL &&
1080 TAILQ_FIRST(&txnid->kids) != NULL && CDB___txn_activekids(txnid) != 0)
1081 return (CDB___db_child_active_err(dbenv));
1082 rectype = DB_db_noop;
1083 txn_num = txnid == NULL ? 0 : txnid->txnid;
1084 if (txnid == NULL) {
1085 ZERO_LSN(null_lsn);
1086 lsnp = &null_lsn;
1087 } else
1088 lsnp = &txnid->last_lsn;
1089 logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
1090 + sizeof(fileid)
1091 + sizeof(pgno)
1092 + sizeof(*prevlsn);
1093 if ((ret = CDB___os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
1094 return (ret);
1095
1096 bp = logrec.data;
1097 memcpy(bp, &rectype, sizeof(rectype));
1098 bp += sizeof(rectype);
1099 memcpy(bp, &txn_num, sizeof(txn_num));
1100 bp += sizeof(txn_num);
1101 memcpy(bp, lsnp, sizeof(DB_LSN));
1102 bp += sizeof(DB_LSN);
1103 memcpy(bp, &fileid, sizeof(fileid));
1104 bp += sizeof(fileid);
1105 memcpy(bp, &pgno, sizeof(pgno));
1106 bp += sizeof(pgno);
1107 if (prevlsn != NULL)
1108 memcpy(bp, prevlsn, sizeof(*prevlsn));
1109 else
1110 memset(bp, 0, sizeof(*prevlsn));
1111 bp += sizeof(*prevlsn);
1112 DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
1113 ret = CDB_log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
1114 if (txnid != NULL)
1115 txnid->last_lsn = *ret_lsnp;
1116 CDB___os_free(logrec.data, logrec.size);
1117 return (ret);
1118 }
1119
1120 int
CDB___db_noop_print(dbenv,dbtp,lsnp,notused2,notused3)1121 CDB___db_noop_print(dbenv, dbtp, lsnp, notused2, notused3)
1122 DB_ENV *dbenv;
1123 DBT *dbtp;
1124 DB_LSN *lsnp;
1125 db_recops notused2;
1126 void *notused3;
1127 {
1128 if(notused2||notused3) {}
1129 __db_noop_args *argp;
1130 int ret;
1131
1132 notused2 = 0;
1133 notused3 = NULL;
1134
1135 if ((ret = CDB___db_noop_read(dbenv, dbtp->data, &argp)) != 0)
1136 return (ret);
1137 printf("[%lu][%lu]db_noop: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
1138 (u_long)lsnp->file,
1139 (u_long)lsnp->offset,
1140 (u_long)argp->type,
1141 (u_long)argp->txnid->txnid,
1142 (u_long)argp->prev_lsn.file,
1143 (u_long)argp->prev_lsn.offset);
1144 printf("\tfileid: %ld\n", (long)argp->fileid);
1145 printf("\tpgno: %lu\n", (u_long)argp->pgno);
1146 printf("\tprevlsn: [%lu][%lu]\n",
1147 (u_long)argp->prevlsn.file, (u_long)argp->prevlsn.offset);
1148 printf("\n");
1149 CDB___os_free(argp, 0);
1150 return (0);
1151 }
1152
1153 int
CDB___db_noop_read(dbenv,recbuf,argpp)1154 CDB___db_noop_read(dbenv, recbuf, argpp)
1155 DB_ENV *dbenv;
1156 void *recbuf;
1157 __db_noop_args **argpp;
1158 {
1159 __db_noop_args *argp;
1160 u_int8_t *bp;
1161 int ret;
1162
1163 ret = CDB___os_malloc(dbenv, sizeof(__db_noop_args) +
1164 sizeof(DB_TXN), NULL, &argp);
1165 if (ret != 0)
1166 return (ret);
1167 argp->txnid = (DB_TXN *)&argp[1];
1168 bp = recbuf;
1169 memcpy(&argp->type, bp, sizeof(argp->type));
1170 bp += sizeof(argp->type);
1171 memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
1172 bp += sizeof(argp->txnid->txnid);
1173 memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
1174 bp += sizeof(DB_LSN);
1175 memcpy(&argp->fileid, bp, sizeof(argp->fileid));
1176 bp += sizeof(argp->fileid);
1177 memcpy(&argp->pgno, bp, sizeof(argp->pgno));
1178 bp += sizeof(argp->pgno);
1179 memcpy(&argp->prevlsn, bp, sizeof(argp->prevlsn));
1180 bp += sizeof(argp->prevlsn);
1181 *argpp = argp;
1182 return (0);
1183 }
1184
1185 int
CDB___db_init_print(dbenv)1186 CDB___db_init_print(dbenv)
1187 DB_ENV *dbenv;
1188 {
1189 int ret;
1190
1191 if ((ret = CDB___db_add_recovery(dbenv,
1192 CDB___db_addrem_print, DB_db_addrem)) != 0)
1193 return (ret);
1194 if ((ret = CDB___db_add_recovery(dbenv,
1195 CDB___db_split_print, DB_db_split)) != 0)
1196 return (ret);
1197 if ((ret = CDB___db_add_recovery(dbenv,
1198 CDB___db_big_print, DB_db_big)) != 0)
1199 return (ret);
1200 if ((ret = CDB___db_add_recovery(dbenv,
1201 CDB___db_ovref_print, DB_db_ovref)) != 0)
1202 return (ret);
1203 if ((ret = CDB___db_add_recovery(dbenv,
1204 CDB___db_relink_print, DB_db_relink)) != 0)
1205 return (ret);
1206 if ((ret = CDB___db_add_recovery(dbenv,
1207 CDB___db_addpage_print, DB_db_addpage)) != 0)
1208 return (ret);
1209 if ((ret = CDB___db_add_recovery(dbenv,
1210 CDB___db_debug_print, DB_db_debug)) != 0)
1211 return (ret);
1212 if ((ret = CDB___db_add_recovery(dbenv,
1213 CDB___db_noop_print, DB_db_noop)) != 0)
1214 return (ret);
1215 return (0);
1216 }
1217
1218 int
CDB___db_init_recover(dbenv)1219 CDB___db_init_recover(dbenv)
1220 DB_ENV *dbenv;
1221 {
1222 int ret;
1223
1224 if ((ret = CDB___db_add_recovery(dbenv,
1225 CDB___db_addrem_recover, DB_db_addrem)) != 0)
1226 return (ret);
1227 if ((ret = CDB___db_add_recovery(dbenv,
1228 CDB___deprecated_recover, DB_db_split)) != 0)
1229 return (ret);
1230 if ((ret = CDB___db_add_recovery(dbenv,
1231 CDB___db_big_recover, DB_db_big)) != 0)
1232 return (ret);
1233 if ((ret = CDB___db_add_recovery(dbenv,
1234 CDB___db_ovref_recover, DB_db_ovref)) != 0)
1235 return (ret);
1236 if ((ret = CDB___db_add_recovery(dbenv,
1237 CDB___db_relink_recover, DB_db_relink)) != 0)
1238 return (ret);
1239 if ((ret = CDB___db_add_recovery(dbenv,
1240 CDB___deprecated_recover, DB_db_addpage)) != 0)
1241 return (ret);
1242 if ((ret = CDB___db_add_recovery(dbenv,
1243 CDB___db_debug_recover, DB_db_debug)) != 0)
1244 return (ret);
1245 if ((ret = CDB___db_add_recovery(dbenv,
1246 CDB___db_noop_recover, DB_db_noop)) != 0)
1247 return (ret);
1248 return (0);
1249 }
1250
1251