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

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. __crdel_fileopen_log(dbenv, txnid, ret_lsnp, flags,
  16. name, mode)
  17. DB_ENV *dbenv;
  18. DB_TXN *txnid;
  19. DB_LSN *ret_lsnp;
  20. u_int32_t flags;
  21. const DBT *name;
  22. u_int32_t mode;
  23. {
  24. DBT logrec;
  25. DB_LSN *lsnp, null_lsn;
  26. u_int32_t zero;
  27. u_int32_t rectype, txn_num;
  28. int ret;
  29. u_int8_t *bp;
  30. rectype = DB_crdel_fileopen;
  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(u_int32_t) + (name == NULL ? 0 : name->size)
  43.     + sizeof(mode);
  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. if (name == NULL) {
  54. zero = 0;
  55. memcpy(bp, &zero, sizeof(u_int32_t));
  56. bp += sizeof(u_int32_t);
  57. } else {
  58. memcpy(bp, &name->size, sizeof(name->size));
  59. bp += sizeof(name->size);
  60. memcpy(bp, name->data, name->size);
  61. bp += name->size;
  62. }
  63. memcpy(bp, &mode, sizeof(mode));
  64. bp += sizeof(mode);
  65. DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
  66. ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
  67. if (txnid != NULL)
  68. txnid->last_lsn = *ret_lsnp;
  69. __os_free(logrec.data, logrec.size);
  70. return (ret);
  71. }
  72. int
  73. __crdel_fileopen_print(dbenv, dbtp, lsnp, notused2, notused3)
  74. DB_ENV *dbenv;
  75. DBT *dbtp;
  76. DB_LSN *lsnp;
  77. db_recops notused2;
  78. void *notused3;
  79. {
  80. __crdel_fileopen_args *argp;
  81. u_int32_t i;
  82. u_int ch;
  83. int ret;
  84. i = 0;
  85. ch = 0;
  86. notused2 = DB_TXN_ABORT;
  87. notused3 = NULL;
  88. if ((ret = __crdel_fileopen_read(dbenv, dbtp->data, &argp)) != 0)
  89. return (ret);
  90. printf("[%lu][%lu]crdel_fileopen: rec: %lu txnid %lx prevlsn [%lu][%lu]n",
  91.     (u_long)lsnp->file,
  92.     (u_long)lsnp->offset,
  93.     (u_long)argp->type,
  94.     (u_long)argp->txnid->txnid,
  95.     (u_long)argp->prev_lsn.file,
  96.     (u_long)argp->prev_lsn.offset);
  97. printf("tname: ");
  98. for (i = 0; i < argp->name.size; i++) {
  99. ch = ((u_int8_t *)argp->name.data)[i];
  100. if (isprint(ch) || ch == 0xa)
  101. putchar(ch);
  102. else
  103. printf("%#x ", ch);
  104. }
  105. printf("n");
  106. printf("tmode: %on", argp->mode);
  107. printf("n");
  108. __os_free(argp, 0);
  109. return (0);
  110. }
  111. int
  112. __crdel_fileopen_read(dbenv, recbuf, argpp)
  113. DB_ENV *dbenv;
  114. void *recbuf;
  115. __crdel_fileopen_args **argpp;
  116. {
  117. __crdel_fileopen_args *argp;
  118. u_int8_t *bp;
  119. int ret;
  120. ret = __os_malloc(dbenv, sizeof(__crdel_fileopen_args) +
  121.     sizeof(DB_TXN), NULL, &argp);
  122. if (ret != 0)
  123. return (ret);
  124. argp->txnid = (DB_TXN *)&argp[1];
  125. bp = recbuf;
  126. memcpy(&argp->type, bp, sizeof(argp->type));
  127. bp += sizeof(argp->type);
  128. memcpy(&argp->txnid->txnid,  bp, sizeof(argp->txnid->txnid));
  129. bp += sizeof(argp->txnid->txnid);
  130. memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
  131. bp += sizeof(DB_LSN);
  132. memset(&argp->name, 0, sizeof(argp->name));
  133. memcpy(&argp->name.size, bp, sizeof(u_int32_t));
  134. bp += sizeof(u_int32_t);
  135. argp->name.data = bp;
  136. bp += argp->name.size;
  137. memcpy(&argp->mode, bp, sizeof(argp->mode));
  138. bp += sizeof(argp->mode);
  139. *argpp = argp;
  140. return (0);
  141. }
  142. int
  143. __crdel_metasub_log(dbenv, txnid, ret_lsnp, flags,
  144. fileid, pgno, page, lsn)
  145. DB_ENV *dbenv;
  146. DB_TXN *txnid;
  147. DB_LSN *ret_lsnp;
  148. u_int32_t flags;
  149. int32_t fileid;
  150. db_pgno_t pgno;
  151. const DBT *page;
  152. DB_LSN * lsn;
  153. {
  154. DBT logrec;
  155. DB_LSN *lsnp, null_lsn;
  156. u_int32_t zero;
  157. u_int32_t rectype, txn_num;
  158. int ret;
  159. u_int8_t *bp;
  160. rectype = DB_crdel_metasub;
  161. if (txnid != NULL &&
  162.     TAILQ_FIRST(&txnid->kids) != NULL &&
  163.     (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
  164. return (ret);
  165. txn_num = txnid == NULL ? 0 : txnid->txnid;
  166. if (txnid == NULL) {
  167. ZERO_LSN(null_lsn);
  168. lsnp = &null_lsn;
  169. } else
  170. lsnp = &txnid->last_lsn;
  171. logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
  172.     + sizeof(fileid)
  173.     + sizeof(pgno)
  174.     + sizeof(u_int32_t) + (page == NULL ? 0 : page->size)
  175.     + sizeof(*lsn);
  176. if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
  177. return (ret);
  178. bp = logrec.data;
  179. memcpy(bp, &rectype, sizeof(rectype));
  180. bp += sizeof(rectype);
  181. memcpy(bp, &txn_num, sizeof(txn_num));
  182. bp += sizeof(txn_num);
  183. memcpy(bp, lsnp, sizeof(DB_LSN));
  184. bp += sizeof(DB_LSN);
  185. memcpy(bp, &fileid, sizeof(fileid));
  186. bp += sizeof(fileid);
  187. memcpy(bp, &pgno, sizeof(pgno));
  188. bp += sizeof(pgno);
  189. if (page == NULL) {
  190. zero = 0;
  191. memcpy(bp, &zero, sizeof(u_int32_t));
  192. bp += sizeof(u_int32_t);
  193. } else {
  194. memcpy(bp, &page->size, sizeof(page->size));
  195. bp += sizeof(page->size);
  196. memcpy(bp, page->data, page->size);
  197. bp += page->size;
  198. }
  199. if (lsn != NULL)
  200. memcpy(bp, lsn, sizeof(*lsn));
  201. else
  202. memset(bp, 0, sizeof(*lsn));
  203. bp += sizeof(*lsn);
  204. DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
  205. ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
  206. if (txnid != NULL)
  207. txnid->last_lsn = *ret_lsnp;
  208. __os_free(logrec.data, logrec.size);
  209. return (ret);
  210. }
  211. int
  212. __crdel_metasub_print(dbenv, dbtp, lsnp, notused2, notused3)
  213. DB_ENV *dbenv;
  214. DBT *dbtp;
  215. DB_LSN *lsnp;
  216. db_recops notused2;
  217. void *notused3;
  218. {
  219. __crdel_metasub_args *argp;
  220. u_int32_t i;
  221. u_int ch;
  222. int ret;
  223. i = 0;
  224. ch = 0;
  225. notused2 = DB_TXN_ABORT;
  226. notused3 = NULL;
  227. if ((ret = __crdel_metasub_read(dbenv, dbtp->data, &argp)) != 0)
  228. return (ret);
  229. printf("[%lu][%lu]crdel_metasub: rec: %lu txnid %lx prevlsn [%lu][%lu]n",
  230.     (u_long)lsnp->file,
  231.     (u_long)lsnp->offset,
  232.     (u_long)argp->type,
  233.     (u_long)argp->txnid->txnid,
  234.     (u_long)argp->prev_lsn.file,
  235.     (u_long)argp->prev_lsn.offset);
  236. printf("tfileid: %ldn", (long)argp->fileid);
  237. printf("tpgno: %dn", argp->pgno);
  238. printf("tpage: ");
  239. for (i = 0; i < argp->page.size; i++) {
  240. ch = ((u_int8_t *)argp->page.data)[i];
  241. if (isprint(ch) || ch == 0xa)
  242. putchar(ch);
  243. else
  244. printf("%#x ", ch);
  245. }
  246. printf("n");
  247. printf("tlsn: [%lu][%lu]n",
  248.     (u_long)argp->lsn.file, (u_long)argp->lsn.offset);
  249. printf("n");
  250. __os_free(argp, 0);
  251. return (0);
  252. }
  253. int
  254. __crdel_metasub_read(dbenv, recbuf, argpp)
  255. DB_ENV *dbenv;
  256. void *recbuf;
  257. __crdel_metasub_args **argpp;
  258. {
  259. __crdel_metasub_args *argp;
  260. u_int8_t *bp;
  261. int ret;
  262. ret = __os_malloc(dbenv, sizeof(__crdel_metasub_args) +
  263.     sizeof(DB_TXN), NULL, &argp);
  264. if (ret != 0)
  265. return (ret);
  266. argp->txnid = (DB_TXN *)&argp[1];
  267. bp = recbuf;
  268. memcpy(&argp->type, bp, sizeof(argp->type));
  269. bp += sizeof(argp->type);
  270. memcpy(&argp->txnid->txnid,  bp, sizeof(argp->txnid->txnid));
  271. bp += sizeof(argp->txnid->txnid);
  272. memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
  273. bp += sizeof(DB_LSN);
  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->page, 0, sizeof(argp->page));
  279. memcpy(&argp->page.size, bp, sizeof(u_int32_t));
  280. bp += sizeof(u_int32_t);
  281. argp->page.data = bp;
  282. bp += argp->page.size;
  283. memcpy(&argp->lsn, bp,  sizeof(argp->lsn));
  284. bp += sizeof(argp->lsn);
  285. *argpp = argp;
  286. return (0);
  287. }
  288. int
  289. __crdel_metapage_log(dbenv, txnid, ret_lsnp, flags,
  290. fileid, name, pgno, page)
  291. DB_ENV *dbenv;
  292. DB_TXN *txnid;
  293. DB_LSN *ret_lsnp;
  294. u_int32_t flags;
  295. int32_t fileid;
  296. const DBT *name;
  297. db_pgno_t pgno;
  298. const DBT *page;
  299. {
  300. DBT logrec;
  301. DB_LSN *lsnp, null_lsn;
  302. u_int32_t zero;
  303. u_int32_t rectype, txn_num;
  304. int ret;
  305. u_int8_t *bp;
  306. rectype = DB_crdel_metapage;
  307. if (txnid != NULL &&
  308.     TAILQ_FIRST(&txnid->kids) != NULL &&
  309.     (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
  310. return (ret);
  311. txn_num = txnid == NULL ? 0 : txnid->txnid;
  312. if (txnid == NULL) {
  313. ZERO_LSN(null_lsn);
  314. lsnp = &null_lsn;
  315. } else
  316. lsnp = &txnid->last_lsn;
  317. logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
  318.     + sizeof(fileid)
  319.     + sizeof(u_int32_t) + (name == NULL ? 0 : name->size)
  320.     + sizeof(pgno)
  321.     + sizeof(u_int32_t) + (page == NULL ? 0 : page->size);
  322. if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
  323. return (ret);
  324. bp = logrec.data;
  325. memcpy(bp, &rectype, sizeof(rectype));
  326. bp += sizeof(rectype);
  327. memcpy(bp, &txn_num, sizeof(txn_num));
  328. bp += sizeof(txn_num);
  329. memcpy(bp, lsnp, sizeof(DB_LSN));
  330. bp += sizeof(DB_LSN);
  331. memcpy(bp, &fileid, sizeof(fileid));
  332. bp += sizeof(fileid);
  333. if (name == NULL) {
  334. zero = 0;
  335. memcpy(bp, &zero, sizeof(u_int32_t));
  336. bp += sizeof(u_int32_t);
  337. } else {
  338. memcpy(bp, &name->size, sizeof(name->size));
  339. bp += sizeof(name->size);
  340. memcpy(bp, name->data, name->size);
  341. bp += name->size;
  342. }
  343. memcpy(bp, &pgno, sizeof(pgno));
  344. bp += sizeof(pgno);
  345. if (page == NULL) {
  346. zero = 0;
  347. memcpy(bp, &zero, sizeof(u_int32_t));
  348. bp += sizeof(u_int32_t);
  349. } else {
  350. memcpy(bp, &page->size, sizeof(page->size));
  351. bp += sizeof(page->size);
  352. memcpy(bp, page->data, page->size);
  353. bp += page->size;
  354. }
  355. DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
  356. ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
  357. if (txnid != NULL)
  358. txnid->last_lsn = *ret_lsnp;
  359. __os_free(logrec.data, logrec.size);
  360. return (ret);
  361. }
  362. int
  363. __crdel_metapage_print(dbenv, dbtp, lsnp, notused2, notused3)
  364. DB_ENV *dbenv;
  365. DBT *dbtp;
  366. DB_LSN *lsnp;
  367. db_recops notused2;
  368. void *notused3;
  369. {
  370. __crdel_metapage_args *argp;
  371. u_int32_t i;
  372. u_int ch;
  373. int ret;
  374. i = 0;
  375. ch = 0;
  376. notused2 = DB_TXN_ABORT;
  377. notused3 = NULL;
  378. if ((ret = __crdel_metapage_read(dbenv, dbtp->data, &argp)) != 0)
  379. return (ret);
  380. printf("[%lu][%lu]crdel_metapage: rec: %lu txnid %lx prevlsn [%lu][%lu]n",
  381.     (u_long)lsnp->file,
  382.     (u_long)lsnp->offset,
  383.     (u_long)argp->type,
  384.     (u_long)argp->txnid->txnid,
  385.     (u_long)argp->prev_lsn.file,
  386.     (u_long)argp->prev_lsn.offset);
  387. printf("tfileid: %ldn", (long)argp->fileid);
  388. printf("tname: ");
  389. for (i = 0; i < argp->name.size; i++) {
  390. ch = ((u_int8_t *)argp->name.data)[i];
  391. if (isprint(ch) || ch == 0xa)
  392. putchar(ch);
  393. else
  394. printf("%#x ", ch);
  395. }
  396. printf("n");
  397. printf("tpgno: %dn", argp->pgno);
  398. printf("tpage: ");
  399. for (i = 0; i < argp->page.size; i++) {
  400. ch = ((u_int8_t *)argp->page.data)[i];
  401. if (isprint(ch) || ch == 0xa)
  402. putchar(ch);
  403. else
  404. printf("%#x ", ch);
  405. }
  406. printf("n");
  407. printf("n");
  408. __os_free(argp, 0);
  409. return (0);
  410. }
  411. int
  412. __crdel_metapage_read(dbenv, recbuf, argpp)
  413. DB_ENV *dbenv;
  414. void *recbuf;
  415. __crdel_metapage_args **argpp;
  416. {
  417. __crdel_metapage_args *argp;
  418. u_int8_t *bp;
  419. int ret;
  420. ret = __os_malloc(dbenv, sizeof(__crdel_metapage_args) +
  421.     sizeof(DB_TXN), NULL, &argp);
  422. if (ret != 0)
  423. return (ret);
  424. argp->txnid = (DB_TXN *)&argp[1];
  425. bp = recbuf;
  426. memcpy(&argp->type, bp, sizeof(argp->type));
  427. bp += sizeof(argp->type);
  428. memcpy(&argp->txnid->txnid,  bp, sizeof(argp->txnid->txnid));
  429. bp += sizeof(argp->txnid->txnid);
  430. memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
  431. bp += sizeof(DB_LSN);
  432. memcpy(&argp->fileid, bp, sizeof(argp->fileid));
  433. bp += sizeof(argp->fileid);
  434. memset(&argp->name, 0, sizeof(argp->name));
  435. memcpy(&argp->name.size, bp, sizeof(u_int32_t));
  436. bp += sizeof(u_int32_t);
  437. argp->name.data = bp;
  438. bp += argp->name.size;
  439. memcpy(&argp->pgno, bp, sizeof(argp->pgno));
  440. bp += sizeof(argp->pgno);
  441. memset(&argp->page, 0, sizeof(argp->page));
  442. memcpy(&argp->page.size, bp, sizeof(u_int32_t));
  443. bp += sizeof(u_int32_t);
  444. argp->page.data = bp;
  445. bp += argp->page.size;
  446. *argpp = argp;
  447. return (0);
  448. }
  449. int
  450. __crdel_old_delete_print(dbenv, dbtp, lsnp, notused2, notused3)
  451. DB_ENV *dbenv;
  452. DBT *dbtp;
  453. DB_LSN *lsnp;
  454. db_recops notused2;
  455. void *notused3;
  456. {
  457. __crdel_old_delete_args *argp;
  458. u_int32_t i;
  459. u_int ch;
  460. int ret;
  461. i = 0;
  462. ch = 0;
  463. notused2 = DB_TXN_ABORT;
  464. notused3 = NULL;
  465. if ((ret = __crdel_old_delete_read(dbenv, dbtp->data, &argp)) != 0)
  466. return (ret);
  467. printf("[%lu][%lu]crdel_old_delete: rec: %lu txnid %lx prevlsn [%lu][%lu]n",
  468.     (u_long)lsnp->file,
  469.     (u_long)lsnp->offset,
  470.     (u_long)argp->type,
  471.     (u_long)argp->txnid->txnid,
  472.     (u_long)argp->prev_lsn.file,
  473.     (u_long)argp->prev_lsn.offset);
  474. printf("tname: ");
  475. for (i = 0; i < argp->name.size; i++) {
  476. ch = ((u_int8_t *)argp->name.data)[i];
  477. if (isprint(ch) || ch == 0xa)
  478. putchar(ch);
  479. else
  480. printf("%#x ", ch);
  481. }
  482. printf("n");
  483. printf("n");
  484. __os_free(argp, 0);
  485. return (0);
  486. }
  487. int
  488. __crdel_old_delete_read(dbenv, recbuf, argpp)
  489. DB_ENV *dbenv;
  490. void *recbuf;
  491. __crdel_old_delete_args **argpp;
  492. {
  493. __crdel_old_delete_args *argp;
  494. u_int8_t *bp;
  495. int ret;
  496. ret = __os_malloc(dbenv, sizeof(__crdel_old_delete_args) +
  497.     sizeof(DB_TXN), NULL, &argp);
  498. if (ret != 0)
  499. return (ret);
  500. argp->txnid = (DB_TXN *)&argp[1];
  501. bp = recbuf;
  502. memcpy(&argp->type, bp, sizeof(argp->type));
  503. bp += sizeof(argp->type);
  504. memcpy(&argp->txnid->txnid,  bp, sizeof(argp->txnid->txnid));
  505. bp += sizeof(argp->txnid->txnid);
  506. memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
  507. bp += sizeof(DB_LSN);
  508. memset(&argp->name, 0, sizeof(argp->name));
  509. memcpy(&argp->name.size, bp, sizeof(u_int32_t));
  510. bp += sizeof(u_int32_t);
  511. argp->name.data = bp;
  512. bp += argp->name.size;
  513. *argpp = argp;
  514. return (0);
  515. }
  516. int
  517. __crdel_rename_log(dbenv, txnid, ret_lsnp, flags,
  518. fileid, name, newname)
  519. DB_ENV *dbenv;
  520. DB_TXN *txnid;
  521. DB_LSN *ret_lsnp;
  522. u_int32_t flags;
  523. int32_t fileid;
  524. const DBT *name;
  525. const DBT *newname;
  526. {
  527. DBT logrec;
  528. DB_LSN *lsnp, null_lsn;
  529. u_int32_t zero;
  530. u_int32_t rectype, txn_num;
  531. int ret;
  532. u_int8_t *bp;
  533. rectype = DB_crdel_rename;
  534. if (txnid != NULL &&
  535.     TAILQ_FIRST(&txnid->kids) != NULL &&
  536.     (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
  537. return (ret);
  538. txn_num = txnid == NULL ? 0 : txnid->txnid;
  539. if (txnid == NULL) {
  540. ZERO_LSN(null_lsn);
  541. lsnp = &null_lsn;
  542. } else
  543. lsnp = &txnid->last_lsn;
  544. logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
  545.     + sizeof(fileid)
  546.     + sizeof(u_int32_t) + (name == NULL ? 0 : name->size)
  547.     + sizeof(u_int32_t) + (newname == NULL ? 0 : newname->size);
  548. if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
  549. return (ret);
  550. bp = logrec.data;
  551. memcpy(bp, &rectype, sizeof(rectype));
  552. bp += sizeof(rectype);
  553. memcpy(bp, &txn_num, sizeof(txn_num));
  554. bp += sizeof(txn_num);
  555. memcpy(bp, lsnp, sizeof(DB_LSN));
  556. bp += sizeof(DB_LSN);
  557. memcpy(bp, &fileid, sizeof(fileid));
  558. bp += sizeof(fileid);
  559. if (name == NULL) {
  560. zero = 0;
  561. memcpy(bp, &zero, sizeof(u_int32_t));
  562. bp += sizeof(u_int32_t);
  563. } else {
  564. memcpy(bp, &name->size, sizeof(name->size));
  565. bp += sizeof(name->size);
  566. memcpy(bp, name->data, name->size);
  567. bp += name->size;
  568. }
  569. if (newname == NULL) {
  570. zero = 0;
  571. memcpy(bp, &zero, sizeof(u_int32_t));
  572. bp += sizeof(u_int32_t);
  573. } else {
  574. memcpy(bp, &newname->size, sizeof(newname->size));
  575. bp += sizeof(newname->size);
  576. memcpy(bp, newname->data, newname->size);
  577. bp += newname->size;
  578. }
  579. DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
  580. ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
  581. if (txnid != NULL)
  582. txnid->last_lsn = *ret_lsnp;
  583. __os_free(logrec.data, logrec.size);
  584. return (ret);
  585. }
  586. int
  587. __crdel_rename_print(dbenv, dbtp, lsnp, notused2, notused3)
  588. DB_ENV *dbenv;
  589. DBT *dbtp;
  590. DB_LSN *lsnp;
  591. db_recops notused2;
  592. void *notused3;
  593. {
  594. __crdel_rename_args *argp;
  595. u_int32_t i;
  596. u_int ch;
  597. int ret;
  598. i = 0;
  599. ch = 0;
  600. notused2 = DB_TXN_ABORT;
  601. notused3 = NULL;
  602. if ((ret = __crdel_rename_read(dbenv, dbtp->data, &argp)) != 0)
  603. return (ret);
  604. printf("[%lu][%lu]crdel_rename: rec: %lu txnid %lx prevlsn [%lu][%lu]n",
  605.     (u_long)lsnp->file,
  606.     (u_long)lsnp->offset,
  607.     (u_long)argp->type,
  608.     (u_long)argp->txnid->txnid,
  609.     (u_long)argp->prev_lsn.file,
  610.     (u_long)argp->prev_lsn.offset);
  611. printf("tfileid: %ldn", (long)argp->fileid);
  612. printf("tname: ");
  613. for (i = 0; i < argp->name.size; i++) {
  614. ch = ((u_int8_t *)argp->name.data)[i];
  615. if (isprint(ch) || ch == 0xa)
  616. putchar(ch);
  617. else
  618. printf("%#x ", ch);
  619. }
  620. printf("n");
  621. printf("tnewname: ");
  622. for (i = 0; i < argp->newname.size; i++) {
  623. ch = ((u_int8_t *)argp->newname.data)[i];
  624. if (isprint(ch) || ch == 0xa)
  625. putchar(ch);
  626. else
  627. printf("%#x ", ch);
  628. }
  629. printf("n");
  630. printf("n");
  631. __os_free(argp, 0);
  632. return (0);
  633. }
  634. int
  635. __crdel_rename_read(dbenv, recbuf, argpp)
  636. DB_ENV *dbenv;
  637. void *recbuf;
  638. __crdel_rename_args **argpp;
  639. {
  640. __crdel_rename_args *argp;
  641. u_int8_t *bp;
  642. int ret;
  643. ret = __os_malloc(dbenv, sizeof(__crdel_rename_args) +
  644.     sizeof(DB_TXN), NULL, &argp);
  645. if (ret != 0)
  646. return (ret);
  647. argp->txnid = (DB_TXN *)&argp[1];
  648. bp = recbuf;
  649. memcpy(&argp->type, bp, sizeof(argp->type));
  650. bp += sizeof(argp->type);
  651. memcpy(&argp->txnid->txnid,  bp, sizeof(argp->txnid->txnid));
  652. bp += sizeof(argp->txnid->txnid);
  653. memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
  654. bp += sizeof(DB_LSN);
  655. memcpy(&argp->fileid, bp, sizeof(argp->fileid));
  656. bp += sizeof(argp->fileid);
  657. memset(&argp->name, 0, sizeof(argp->name));
  658. memcpy(&argp->name.size, bp, sizeof(u_int32_t));
  659. bp += sizeof(u_int32_t);
  660. argp->name.data = bp;
  661. bp += argp->name.size;
  662. memset(&argp->newname, 0, sizeof(argp->newname));
  663. memcpy(&argp->newname.size, bp, sizeof(u_int32_t));
  664. bp += sizeof(u_int32_t);
  665. argp->newname.data = bp;
  666. bp += argp->newname.size;
  667. *argpp = argp;
  668. return (0);
  669. }
  670. int
  671. __crdel_delete_log(dbenv, txnid, ret_lsnp, flags,
  672. fileid, name)
  673. DB_ENV *dbenv;
  674. DB_TXN *txnid;
  675. DB_LSN *ret_lsnp;
  676. u_int32_t flags;
  677. int32_t fileid;
  678. const DBT *name;
  679. {
  680. DBT logrec;
  681. DB_LSN *lsnp, null_lsn;
  682. u_int32_t zero;
  683. u_int32_t rectype, txn_num;
  684. int ret;
  685. u_int8_t *bp;
  686. rectype = DB_crdel_delete;
  687. if (txnid != NULL &&
  688.     TAILQ_FIRST(&txnid->kids) != NULL &&
  689.     (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
  690. return (ret);
  691. txn_num = txnid == NULL ? 0 : txnid->txnid;
  692. if (txnid == NULL) {
  693. ZERO_LSN(null_lsn);
  694. lsnp = &null_lsn;
  695. } else
  696. lsnp = &txnid->last_lsn;
  697. logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
  698.     + sizeof(fileid)
  699.     + sizeof(u_int32_t) + (name == NULL ? 0 : name->size);
  700. if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
  701. return (ret);
  702. bp = logrec.data;
  703. memcpy(bp, &rectype, sizeof(rectype));
  704. bp += sizeof(rectype);
  705. memcpy(bp, &txn_num, sizeof(txn_num));
  706. bp += sizeof(txn_num);
  707. memcpy(bp, lsnp, sizeof(DB_LSN));
  708. bp += sizeof(DB_LSN);
  709. memcpy(bp, &fileid, sizeof(fileid));
  710. bp += sizeof(fileid);
  711. if (name == NULL) {
  712. zero = 0;
  713. memcpy(bp, &zero, sizeof(u_int32_t));
  714. bp += sizeof(u_int32_t);
  715. } else {
  716. memcpy(bp, &name->size, sizeof(name->size));
  717. bp += sizeof(name->size);
  718. memcpy(bp, name->data, name->size);
  719. bp += name->size;
  720. }
  721. DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
  722. ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
  723. if (txnid != NULL)
  724. txnid->last_lsn = *ret_lsnp;
  725. __os_free(logrec.data, logrec.size);
  726. return (ret);
  727. }
  728. int
  729. __crdel_delete_print(dbenv, dbtp, lsnp, notused2, notused3)
  730. DB_ENV *dbenv;
  731. DBT *dbtp;
  732. DB_LSN *lsnp;
  733. db_recops notused2;
  734. void *notused3;
  735. {
  736. __crdel_delete_args *argp;
  737. u_int32_t i;
  738. u_int ch;
  739. int ret;
  740. i = 0;
  741. ch = 0;
  742. notused2 = DB_TXN_ABORT;
  743. notused3 = NULL;
  744. if ((ret = __crdel_delete_read(dbenv, dbtp->data, &argp)) != 0)
  745. return (ret);
  746. printf("[%lu][%lu]crdel_delete: rec: %lu txnid %lx prevlsn [%lu][%lu]n",
  747.     (u_long)lsnp->file,
  748.     (u_long)lsnp->offset,
  749.     (u_long)argp->type,
  750.     (u_long)argp->txnid->txnid,
  751.     (u_long)argp->prev_lsn.file,
  752.     (u_long)argp->prev_lsn.offset);
  753. printf("tfileid: %ldn", (long)argp->fileid);
  754. printf("tname: ");
  755. for (i = 0; i < argp->name.size; i++) {
  756. ch = ((u_int8_t *)argp->name.data)[i];
  757. if (isprint(ch) || ch == 0xa)
  758. putchar(ch);
  759. else
  760. printf("%#x ", ch);
  761. }
  762. printf("n");
  763. printf("n");
  764. __os_free(argp, 0);
  765. return (0);
  766. }
  767. int
  768. __crdel_delete_read(dbenv, recbuf, argpp)
  769. DB_ENV *dbenv;
  770. void *recbuf;
  771. __crdel_delete_args **argpp;
  772. {
  773. __crdel_delete_args *argp;
  774. u_int8_t *bp;
  775. int ret;
  776. ret = __os_malloc(dbenv, sizeof(__crdel_delete_args) +
  777.     sizeof(DB_TXN), NULL, &argp);
  778. if (ret != 0)
  779. return (ret);
  780. argp->txnid = (DB_TXN *)&argp[1];
  781. bp = recbuf;
  782. memcpy(&argp->type, bp, sizeof(argp->type));
  783. bp += sizeof(argp->type);
  784. memcpy(&argp->txnid->txnid,  bp, sizeof(argp->txnid->txnid));
  785. bp += sizeof(argp->txnid->txnid);
  786. memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
  787. bp += sizeof(DB_LSN);
  788. memcpy(&argp->fileid, bp, sizeof(argp->fileid));
  789. bp += sizeof(argp->fileid);
  790. memset(&argp->name, 0, sizeof(argp->name));
  791. memcpy(&argp->name.size, bp, sizeof(u_int32_t));
  792. bp += sizeof(u_int32_t);
  793. argp->name.data = bp;
  794. bp += argp->name.size;
  795. *argpp = argp;
  796. return (0);
  797. }
  798. int
  799. __crdel_init_print(dbenv)
  800. DB_ENV *dbenv;
  801. {
  802. int ret;
  803. if ((ret = __db_add_recovery(dbenv,
  804.     __crdel_fileopen_print, DB_crdel_fileopen)) != 0)
  805. return (ret);
  806. if ((ret = __db_add_recovery(dbenv,
  807.     __crdel_metasub_print, DB_crdel_metasub)) != 0)
  808. return (ret);
  809. if ((ret = __db_add_recovery(dbenv,
  810.     __crdel_metapage_print, DB_crdel_metapage)) != 0)
  811. return (ret);
  812. if ((ret = __db_add_recovery(dbenv,
  813.     __crdel_old_delete_print, DB_crdel_old_delete)) != 0)
  814. return (ret);
  815. if ((ret = __db_add_recovery(dbenv,
  816.     __crdel_rename_print, DB_crdel_rename)) != 0)
  817. return (ret);
  818. if ((ret = __db_add_recovery(dbenv,
  819.     __crdel_delete_print, DB_crdel_delete)) != 0)
  820. return (ret);
  821. return (0);
  822. }
  823. int
  824. __crdel_init_recover(dbenv)
  825. DB_ENV *dbenv;
  826. {
  827. int ret;
  828. if ((ret = __db_add_recovery(dbenv,
  829.     __crdel_fileopen_recover, DB_crdel_fileopen)) != 0)
  830. return (ret);
  831. if ((ret = __db_add_recovery(dbenv,
  832.     __crdel_metasub_recover, DB_crdel_metasub)) != 0)
  833. return (ret);
  834. if ((ret = __db_add_recovery(dbenv,
  835.     __crdel_metapage_recover, DB_crdel_metapage)) != 0)
  836. return (ret);
  837. if ((ret = __db_add_recovery(dbenv,
  838.     __deprecated_recover, DB_crdel_old_delete)) != 0)
  839. return (ret);
  840. if ((ret = __db_add_recovery(dbenv,
  841.     __crdel_rename_recover, DB_crdel_rename)) != 0)
  842. return (ret);
  843. if ((ret = __db_add_recovery(dbenv,
  844.     __crdel_delete_recover, DB_crdel_delete)) != 0)
  845. return (ret);
  846. return (0);
  847. }