1/* ----------------------------------------------------------------------------
2 * This file was automatically generated by SWIG (http://www.swig.org).
3 * Version 1.3.38
4 *
5 * Do not make changes to this file unless you know what you are doing--modify
6 * the SWIG interface file instead.
7 * ----------------------------------------------------------------------------- */
8
9namespace BerkeleyDB.Internal {
10using System;
11using System.Runtime.InteropServices;
12using System.Collections.Generic;
13internal class DB_ENV : IDisposable {
14  private HandleRef swigCPtr;
15  protected bool swigCMemOwn;
16
17  internal DB_ENV(IntPtr cPtr, bool cMemoryOwn) {
18    swigCMemOwn = cMemoryOwn;
19    swigCPtr = new HandleRef(this, cPtr);
20  }
21
22  internal static HandleRef getCPtr(DB_ENV obj) {
23    return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr;
24  }
25
26  public virtual void Dispose()  {
27    lock(this) {
28      if(swigCPtr.Handle != IntPtr.Zero && swigCMemOwn) {
29        swigCMemOwn = false;
30      }
31      swigCPtr = new HandleRef(null, IntPtr.Zero);
32      GC.SuppressFinalize(this);
33    }
34}
35
36	internal DB_TXN cdsgroup_begin() {
37		int err = 0;
38		DB_TXN ret = cdsgroup_begin(ref err);
39		DatabaseException.ThrowException(err);
40		return ret;
41	}
42	internal List<string> get_data_dirs() {
43		int err = 0;
44		int cnt = 0;
45		List<string> ret = get_data_dirs(ref err, ref cnt);
46		DatabaseException.ThrowException(err);
47		return ret;
48	}
49	internal DB_LOCK lock_get(uint locker, uint flags, DBT arg2, db_lockmode_t mode) {
50		int err = 0;
51		DB_LOCK ret = lock_get(locker, flags, DatabaseEntry.fromDBT(arg2), mode, ref err);
52		DatabaseException.ThrowException(err);
53		return ret;
54	}
55	internal LockStatStruct lock_stat(uint flags) {
56		int err = 0;
57		IntPtr ptr = lock_stat(flags, ref err);
58		DatabaseException.ThrowException(err);
59		LockStatStruct ret = (LockStatStruct)Marshal.PtrToStructure(ptr, typeof(LockStatStruct));
60		libdb_csharp.__os_ufree(null, ptr);
61		return ret;
62	}
63	internal List<string> log_archive(uint flags) {
64		int err = 0;
65		int cnt = 0;
66		List<string> ret = log_archive(flags, ref err, ref cnt);
67		DatabaseException.ThrowException(err);
68		return ret;
69	}
70	internal string log_file(DB_LSN dblsn) {
71		int err = 0;
72		int len = 100;
73		IntPtr namep;
74		while (true) {
75			namep = Marshal.AllocHGlobal(len);
76			err = log_file(dblsn, namep, (uint)len);
77			if (err != DbConstants.DB_BUFFER_SMALL)
78				break;
79			Marshal.FreeHGlobal(namep);
80			len *= 2;
81		}
82		DatabaseException.ThrowException(err);
83		string ret = Marshal.PtrToStringAnsi(namep);
84		Marshal.FreeHGlobal(namep);
85		return ret;
86	}
87	internal LogStatStruct log_stat(uint flags) {
88		int err = 0;
89		IntPtr ptr = log_stat(flags, ref err);
90		DatabaseException.ThrowException(err);
91		LogStatStruct ret = (LogStatStruct)Marshal.PtrToStructure(ptr, typeof(LogStatStruct));
92		libdb_csharp.__os_ufree(null, ptr);
93		return ret;
94	}
95	internal MempStatStruct memp_stat(uint flags) {
96		int err = 0;
97	        int cnt = 0;
98        	IntPtr mpf = new IntPtr();
99	        IntPtr ptr = memp_stat(ref mpf, flags, ref err, ref cnt);
100		DatabaseException.ThrowException(err);
101        	IntPtr[] files = new IntPtr[cnt];
102		if (cnt > 0)
103	        	Marshal.Copy(mpf, files, 0, cnt);
104
105	        MempStatStruct ret = new MempStatStruct();
106		ret.st = (MPoolStatStruct)Marshal.PtrToStructure(ptr, typeof(MPoolStatStruct));
107        	ret.files = new MPoolFileStatStruct[cnt];
108	        for (int i = 0; i < cnt; i++)
109        	    ret.files[i] = (MPoolFileStatStruct)Marshal.PtrToStructure(files[i], typeof(MPoolFileStatStruct));
110
111		libdb_csharp.__os_ufree(null, ptr);
112		libdb_csharp.__os_ufree(null, mpf);
113		return ret;
114	}
115	internal MutexStatStruct mutex_stat(uint flags) {
116		int err = 0;
117		IntPtr ptr = mutex_stat(flags, ref err);
118		DatabaseException.ThrowException(err);
119		MutexStatStruct ret = (MutexStatStruct)Marshal.PtrToStructure(ptr, typeof(MutexStatStruct));
120		libdb_csharp.__os_ufree(null, ptr);
121		return ret;
122	}
123	internal RepMgrSite[] repmgr_site_list() {
124		uint count = 0;
125		int err = 0;
126		uint size = 0;
127		RepMgrSite[] ret = repmgr_site_list(ref count, ref size, ref err);
128		DatabaseException.ThrowException(err);
129		return ret;
130	}
131	internal RepMgrStatStruct repmgr_stat(uint flags) {
132		int err = 0;
133		IntPtr ptr = repmgr_stat(flags, ref err);
134		DatabaseException.ThrowException(err);
135		RepMgrStatStruct ret = (RepMgrStatStruct)Marshal.PtrToStructure(ptr, typeof(RepMgrStatStruct));
136		libdb_csharp.__os_ufree(null, ptr);
137		return ret;
138	}
139	internal ReplicationStatStruct rep_stat(uint flags) {
140		int err = 0;
141		IntPtr ptr = rep_stat(flags, ref err);
142		DatabaseException.ThrowException(err);
143		ReplicationStatStruct ret = (ReplicationStatStruct)Marshal.PtrToStructure(ptr, typeof(ReplicationStatStruct));
144		libdb_csharp.__os_ufree(null, ptr);
145		return ret;
146	}
147	internal DB_TXN txn_begin(DB_TXN parent, uint flags) {
148		int err = 0;
149		DB_TXN ret = txn_begin(parent, flags, ref err);
150		DatabaseException.ThrowException(err);
151		return ret;
152	}
153	internal PreparedTransaction[] txn_recover(uint count, uint flags) {
154		int err = 0;
155		IntPtr prepp = Marshal.AllocHGlobal((int)(count * (IntPtr.Size + DbConstants.DB_GID_SIZE)));
156		uint sz = 0;
157		err = txn_recover(prepp, count, ref sz, flags);
158		DatabaseException.ThrowException(err);
159		PreparedTransaction[] ret = new PreparedTransaction[sz];
160		for (int i = 0; i < sz; i++) {
161			IntPtr cPtr = new IntPtr((IntPtr.Size == 4 ? prepp.ToInt32() : prepp.ToInt64()) + i * (IntPtr.Size + DbConstants.DB_GID_SIZE));
162			DB_PREPLIST prep = new DB_PREPLIST(cPtr, false);
163			ret[i] = new PreparedTransaction(prep);
164		}
165		Marshal.FreeHGlobal(prepp);
166		return ret;
167	}
168	internal TxnStatStruct txn_stat(uint flags) {
169		int err = 0;
170		uint size = 0;
171		int offset = Marshal.SizeOf(typeof(DB_TXN_ACTIVE));
172		IntPtr ptr = txn_stat(flags, ref size, ref err);
173		DatabaseException.ThrowException(err);
174	        TxnStatStruct ret = new TxnStatStruct();
175		ret.st = (TransactionStatStruct)Marshal.PtrToStructure(ptr, typeof(TransactionStatStruct));
176        	ret.st_txnarray = new DB_TXN_ACTIVE[ret.st.st_nactive];
177	        ret.st_txngids = new byte[ret.st.st_nactive][];
178        	ret.st_txnnames = new string[ret.st.st_nactive];
179
180	        for (int i = 0; i < ret.st.st_nactive; i++) {
181        	    IntPtr activep = new IntPtr((IntPtr.Size == 4 ? ret.st.st_txnarray.ToInt32() : ret.st.st_txnarray.ToInt64()) + i * size);
182	            ret.st_txnarray[i] = (DB_TXN_ACTIVE)Marshal.PtrToStructure(activep, typeof(DB_TXN_ACTIVE));
183        	    ret.st_txngids[i] = new byte[DbConstants.DB_GID_SIZE];
184	            IntPtr gidp = new IntPtr((IntPtr.Size == 4 ? activep.ToInt32() : activep.ToInt64()) + offset);
185        	    Marshal.Copy(gidp, ret.st_txngids[i], 0, (int)DbConstants.DB_GID_SIZE);
186	            IntPtr namep = new IntPtr((IntPtr.Size == 4 ? gidp.ToInt32() : gidp.ToInt64()) + DbConstants.DB_GID_SIZE);
187        	    ret.st_txnnames[i] = Marshal.PtrToStringAnsi(namep);
188	        }
189        	libdb_csharp.__os_ufree(null, ptr);
190
191		return ret;
192	}
193
194
195  internal DatabaseEnvironment api2_internal {
196    set {
197      libdb_csharpPINVOKE.DB_ENV_api2_internal_set(swigCPtr, value);
198    }
199		get { return libdb_csharpPINVOKE.DB_ENV_api2_internal_get(swigCPtr); }
200
201  }
202
203  internal int set_usercopy(DBTCopyDelegate dbt_usercopy) {
204		int ret;
205		ret = libdb_csharpPINVOKE.DB_ENV_set_usercopy(swigCPtr, dbt_usercopy);
206		DatabaseException.ThrowException(ret);
207		return ret;
208}
209
210  internal DB_ENV(uint flags) : this(libdb_csharpPINVOKE.new_DB_ENV(flags), true) {
211  }
212
213  private DB_TXN cdsgroup_begin(ref int err) {
214    IntPtr cPtr = libdb_csharpPINVOKE.DB_ENV_cdsgroup_begin(swigCPtr, ref err);
215    DB_TXN ret = (cPtr == IntPtr.Zero) ? null : new DB_TXN(cPtr, false);
216    return ret;
217  }
218
219  internal int close(uint flags) {
220		int ret = libdb_csharpPINVOKE.DB_ENV_close(swigCPtr, flags);
221		if (ret == 0)
222			/* Close is a db handle destructor.  Reflect that in the wrapper class. */
223			swigCPtr = new HandleRef(null, IntPtr.Zero);
224		else
225			DatabaseException.ThrowException(ret);
226		return ret;
227}
228
229  internal int dbremove(DB_TXN txn, string file, string database, uint flags) {
230		int ret;
231		ret = libdb_csharpPINVOKE.DB_ENV_dbremove(swigCPtr, DB_TXN.getCPtr(txn), file, database, flags);
232		DatabaseException.ThrowException(ret);
233		return ret;
234}
235
236  internal int dbrename(DB_TXN txn, string file, string database, string newname, uint flags) {
237		int ret;
238		ret = libdb_csharpPINVOKE.DB_ENV_dbrename(swigCPtr, DB_TXN.getCPtr(txn), file, database, newname, flags);
239		DatabaseException.ThrowException(ret);
240		return ret;
241}
242
243  internal int failchk(uint flags) {
244		int ret;
245		ret = libdb_csharpPINVOKE.DB_ENV_failchk(swigCPtr, flags);
246		DatabaseException.ThrowException(ret);
247		return ret;
248}
249
250  internal int fileid_reset(string file, uint flags) {
251		int ret;
252		ret = libdb_csharpPINVOKE.DB_ENV_fileid_reset(swigCPtr, file, flags);
253		DatabaseException.ThrowException(ret);
254		return ret;
255}
256
257  internal int get_home(ref string file) {
258		int ret;
259		ret = libdb_csharpPINVOKE.DB_ENV_get_home(swigCPtr, ref file);
260		DatabaseException.ThrowException(ret);
261		return ret;
262}
263
264  internal int lock_detect(uint flags, uint atype, ref uint rejected) {
265		int ret;
266		ret = libdb_csharpPINVOKE.DB_ENV_lock_detect(swigCPtr, flags, atype, ref rejected);
267		DatabaseException.ThrowException(ret);
268		return ret;
269}
270
271  private DB_LOCK lock_get(uint locker, uint flags, DatabaseEntry arg2, db_lockmode_t mode, ref int err) {
272    try {
273      DB_LOCK ret = new DB_LOCK(libdb_csharpPINVOKE.DB_ENV_lock_get(swigCPtr, locker, flags, DBT.getCPtr(DatabaseEntry.getDBT(arg2)), (int)mode, ref err), true);
274      return ret;
275    } finally {
276      GC.KeepAlive(arg2);
277    }
278  }
279
280  internal int lock_id(ref uint id) {
281		int ret;
282		ret = libdb_csharpPINVOKE.DB_ENV_lock_id(swigCPtr, ref id);
283		DatabaseException.ThrowException(ret);
284		return ret;
285}
286
287  internal int lock_id_free(uint id) {
288		int ret;
289		ret = libdb_csharpPINVOKE.DB_ENV_lock_id_free(swigCPtr, id);
290		DatabaseException.ThrowException(ret);
291		return ret;
292}
293
294  internal int lock_put(DB_LOCK lck) {
295		int ret;
296		ret = libdb_csharpPINVOKE.DB_ENV_lock_put(swigCPtr, DB_LOCK.getCPtr(lck));
297		DatabaseException.ThrowException(ret);
298		return ret;
299}
300
301  private IntPtr lock_stat(uint flags, ref int err) {
302	return libdb_csharpPINVOKE.DB_ENV_lock_stat(swigCPtr, flags, ref err);
303}
304
305  internal int lock_stat_print(uint flags) {
306		int ret;
307		ret = libdb_csharpPINVOKE.DB_ENV_lock_stat_print(swigCPtr, flags);
308		DatabaseException.ThrowException(ret);
309		return ret;
310}
311
312  internal int lock_vec(uint locker, uint flags, IntPtr[] list, int nlist, DB_LOCKREQ elistp) {
313		int ret;
314		ret = libdb_csharpPINVOKE.DB_ENV_lock_vec(swigCPtr, locker, flags, list, nlist, DB_LOCKREQ.getCPtr(elistp));
315		DatabaseException.ThrowException(ret);
316		return ret;
317}
318
319  internal List<string> log_archive(uint flags, ref int err, ref int cntp) {
320	IntPtr cPtr = libdb_csharpPINVOKE.DB_ENV_log_archive(swigCPtr, flags, ref err, ref cntp);
321	List<string> ret = new List<string>();
322	if (cPtr == IntPtr.Zero)
323		return ret;
324
325	IntPtr[] strs = new IntPtr[cntp];
326	Marshal.Copy(cPtr, strs, 0, cntp);
327
328	for (int i =0; i < cntp; i++)
329		ret.Add(Marshal.PtrToStringAnsi(strs[i]));
330	libdb_csharp.__os_ufree(this, cPtr);
331	return ret;
332}
333
334  private int log_file(DB_LSN lsn, IntPtr namep, uint len) {
335		return libdb_csharpPINVOKE.DB_ENV_log_file(swigCPtr, DB_LSN.getCPtr(lsn), namep, len);
336}
337
338  internal int log_flush(DB_LSN lsn) {
339		int ret;
340		ret = libdb_csharpPINVOKE.DB_ENV_log_flush(swigCPtr, DB_LSN.getCPtr(lsn));
341		DatabaseException.ThrowException(ret);
342		return ret;
343}
344
345  internal int log_put(DB_LSN lsn, DatabaseEntry data, uint flags) {
346    try {
347		int ret;
348		ret = libdb_csharpPINVOKE.DB_ENV_log_put(swigCPtr, DB_LSN.getCPtr(lsn), DBT.getCPtr(DatabaseEntry.getDBT(data)), flags);
349		DatabaseException.ThrowException(ret);
350		return ret;
351} finally {
352      GC.KeepAlive(data);
353    }
354  }
355
356  internal int log_get_config(uint which, ref int onoff) {
357		int ret;
358		ret = libdb_csharpPINVOKE.DB_ENV_log_get_config(swigCPtr, which, ref onoff);
359		DatabaseException.ThrowException(ret);
360		return ret;
361}
362
363  internal int log_set_config(uint which, int onoff) {
364		int ret;
365		ret = libdb_csharpPINVOKE.DB_ENV_log_set_config(swigCPtr, which, onoff);
366		DatabaseException.ThrowException(ret);
367		return ret;
368}
369
370  internal int log_printf(DB_TXN txn, string str) {
371		int ret;
372		ret = libdb_csharpPINVOKE.DB_ENV_log_printf(swigCPtr, DB_TXN.getCPtr(txn), str);
373		DatabaseException.ThrowException(ret);
374		return ret;
375}
376
377  private IntPtr log_stat(uint flags, ref int err) {
378	return libdb_csharpPINVOKE.DB_ENV_log_stat(swigCPtr, flags, ref err);
379}
380
381  internal int log_stat_print(uint flags) {
382		int ret;
383		ret = libdb_csharpPINVOKE.DB_ENV_log_stat_print(swigCPtr, flags);
384		DatabaseException.ThrowException(ret);
385		return ret;
386}
387
388  internal int lsn_reset(string file, uint flags) {
389		int ret;
390		ret = libdb_csharpPINVOKE.DB_ENV_lsn_reset(swigCPtr, file, flags);
391		DatabaseException.ThrowException(ret);
392		return ret;
393}
394
395  private IntPtr memp_stat(ref IntPtr fstatp, uint flags, ref int err, ref int cntp) {
396	return libdb_csharpPINVOKE.DB_ENV_memp_stat(swigCPtr, ref fstatp, flags, ref err, ref cntp);
397}
398
399  internal int memp_stat_print(uint flags) {
400		int ret;
401		ret = libdb_csharpPINVOKE.DB_ENV_memp_stat_print(swigCPtr, flags);
402		DatabaseException.ThrowException(ret);
403		return ret;
404}
405
406  internal int memp_sync(DB_LSN lsn) {
407		int ret;
408		ret = libdb_csharpPINVOKE.DB_ENV_memp_sync(swigCPtr, DB_LSN.getCPtr(lsn));
409		DatabaseException.ThrowException(ret);
410		return ret;
411}
412
413  internal int memp_trickle(int percent, ref int nwrotep) {
414		int ret;
415		ret = libdb_csharpPINVOKE.DB_ENV_memp_trickle(swigCPtr, percent, ref nwrotep);
416		DatabaseException.ThrowException(ret);
417		return ret;
418}
419
420  internal int mutex_alloc(uint flags, ref uint mutexp) {
421		int ret;
422		ret = libdb_csharpPINVOKE.DB_ENV_mutex_alloc(swigCPtr, flags, ref mutexp);
423		DatabaseException.ThrowException(ret);
424		return ret;
425}
426
427  internal int mutex_free(uint mutex) {
428		int ret;
429		ret = libdb_csharpPINVOKE.DB_ENV_mutex_free(swigCPtr, mutex);
430		DatabaseException.ThrowException(ret);
431		return ret;
432}
433
434  internal int mutex_lock(uint mutex) {
435		int ret;
436		ret = libdb_csharpPINVOKE.DB_ENV_mutex_lock(swigCPtr, mutex);
437		DatabaseException.ThrowException(ret);
438		return ret;
439}
440
441  private IntPtr mutex_stat(uint flags, ref int err) {
442	return libdb_csharpPINVOKE.DB_ENV_mutex_stat(swigCPtr, flags, ref err);
443}
444
445  internal int mutex_stat_print(uint flags) {
446		int ret;
447		ret = libdb_csharpPINVOKE.DB_ENV_mutex_stat_print(swigCPtr, flags);
448		DatabaseException.ThrowException(ret);
449		return ret;
450}
451
452  internal int mutex_unlock(uint mutex) {
453		int ret;
454		ret = libdb_csharpPINVOKE.DB_ENV_mutex_unlock(swigCPtr, mutex);
455		DatabaseException.ThrowException(ret);
456		return ret;
457}
458
459  internal int mutex_get_align(ref uint align) {
460		int ret;
461		ret = libdb_csharpPINVOKE.DB_ENV_mutex_get_align(swigCPtr, ref align);
462		DatabaseException.ThrowException(ret);
463		return ret;
464}
465
466  internal int mutex_set_align(uint align) {
467		int ret;
468		ret = libdb_csharpPINVOKE.DB_ENV_mutex_set_align(swigCPtr, align);
469		DatabaseException.ThrowException(ret);
470		return ret;
471}
472
473  internal int mutex_get_increment(ref uint increment) {
474		int ret;
475		ret = libdb_csharpPINVOKE.DB_ENV_mutex_get_increment(swigCPtr, ref increment);
476		DatabaseException.ThrowException(ret);
477		return ret;
478}
479
480  internal int mutex_set_increment(uint increment) {
481		int ret;
482		ret = libdb_csharpPINVOKE.DB_ENV_mutex_set_increment(swigCPtr, increment);
483		DatabaseException.ThrowException(ret);
484		return ret;
485}
486
487  internal int mutex_get_max(ref uint max) {
488		int ret;
489		ret = libdb_csharpPINVOKE.DB_ENV_mutex_get_max(swigCPtr, ref max);
490		DatabaseException.ThrowException(ret);
491		return ret;
492}
493
494  internal int mutex_set_max(uint max) {
495		int ret;
496		ret = libdb_csharpPINVOKE.DB_ENV_mutex_set_max(swigCPtr, max);
497		DatabaseException.ThrowException(ret);
498		return ret;
499}
500
501  internal int mutex_get_tas_spins(ref uint tas_spins) {
502		int ret;
503		ret = libdb_csharpPINVOKE.DB_ENV_mutex_get_tas_spins(swigCPtr, ref tas_spins);
504		DatabaseException.ThrowException(ret);
505		return ret;
506}
507
508  internal int mutex_set_tas_spins(uint tas_spins) {
509		int ret;
510		ret = libdb_csharpPINVOKE.DB_ENV_mutex_set_tas_spins(swigCPtr, tas_spins);
511		DatabaseException.ThrowException(ret);
512		return ret;
513}
514
515  internal int open(string home, uint flags, int mode) {
516	int ret;
517	ret = libdb_csharpPINVOKE.DB_ENV_open(swigCPtr, home, flags, mode);
518	if (ret != 0)
519		close(0);
520	DatabaseException.ThrowException(ret);
521	return ret;
522}
523
524  internal int get_open_flags(ref uint flags) {
525		int ret;
526		ret = libdb_csharpPINVOKE.DB_ENV_get_open_flags(swigCPtr, ref flags);
527		DatabaseException.ThrowException(ret);
528		return ret;
529}
530
531  internal int remove(string db_home, uint flags) {
532	int ret;
533	ret = libdb_csharpPINVOKE.DB_ENV_remove(swigCPtr, db_home, flags);
534	/*
535	 * remove is a handle destructor, regardless of whether the remove
536	 * succeeds.  Reflect that in the wrapper class.
537	 */
538	swigCPtr = new HandleRef(null, IntPtr.Zero);
539	DatabaseException.ThrowException(ret);
540	return ret;
541}
542
543  internal int repmgr_add_remote_site(string host, uint port, ref int eidp, uint flags) {
544		int ret;
545		ret = libdb_csharpPINVOKE.DB_ENV_repmgr_add_remote_site(swigCPtr, host, port, ref eidp, flags);
546		DatabaseException.ThrowException(ret);
547		return ret;
548}
549
550  internal int repmgr_set_ack_policy(int ack_policy) {
551		int ret;
552		ret = libdb_csharpPINVOKE.DB_ENV_repmgr_set_ack_policy(swigCPtr, ack_policy);
553		DatabaseException.ThrowException(ret);
554		return ret;
555}
556
557  internal int repmgr_get_ack_policy(ref int ack_policy) {
558		int ret;
559		ret = libdb_csharpPINVOKE.DB_ENV_repmgr_get_ack_policy(swigCPtr, ref ack_policy);
560		DatabaseException.ThrowException(ret);
561		return ret;
562}
563
564  internal int repmgr_set_local_site(string host, uint port, uint flags) {
565		int ret;
566		ret = libdb_csharpPINVOKE.DB_ENV_repmgr_set_local_site(swigCPtr, host, port, flags);
567		DatabaseException.ThrowException(ret);
568		return ret;
569}
570
571  private RepMgrSite[] repmgr_site_list(ref uint countp, ref uint sizep, ref int err) {
572	IntPtr cPtr = libdb_csharpPINVOKE.DB_ENV_repmgr_site_list(swigCPtr, ref countp, ref sizep, ref err);
573	if (cPtr == IntPtr.Zero)
574		return new RepMgrSite[] { null };
575	/*
576	 * This is a big kludgy, but we need to free the memory that
577	 * repmgr_site_list mallocs.  The RepMgrSite constructors will copy all
578	 * the data out of that malloc'd area and we can free it right away.
579	 * This is easier than trying to construct a SWIG generated object that
580	 * will copy everything in it's constructor, because SWIG generated
581	 * classes come with a lot of baggage.
582	 */
583	RepMgrSite[] ret = new RepMgrSite[countp];
584	for (int i = 0; i < countp; i++) {
585		/*
586		 * We're copying data out of an array of countp DB_REPMGR_SITE
587		 * structures, whose size varies between 32- and 64-bit
588		 * platforms.
589		 */
590		IntPtr val = new IntPtr((IntPtr.Size == 4 ? cPtr.ToInt32() : cPtr.ToInt64()) + i * sizep);
591		ret[i] = new RepMgrSite(new DB_REPMGR_SITE(val, false));
592	}
593	libdb_csharp.__os_ufree(this, cPtr);
594	return ret;
595}
596
597  internal int repmgr_start(int nthreads, uint flags) {
598		int ret;
599		ret = libdb_csharpPINVOKE.DB_ENV_repmgr_start(swigCPtr, nthreads, flags);
600		DatabaseException.ThrowException(ret);
601		return ret;
602}
603
604  private IntPtr repmgr_stat(uint flags, ref int err) {
605	return libdb_csharpPINVOKE.DB_ENV_repmgr_stat(swigCPtr, flags, ref err);
606}
607
608  internal int repmgr_stat_print(uint flags) {
609		int ret;
610		ret = libdb_csharpPINVOKE.DB_ENV_repmgr_stat_print(swigCPtr, flags);
611		DatabaseException.ThrowException(ret);
612		return ret;
613}
614
615  internal int rep_elect(uint nsites, uint nvotes, uint flags) {
616		int ret;
617		ret = libdb_csharpPINVOKE.DB_ENV_rep_elect(swigCPtr, nsites, nvotes, flags);
618		DatabaseException.ThrowException(ret);
619		return ret;
620}
621
622  internal int rep_process_message(DatabaseEntry control, DatabaseEntry rec, int envid, DB_LSN ret_lsnp) {
623    try {
624		int ret;
625		ret = libdb_csharpPINVOKE.DB_ENV_rep_process_message(swigCPtr, DBT.getCPtr(DatabaseEntry.getDBT(control)), DBT.getCPtr(DatabaseEntry.getDBT(rec)), envid, DB_LSN.getCPtr(ret_lsnp));
626		DatabaseException.ThrowException(ret);
627		return ret;
628} finally {
629      GC.KeepAlive(control);
630      GC.KeepAlive(rec);
631    }
632  }
633
634  internal int rep_start(DatabaseEntry cdata, uint flags) {
635    try {
636		int ret;
637		ret = libdb_csharpPINVOKE.DB_ENV_rep_start(swigCPtr, DBT.getCPtr(DatabaseEntry.getDBT(cdata)), flags);
638		DatabaseException.ThrowException(ret);
639		return ret;
640} finally {
641      GC.KeepAlive(cdata);
642    }
643  }
644
645  private IntPtr rep_stat(uint flags, ref int err) {
646	return libdb_csharpPINVOKE.DB_ENV_rep_stat(swigCPtr, flags, ref err);
647}
648
649  internal int rep_stat_print(uint flags) {
650		int ret;
651		ret = libdb_csharpPINVOKE.DB_ENV_rep_stat_print(swigCPtr, flags);
652		DatabaseException.ThrowException(ret);
653		return ret;
654}
655
656  internal int rep_sync(uint flags) {
657		int ret;
658		ret = libdb_csharpPINVOKE.DB_ENV_rep_sync(swigCPtr, flags);
659		DatabaseException.ThrowException(ret);
660		return ret;
661}
662
663  internal int rep_set_config(uint which, int onoff) {
664		int ret;
665		ret = libdb_csharpPINVOKE.DB_ENV_rep_set_config(swigCPtr, which, onoff);
666		DatabaseException.ThrowException(ret);
667		return ret;
668}
669
670  internal int rep_get_config(uint which, ref int onoffp) {
671		int ret;
672		ret = libdb_csharpPINVOKE.DB_ENV_rep_get_config(swigCPtr, which, ref onoffp);
673		DatabaseException.ThrowException(ret);
674		return ret;
675}
676
677  internal int rep_set_clockskew(uint fast_clock, uint slow_clock) {
678		int ret;
679		ret = libdb_csharpPINVOKE.DB_ENV_rep_set_clockskew(swigCPtr, fast_clock, slow_clock);
680		DatabaseException.ThrowException(ret);
681		return ret;
682}
683
684  internal int rep_get_clockskew(ref uint fast_clockp, ref uint slow_clockp) {
685		int ret;
686		ret = libdb_csharpPINVOKE.DB_ENV_rep_get_clockskew(swigCPtr, ref fast_clockp, ref slow_clockp);
687		DatabaseException.ThrowException(ret);
688		return ret;
689}
690
691  internal int rep_set_limit(uint gbytes, uint bytes) {
692		int ret;
693		ret = libdb_csharpPINVOKE.DB_ENV_rep_set_limit(swigCPtr, gbytes, bytes);
694		DatabaseException.ThrowException(ret);
695		return ret;
696}
697
698  internal int rep_get_limit(ref uint gbytesp, ref uint bytesp) {
699		int ret;
700		ret = libdb_csharpPINVOKE.DB_ENV_rep_get_limit(swigCPtr, ref gbytesp, ref bytesp);
701		DatabaseException.ThrowException(ret);
702		return ret;
703}
704
705  internal int rep_set_nsites(uint nsites) {
706		int ret;
707		ret = libdb_csharpPINVOKE.DB_ENV_rep_set_nsites(swigCPtr, nsites);
708		DatabaseException.ThrowException(ret);
709		return ret;
710}
711
712  internal int rep_get_nsites(ref uint nsitesp) {
713		int ret;
714		ret = libdb_csharpPINVOKE.DB_ENV_rep_get_nsites(swigCPtr, ref nsitesp);
715		DatabaseException.ThrowException(ret);
716		return ret;
717}
718
719  internal int rep_set_priority(uint priority) {
720		int ret;
721		ret = libdb_csharpPINVOKE.DB_ENV_rep_set_priority(swigCPtr, priority);
722		DatabaseException.ThrowException(ret);
723		return ret;
724}
725
726  internal int rep_get_priority(ref uint priorityp) {
727		int ret;
728		ret = libdb_csharpPINVOKE.DB_ENV_rep_get_priority(swigCPtr, ref priorityp);
729		DatabaseException.ThrowException(ret);
730		return ret;
731}
732
733  internal int rep_set_request(uint min, uint max) {
734		int ret;
735		ret = libdb_csharpPINVOKE.DB_ENV_rep_set_request(swigCPtr, min, max);
736		DatabaseException.ThrowException(ret);
737		return ret;
738}
739
740  internal int rep_get_request(ref uint minp, ref uint maxp) {
741		int ret;
742		ret = libdb_csharpPINVOKE.DB_ENV_rep_get_request(swigCPtr, ref minp, ref maxp);
743		DatabaseException.ThrowException(ret);
744		return ret;
745}
746
747  internal int rep_set_timeout(int which, uint timeout) {
748		int ret;
749		ret = libdb_csharpPINVOKE.DB_ENV_rep_set_timeout(swigCPtr, which, timeout);
750		DatabaseException.ThrowException(ret);
751		return ret;
752}
753
754  internal int rep_get_timeout(int which, ref uint timeoutp) {
755		int ret;
756		ret = libdb_csharpPINVOKE.DB_ENV_rep_get_timeout(swigCPtr, which, ref timeoutp);
757		DatabaseException.ThrowException(ret);
758		return ret;
759}
760
761  internal int rep_set_transport(int envid, BDB_RepTransportDelegate send) {
762		int ret;
763		ret = libdb_csharpPINVOKE.DB_ENV_rep_set_transport(swigCPtr, envid, send);
764		DatabaseException.ThrowException(ret);
765		return ret;
766}
767
768  internal int get_cachesize(ref uint gbytes, ref uint bytes, ref int ncache) {
769		int ret;
770		ret = libdb_csharpPINVOKE.DB_ENV_get_cachesize(swigCPtr, ref gbytes, ref bytes, ref ncache);
771		DatabaseException.ThrowException(ret);
772		return ret;
773}
774
775  internal int set_cachesize(uint gbytes, uint bytes, int ncache) {
776		int ret;
777		ret = libdb_csharpPINVOKE.DB_ENV_set_cachesize(swigCPtr, gbytes, bytes, ncache);
778		DatabaseException.ThrowException(ret);
779		return ret;
780}
781
782  internal int get_cache_max(ref uint gbytes, ref uint bytes) {
783		int ret;
784		ret = libdb_csharpPINVOKE.DB_ENV_get_cache_max(swigCPtr, ref gbytes, ref bytes);
785		DatabaseException.ThrowException(ret);
786		return ret;
787}
788
789  internal int set_cache_max(uint gbytes, uint bytes) {
790		int ret;
791		ret = libdb_csharpPINVOKE.DB_ENV_set_cache_max(swigCPtr, gbytes, bytes);
792		DatabaseException.ThrowException(ret);
793		return ret;
794}
795
796  private List<string> get_data_dirs(ref int err, ref int cntp) {
797	IntPtr cPtr = libdb_csharpPINVOKE.DB_ENV_get_data_dirs(swigCPtr, ref err, ref cntp);
798	List<string> ret = new List<string>();
799	if (cPtr == IntPtr.Zero)
800		return ret;
801
802	IntPtr[] strs = new IntPtr[cntp];
803	Marshal.Copy(cPtr, strs, 0, cntp);
804
805	for (int i =0; i < cntp; i++)
806		ret.Add(Marshal.PtrToStringAnsi(strs[i]));
807
808	return ret;
809}
810
811  internal int add_data_dir(string dir) {
812		int ret;
813		ret = libdb_csharpPINVOKE.DB_ENV_add_data_dir(swigCPtr, dir);
814		DatabaseException.ThrowException(ret);
815		return ret;
816}
817
818  internal int set_create_dir(string dir) {
819		int ret;
820		ret = libdb_csharpPINVOKE.DB_ENV_set_create_dir(swigCPtr, dir);
821		DatabaseException.ThrowException(ret);
822		return ret;
823}
824
825  internal int get_encrypt_flags(ref uint flags) {
826		int ret;
827		ret = libdb_csharpPINVOKE.DB_ENV_get_encrypt_flags(swigCPtr, ref flags);
828		DatabaseException.ThrowException(ret);
829		return ret;
830}
831
832  internal int set_encrypt(string passwd, uint flags) {
833		int ret;
834		ret = libdb_csharpPINVOKE.DB_ENV_set_encrypt(swigCPtr, passwd, flags);
835		DatabaseException.ThrowException(ret);
836		return ret;
837}
838
839  internal void set_errcall(BDB_ErrcallDelegate db_errcall_fcn) {
840    libdb_csharpPINVOKE.DB_ENV_set_errcall(swigCPtr, db_errcall_fcn);
841  }
842
843  internal int set_event_notify(BDB_EventNotifyDelegate callback) {
844		int ret;
845		ret = libdb_csharpPINVOKE.DB_ENV_set_event_notify(swigCPtr, callback);
846		DatabaseException.ThrowException(ret);
847		return ret;
848}
849
850  internal int set_feedback(BDB_EnvFeedbackDelegate callback) {
851		int ret;
852		ret = libdb_csharpPINVOKE.DB_ENV_set_feedback(swigCPtr, callback);
853		DatabaseException.ThrowException(ret);
854		return ret;
855}
856
857  internal int get_flags(ref uint flags) {
858		int ret;
859		ret = libdb_csharpPINVOKE.DB_ENV_get_flags(swigCPtr, ref flags);
860		DatabaseException.ThrowException(ret);
861		return ret;
862}
863
864  internal int set_flags(uint flags, int onoff) {
865		int ret;
866		ret = libdb_csharpPINVOKE.DB_ENV_set_flags(swigCPtr, flags, onoff);
867		DatabaseException.ThrowException(ret);
868		return ret;
869}
870
871  internal int get_intermediate_dir_mode(ref string mode) {
872		int ret;
873		ret = libdb_csharpPINVOKE.DB_ENV_get_intermediate_dir_mode(swigCPtr, ref mode);
874		DatabaseException.ThrowException(ret);
875		return ret;
876}
877
878  internal int set_intermediate_dir_mode(string mode) {
879		int ret;
880		ret = libdb_csharpPINVOKE.DB_ENV_set_intermediate_dir_mode(swigCPtr, mode);
881		DatabaseException.ThrowException(ret);
882		return ret;
883}
884
885  internal int set_isalive(BDB_IsAliveDelegate callback) {
886		int ret;
887		ret = libdb_csharpPINVOKE.DB_ENV_set_isalive(swigCPtr, callback);
888		DatabaseException.ThrowException(ret);
889		return ret;
890}
891
892  internal int get_lg_bsize(ref uint bsize) {
893		int ret;
894		ret = libdb_csharpPINVOKE.DB_ENV_get_lg_bsize(swigCPtr, ref bsize);
895		DatabaseException.ThrowException(ret);
896		return ret;
897}
898
899  internal int set_lg_bsize(uint bsize) {
900		int ret;
901		ret = libdb_csharpPINVOKE.DB_ENV_set_lg_bsize(swigCPtr, bsize);
902		DatabaseException.ThrowException(ret);
903		return ret;
904}
905
906  internal int get_lg_dir(ref string dir) {
907		int ret;
908		ret = libdb_csharpPINVOKE.DB_ENV_get_lg_dir(swigCPtr, ref dir);
909		DatabaseException.ThrowException(ret);
910		return ret;
911}
912
913  internal int set_lg_dir(string dir) {
914		int ret;
915		ret = libdb_csharpPINVOKE.DB_ENV_set_lg_dir(swigCPtr, dir);
916		DatabaseException.ThrowException(ret);
917		return ret;
918}
919
920  internal int get_lg_filemode(ref int mode) {
921		int ret;
922		ret = libdb_csharpPINVOKE.DB_ENV_get_lg_filemode(swigCPtr, ref mode);
923		DatabaseException.ThrowException(ret);
924		return ret;
925}
926
927  internal int set_lg_filemode(int mode) {
928		int ret;
929		ret = libdb_csharpPINVOKE.DB_ENV_set_lg_filemode(swigCPtr, mode);
930		DatabaseException.ThrowException(ret);
931		return ret;
932}
933
934  internal int get_lg_max(ref uint max) {
935		int ret;
936		ret = libdb_csharpPINVOKE.DB_ENV_get_lg_max(swigCPtr, ref max);
937		DatabaseException.ThrowException(ret);
938		return ret;
939}
940
941  internal int set_lg_max(uint max) {
942		int ret;
943		ret = libdb_csharpPINVOKE.DB_ENV_set_lg_max(swigCPtr, max);
944		DatabaseException.ThrowException(ret);
945		return ret;
946}
947
948  internal int get_lg_regionmax(ref uint max) {
949		int ret;
950		ret = libdb_csharpPINVOKE.DB_ENV_get_lg_regionmax(swigCPtr, ref max);
951		DatabaseException.ThrowException(ret);
952		return ret;
953}
954
955  internal int set_lg_regionmax(uint max) {
956		int ret;
957		ret = libdb_csharpPINVOKE.DB_ENV_set_lg_regionmax(swigCPtr, max);
958		DatabaseException.ThrowException(ret);
959		return ret;
960}
961
962  internal int get_lk_conflicts_nmodes(ref int nmodes) {
963		int ret;
964		ret = libdb_csharpPINVOKE.DB_ENV_get_lk_conflicts_nmodes(swigCPtr, ref nmodes);
965		DatabaseException.ThrowException(ret);
966		return ret;
967}
968
969  internal int get_lk_conflicts(byte[,] conflicts) {
970		int ret;
971		ret = libdb_csharpPINVOKE.DB_ENV_get_lk_conflicts(swigCPtr, conflicts);
972		DatabaseException.ThrowException(ret);
973		return ret;
974}
975
976  internal int set_lk_conflicts(byte[,] conflicts, int nmodes) {
977		int ret;
978		ret = libdb_csharpPINVOKE.DB_ENV_set_lk_conflicts(swigCPtr, conflicts, nmodes);
979		DatabaseException.ThrowException(ret);
980		return ret;
981}
982
983  internal int get_lk_detect(ref uint mode) {
984		int ret;
985		ret = libdb_csharpPINVOKE.DB_ENV_get_lk_detect(swigCPtr, ref mode);
986		DatabaseException.ThrowException(ret);
987		return ret;
988}
989
990  internal int set_lk_detect(uint mode) {
991		int ret;
992		ret = libdb_csharpPINVOKE.DB_ENV_set_lk_detect(swigCPtr, mode);
993		DatabaseException.ThrowException(ret);
994		return ret;
995}
996
997  internal int get_lk_max_locks(ref uint max) {
998		int ret;
999		ret = libdb_csharpPINVOKE.DB_ENV_get_lk_max_locks(swigCPtr, ref max);
1000		DatabaseException.ThrowException(ret);
1001		return ret;
1002}
1003
1004  internal int set_lk_max_locks(uint max) {
1005		int ret;
1006		ret = libdb_csharpPINVOKE.DB_ENV_set_lk_max_locks(swigCPtr, max);
1007		DatabaseException.ThrowException(ret);
1008		return ret;
1009}
1010
1011  internal int get_lk_max_lockers(ref uint max) {
1012		int ret;
1013		ret = libdb_csharpPINVOKE.DB_ENV_get_lk_max_lockers(swigCPtr, ref max);
1014		DatabaseException.ThrowException(ret);
1015		return ret;
1016}
1017
1018  internal int set_lk_max_lockers(uint max) {
1019		int ret;
1020		ret = libdb_csharpPINVOKE.DB_ENV_set_lk_max_lockers(swigCPtr, max);
1021		DatabaseException.ThrowException(ret);
1022		return ret;
1023}
1024
1025  internal int get_lk_max_objects(ref uint max) {
1026		int ret;
1027		ret = libdb_csharpPINVOKE.DB_ENV_get_lk_max_objects(swigCPtr, ref max);
1028		DatabaseException.ThrowException(ret);
1029		return ret;
1030}
1031
1032  internal int set_lk_max_objects(uint max) {
1033		int ret;
1034		ret = libdb_csharpPINVOKE.DB_ENV_set_lk_max_objects(swigCPtr, max);
1035		DatabaseException.ThrowException(ret);
1036		return ret;
1037}
1038
1039  internal int get_lk_partitions(ref uint max) {
1040		int ret;
1041		ret = libdb_csharpPINVOKE.DB_ENV_get_lk_partitions(swigCPtr, ref max);
1042		DatabaseException.ThrowException(ret);
1043		return ret;
1044}
1045
1046  internal int set_lk_partitions(uint max) {
1047		int ret;
1048		ret = libdb_csharpPINVOKE.DB_ENV_set_lk_partitions(swigCPtr, max);
1049		DatabaseException.ThrowException(ret);
1050		return ret;
1051}
1052
1053  internal int get_mp_max_openfd(ref int maxopenfd) {
1054		int ret;
1055		ret = libdb_csharpPINVOKE.DB_ENV_get_mp_max_openfd(swigCPtr, ref maxopenfd);
1056		DatabaseException.ThrowException(ret);
1057		return ret;
1058}
1059
1060  internal int set_mp_max_openfd(int maxopenfd) {
1061		int ret;
1062		ret = libdb_csharpPINVOKE.DB_ENV_set_mp_max_openfd(swigCPtr, maxopenfd);
1063		DatabaseException.ThrowException(ret);
1064		return ret;
1065}
1066
1067  internal int get_mp_max_write(ref int maxwrite, ref uint maxwrite_sleep) {
1068		int ret;
1069		ret = libdb_csharpPINVOKE.DB_ENV_get_mp_max_write(swigCPtr, ref maxwrite, ref maxwrite_sleep);
1070		DatabaseException.ThrowException(ret);
1071		return ret;
1072}
1073
1074  internal int set_mp_max_write(int maxwrite, uint maxwrite_sleep) {
1075		int ret;
1076		ret = libdb_csharpPINVOKE.DB_ENV_set_mp_max_write(swigCPtr, maxwrite, maxwrite_sleep);
1077		DatabaseException.ThrowException(ret);
1078		return ret;
1079}
1080
1081  internal int get_mp_mmapsize(ref uint mp_mmapsize) {
1082		int ret;
1083		ret = libdb_csharpPINVOKE.DB_ENV_get_mp_mmapsize(swigCPtr, ref mp_mmapsize);
1084		DatabaseException.ThrowException(ret);
1085		return ret;
1086}
1087
1088  internal int set_mp_mmapsize(uint mp_mmapsize) {
1089		int ret;
1090		ret = libdb_csharpPINVOKE.DB_ENV_set_mp_mmapsize(swigCPtr, mp_mmapsize);
1091		DatabaseException.ThrowException(ret);
1092		return ret;
1093}
1094
1095  internal int get_thread_count(ref uint count) {
1096		int ret;
1097		ret = libdb_csharpPINVOKE.DB_ENV_get_thread_count(swigCPtr, ref count);
1098		DatabaseException.ThrowException(ret);
1099		return ret;
1100}
1101
1102  internal int set_thread_count(uint count) {
1103		int ret;
1104		ret = libdb_csharpPINVOKE.DB_ENV_set_thread_count(swigCPtr, count);
1105		DatabaseException.ThrowException(ret);
1106		return ret;
1107}
1108
1109  internal int set_thread_id(BDB_ThreadIDDelegate callback) {
1110		int ret;
1111		ret = libdb_csharpPINVOKE.DB_ENV_set_thread_id(swigCPtr, callback);
1112		DatabaseException.ThrowException(ret);
1113		return ret;
1114}
1115
1116  internal int set_thread_id_string(BDB_ThreadNameDelegate callback) {
1117		int ret;
1118		ret = libdb_csharpPINVOKE.DB_ENV_set_thread_id_string(swigCPtr, callback);
1119		DatabaseException.ThrowException(ret);
1120		return ret;
1121}
1122
1123  internal int get_timeout(ref uint timeout, uint flags) {
1124		int ret;
1125		ret = libdb_csharpPINVOKE.DB_ENV_get_timeout(swigCPtr, ref timeout, flags);
1126		DatabaseException.ThrowException(ret);
1127		return ret;
1128}
1129
1130  internal int set_timeout(uint timeout, uint flags) {
1131		int ret;
1132		ret = libdb_csharpPINVOKE.DB_ENV_set_timeout(swigCPtr, timeout, flags);
1133		DatabaseException.ThrowException(ret);
1134		return ret;
1135}
1136
1137  internal int get_tmp_dir(ref string dir) {
1138		int ret;
1139		ret = libdb_csharpPINVOKE.DB_ENV_get_tmp_dir(swigCPtr, ref dir);
1140		DatabaseException.ThrowException(ret);
1141		return ret;
1142}
1143
1144  internal int set_tmp_dir(string dir) {
1145		int ret;
1146		ret = libdb_csharpPINVOKE.DB_ENV_set_tmp_dir(swigCPtr, dir);
1147		DatabaseException.ThrowException(ret);
1148		return ret;
1149}
1150
1151  internal int get_tx_max(ref uint max) {
1152		int ret;
1153		ret = libdb_csharpPINVOKE.DB_ENV_get_tx_max(swigCPtr, ref max);
1154		DatabaseException.ThrowException(ret);
1155		return ret;
1156}
1157
1158  internal int set_tx_max(uint max) {
1159		int ret;
1160		ret = libdb_csharpPINVOKE.DB_ENV_set_tx_max(swigCPtr, max);
1161		DatabaseException.ThrowException(ret);
1162		return ret;
1163}
1164
1165  internal int get_tx_timestamp(ref long timestamp) {
1166		int ret;
1167		ret = libdb_csharpPINVOKE.DB_ENV_get_tx_timestamp(swigCPtr, ref timestamp);
1168		DatabaseException.ThrowException(ret);
1169		return ret;
1170}
1171
1172  internal int set_tx_timestamp(ref long timestamp) {
1173		int ret;
1174		ret = libdb_csharpPINVOKE.DB_ENV_set_tx_timestamp(swigCPtr, ref timestamp);
1175		DatabaseException.ThrowException(ret);
1176		return ret;
1177}
1178
1179  internal int get_verbose(ref uint msgs) {
1180		int ret;
1181		ret = libdb_csharpPINVOKE.DB_ENV_get_verbose(swigCPtr, ref msgs);
1182		DatabaseException.ThrowException(ret);
1183		return ret;
1184}
1185
1186  internal int set_verbose(uint which, int onoff) {
1187		int ret;
1188		ret = libdb_csharpPINVOKE.DB_ENV_set_verbose(swigCPtr, which, onoff);
1189		DatabaseException.ThrowException(ret);
1190		return ret;
1191}
1192
1193  internal int stat_print(uint flags) {
1194		int ret;
1195		ret = libdb_csharpPINVOKE.DB_ENV_stat_print(swigCPtr, flags);
1196		DatabaseException.ThrowException(ret);
1197		return ret;
1198}
1199
1200  private DB_TXN txn_begin(DB_TXN parent, uint flags, ref int err) {
1201    IntPtr cPtr = libdb_csharpPINVOKE.DB_ENV_txn_begin(swigCPtr, DB_TXN.getCPtr(parent), flags, ref err);
1202    DB_TXN ret = (cPtr == IntPtr.Zero) ? null : new DB_TXN(cPtr, false);
1203    return ret;
1204  }
1205
1206  internal int txn_checkpoint(uint kbyte, uint min, uint flags) {
1207		int ret;
1208		ret = libdb_csharpPINVOKE.DB_ENV_txn_checkpoint(swigCPtr, kbyte, min, flags);
1209		DatabaseException.ThrowException(ret);
1210		return ret;
1211}
1212
1213  private int txn_recover(IntPtr preplist, uint count, ref uint retp, uint flags) {
1214		int ret;
1215		ret = libdb_csharpPINVOKE.DB_ENV_txn_recover(swigCPtr, preplist, count, ref retp, flags);
1216		DatabaseException.ThrowException(ret);
1217		return ret;
1218}
1219
1220  private IntPtr txn_stat(uint flags, ref uint size, ref int err) {
1221	return libdb_csharpPINVOKE.DB_ENV_txn_stat(swigCPtr, flags, ref size, ref err);
1222}
1223
1224  internal int txn_stat_print(uint flags) {
1225		int ret;
1226		ret = libdb_csharpPINVOKE.DB_ENV_txn_stat_print(swigCPtr, flags);
1227		DatabaseException.ThrowException(ret);
1228		return ret;
1229}
1230
1231}
1232
1233}
1234