]> arthur.barton.de Git - netatalk.git/blob - libatalk/cnid/tdb/cnid_tdb_resolve.c
5e8312222ca377b7e8e25bcf27d53b9017e6afb3
[netatalk.git] / libatalk / cnid / tdb / cnid_tdb_resolve.c
1 /*
2  * $Id: cnid_tdb_resolve.c,v 1.4 2009-11-22 14:14:05 franklahm 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 the did/name pair corresponding to a CNID. */
14 char *cnid_tdb_resolve(struct _cnid_db *cdb, cnid_t * id, void *buffer, size_t len)
15 {
16     struct _cnid_tdb_private *db;
17     TDB_DATA key, data;      
18
19     if (!cdb || !(db = cdb->_private) || !id || !(*id)) {
20         return NULL;
21     }
22     key.dptr  = (char *)id;
23     key.dsize = sizeof(cnid_t);
24     data = tdb_fetch(db->tdb_cnid, key);
25     if (data.dptr) 
26     {
27         if (data.dsize < len && data.dsize > sizeof(cnid_t)) {
28             memcpy(id, (char *)data.dptr + +CNID_DID_OFS, sizeof(cnid_t));
29             strcpy(buffer, (char *)data.dptr + CNID_NAME_OFS);
30             free(data.dptr);
31             return buffer;
32         }
33         free(data.dptr);
34     }
35     return NULL;
36 }
37
38 #endif