+/*
+ * CNID module - represents particular CNID implementation
+ */
+struct _cnid_module {
+ char *name;
+ struct list_head db_list; /* CNID modules are also stored on a bidirectional list. */
+ struct _cnid_db *(*cnid_open)(struct cnid_open_args *args);
+ uint32_t flags; /* Flags describing some CNID backend aspects. */
+
+};
+typedef struct _cnid_module cnid_module;
+
+/* Inititalize the CNID backends */
+void cnid_init();
+
+/* Registers new CNID backend module */
+void cnid_register(struct _cnid_module *module);
+
+/* This function opens a CNID database for selected volume. */
+struct _cnid_db *cnid_open(struct vol *vol, char *type, int flags);
+cnid_t cnid_add (struct _cnid_db *cdb, const struct stat *st, const cnid_t did,
+ const char *name, const size_t len, cnid_t hint);
+int cnid_delete (struct _cnid_db *cdb, cnid_t id);
+cnid_t cnid_get (struct _cnid_db *cdb, const cnid_t did, char *name,const size_t len);
+int cnid_getstamp (struct _cnid_db *cdb, void *buffer, const size_t len);
+cnid_t cnid_lookup (struct _cnid_db *cdb, const struct stat *st, const cnid_t did,
+ char *name, const size_t len);
+char *cnid_resolve (struct _cnid_db *cdb, cnid_t *id, void *buffer, size_t len);
+int cnid_update (struct _cnid_db *cdb, const cnid_t id, const struct stat *st,
+ const cnid_t did, char *name, const size_t len);
+cnid_t cnid_rebuild_add(struct _cnid_db *cdb, const struct stat *st, const cnid_t did,
+ char *name, const size_t len, cnid_t hint);
+int cnid_find (struct _cnid_db *cdb, const char *name, size_t namelen,
+ void *buffer, size_t buflen);
+int cnid_wipe (struct _cnid_db *cdb);
+void cnid_close (struct _cnid_db *db);
+
+#endif