db_auto.c
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:32k
源码类别:

MySQL数据库

开发平台:

Visual C++

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