• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-WNDR4500v2-V1.0.0.60_1.0.38/ap/gpl/timemachine/netatalk-2.2.5/libatalk/cnid/cdb/
1/*
2 * $Id: cnid_cdb_resolve.c,v 1.5 2009-10-29 13:38:16 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. */
13char *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_debug9, 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
51