Add MDB_NOSUBDIR option

Create the data file using exactly the given pathname, and
the lock file using a suffix on the data file name.
vmware
Howard Chu 13 years ago
parent 54eb76cc7a
commit 7a40080dd1
  1. 16
      libraries/libmdb/mdb.c
  2. 2
      libraries/libmdb/mdb.h

@ -2657,6 +2657,9 @@ fail:
#define LOCKNAME "/lock.mdb" #define LOCKNAME "/lock.mdb"
/** The name of the data file in the DB environment */ /** The name of the data file in the DB environment */
#define DATANAME "/data.mdb" #define DATANAME "/data.mdb"
/** The suffix of the lock file when no subdir is used */
#define LOCKSUFF "-lock"
int int
mdb_env_open(MDB_env *env, const char *path, unsigned int flags, mode_t mode) mdb_env_open(MDB_env *env, const char *path, unsigned int flags, mode_t mode)
{ {
@ -2664,12 +2667,23 @@ mdb_env_open(MDB_env *env, const char *path, unsigned int flags, mode_t mode)
char *lpath, *dpath; char *lpath, *dpath;
len = strlen(path); len = strlen(path);
lpath = malloc(len + sizeof(LOCKNAME) + len + sizeof(DATANAME)); if (flags & MDB_NOSUBDIR) {
rc = len + sizeof(LOCKSUFF) + len + 1;
} else {
rc = len + sizeof(LOCKNAME) + len + sizeof(DATANAME);
}
lpath = malloc(rc);
if (!lpath) if (!lpath)
return ENOMEM; return ENOMEM;
if (flags & MDB_NOSUBDIR) {
dpath = lpath + len + sizeof(LOCKSUFF);
sprintf(lpath, "%s" LOCKSUFF, path);
strcpy(dpath, path);
} else {
dpath = lpath + len + sizeof(LOCKNAME); dpath = lpath + len + sizeof(LOCKNAME);
sprintf(lpath, "%s" LOCKNAME, path); sprintf(lpath, "%s" LOCKNAME, path);
sprintf(dpath, "%s" DATANAME, path); sprintf(dpath, "%s" DATANAME, path);
}
rc = mdb_env_setup_locks(env, lpath, mode, &excl); rc = mdb_env_setup_locks(env, lpath, mode, &excl);
if (rc) if (rc)

@ -149,6 +149,8 @@ typedef void (MDB_rel_func)(MDB_val *item, void *oldptr, void *newptr, void *rel
*/ */
/** mmap at a fixed address */ /** mmap at a fixed address */
#define MDB_FIXEDMAP 0x01 #define MDB_FIXEDMAP 0x01
/** no environment directory */
#define MDB_NOSUBDIR 0x02
/** don't fsync after commit */ /** don't fsync after commit */
#define MDB_NOSYNC 0x10000 #define MDB_NOSYNC 0x10000
/** read only */ /** read only */

Loading…
Cancel
Save