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