#include <atalk/list.h>
#include <atalk/logger.h>
#include <atalk/util.h>
+#include <atalk/compat.h>
/* List of all registered modules. */
static struct list_head modules = ATALK_LIST_HEAD_INIT(modules);
/* Opens CNID database using particular back-end */
struct _cnid_db *cnid_open(const char *volpath, mode_t mask, char *type, int flags,
- const char *cnidsrv, const char *cnidport)
+ const char *cnidsrv, const char *cnidport, const void *obj, char *uuid)
{
struct _cnid_db *db;
cnid_module *mod = NULL;
}
}
- struct cnid_open_args args = {volpath, mask, flags, cnidsrv, cnidport};
+ struct cnid_open_args args = {volpath, mask, flags, cnidsrv, cnidport, obj, uuid};
db = mod->cnid_open(&args);
if ((mod->flags & CNID_FLAG_SETUID) && !(flags & CNID_FLAG_MEMORY)) {
}
/* ------------------- */
-static void block_signal( u_int32_t flags)
+static void block_signal(uint32_t flags)
{
if ((flags & CNID_FLAG_BLOCK)) {
pthread_sigmask(SIG_BLOCK, &sigblockset, NULL);
}
/* ------------------- */
-static void unblock_signal(u_int32_t flags)
+static void unblock_signal(uint32_t flags)
{
if ((flags & CNID_FLAG_BLOCK)) {
pthread_sigmask(SIG_UNBLOCK, &sigblockset, NULL);
/* Closes CNID database. Currently it's just a wrapper around db->cnid_close(). */
void cnid_close(struct _cnid_db *db)
{
-u_int32_t flags;
+ uint32_t flags;
if (NULL == db) {
LOG(log_error, logtype_afpd, "Error: cnid_close called with NULL argument !");
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)
{
-cnid_t ret;
+ cnid_t ret;
+
+ if (len == 0)
+ return CNID_INVALID;
block_signal(cdb->flags);
ret = valide(cdb->cnid_add(cdb, st, did, name, len, hint));
unblock_signal(cdb->flags);
return ret;
}
+
+/* --------------- */
+int cnid_wipe(struct _cnid_db *cdb)
+{
+ int ret = 0;
+
+ block_signal(cdb->flags);
+ if (cdb->cnid_wipe)
+ ret = cdb->cnid_wipe(cdb);
+ unblock_signal(cdb->flags);
+ return ret;
+}