]> arthur.barton.de Git - netatalk.git/blob - libatalk/cnid/tdb/cnid_tdb_resolve.c
851f9e55e7be86811bb4106018411f0cc98b5a30
[netatalk.git] / libatalk / cnid / tdb / cnid_tdb_resolve.c
1 /*
2  */
3
4 #ifdef HAVE_CONFIG_H
5 #include "config.h"
6 #endif
7
8 #ifdef CNID_BACKEND_TDB
9
10 #include "cnid_tdb.h"
11
12 /* Return the did/name pair corresponding to a CNID. */
13 char *cnid_tdb_resolve(struct _cnid_db *cdb, cnid_t * id, void *buffer, size_t len)
14 {
15     struct _cnid_tdb_private *db;
16     TDB_DATA key, data;      
17
18     if (!cdb || !(db = cdb->_private) || !id || !(*id)) {
19         return NULL;
20     }
21     key.dptr  = (unsigned char *)id;
22     key.dsize = sizeof(cnid_t);
23     data = tdb_fetch(db->tdb_cnid, key);
24     if (data.dptr) 
25     {
26         if (data.dsize < len && data.dsize > sizeof(cnid_t)) {
27             memcpy(id, (char *)data.dptr + +CNID_DID_OFS, sizeof(cnid_t));
28             strcpy(buffer, (char *)data.dptr + CNID_NAME_OFS);
29             free(data.dptr);
30             return buffer;
31         }
32         free(data.dptr);
33     }
34     return NULL;
35 }
36
37 #endif