summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/dba/dba_db3.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/ext/dba/dba_db3.c b/ext/dba/dba_db3.c
index 57505b255f..abe3b514ed 100644
--- a/ext/dba/dba_db3.c
+++ b/ext/dba/dba_db3.c
@@ -49,13 +49,15 @@ DBA_OPEN_FUNC(db3)
int gmode = 0;
int filemode = 0644;
struct stat check_stat;
+ int s = VCWD_STAT(info->path, &check_stat);
type = info->mode == DBA_READER ? DB_UNKNOWN :
info->mode == DBA_TRUNC ? DB_BTREE :
- VCWD_STAT(info->path, &check_stat) ? DB_BTREE : DB_UNKNOWN;
+ s? DB_BTREE : DB_UNKNOWN;
gmode = info->mode == DBA_READER ? DB_RDONLY :
- info->mode == DBA_CREAT ? DB_CREATE :
+ (info->mode == DBA_CREAT && s) ? DB_CREATE :
+ (info->mode == DBA_CREAT && !s) ? 0 :
info->mode == DBA_WRITER ? 0 :
info->mode == DBA_TRUNC ? DB_CREATE | DB_TRUNCATE : -1;