2 * interface for database access to cnids. i do it this way to abstract
3 * things a bit in case we want to change the underlying implementation.
6 #ifndef _ATALK_CNID_TDB__H
7 #define _ATALK_CNID_TDB__H 1
14 #include <sys/param.h>
16 #include <netatalk/endian.h>
17 #include <atalk/cnid.h>
30 #include <atalk/tdb.h>
32 #define TDB_ERROR_LINK 1
33 #define TDB_ERROR_DEV 2
34 #define TDB_ERROR_INODE 4
36 #define TDB_DB_MAGIC 0x434E4944U /* CNID */
37 #define TDB_DATA_MAGIC 0x434E4945U /* CNIE */
39 #define TDB_DEVINO_LEN 8
41 #define TDB_HEADER_LEN (TDB_DEVINO_LEN + TDB_DID_LEN)
45 #define TDBFLAG_ROOTINFO_RO (1 << 0)
46 #define TDBFLAG_DB_RO (1 << 1)
48 /* the key is in the form of a did/name pair. in this case,
49 * we use 0/RootInfo. */
50 #define ROOTINFO_KEY "\0\0\0\0RootInfo"
51 #define ROOTINFO_KEYLEN 12
53 struct _cnid_tdb_private {
58 TDB_CONTEXT *tdb_cnid;
59 TDB_CONTEXT *tdb_didname;
60 TDB_CONTEXT *tdb_devino;
65 extern struct _cnid_module cnid_tdb_module;
66 extern struct _cnid_db *cnid_tdb_open __P((const char *, mode_t));
69 extern void cnid_tdb_close __P((struct _cnid_db *));
72 extern cnid_t cnid_tdb_add __P((struct _cnid_db *, const struct stat *, const cnid_t,
73 char *, const size_t, cnid_t));
76 extern cnid_t cnid_tdb_get __P((struct _cnid_db *, const cnid_t, char *, const size_t));
77 extern char *cnid_tdb_resolve __P((struct _cnid_db *, cnid_t *, void *, size_t));
78 extern cnid_t cnid_tdb_lookup __P((struct _cnid_db *, const struct stat *, const cnid_t, char *, const size_t));
81 extern int cnid_tdb_update __P((struct _cnid_db *, const cnid_t, const struct stat *,
82 const cnid_t, char *, size_t));
85 extern int cnid_tdb_delete __P((struct _cnid_db *, const cnid_t));
88 extern cnid_t cnid_tdb_nextid __P((struct _cnid_db *));
90 /* construct db_cnid data. NOTE: this is not re-entrant. */
91 static inline char *make_tdb_data(const struct stat *st,
93 const char *name, const size_t len)
95 static char start[TDB_HEADER_LEN + MAXPATHLEN + 1];
102 i = htonl(st->st_dev);
103 buf = memcpy(buf, &i, sizeof(i));
104 i = htonl(st->st_ino);
105 buf = memcpy(buf + sizeof(i), &i, sizeof(i));
106 /* did is already in network byte order */
107 buf = memcpy(buf + sizeof(i), &did, sizeof(did));
108 buf = memcpy(buf + sizeof(did), name, len);
115 #endif /* include/atalk/cnid_tdb.h */