• 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/tdb/
1/*
2 * $Id: cnid_tdb_get.c,v 1.4 2009-11-20 17:37:14 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. */
14cnid_t cnid_tdb_get(struct _cnid_db *cdb, const cnid_t did, char *name, const size_t len)
15{
16    char start[CNID_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 = CNID_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
45