#include "cnid_tdb.h"
#include <atalk/logger.h>
+#include <atalk/volume.h>
+
#include <stdlib.h>
#define DBHOME ".AppleDB"
#define DBHOMELEN 9 /* strlen(DBHOME) +1 for / */
#define DBVERSION2 0x00000002U
#define DBVERSION DBVERSION2
-static struct _cnid_db *cnid_tdb_new(const char *volpath)
+static struct _cnid_db *cnid_tdb_new(struct vol *vol)
{
struct _cnid_db *cdb;
- struct _cnid_tdb_private *priv;
if ((cdb = (struct _cnid_db *) calloc(1, sizeof(struct _cnid_db))) == NULL)
return NULL;
- if ((cdb->volpath = strdup(volpath)) == NULL) {
- free(cdb);
- return NULL;
- }
+ cdb->cnid_db_vol = vol;
- if ((cdb->_private = calloc(1, sizeof(struct _cnid_tdb_private))) == NULL) {
- free(cdb->volpath);
+ if ((cdb->cnid_db_private = calloc(1, sizeof(struct _cnid_tdb_private))) == NULL) {
free(cdb);
return NULL;
}
- /* Set up private state */
- priv = (struct _cnid_tdb_private *) (cdb->_private);
-
/* Set up standard fields */
- cdb->flags = CNID_FLAG_PERSISTENT;
+ cdb->cnid_db_flags = CNID_FLAG_PERSISTENT;
cdb->cnid_add = cnid_tdb_add;
cdb->cnid_delete = cnid_tdb_delete;
TDB_DATA key, data;
int hash_size = 131071;
int tdb_flags = 0;
+ struct vol *vol = args->cnid_args_vol;
- if (!args->dir) {
- /* note: dir and path are not used for in memory db */
+ if ((cdb = cnid_tdb_new(vol)) == NULL) {
+ LOG(log_error, logtype_default, "tdb_open: Unable to allocate memory for tdb");
return NULL;
}
- if ((len = strlen(args->dir)) > (MAXPATHLEN - DBLEN - 1)) {
- LOG(log_error, logtype_default, "tdb_open: Pathname too large: %s", args->dir);
- return NULL;
- }
-
- if ((cdb = cnid_tdb_new(args->dir)) == NULL) {
- LOG(log_error, logtype_default, "tdb_open: Unable to allocate memory for tdb");
+ if ((len = strlen(vol->v_path)) > (MAXPATHLEN - DBLEN - 1)) {
+ LOG(log_error, logtype_default, "tdb_open: Pathname too large: %s", vol->v_path);
return NULL;
}
- strcpy(path, args->dir);
+ strcpy(path, vol->v_path);
if (path[len - 1] != '/') {
strcat(path, "/");
len++;
}
strcpy(path + len, DBHOME);
- if (!(args->flags & CNID_FLAG_MEMORY)) {
- if ((stat(path, &st) < 0) && (ad_mkdir(path, 0777 & ~args->mask) < 0)) {
+ if (!(args->cnid_args_flags & CNID_FLAG_MEMORY)) {
+ if ((stat(path, &st) < 0) && (ad_mkdir(path, 0777 & ~vol->v_umask) < 0)) {
LOG(log_error, logtype_default, "tdb_open: DBHOME mkdir failed for %s", path);
goto fail;
}
}
strcat(path, "/");
- db = (struct _cnid_tdb_private *)cdb->_private;
+ db = (struct _cnid_tdb_private *)cdb->cnid_db_private;
path[len + DBHOMELEN] = '\0';
strcat(path, DBCNID);
- db->tdb_cnid = tdb_open(path, hash_size, tdb_flags , O_RDWR | O_CREAT, 0666 & ~args->mask);
+ db->tdb_cnid = tdb_open(path, hash_size, tdb_flags , O_RDWR | O_CREAT, 0666 & ~vol->v_umask);
if (!db->tdb_cnid) {
LOG(log_error, logtype_default, "tdb_open: unable to open tdb", path);
goto fail;
return cdb;
fail:
- free(cdb->_private);
- free(cdb->volpath);
+ free(cdb->cnid_db_private);
free(cdb);
return NULL;