]> arthur.barton.de Git - netatalk.git/blob - libatalk/cnid/cdb/cnid_cdb_resolve.c
use log_debug rather than log_info for LOG inside ifdef DEBUG
[netatalk.git] / libatalk / cnid / cdb / cnid_cdb_resolve.c
1 /*
2  * $Id: cnid_cdb_resolve.c,v 1.4 2009-10-29 13:17:29 didg Exp $
3  */
4
5 #ifdef HAVE_CONFIG_H
6 #include "config.h"
7 #endif /* HAVE_CONFIG_H */
8
9 #ifdef CNID_BACKEND_CDB
10 #include "cnid_cdb_private.h"
11
12 /* Return the did/name pair corresponding to a CNID. */
13 char *cnid_cdb_resolve(struct _cnid_db *cdb, cnid_t *id, void *buffer, size_t len) {
14     CNID_private *db;
15     DBT key, data;
16     int rc;
17
18     if (!cdb || !(db = cdb->_private) || !id || !(*id)) {
19         return NULL;
20     }
21
22     memset(&key, 0, sizeof(key));
23     memset(&data, 0, sizeof(data));
24
25     data.data = buffer;
26     data.ulen = len;
27     data.flags = DB_DBT_USERMEM;
28
29     key.data = id;
30     key.size = sizeof(cnid_t);
31     while ((rc = db->db_cnid->get(db->db_cnid, NULL, &key, &data, 0))) {
32
33         if (rc != DB_NOTFOUND) {
34             LOG(log_error, logtype_default, "cnid_resolve: Unable to get did/name: %s",
35                 db_strerror(rc));
36         }
37
38         *id = 0;
39         return NULL;
40     }
41
42     memcpy(id, (char *)data.data +CNID_DID_OFS, sizeof(cnid_t));
43 #ifdef DEBUG
44     LOG(log_debug, logtype_default, "cnid_resolve: Returning id = %u, did/name = %s",
45         ntohl(*id), (char *)data.data + CNID_NAME_OFS);
46 #endif
47     return (char *)data.data +  CNID_NAME_OFS;
48 }
49
50 #endif