4 #include <string.h> /* memcpy() */
5 #include <stdlib.h> /* malloc() and friends */
7 /* tdb.h needs mode_t defined externally, and it is defined in one of these
8 (which are the ones required for open() */
16 /* Local operations names are prepended with an 'x' so they don't collide with
17 * tdb real functions */
19 int xtdb_set(struct db_conn
*db
, const unsigned char *key
, size_t ksize
,
20 unsigned char *val
, size_t vsize
);
21 int xtdb_get(struct db_conn
*db
, const unsigned char *key
, size_t ksize
,
22 unsigned char *val
, size_t *vsize
);
23 int xtdb_del(struct db_conn
*db
, const unsigned char *key
, size_t ksize
);
24 int xtdb_firstkey(struct db_conn
*db
, unsigned char *key
, size_t *ksize
);
25 int xtdb_nextkey(struct db_conn
*db
,
26 const unsigned char *key
, size_t ksize
,
27 unsigned char *nextkey
, size_t *nksize
);
28 int xtdb_close(struct db_conn
*db
);
31 struct db_conn
*xtdb_open(const char *name
, int flags
)
36 tdb_db
= tdb_open(name
, 0, 0, O_CREAT
| O_RDWR
, 0640);
40 db
= malloc(sizeof(struct db_conn
));
50 db
->firstkey
= xtdb_firstkey
;
51 db
->nextkey
= xtdb_nextkey
;
52 db
->close
= xtdb_close
;
57 int xtdb_close(struct db_conn
*db
)
61 rv
= tdb_close(db
->conn
);
66 int xtdb_set(struct db_conn
*db
, const unsigned char *key
, size_t ksize
,
67 unsigned char *val
, size_t vsize
)
71 /* we can't maintain "const"ness here because tdb's prototypes; the
72 * same applies to get and del, so we just cast */
73 k
.dptr
= (unsigned char *) key
;
75 v
.dptr
= (unsigned char *) val
;
78 return tdb_store(db
->conn
, k
, v
, TDB_REPLACE
) == 0;
81 int xtdb_get(struct db_conn
*db
, const unsigned char *key
, size_t ksize
,
82 unsigned char *val
, size_t *vsize
)
86 k
.dptr
= (unsigned char *) key
;
89 v
= tdb_fetch(db
->conn
, k
);
97 memcpy(val
, v
.dptr
, v
.dsize
);
102 int xtdb_del(struct db_conn
*db
, const unsigned char *key
, size_t ksize
)
106 k
.dptr
= (unsigned char *) key
;
109 return tdb_delete(db
->conn
, k
) == 0;
112 int xtdb_firstkey(struct db_conn
*db
, unsigned char *key
, size_t *ksize
)
116 k
= tdb_firstkey(db
->conn
);
121 memcpy(key
, k
.dptr
, k
.dsize
);
126 int xtdb_nextkey(struct db_conn
*db
,
127 const unsigned char *key
, size_t ksize
,
128 unsigned char *nextkey
, size_t *nksize
)
132 pk
.dptr
= (unsigned char *) key
;
135 nk
= tdb_nextkey(db
->conn
, pk
);
140 memcpy(nextkey
, nk
.dptr
, nk
.dsize
);
147 #include <stddef.h> /* NULL */
149 struct db_conn
*xtdb_open(const char *name
, int flags
)