2 Unix SMB
/CIFS implementation.
6 Copyright
(C
) 2004,2005 Tim Potter
<tpot@samba.org
>
8 ** NOTE
! The following LGPL license applies to the tdb
9 ** library. This does
NOT imply that all of Samba is released
12 This library is free software
; you can redistribute it and
/or
13 modify it under the terms of the GNU Lesser General Public
14 License as published by the Free Software Foundation
; either
15 version
2 of the License
, or
(at your option
) any later version.
17 This library is distributed in the hope that it will be useful
,
18 but WITHOUT
ANY WARRANTY
; without even the implied warranty of
19 MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU
20 Lesser General Public License for more details.
22 You should have received a copy of the GNU Lesser General Public
23 License along with this library
; if not
, write to the Free Software
24 Foundation
, Inc.
, 59 Temple Place
, Suite
330, Boston
, MA
02111-1307 USA
31 /* This symbol is used in both includes.h and Python.h which causes an
32 annoying compiler warning.
*/
39 /** Use gcc attribute to check printf fns. a1 is the
1-based index of
40 * the parameter containing the format
, and a2 the index of the first
41 * argument. Note that some gcc
2.x versions don't handle this
43 #define PRINTF_ATTRIBUTE
(a1
, a2
) __attribute__
((format
(__printf__
, a1
, a2
)))
45 #define PRINTF_ATTRIBUTE
(a1
, a2
)
48 /* Include tdb headers
*/
50 #include
"lib/tdb/include/tdb.h"
54 /* The tdb functions will crash if a
NULL tdb context is passed
*/
58 %typemap
(check
) TDB_CONTEXT
* {
60 SWIG_exception
(SWIG_ValueError
,
61 "tdb context must be non-NULL");
64 /* In and out typemaps for the TDB_DATA structure. This is converted to
65 and from the Python string type which can contain arbitrary binary
68 %typemap
(in
) TDB_DATA
{
69 if
(!PyString_Check
($input
)) {
70 PyErr_SetString
(PyExc_TypeError
, "string arg expected");
73 $
1.dsize
= PyString_Size
($input
);
74 $
1.dptr
= PyString_AsString
($input
);
77 %typemap
(out
) TDB_DATA
{
78 if
($
1.dptr
== NULL && $1.dsize == 0) {
81 $result
= PyString_FromStringAndSize
($
1.dptr
, $
1.dsize
);
86 /* Treat a mode_t as an unsigned integer
*/
90 /* flags to tdb_store
() */
96 /* flags for tdb_open
() */
98 #define TDB_DEFAULT
0 /* just a readability place holder
*/
99 #define TDB_CLEAR_IF_FIRST
1
100 #define TDB_INTERNAL
2 /* don't store on disk
*/
101 #define TDB_NOLOCK
4 /* don't do any locking
*/
102 #define TDB_NOMMAP
8 /* don't use mmap
*/
103 #define TDB_CONVERT
16 /* convert endian
(internal use
) */
104 #define TDB_BIGENDIAN
32 /* header is big-endian
(internal use
) */
106 /* Throw an IOError exception if tdb_open
() or tdb_open_ex
() returns
NULL */
110 if
(result
== NULL) {
111 PyErr_SetFromErrno
(PyExc_IOError
);
116 TDB_CONTEXT
*tdb_open
(const char
*name
, int hash_size
, int tdb_flags
,
117 int open_flags
, mode_t mode
);
119 TDB_CONTEXT
*tdb_open_ex
(const char
*name
, int hash_size
, int tdb_flags
,
120 int open_flags
, mode_t mode
,
122 tdb_hash_func hash_fn
);
126 int tdb_reopen
(TDB_CONTEXT
*tdb
);
128 int tdb_reopen_all
(int parent_longlived
);
130 void tdb_logging_function
(TDB_CONTEXT
*tdb
, tdb_log_func
);
132 enum TDB_ERROR tdb_error
(TDB_CONTEXT
*tdb
);
134 const char
*tdb_errorstr
(TDB_CONTEXT
*tdb
);
136 TDB_DATA tdb_fetch
(TDB_CONTEXT
*tdb
, TDB_DATA key
);
138 int tdb_delete
(TDB_CONTEXT
*tdb
, TDB_DATA key
);
140 int tdb_store
(TDB_CONTEXT
*tdb
, TDB_DATA key
, TDB_DATA dbuf
, int flag
= TDB_REPLACE
);
142 int tdb_append
(TDB_CONTEXT
*tdb
, TDB_DATA key
, TDB_DATA new_dbuf
);
144 int tdb_close
(TDB_CONTEXT
*tdb
);
146 TDB_DATA tdb_firstkey
(TDB_CONTEXT
*tdb
);
148 TDB_DATA tdb_nextkey
(TDB_CONTEXT
*tdb
, TDB_DATA key
);
150 int tdb_traverse
(TDB_CONTEXT
*tdb
, tdb_traverse_func fn
, void
*state
);
152 int tdb_exists
(TDB_CONTEXT
*tdb
, TDB_DATA key
);
154 int tdb_lockall
(TDB_CONTEXT
*tdb
);
156 void tdb_unlockall
(TDB_CONTEXT
*tdb
);
158 /* Low level locking functions
: use with care
*/
160 int tdb_chainlock
(TDB_CONTEXT
*tdb
, TDB_DATA key
);
162 int tdb_chainunlock
(TDB_CONTEXT
*tdb
, TDB_DATA key
);
164 /* Debug functions. Not used in production.
*/
166 void tdb_dump_all
(TDB_CONTEXT
*tdb
);
168 int tdb_printfreelist
(TDB_CONTEXT
*tdb
);