/*
- * $Id: cnid_cdb_add.c,v 1.2 2005-04-28 20:49:59 bfernhomberg Exp $
- *
* Copyright (c) 1999. Adrian Sun (asun@zoology.washington.edu)
* All Rights Reserved. See COPYRIGHT.
*
#endif /* HAVE_CONFIG_H */
#ifdef CNID_BACKEND_CDB
+#include <arpa/inet.h>
#include "cnid_cdb_private.h"
+extern int cnid_cdb_update(struct _cnid_db *cdb, cnid_t id, const struct stat *st,
+ cnid_t did, const char *name, size_t len);
+
#define tid NULL
-#ifdef ATACC
static void make_devino_data(unsigned char *buf, dev_t dev, ino_t ino)
{
buf[CNID_DEV_LEN - 1] = dev; dev >>= 8;
buf[CNID_DEV_LEN + CNID_INO_LEN - 8] = ino;
}
-char *make_cnid_data(const struct stat *st,const cnid_t did,
- const char *name, const int len)
+unsigned char *make_cnid_data(u_int32_t flags, const struct stat *st, const cnid_t did,
+ const char *name, const size_t len)
{
- static char start[CNID_HEADER_LEN + MAXPATHLEN + 1];
- char *buf = start +CNID_LEN;
+ static unsigned char start[CNID_HEADER_LEN + MAXPATHLEN + 1];
+ unsigned char *buf = start +CNID_LEN;
u_int32_t i;
if (len > MAXPATHLEN)
return NULL;
- make_devino_data(buf, st->st_dev, st->st_ino);
+ make_devino_data(buf, !(flags & CNID_FLAG_NODEV)?st->st_dev:0, st->st_ino);
buf += CNID_DEVINO_LEN;
i = S_ISDIR(st->st_mode)?1:0;
return start;
}
-#endif
-
-extern int cnid_cdb_update(struct _cnid_db *cdb, const cnid_t id, const struct stat *st,
- const cnid_t did, char *name, const int len);
/* --------------- */
-int db_stamp(void *buffer, size_t size)
+static int db_stamp(void *buffer, size_t size)
{
time_t t;
memset(buffer, 0, size);
/* ------------------------ */
cnid_t cnid_cdb_add(struct _cnid_db *cdb, const struct stat *st,
- const cnid_t did, char *name, const int len,
- cnid_t hint)
+ cnid_t did, const char *name, size_t len, cnid_t hint)
{
CNID_private *db;
DBT key, data;
cnid_t id;
int rc;
- if (!cdb || !(db = cdb->_private) || !st || !name) {
+ if (!cdb || !(db = cdb->cnid_db_private) || !st || !name) {
errno = CNID_ERR_PARAM;
return CNID_INVALID;
}
/* ... Return id if it is valid, or if Rootinfo is read-only. */
if (id || (db->flags & CNIDFLAG_DB_RO)) {
#ifdef DEBUG
- LOG(log_info, logtype_default, "cnid_add: Looked up did %u, name %s as %u", ntohl(did), name, ntohl(id));
+ LOG(log_debug9, logtype_default, "cnid_add: Looked up did %u, name %s as %u", ntohl(did), name, ntohl(id));
#endif
return id;
}
memset(&key, 0, sizeof(key));
memset(&data, 0, sizeof(data));
- if ((data.data = make_cnid_data(st, did, name, len)) == NULL) {
+ if ((data.data = make_cnid_data(cdb->cnid_db_flags, st, did, name, len)) == NULL) {
LOG(log_error, logtype_default, "cnid_add: Path name is too long");
errno = CNID_ERR_PATH;
return CNID_INVALID;
}
#ifdef DEBUG
- LOG(log_info, logtype_default, "cnid_add: Returned CNID for did %u, name %s as %u", ntohl(did), name, ntohl(hint));
+ LOG(log_debug9, logtype_default, "cnid_add: Returned CNID for did %u, name %s as %u", ntohl(did), name, ntohl(hint));
#endif
return hint;
/* cnid_cbd_getstamp */
/*-----------------------*/
-int cnid_cdb_getstamp(struct _cnid_db *cdb, void *buffer, const int len)
+int cnid_cdb_getstamp(struct _cnid_db *cdb, void *buffer, const size_t len)
{
DBT key, data;
int rc;
CNID_private *db;
- if (!cdb || !(db = cdb->_private) || !buffer || !len) {
+ if (!cdb || !(db = cdb->cnid_db_private) || !buffer || !len) {
errno = CNID_ERR_PARAM;
return -1;
}
memcpy(buffer, (char*)data.data + CNID_DEV_OFS, len);
#ifdef DEBUG
- LOG(log_info, logtype_cnid, "cnid_getstamp: Returning stamp");
+ LOG(log_debug9, logtype_cnid, "cnid_getstamp: Returning stamp");
#endif
return 0;
}