• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-WNDR4500v2-V1.0.0.60_1.0.38/ap/gpl/timemachine/db-4.7.25.NC/examples_c/ex_apprec/
1/* Do not edit: automatically built by gen_rec.awk. */
2
3#include "db_config.h"
4#include <errno.h>
5#include <stdlib.h>
6#include <string.h>
7#include "db.h"
8#include "db_int.h"
9#include "dbinc/db_swap.h"
10#include "ex_apprec.h"
11/*
12 * PUBLIC: int ex_apprec_mkdir_read __P((DB_ENV *, void *,
13 * PUBLIC:     ex_apprec_mkdir_args **));
14 */
15int
16ex_apprec_mkdir_read(dbenv, recbuf, argpp)
17	DB_ENV *dbenv;
18	void *recbuf;
19	ex_apprec_mkdir_args **argpp;
20{
21	ex_apprec_mkdir_args *argp;
22	u_int8_t *bp;
23	ENV *env;
24
25	env = dbenv->env;
26
27	if ((argp = malloc(sizeof(ex_apprec_mkdir_args) + sizeof(DB_TXN))) == NULL)
28		return (ENOMEM);
29	bp = recbuf;
30	argp->txnp = (DB_TXN *)&argp[1];
31	memset(argp->txnp, 0, sizeof(DB_TXN));
32
33	LOGCOPY_32(env, &argp->type, bp);
34	bp += sizeof(argp->type);
35
36	LOGCOPY_32(env, &argp->txnp->txnid, bp);
37	bp += sizeof(argp->txnp->txnid);
38
39	LOGCOPY_TOLSN(env, &argp->prev_lsn, bp);
40	bp += sizeof(DB_LSN);
41
42	memset(&argp->dirname, 0, sizeof(argp->dirname));
43	LOGCOPY_32(env,&argp->dirname.size, bp);
44	bp += sizeof(u_int32_t);
45	argp->dirname.data = bp;
46	bp += argp->dirname.size;
47
48	*argpp = argp;
49	return (0);
50}
51
52/*
53 * PUBLIC: int ex_apprec_mkdir_log __P((DB_ENV *, DB_TXN *, DB_LSN *,
54 * PUBLIC:     u_int32_t, const DBT *));
55 */
56int
57ex_apprec_mkdir_log(dbenv, txnp, ret_lsnp, flags,
58    dirname)
59	DB_ENV *dbenv;
60	DB_TXN *txnp;
61	DB_LSN *ret_lsnp;
62	u_int32_t flags;
63	const DBT *dirname;
64{
65	DBT logrec;
66	DB_LSN *lsnp, null_lsn, *rlsnp;
67	ENV *env;
68	u_int32_t zero, rectype, txn_num;
69	u_int npad;
70	u_int8_t *bp;
71	int ret;
72
73	env = dbenv->env;
74	rlsnp = ret_lsnp;
75	rectype = DB_ex_apprec_mkdir;
76	npad = 0;
77	ret = 0;
78
79	if (txnp == NULL) {
80		txn_num = 0;
81		lsnp = &null_lsn;
82		null_lsn.file = null_lsn.offset = 0;
83	} else {
84		/*
85		 * We need to assign begin_lsn while holding region mutex.
86		 * That assignment is done inside the DbEnv->log_put call,
87		 * so pass in the appropriate memory location to be filled
88		 * in by the log_put code.
89		 */
90		DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
91		txn_num = txnp->txnid;
92	}
93
94	logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
95	    + sizeof(u_int32_t) + (dirname == NULL ? 0 : dirname->size);
96	if ((logrec.data = malloc(logrec.size)) == NULL)
97		return (ENOMEM);
98	bp = logrec.data;
99
100	if (npad > 0)
101		memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
102
103	bp = logrec.data;
104
105	LOGCOPY_32(env, bp, &rectype);
106	bp += sizeof(rectype);
107
108	LOGCOPY_32(env, bp, &txn_num);
109	bp += sizeof(txn_num);
110
111	LOGCOPY_FROMLSN(env, bp, lsnp);
112	bp += sizeof(DB_LSN);
113
114	if (dirname == NULL) {
115		zero = 0;
116		LOGCOPY_32(env, bp, &zero);
117		bp += sizeof(u_int32_t);
118	} else {
119		LOGCOPY_32(env, bp, &dirname->size);
120		bp += sizeof(dirname->size);
121		memcpy(bp, dirname->data, dirname->size);
122		bp += dirname->size;
123	}
124
125	if ((ret = dbenv->log_put(dbenv, rlsnp, (DBT *)&logrec,
126	    flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
127		*lsnp = *rlsnp;
128		if (rlsnp != ret_lsnp)
129			 *ret_lsnp = *rlsnp;
130	}
131#ifdef LOG_DIAGNOSTIC
132	if (ret != 0)
133		(void)ex_apprec_mkdir_print(dbenv,
134		    (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT);
135#endif
136
137	free(logrec.data);
138	return (ret);
139}
140
141