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