- BDB wants to use mmap() for its environment by default, but not
all (file)systems support this, as pointed out by Daniel Drak.
However env->open() can return EINVAL for a number of reasons,
require all the fallback reasons to be system level errors to
differentiate from "logical" errors such as incompatible flags
to (possibly pre-existing) db environment, in which case we better
just error out.
/*
* Actually open the environment. Fall back to private environment
- * if we dont have permission to join/create shared environment.
+ * if we dont have permission to join/create shared environment or
+ * system doesn't support it..
*/
while (retry_open) {
char *fstr = prDbiOpenFlags(eflags, 1);
free(fstr);
rc = (dbenv->open)(dbenv, dbhome, eflags, rdb->db_perms);
- if (rc == EACCES || rc == EROFS) {
+ if ((rc == EACCES || rc == EROFS || rc == EINVAL) && errno == rc) {
eflags |= DB_PRIVATE;
retry_open--;
} else {