]> arthur.barton.de Git - netatalk.git/blob - libatalk/cnid/tdb/cnid_tdb_get.c
0e6a7ada2589c25aaedb3820df14719e9e6c3710
[netatalk.git] / libatalk / cnid / tdb / cnid_tdb_get.c
1 /*
2  * $Id: cnid_tdb_get.c,v 1.1.2.1 2003-09-09 16:42:21 didg Exp $
3  */
4
5 #ifdef HAVE_CONFIG_H
6 #include "config.h"
7 #endif
8
9 #ifdef CNID_BACKEND_TDB
10
11 #include "cnid_tdb.h"
12
13 /* Return CNID for a given did/name. */
14 cnid_t cnid_tdb_get(struct _cnid_db *cdb, const cnid_t did, const char *name, const int len)
15 {
16     char start[TDB_DID_LEN + MAXPATHLEN + 1], *buf;
17     struct _cnid_tdb_private *db;
18     TDB_DATA key, data;
19     cnid_t id;
20
21     if (!cdb || !(db = cdb->_private) || (len > MAXPATHLEN)) {
22         return 0;
23     }
24
25     memset(&key, 0, sizeof(key));
26     memset(&data, 0, sizeof(data));
27
28     buf = start;
29     memcpy(buf, &did, sizeof(did));
30     buf += sizeof(did);
31     memcpy(buf, name, len);
32     *(buf + len) = '\0'; /* Make it a C-string. */
33     key.dptr = start;
34     key.dsize = TDB_DID_LEN + len + 1;
35     data = tdb_fetch(db->tdb_didname, key);
36     if (!data.dptr)
37         return 0;
38
39     memcpy(&id, data.dptr, sizeof(id));
40     free(data.dptr);
41     return id;
42 }
43
44 #endif